Formulários
Builder de templates de formulários, configurável inteiramente por UI, sem desenvolvimento. Define a estrutura (seções, campos, tags semânticas) que alimenta chamamentos, PAR e consultas públicas.
Função
Builder de templates de formulários gerenciado 100% por UI RB-FORM-01. O template define a estrutura; os módulos consumidores (chamamentos/editais via tabela Atividade→Formulário, PAR, consultas) instanciam o formulário para preenchimento pelos entes.
Tags semânticas são desacopladas do texto da questão e alimentam o motor de regras do sistema RB-FORM-02. Isso permite que o motor interprete respostas independentemente de como a pergunta foi redigida, tornando os templates reutilizáveis e auditáveis sem amarrar lógica ao enunciado.
Usuários & níveis de acesso
| Perfil | Ações no módulo |
|---|---|
| Sysadmin L0 | CRUD completo; único que publica um template (gate crítico RF-FORM-21). Exclusão de template exige dois L0 simultâneos — revisão de pares RB-FORM-05. |
| Gerência Estratégica (L1) | Cria e edita templates em rascunho; submete para avaliação; não possui permissão de publicação. |
| Analistas operacionais (L2/L3 · NV1/NV2) | Sem acesso ao módulo de Formulários (G22), nem leitura (inclusive log de auditoria). |
| Ente Federado | Preenche formulários instanciados. Fora do escopo deste módulo — ver módulos Chamamentos e PAR. |
Estrutura de um formulário
Um template é composto por: módulo destino (obrigatório RB-FORM-12) + 1..N Seções reordenáveis RF-FORM-06 + 1..N Questões por seção.
Tipos de campo
Validações por questão RF-FORM-17
| Validação | Descrição |
|---|---|
| Obrigatoriedade | Campo marcado como obrigatório bloqueia o envio do formulário enquanto vazio. |
| Texto de ajuda | Dica contextual exibida ao lado do campo para orientar o preenchimento. |
| Lógica condicional | Exibe ou oculta uma questão com base na resposta de outra dentro do mesmo template. |
| Limite de caracteres / valor | Define teto máximo para campos de texto e campos numéricos/monetários. |
Fontes de dados dinâmicas
Listas reutilizáveis entre templates RF-FORM-23–RF-FORM-27. Suportam carregamento condicional RB-FORM-10: o conteúdo da lista muda de acordo com o valor de outro campo (ex.: municípios filtrados pelo estado selecionado).
Regras gerais de questão
- Imutabilidade pós-publicação: alternativas que já foram usadas em resposta submetida por ente não podem ser excluídas RB-FORM-06.
- Versionamento: qualquer alteração estrutural em template publicado gera nova versão; a anterior fica congelada RB-FORM-07.
- Controle pós-publicação: rollback para versão anterior disponível via RF-FORM-31.
Ciclo de vida · máquina de estados
RF-FORM-20 Submetido aguarda aprovação L0 aprovar — L0
RF-FORM-21 Publicado ativo · instanciável
RF-FORM-22 Rejeitado status persistente · filtrável · com histórico
HU-974 ↩ Em Edição resubmissão após rejeição
Regras de negócio estruturantes
| ID | Regra |
|---|---|
| RB-FORM-01 | Templates configuráveis 100% por UI, sem desenvolvimento de código. |
| RB-FORM-03 | Todo template nasce em "Em Edição"; publicação exige submissão + aprovação por Sysadmin L0. |
| RB-FORM-04 | Gate crítico — somente Sysadmin L0 pode publicar um template. |
| RB-FORM-05 | Exclusão de template exige revisão de pares: dois Sysadmins L0 devem confirmar a operação. |
| RB-FORM-06 | Alternativas que já foram usadas em resposta submetida por ente não podem ser excluídas. |
| RB-FORM-07 | Alteração de questão em template publicado gera nova versão; a versão anterior fica congelada. |
| RB-FORM-08 | Log WORM de todas as alterações — imutável e rastreável para auditoria. |
| RB-FORM-11 | Alteração estrutural em template publicado emite alerta automático aos entes com preenchimento em curso. |
| RB-FORM-12 | Módulo destino é obrigatório no template; alimenta a tabela Atividade→Formulário nos módulos consumidores. |
| RB-FORM-14 | Relação 1:1 entre tag semântica e questão; mudança de tag ocorre por depreciação, nunca por sobrescrita direta. |
Nota de stack: campos usam Zod para validação + acessibilidade básica (aria-label/aria-describedby) — docs/guias/forms.md; RHF+Zod é convenção de stack do projeto.