# BPMN como documentação de processos (não runtime)

> **Atualização 2026-10-23:** o cliente exige um **BPMS/BPMN para Ouvidoria/e-SIC** (itens
> 166–244). Isso **não** muda o veredito documental deste item; a demanda de runtime, com os
> conflitos de ADR e as opções, está em [`bpms-ouvidoria-esic.md`](./bpms-ouvidoria-esic.md).

| Campo | Valor |
|---|---|
| **Prioridade** | Baixo |
| **Status** | Aberto |
| **Origem** | Revisão de `bpmn/spec/` em 2026-10-23 |
| **ADR provável** | ADR própria — “BPMN é documentação, não motor” (se promovido) |
| **Relaciona** | P6, P11, P15, P25; ADR-001, ADR-009, ADR-024, ADR-025, ADR-035 |

## Veredito

O corpus **BPMN 2.0.2** tem **valor documental condicionado** e **nenhum valor como runtime** para
o V7. Não se integra o corpus, não se adiciona um motor BPMN e não se reivindica conformidade.
O único uso defensável é **documentar alguns processos transversais** com um subconjunto pequeno
da notação, fora do código e com alternativa textual acessível.

## O que o corpus é — e o que não é

- É a transcrição da especificação OMG `formal/2013-12-09` (532 páginas, 287 figuras, 314 tabelas),
  mais CMOF/XSD/XMI e um metamodelo pesquisável.
- É uma **notação + metamodelo + formato de intercâmbio** para processos de negócio. A própria
  especificação declara fora de escopo: modelos organizacionais, modelo de dados, regras de negócio,
  estratégia, simulação operacional, monitoramento e deploy.
- Não é um produto de workflow, não define um motor executável em PHP e não substitui
  `Action`/`Event`/`Job`/`Queue` do Laravel.
- O PDF da OMG é o documento normativo; a transcrição é referência. O corpus local tem **100 MB**
  (PDF de 7,3 MB) e não deve entrar no repositório da aplicação.

## Veredito por bloco

| Bloco | Valor para o V7 | Decisão |
|---|---|---|
| 1–7 (escopo, conformidade, visão geral) | Contexto e vocabulário | **Não integrar**; consulta pontual |
| 2 (conformance) | Só para quem implementa ferramenta BPMN | **Não reivindicar** conformidade |
| 8–10 (core, collaboration, process) | Notação para processos internos e papéis | **Usar subset documental** |
| 11 (choreography) | Contratos entre participantes | **Não**; integração real é HTTP/fila |
| 12 + Annex B (DI) | Layout de diagrama | **Não**; SVG exportado offline |
| 13 (execution semantics) | Tokens, ciclos de vida, gateways, eventos | **Não**; estados explícitos no código |
| 14 (WS-BPEL) | Mapeamento para BPEL | **Não**; legado de outra stack |
| 15 (XSD/XMI) | Intercâmbio com ferramentas | **Não em runtime**; XSD local está quebrado |
| 10.10/10.11 (auditing/monitoring) | Apenas um “hook” de extensão | **Não**; ADR-024/ADR-035 já são mais fortes |
| Metamodelo CMOF | Construir modelador/validador | **Não**; fora do escopo |
| Annex C (glossário) | Terminologia | **Consulta**, sem dependência |

## O que vale integrar (condicionado)

**Documentação de processos**, em `wiki/processos/`, com um processo por pasta:

```
wiki/processos/{slug}/
  README.md      # ficha do processo
  processo.bpmn  # fonte editável (bpmn.io/Camunda Modeler)
  processo.svg   # export estático, com <title>/<desc>
```

A ficha do processo é o artefato principal — o diagrama é secundário:

- dono, gatilho, resultado e frequência;
- papéis/pools e handoffs;
- estados/transições e regras de decisão;
- sistemas/ações do V7 (rota, Action, permissão);
- prazos/SLAs, controles e evidência de auditoria;
- base legal/LGPD e retenção, quando houver dado pessoal;
- links para testes e para o código que implementa o processo.

Regras:

- **Subconjunto pequeno** de BPMN (tasks, lanes/pools, gateways exclusivo/paralelo, start/end,
  timer/message events quando o prazo for o ponto). Não é preciso “conformance”; não usar
  choreography, compensation, data objects complexos, script tasks.
