#!/usr/bin/env bash
# Entrega do escopo da demanda 39 (cursos presenciais com inscricao).
# UM argumento: a letra que o dono responder na pergunta 83 — A, B ou C. ⛔ NAO se inventa.
#   bash ENTREGAR-D39.sh B
# O texto vem do ESCOPO-D39-cursos-presenciais.md, que e' onde ele se le' e se corrige.
set -euo pipefail
L="${1:?diga a letra que o dono respondeu na pergunta 83 (A, B ou C) — ela ⛔ NAO se inventa}"
case "$L" in
  A|a) FORMA="A INSCRICAO E' FIRME (resposta do dono a' pergunta 83, opcao A): cheio e' cheio, o medico ⛔ NAO larga a vaga e ⛔ NAO ha' fila de espera. ⛔ Nao se constroi cancelamento nenhum." ;;
  B|b) FORMA="O MEDICO PODE LARGAR A VAGA E ⛔ NAO HA' FILA (resposta do dono a' pergunta 83, opcao B): ao cancelar, o lugar volta a ficar aberto e entra quem se inscrever primeiro. A folha que a secretaria confere passa a ter so' quem ainda contava ir. ⛔ Nenhuma fila, ⛔ nenhum aviso." ;;
  C|c) FORMA="PODE LARGAR, E HA' FILA DE ESPERA (resposta do dono a' pergunta 83, opcao C): quem chega com as vagas cheias fica em fila, por ordem de chegada, e SOBE SOZINHO a inscrito quando alguem cancela. ⚠️ Isto obriga a AVISAR o medico que subiu — e ele ⛔ nao marcou os avisos em 30/09 (regra 117); o enquadramento tem de dizer por onde esse aviso sai." ;;
  *) echo "⛔ letra desconhecida: '$L'. So' A, B ou C." >&2; exit 2 ;;
esac

R="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.

A FORMA DA INSCRICAO, decidida POR ELE: ${FORMA}

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 O QUADRO DECIDIU 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 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."

C="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 forma que o dono escolheu na pergunta 83 exerce-se: opcao ${L^^}. Com A, as 3 vagas ⛔ nao se libertam e ⛔ nao ha' cancelamento nenhum. 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."

fab demanda-pronta 39 --resumo "$R" --criterio "$C"
