Ir ao conteúdo
SEED engenhariaDesign System

Componentes

91. CONFLITO DE EDIÇÃO CONCORRENTE

estávelseed-componentes.md v1.43 · §91seção 97 de 9891-conflito-de-edicao-concorrente-estavel-2026-08.md · MD5 a94485bf

Título completo no canon: CONFLITO DE EDIÇÃO CONCORRENTE · estável (2026-08-24, F7.7-P5, duas decisões dele no gate) · CE1–CE8

O que esta seção é. O contrato de quando duas pessoas editam o mesmo objeto. Fecha a segunda linha ❌ AUSENTE do §6.1.

Medido antes de escrever: 0 de 40 artefatos têm qualquer estado de conflito, e hoje uma única tela tem gravação explícita — a tela-configuracoes.html ("Salvar alterações", regime CF do §86). É a única exposta à atualização perdida hoje; o ERP inteiro estará amanhã.

91.1 CE1 — detectar é OBRIGATÓRIO, e é do servidor#

O problema tem nome antigo — lost update — e solução padronizada na RFC 9110: lê-se o recurso com ETag, grava-se com If-Match: <etag>, e o servidor devolve 412 Precondition Failed em vez de sobrescrever.

Aviso na interface não impede perda nenhuma: informa. O que impede é a pré-condição no servidor. Logo:

  • CE1-a — toda gravação de objeto compartilhado envia a pré-condição de versão. Gravação sem pré-condição é defeito, não escolha de implementação.
  • CE1-b — o que esta seção especifica é o que a pessoa vê quando o 412 chega.

91.2 CE2 — o regime padrão é OTIMISTA (decisão dele: (b))#

Ninguém trava. A pessoa edita, e o conflito aparece na gravação.

Alternativa descartada e por quê: o regime pessimista (o objeto trava enquanto alguém edita), que é o do SAP Fiori e é referência madura de ERP, foi recusado como padrão porque quem perde conexão em campo deixa o objeto travado até a trava expirar, e trava indevida bloqueia trabalho legítimo — na operação da SEED isso não é hipótese.

Custo declarado do otimista, e a literatura o registra: dá para digitar vinte minutos e descobrir o conflito no fim. A CE3 existe para reduzir isso.

91.3 CE3 — presença AVISA, nunca bloqueia#

Quando outra pessoa está com o mesmo objeto aberto em edição, a tela mostra aviso de presença — quem é e desde quando —, em superfície discreta e sem desabilitar nada. É informação para a pessoa decidir, não permissão.

⚠ O aviso nomeia um colega, e isso é uso interno legítimo. Nunca exibir dado pessoal além do necessário para identificar quem edita.

91.4 CE4 — a EXCEÇÃO: trava exclusiva para objeto que gera documento com ART#

Objeto cujo conteúdo sai em documento assinado com Anotação de Responsabilidade Técnica — memorial, laudo, projeto, proposta técnica — trava em regime EXCLUSIVO.

A razão é nossa e não vem de nenhuma fonte externa: quem assina responde pelo que está lá, e conteúdo mesclado em silêncio num documento com ART é risco que a interface não pode criar. É a mesma família da MC3, que decidiu a voz do erro pelo mesmo motivo.

Regras da trava:

  • CE4-a — quem chega depois vê leitura, com o motivo dito: quem está editando e desde quando. Ler nunca é bloqueado.
  • CE4-b — a trava expira por inatividade, e o rascunho do dono sobrevive à expiração. Trava sem expiração é objeto perdido quando alguém fecha o notebook no canteiro.
  • CE4-c — expirada a trava com rascunho pendente, o objeto mostra "Alterações não salvas de <quem>" — estado distinto de "livre" e de "travado".
  • CE4-d — quem é dono da trava e volta antes de outra pessoa assumir retoma o próprio rascunho.
  • CE4-e — a classe do objeto (gera documento com ART, ou não) é declarada pelo objeto, nunca inferida do nome da tela. Mesma regra do MM1: quem é peça impressa é decidido pelo que o artefato declara.

91.5 CE5 — o diálogo de conflito tem TRÊS saídas (decisão dele: (a))#

Quando o 412 chega, o diálogo (§30) oferece, nesta ordem:

  1. Ver o que mudou — a comparação, antes de qualquer decisão. É a saída padrão e a de menor risco.
  2. Manter o meu e sobrescrever — destrutiva. Entra sob a MC4 (verbo específico no rótulo, nunca "OK") e a MC5 (o corpo declara a consequência, com o dado identificador: o que será descartado e de quem).
  3. Descartar o meu e recarregar — também destrutiva, e também sob MC4/MC5.