- **Sem visualizador no CMS/portal.** O `.svg` é estático, acessível e sem JavaScript; o texto
  alternativo/`README.md` é a fonte para leitores de tela (WCAG 1.1.1).
- **Sem duplicar** o mesmo fluxo em Mermaid e BPMN. Mermaid continua sendo o padrão para
  arquitetura/sequência técnica; BPMN só quando o valor for o acordo entre áreas.
- **Sem interpretar BPMN em produção.** Se um dia houver importação, ela é upload de documento,
  não execução; validar tamanho, XML sem entidades externas, sem `scriptTask`, sem `bpmn:import`
  remoto (XXE/SSRF).

### Processos candidatos

| Processo | Fase | Por que BPMN ajuda | Observação |
|---|---|---|---|
| Aprovação editorial (rascunho → pendente → publicado/rejeitado) | P6 | Papéis autor/revisor, quatro olhos e transições | Piloto mais barato; já existe máquina de estados testável |
| Ouvidoria/e-SIC (receber → analisar → responder → recurso → encerrar) | P11 | Prazos, prorrogação, sigilo e handoffs | Timer/SLA pode ser anotação, não execução |
| DSAR e incidente LGPD | P25 | Fluxo transversal, prazos legais, evidências | Alto valor de governança; sem PII no diagrama |
| Solicitação de serviço da Carta de Serviços | P15/P25 | Backoffice do serviço, não a jornada pública | A página pública continua HTML semântico em etapas |

**Não** são candidatos: P2 (UI de usuários/perfis), P3 (ativação de módulos) e P4 (estatísticas).
São operações de plataforma, não processos de negócio.

## O que não vale

- **Motor BPMN** (token, gateways, eventos, compensação, persistência de instâncias): duplica o
  que o Laravel já resolve com estados explícitos, Actions e jobs; viola ADR-001 (simplicidade e
  nativo primeiro) e ADR-009 (sem UI reativa).
- **Modelador/visualizador no CMS**: dependência grande, CSP/JS, acessibilidade e manutenção para
  um artefato que só a equipe interna usa.
- **Conformance BPMN**: o V7 não é ferramenta de modelagem; reivindicar conformidade exigiria
  suportar o subconjunto inteiro, com semântica gráfica e de intercâmbio.
- **WS-BPEL/XMI/CMOF**: não há runtime BPEL nem necessidade de serialização MOF.
- **Versionar o corpus completo**: peso, licença OMG e ruído; manter fora do repo da aplicação.

## Riscos e gates

| Risco | Mitigação |
|---|---|
| Diagrama vira “teatro” e divergiu do código | Ficha com links para Action/rota/teste; revisor nomeado; revisão a cada mudança de fluxo |
| Diagrama inacessível | SVG com `<title>/<desc>` + ficha textual; nunca só imagem |
| XML malicioso (se importar) | Sem `bpmn:import` remoto, entidades externas desabilitadas, limite de tamanho, sem executar scripts |
| Licença/peso do corpus | Referência externa ao repo; se citar, atribuição OMG; não commitar PDF/figuras |
| XSD local inválido | O `BPMN20.xsd` local não declara `xmlns:xsd` e `BPMNDI.xsd` importa `DC.xsd`/`DI.xsd` ausentes; `xmllint` falha. Só validar depois de obter o conjunto oficial completo |

## Critérios de promoção (backlog → ADR/plano)

- [ ] Um processo real com dono transversal e necessidade externa de notação padrão.
- [ ] Piloto único (P6) com ficha + `.bpmn` + `.svg`, usado em revisão por uma área.
- [ ] ADR “BPMN é documentação, não motor” (limite explícito).
- [ ] `docs-check`/links verdes; nenhum código ou dependência nova.
- [ ] Se houver validação XML: conjunto XSD oficial completo e comando reproduzível.

## Notas

- Evidência da revisão: `bpmn/spec/README.md`, `02-conformance.md`, `07-overview.md`,
  `10-process/10-10-auditing.md`, `10-process/10-11-monitoring.md`,
  `13-bpmn-execution-semantics/*`, `15-exchange-formats/15-3-xsd.md`.
- `bpmn/BPMN20.xsd` e `bpmn/BPMNDI.xsd` não formam um conjunto autovalidável hoje; não prometer
  validação BPMN sem corrigir/obter os schemas oficiais.
- O corpus é referência de leitura; a decisão de produto é **não** embarcar BPMN no runtime.
