Redator de SD - preparado para deploy

This commit is contained in:
2026-08-11 19:00:04 -03:00
commit 18ae589d3a
35 changed files with 5832 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
# Redator de SD — RMDS / SES-MG × Isis Saúde
App local que conduz a entrevista de redação de Solicitações de Demanda (SD) com um LLM,
valida em código contra as regras do contrato (PE 29/2025) e mantém a base de conhecimento.
## Primeira execução
1. **Chave de API** — crie em https://console.anthropic.com → *API Keys* e coloque um crédito
inicial pequeno (US$ 510 rendem dezenas de SDs).
2. **Configuração** — copie `.env.example` para `.env` (nesta pasta) e preencha
`ANTHROPIC_API_KEY`. Defina também `APP_USUARIO` e `APP_SENHA` para ativar a
tela de login (enquanto vazios, o app roda aberto e mostra um aviso).
O `.env` nunca deve ser versionado nem compartilhado.
3. **Dependências** (só na primeira vez):
```
cd D:\IasisSaude\app
npm install
```
4. **Rodar**:
```
npm start
```
e abra http://localhost:3344 no navegador.
## Como funciona
- **Nova SD**: cole a demanda bruta → o redator entrevista você (uma pergunta por turno,
opções viram botões) enquanto o painel do documento se atualiza ao vivo.
- **Validação**: os itens `codigo` do checklist são recalculados em JavaScript a cada
atualização — e o resultado é realimentado ao modelo, que se corrige sozinho.
- **Trava de integridade**: exportação e envio ficam bloqueados até todos os artefatos
serem confirmados (checkbox + data) e nenhuma falha de código restar.
- **Envio**: atribui o número definitivo (SD-NN) e registra a SD em
`..\base-conhecimento.json` — saldo de pools e precedentes ficam atualizados
para as próximas entrevistas.
- **Documento / impressão**: o botão "Documento / imprimir (PDF)" abre a SD formatada
como documento oficial em uma aba pronta para Ctrl+P → salvar como PDF. Com pendências
bloqueantes abertas, o documento sai com marca de RASCUNHO.
- **Validar JSON externo** (menu no topo): cole o JSON de uma SD que não nasceu no app —
o validador recalcula tudo, roda o checklist e libera documento/download, sem salvar nada.
- **Alimentar base** (menu no topo): envie o documento de uma SD real (`.pdf`, `.md` ou `.txt`;
`.docx` deve ser exportado como PDF). Uma chamada de LLM extrai o registro estruturado
(itens, UST por item, período, status) e sugere capacidades reutilizáveis; a conferência
determinística em código checa somas, itens, status e impacto nos pools. **Nada é gravado
sem revisão**: você edita o registro, marca/desmarca capacidades e só então grava em
`..\base-conhecimento.json`. Erros de conferência bloqueiam a gravação; regravar o mesmo
SD-NN substitui o registro anterior (capacidades, porém, são sempre acrescentadas — ao
regravar uma SD, desmarque as que já entraram na primeira vez).
- **Login**: usuário único definido no `.env`. As sessões vivem na memória do servidor —
reiniciar o servidor exige novo login.
## Arquivos de configuração (raiz do projeto, `D:\IasisSaude`)
| Arquivo | Papel |
|---|---|
| `prompt-redator-sd.md` | Comportamento do redator (system prompt) |
| `regras-sd.json` | Regras duras do contrato — fonte única |
| `schema-sd.json` | Formato da SD |
| `base-conhecimento.json` | Histórico: SDs enviadas e capacidades da plataforma |
Editar qualquer um deles muda o app na próxima reinicialização — não é preciso mexer em código.
## Custos
O rodapé do chat mostra tokens e custo estimado em tempo real. O system prompt
(prompt + regras + base) é cacheado pela API — turnos seguintes da mesma conversa
pagam ~10% do preço no prefixo repetido.
## Dados
- `data/sds.json` — SDs e conversas (criado automaticamente; fora do versionamento).
- Provedor/modelo/esforço configuráveis no `.env` (`LLM_PROVIDER`, `LLM_MODEL`,
`LLM_EFFORT` — low/medium/high/xhigh/max; medium recomendado para a entrevista).
Adaptador OpenAI previsto para a fase 1.1 (`src/llm/provider.js`).
- **Seletor de modelo**: `LLM_MODELOS` (lista separada por vírgula) define os modelos
oferecidos nos seletores das telas Nova SD e Base de Conhecimento; o `LLM_MODEL`
sempre entra como padrão. O modelo escolhido fica fixo para a SD inteira — trocar
no meio da conversa descartaria o cache de prompt. O custo do rodapé usa a tabela
de preços do Opus (a observação ao lado do valor lembra isso).
## Atualização dos arquivos de configuração
O prompt do redator é remontado automaticamente quando `base-conhecimento.json`,
`prompt-redator-sd.md`, `regras-sd.json` ou `schema-sd.json` mudam no disco —
vale a partir da PRÓXIMA conversa, sem reiniciar o servidor. Exceção: mudanças em
`regras-sd.json`/`schema-sd.json` também alimentam o validador em código e a
ferramenta do modelo, que carregam na subida — para essas duas, reinicie.
Mudanças no `.env` sempre exigem reinício.