Alternativa descartada: as duas saídas ("recarregar e perder" ou "salvar como cópia"). Recusada porque "recarregar e perder" faz a pessoa refazer o trabalho, e essa é exatamente a queixa que a literatura registra como o custo do padrão otimista — oferecê-la como única saída é escolher pagar o custo inteiro.

91.6 CE6 — o que NUNCA se faz#

  • Mesclar em silêncio. Nunca, em nenhum regime.
  • Perder sem oferecer saída. Nenhum caminho do diálogo termina com trabalho perdido sem a pessoa ter escolhido isso, com a consequência dita.
  • Bloquear a leitura. Trava é de escrita.

91.7 CE7 — o conflito é ANUNCIADO como alerta#

Diferente do offline: aqui a interrupção é apropriada. O diálogo de conflito chega por role="alertdialog" com foco movido, porque a pessoa está prestes a gravar e precisa saber antes de repetir a ação.

91.8 CE8 — fronteira do design system#

Não são desta seção: mesclagem automática, edição simultânea de verdade (CRDT, cursores de várias pessoas), histórico de versões navegável e a política de expiração em minutos. O DS fecha os estados: presença, trava, alterações não salvas de terceiro, e o diálogo de conflito.

91.9 CE4-f — a fronteira COLETA × EMISSÃO (emenda de 2026-08-24, tarde)#

O problema que a emenda resolve, e ele é uma colisão real entre duas cláusulas aprovadas no mesmo gate. A CE4 manda travar em regime exclusivo o objeto que gera documento com ART. A §90 admite trabalho offline. Não se adquire trava sem rede. Se as duas valessem sobre o mesmo objeto, a equipe de campo ficaria impedida de preencher a OS no canteiro — que é exatamente o caso de uso que o app existe para servir.

A saída não é afrouxar nenhuma das duas: é reconhecer que são objetos diferentes em momentos diferentes.

Momento O que é Regime
COLETA — a OS preenchida em campo, a medição, a foto, o apontamento, a marcação de ponto dado bruto, de autoria de quem coletou, ainda não é documento offline-first, SEM trava — §90 governa
EMISSÃO — o laudo, o memorial, o projeto, a proposta técnica que o engenheiro assina documento que sai com ART e responsabiliza quem assina online, com trava exclusiva — CE4 governa

CE4-f — a trava exclusiva é do DOCUMENTO, nunca da coleta que o alimenta. O que a CE4 protege é o ato de compor e assinar; nada nela impede que o dado de campo chegue depois, por sincronização.

A razão de isso não afrouxar a CE4: a preocupação que a fundou era conteúdo mesclado em silêncio dentro de documento assinado. Dado de campo que chega por sincronização não se mescla em silêncio — ele entra como material novo, com autoria e horário, e quem assina decide se incorpora. A trava segue protegendo exatamente o que precisava.

91.10 CE9 — conflito detectado na SINCRONIZAÇÃO#

O conflito da CE5 é interativo: a pessoa aperta gravar e a resposta vem na hora. O conflito de sincronização é outro animal, e as três diferenças mudam o desenho:

  1. Chega em lote, com muitos itens de uma vez.
  2. Chega tarde — horas depois da edição, às vezes no dia seguinte.
  3. Chega sem ação em curso — a pessoa pode estar dirigindo, ou nem estar com o app aberto.

Logo:

  • CE9-a — nunca resolver sozinho. Nem "o servidor ganha", nem "o dispositivo ganha". Resolução automática de conflito é a mesma família da mesclagem em silêncio que a CE6 proíbe.
  • CE9-b — nunca descartar. O item conflitado fica retido num estado próprio ("precisa da sua atenção"), com o conteúdo do dispositivo preservado. Trabalho de campo não se perde porque o servidor mudou.
  • CE9-c — a notificação é ASSÍNCRONA, não é diálogo. Diferente da CE7: aqui não se usa alertdialog nem se move o foco, porque não há ação em curso para interromper. É aviso persistente na lista de pendências, do mesmo tipo do resultado de sincronização da OF10-b.
  • CE9-d — a resolução usa as MESMAS três saídas da CE5 (ver o que mudou · manter o meu e sobrescrever · descartar o meu), no momento em que a pessoa abrir o item. Mesma gramática, momento diferente — quem aprendeu uma sabe a outra.
  • CE9-e — o lote não vira um diálogo por item. Muitos conflitos se resolvem na lista, com o item aberto um a um. Trinta diálogos em sequência é a forma de fazer a pessoa clicar em "sobrescrever" sem ler.

Fronteira: a marcação de ponto não entra aqui. Pela Portaria 671/2021 o registro não se altera, logo ele não tem conflito de edição — tem apenas transmissão bem ou malsucedida, que é a OF10.


Esc