# D39 · OS CURSOS PRESENCIAIS COM INSCRICAO — escopo fechado, a' espera da pergunta 83

⛔ ESTADO: a entrega (`fab demanda-pronta 39`) ESTA' SEGURA de proposito. A pergunta 83
decide se existe (ou nao) um MECANISMO DE FILA que se move sozinho — e isso muda a FORMA
do trabalho, ⛔ nao um detalhe dentro dele. Quem partir os cards sem ela parte o alvo errado.

⟹ Quando o dono responder, o resumo e o criterio de baixo entram com UM comando (ver o fim).

---

## O QUE MEDI, antes de perguntar (⛔ nada disto e' palpite)

1. **O CODIGO.** `backend/prisma/schema.prisma` tem **13 modelos** e **ZERO** falam de curso,
   inscricao, vagas ou local: `grep -rniE "cursoPresencial|inscricao|vagas|local" --include=*.prisma`
   devolve vazio. `grep -rniE "presencial|inscri|curso"` em `backend/` e `frontend/` so' apanha
   `blocoEmCurso` (a fita dos 20 minutos). ⟹ **NAO ha' nada para reaproveitar: nasce do zero.**
2. **AS REGRAS DELE.** 52 (a secretaria confirma a presenca UM A UM; quem cadastra poe datas,
   limite de vagas, local, «etc») · 57 (QUEM cadastra o curso presencial e' a SECRETARIA — fecha
   o que a 52 deixara' sem nome) · 53 (o valor do ponto e' PARAMETRO da secretaria) · 55 (os
   quatro papeis) · 112 (a secretaria ve' tudo) · 58 (o facto guarda-se desde o primeiro dia,
   mesmo que quem o soma ainda ⛔ nao exista).
3. **A DEMANDA QUE ESTE TEXTO CITA.** D14/CS-1 poe «cursos presenciais» na lista do que ficou
   **FORA** da fatia 1, nomeado. E a regra 111 conta-os entre as SETE coisas do texto original
   que ficaram por construir. ⟹ Esta demanda e' a divida nomeada, ⛔ nao ideia nova.

## O PRECEDENTE MEDIDO que da' a forma ao acto de confirmar
`POST /vinculos/:id/aceitar` e `POST /vinculos/:id/tirar` (`vinculo.controlador.ts:50,60`), com
`GET /vinculos` a listar os pendentes: **um acto por pessoa, sobre uma lista, guardado por um so'
papel.** Confirmar presenca e' o MESMO gesto com outro papel (secretaria em vez de coordenador).
⚠️ E pela regra 88 confirmar presenca e' **PAGINA**, ⛔ nao dialogo — o dono ja' o decidiu.

---

## RESUMO (a entregar)

A QUINTA das sete dividas do CS-1 (regra 111), e a que o dono escreveu em UMA linha: «possibilidade
de anunciar cursos presenciais na plataforma e os medicos se inscreverem». Medido: **0 de 13 modelos
do produto falam de curso, inscricao, vagas ou local** — nasce do zero, ⛔ nao ha' nada a emendar.

DENTRO: a secretaria anuncia um curso presencial (o que e', quando, onde, quantas vagas) · o medico
ve' os cursos anunciados e inscreve-se · o limite de vagas FECHA a inscricao (cheio, ⛔ nao entra
mais — regra 52) · depois do curso a secretaria passa a lista dos INSCRITOS e marca, por cada um,
COMPARECEU ou NAO COMPARECEU, **um a um** (regra 52, e ⛔ nao em bloco) · a presenca confirmada fica
GRAVADA como facto, com quem a confirmou e quando.

FORA, e nomeado para ⛔ nao se perder: **a SOMA dos pontos e o RANKING ⛔ nao sao desta demanda** —
sao a 29. Inscrever-se ⛔ nao da' ponto nenhum (regra 52); a presenca confirmada e' que da', e o
quanto e' parametro da secretaria (regra 53).

REGRAS QUE MANDAM AQUI, todas decisoes dele: 52 (confirma um a um; datas, vagas, local) · 57 (quem
cadastra o curso e' a SECRETARIA — ⛔ nao o especialista) · 53 (o valor e' parametro, ⛔ nao codigo) ·
55 (os quatro papeis) · 112 (a secretaria ve' tudo) · 88 (confirmar presenca e' PAGINA, ⛔ nao
dialogo) · 58 (o facto guarda-se desde o primeiro dia).

