# ENQUADRAMENTO · DEMANDA 34 — OS RELATORIOS DA SECRETARIA
epic **CS-70** · 5 cards · 2 territorios (backend, frontend) · 30/09/2026

## O QUE VAI, E O QUE ⛔ NAO VAI

Dos SETE factos do criterio de pronto, **CINCO ficam enquadrados, UM fica cortado ao meio e
DOIS ⛔ NAO se enquadram** — e ⛔ nenhum dos dois por escolha minha: ⛔ nao ha' fonte.

| # | facto | card | estado |
|---|---|---|---|
| 1 | a porta «Relatorios» no menu da Secretaria | CS-74 | ✅ |
| 2 | POR AULA: os dois numeros lado a lado + a linha da diferenca | CS-72 · CS-74 | ✅ |
| 3 | a GRAVACAO conta nos MESMOS dois numeros | — | ⛔ **sem fonte** |
| 4 | o PENDENTE ⛔ nao aparece em numero nenhum | CS-71 · CS-72 · CS-73 | ✅ |
| 5 | POR UPA E POR PERIODO, da mais atras para a mais a' frente | CS-73 · CS-75 | ⚠️ **menos a %** |
| 6 | TEMAS agrupados por nucleo | — | ⛔ **sem fonte** |
| 7 | trocar o periodo muda os numeros e ⛔ nenhum e' recalculado | CS-72 · CS-73 · CS-75 | ✅ |
| — | os SEIS estados em cada ecra, com SEM PERMISSAO | CS-74 · CS-75 | ✅ |

## OS TRES BURACOS, MEDIDOS E ⛔ NAO ADIVINHADOS

### 1 · O FACTO (3) ⛔ NAO E' CONSTRUIVEL, E ⛔ NAO E' POR FALTA DE TRABALHO
O criterio diz «o medico que so' abriu a GRAVACAO conta nesses MESMOS dois numeros (CS-32: a
mesma prova)». **A mesma prova ⛔ NAO esta' em `main`.** Medido:

- `git show main:backend/prisma/schema.prisma | grep -c 'segmento_validado\|entrouEm'` ⟹ **0**.
  ⛔ Nao ha' `segmento_validado`, ⛔ nao ha' `participacao_aula.entrouEm`, ⛔ nao ha'
  `caminhoDaEntrada`. As tres nasceram no CS-35/CS-36 e vivem SO' em `epic/CS-32`.
- `backend/src/modules/gravacao/gravacao.controlador.ts` tem DUAS rotas — `PUT :aulaId/gravacao`
  e `GET :aulaId/gravacao` — e ⛔ ZERO participacao. Quem abre a gravacao ⛔ nao deixa registo.
- `backend/src/modules/participacao/participacao.servico.ts:116` ⟹ `AULA_TERMINADA` quando
  `agora >= fechaEm`. ⟹ Em `main`, **responder depois de a aula acabar e' impossivel por
  contrato**. Um medico que so' viu a gravacao ⛔ nao tem participacao, ⛔ nao tem minuto, ⛔ nao
  tem linha.
- E os epics novos NASCEM DE `main`: `git rev-list --left-right --count main...epic/CS-65` ⟹
  `0 0`; `...epic/CS-58` ⟹ `0 0`.

⟹ A demanda 23 (CS-32) esta' **`aprovada` e ⛔ NAO `publicada`**. Enquanto o dono ⛔ nao correr
`fab publicar CS-32`, o epic CS-70 nasce sem a fonte do facto (3).

**E HA' UMA SEGUNDA CONSEQUENCIA, PIOR, QUE ESTES CARDS JA' DEFENDEM:** o CS-35 fez
`participacao_aula.minutosValidados` **deixar de ser escrito** (o comentario dele di-lo a letra).
⟹ Se o CS-32 for publicado DEPOIS destes cards, a fonte de verdade muda por baixo deles.
Por isso o CS-72 e o CS-73 levam a trava `test $(grep -rl 'minutosValidados' src/modules/relatorio/ | wc -l) -eq 1`:
**o nome da coluna vive em UM so' ficheiro do modulo**, que e' a costura por onde se troca a fonte
mexendo em um sitio e ⛔ nao em quatro.

### 2 · O FACTO (6) ⛔ NAO TEM DADO NENHUM
`tema` e `sugestao` dao ZERO em `backend/src` e `frontend/src`. «PEDIR UM TEMA DE AULA» e' a
QUARTA PORTA DO MEDICO (regra 114) e esta' dentro da **demanda 29**, que esta' `a_discutir`.
⟹ ⛔ NAO se enquadra um ecra que so' pode estar vazio para sempre, e ⛔ NAO se inventa fonte —
e' o que o proprio texto da demanda manda.

### 3 · O FACTO (5) VAI SEM A PERCENTAGEM
«Atras» mede-se contra um ALVO, e o alvo e' a OBRIGATORIEDADE DE DOIS NIVEIS (regra 114), que
tambem e' da **demanda 29** e ⛔ nao existe no codigo.
⟹ O CS-73 entrega o que e' a palavra LITERAL do dono na pergunta 2 — «a carga horaria validada
da equipa de cada unidade» — e ordena da MENOR MEDIA POR MEDICO para a maior, que e' o unico
sentido de «atras» disponivel sem alvo. **A percentagem da equipa que atingiu a carga obrigatoria
⛔ NAO entra**, e o CS-73 tem um aceite que o PROVA
(`! grep -rqiE 'obrigatori|cargaObrigatoria' src/modules/relatorio/`), para que ⛔ ninguem a
invente a meio.
⚠️ **A ordenacao provisoria e' reversivel e fica NOMEADA aqui para o dono a corrigir ao aprovar.**

## O QUE O ENQUADRAMENTO DECIDIU, E PORQUE

1. **UM MODULO, TRES CARDS EM FILA.** `CS-71 → CS-72 → CS-73` partilham a cerca
   `backend/src/modules/relatorio/`. A dependencia ⛔ nao e' zelo: e' o que impede dois devs no
   mesmo ficheiro, e o dependente so' nasce depois de o pai ser APROVADO PELO QA.
2. **A SEMENTE E' CARD, ⛔ NAO PREPARATIVO DO QA.** `prisma/seed.ts` cria UMA pessoa (65 linhas,
   medido). A cena do criterio — 3 UPAs, 5 medicos, um em duas UPAs, 1 pendente, aula de 80 min
   com 240 minutos validados — sao ~15 actos a' mao, e os numeros TEM de ser exactos para os
   aceites medirem. ⟹ CS-71, e ⛔ sem ele ⛔ nenhum dos outros quatro e' verificavel.
3. **🩸 CONTA-SE `ACEITO`, ⛔ NUNCA `ATIVO`.** `SituacaoVinculo.ATIVO` e' valor MORTO do enum —
   `schema.prisma:222` di-lo a letra: «⛔ nao ha' uma linha em banco com ele». Quem contar por
   `ATIVO` conta ZERO e o relatorio sai vazio sem ninguem perceber porque. Esta' escrito nos
   titulos do CS-71, CS-72 e CS-73 e tem aceite proprio.
4. **A PORTA E' DA SECRETARIA E SO' DELA** (decisao 1 do quadro, regra 112). O coordenador ⛔ nao
   ganha relatorio nesta demanda.
5. **DOIS ECRAS, ⛔ NAO UM**, porque o criterio pede os seis estados «de cada ecra»:
   `/secretaria/relatorios` (por aula, e' a porta) e `/secretaria/relatorios/upas` (por UPA e
   periodo, orfa deliberada com o motivo escrito).
6. **FORA, e ⛔ nao se acrescenta** (decisao 7 do quadro): exportar CSV/PDF, grafico e notificacao.

## OBSERVACAO DE MECANISMO — e ⛔ NAO E' ACHADO, porque ⛔ nao me impediu de continuar
A regra 112 («a secretaria ve tudo») continua fora do codigo: `frontend/src/lib/navegacao.ts`
ainda aplica o criterio antigo, escrito pela fabrica e desfeito pelo dono em 30/09. O CS-74 mexe
nesse ficheiro e **⛔ NAO o conserta de proposito** — o conserto e' da demanda 30, e abrir as
outras portas a' secretaria aqui era esticar a cerca para dentro de outra demanda. O titulo do
CS-74 di-lo a letra, para que o dev ⛔ nao o faca por zelo.