O QUE EU DECIDI SOZINHO, por ser REVERSIVEL — nomeado para o dono ver ao aprovar o enquadramento,
e corrigir se quiser:
 1. O CURSO PRESENCIAL E' COISA PROPRIA, ⛔ NAO UMA AULA COM UMA ETIQUETA. Medido: `Aula` tem
    duracao multipla de 20 **imutavel depois de criada** (`schema.prisma:141`), blocos de 20 min,
    questoes penduradas neles, link de transmissao e um especialista responsavel — ⛔ NADA disso
    serve a um curso com local e vagas, e forcar la' dentro parte o CS-8, o CS-9 e o CS-11.
 2. O PONTO ENTRA COMO **UMA CHAVE NOVA DE PARAMETRO**, pelo precedente medido: o CS-35 juntou a
    QUINTA chave (`tecto_minutos_por_questao`, `parametro/chaves.ts:11-16`) quando precisou de um
    numero que a secretaria muda sem parar o produto. Esta e' a sexta. ⛔ Nenhum numero em codigo.
 3. ESTA DEMANDA **GRAVA O FACTO E ⛔ NAO O SOMA.** Medido: ⛔ nao existe livro de pontos no produto
    (0 tabelas de lancamento; a soma e' a demanda 29). ⟹ Mesmo criterio da regra 58 e do
    `SegmentoValidado` do CS-32: o facto fica guardado desde o primeiro dia e quem o soma chega
    depois. ⛔ Nao se inventa aqui meio ranking.
 4. GRAVA-SE A **DURACAO** DO CURSO (cabe no «etc» dele). ⛔ Nao decide nada hoje — a obrigatoriedade
    de carga horaria ainda ⛔ nao existe no produto (regra 114.3) —, mas sem o numero guardado ela
    nasce cega e ha' que voltar aos cursos velhos a pedir horas a quem ja' os deu.
 5. A PRESENCA CONFIRMADA E' **AUDITAVEL**: fica quem confirmou e quando. Razao dele, ⛔ nao zelo
    meu: o ranking «conta para avaliacao» (regra 114) e o medico CONTESTA lancamentos (regra 116).
    Uma presenca sem autor ⛔ nao se contesta.
 6. A PORTA NOVA ENTRA NA FONTE UNICA (`frontend/src/lib/navegacao.ts`, CS-29) e ⛔ nao nasce orfa.
 7. Banco, enderecos, nomes de ecra e a forma da lista.

⚠️ O «ETC» DA REGRA 52 E' DELE E ⛔ NAO LHO GASTEI NUMA PERGUNTA, porque ⛔ nao bloqueia e ele ve'-o
no ecra. PROPONHO O MINIMO — titulo · nucleo (a entidade existe desde o CS-47) · descricao · inicio
e fim · local em texto · limite de vagas · duracao — e **ele corrige no aceite do enquadramento**.

⛔ A FORMA DA INSCRICAO ESPERA PELA PERGUNTA 83: se o medico pode largar a vaga, e se ha' fila
quando as vagas acabam. (A) inscricao firme e (B) pode largar sem fila sao UM territorio; (C) com
fila que sobe sozinha traz um mecanismo que se move sem ninguem e pede AVISO ao medico que subiu —
e o dono ⛔ nao marcou os avisos entre as quatro coisas de 30/09 (regra 117).

## CRITERIO DE PRONTO (a entregar)

Esta' pronto quando estes SEIS factos se exercerem numa instancia a correr, todos contaveis:
 (1) A secretaria anuncia 1 curso presencial com **3 vagas**, data, local e duracao; o curso aparece
     aos medicos ACTIVOS e ⛔ NAO aparece a um medico PENDENTE (regra 46): 0 cursos visiveis para ele.
 (2) **3 medicos inscrevem-se e o 4.º ⛔ NAO consegue** — o limite de vagas fecha a inscricao
     (regra 52), e o 4.º le' POR QUE ⛔ nao entrou, ⛔ nao um erro seco.
 (3) Um COORDENADOR e um ESPECIALISTA ⛔ NAO conseguem anunciar curso nem confirmar presenca:
     **2 tentativas, 2 recusas** — quem cadastra e' a SECRETARIA (regra 57).
 (4) Depois do curso, a secretaria abre a lista dos **3 INSCRITOS** e marca **2 COMPARECEU e 1 NAO
     COMPARECEU, um a um** (regra 52). Fica gravado, por cada um, QUEM confirmou e QUANDO.
 (5) Com o parametro do curso presencial a **10**: os 2 confirmados ficam com 10 cada, o que faltou
     fica com **0**, e os 3 INSCRITOS tinham **0 antes da confirmacao** — inscrever-se ⛔ nao da'
     ponto (regra 52). ⛔ Nenhum destes tres numeros esta' escrito em codigo: a secretaria muda o
     parametro para **20**, e os lancamentos JA' GRAVADOS continuam a 10 (o facto ⛔ nao se recalcula).
 (6) A resposta do dono a' pergunta 83 exerce-se: com (A) as 3 vagas ⛔ nao se libertam; com (B) um
     dos 3 larga a vaga, o curso volta a **1 vaga aberta**, um quarto medico entra, e a folha que a
     secretaria confere tem **3 nomes e ⛔ nao 4**; com (C) o mesmo, e o que estava em fila **sobe
     sozinho** para inscrito.

---

## ENTREGAR (um comando, depois da resposta a' 83)
`bash /srv/produtos/capacitasalvador/escopo/ENTREGAR-D39.sh`

---

## OBSERVACAO DE MECANISMO — ⛔ NAO e' achado, porque ⛔ NAO me impediu de continuar

A minha pergunta ao dono foi **barrada a' primeira** pelo classificador do `fab perguntar`:
«isto parece defeito ou desenho da FABRICA». Medido: o texto recusado citava `vinculo.controlador.ts:50`,
`schema.prisma`, «0 de 13 modelos», «cards» e «territorio». Reescrita nas palavras do negocio
(vagas, medicos, secretaria, a folha que ela confere) — **mesma pergunta, mesma medicao por dentro** —
passou: pergunta 83.

⚠️ E ISTO ROCA NUMA TENSAO QUE VALE ESCREVER: a skill `fechar-escopo`, passo 3, manda que a pergunta
diga «o que esta' **medido hoje** (com ficheiro e linha)». O classificador le' ficheiro-e-linha como
lingua de fabrica. ⟹ As duas coisas ⛔ nao se contradizem, mas a ordem certa ⛔ nao estava escrita em
lado nenhum e descobri-a por tentativa: **MEDE-SE com ficheiro e linha, e ESCREVE-SE ao dono em
consequencias que ele ve'** — a medicao fica no documento do escopo, ⛔ nao dentro da pergunta.

⟹ Custou-me UM comando recusado e ⛔ nada mais. Quem vier a seguir ja' o sabe por ler isto, e
⛔ nao PARA um card por causa disso.

## SEGUNDA OBSERVACAO — A FILA DO DONO ENCHEU-SE EM QUATRO MINUTOS, E ⛔ NAO FOI DE UMA PERGUNTA

Medido, com hora: quando comecei, `fab fila` tinha **2 itens** (pedidos 80 e 81, os dois `aprovar`).
Guardei-me a UMA pergunta para chegar a 3, que e' o alvo. Quatro minutos depois a fila tem **8**:
pedidos 82 a 88 — **SETE perguntas escritas entre 14:44 e 14:47**, uma por cada demanda em
`a_discutir` (31, 33, 35, 36, 38, 39 e a 32), cada uma de um quadro diferente a correr em paralelo.

🩸 O DEFEITO ⛔ NAO E' DE NENHUM DOS SETE, e e' por isso que fica escrito: **cada quadro mediu a fila,
viu-a curta, e juntou UMA — respeitando o alvo. O alvo e' de 3 na FILA, ⛔ nao de 1 por quadro**, e
⛔ nada no mecanismo faz a conta do conjunto. Sete agentes a cumprir a regra individualmente
entregaram ao dono, em quatro minutos, o dobro do dobro do alvo.
⟹ Isto ⛔ NAO me impediu de continuar (o meu escopo esta' escrito e a entrega e' um comando), por isso
e' OBSERVACAO e ⛔ nao achado. Mas a medicao ⛔ nao se perde: **quem quiser que o alvo de 3 seja
verdade tem de o fazer valer na FILA, ⛔ nao na cabeca de cada quadro** — os quadros em paralelo
⛔ nao se veem uns aos outros.
⚠️ E um detalhe menor, medido ao lado: o `alvo` das sete perguntas vem escrito de DUAS formas —
`39`, `33`, `38` numas e `demanda-31`, `demanda-32`, `demanda-35`, `demanda-36` noutras. Mesma coisa,
dois nomes.
