15 KiB
Matriz de rastreabilidade — Terra e DUAT
Revisão: 2026-10-03. Esta matriz descreve o código presente no repositório; não certifica a validade jurídica de modelos nem a aprovação da funcionalidade para submissão oficial.
| Requisito do prompt | Fonte disponível/estado | Campo ou percurso | Validação/evidência | Teste/estado |
|---|---|---|---|---|
| Guia público e limites do InvestMoz | resources/js/pages/land-assistance/guide.tsx; não depende de requisito jurídico específico |
/terra-duat |
Aviso de que não atribui DUAT nem confirma disponibilidade ou direitos | LandAssistanceTest: guia público 200; coberto |
| Formulário em branco público | Modelo InvestMoz land-assistance-v1; scans oficiais não identificados |
/terra-duat/formulario-em-branco |
Impressão/guardar como PDF; explicitamente não oficial e não preenchível | LandAssistanceTest: rota pública 200; coberto como modelo imprimível |
| Formulário progressivo, rascunho, retoma e versão | Modelo interno land-assistance-v1 |
/investidor/terra-duat/novo, edição e acompanhamento |
Autenticação, cifra do payload, versão optimista, histórico cifrado e eventos sem conteúdo pessoal | Testes de feature cobrem criação, propriedade, concorrência e suporte; sem evidência de ensaio browser DUAT nesta revisão |
| Categorias de apoio e actos posteriores | Vocabulário de produto do prompt; modalidades e efeitos legais pendentes | payload.support_kind, request_description |
Valores delimitados no FormRequest; UI não declara elegibilidade ou aprovação | Parcial: classificação jurídica detalhada depende das fontes oficiais |
| Requerente, contacto, representação e minimização | Requisitos do prompt; fundamento de recolha por acto concreto ainda carece de fonte | applicant_category, contacto, representação, NUIT |
Campos opcionais no rascunho; apoio exige um contacto utilizável e consentimento | Email ou telefone isolado coberto por LandAssistanceTest; não é criado endereço sintético |
| Localização, várias parcelas e hierarquia territorial | Catálogo territorial da aplicação; não é cadastro fundiário | parcels[], province/district/admin_post/locality, área e geometria declaradas |
UUID, tipos e sequência pai/filho; até 10 parcelas; catálogo/mapa não confirmam direitos | Validação servidor implementada; cenário visual de cascata e retoma do DUAT sem teste browser registado |
| Ocupação, usos, antecedentes e conflito | Declarações do requerente, não inferências do portal | known_occupants, known_improvements, prior_right_status, conflict_status |
Opções incluem “não sei” e estados qualificados; sem conclusão cadastral | Coberto pelo formulário, sem regra fundiária automática |
| Checklist personalizada por modalidade/jurisdição/fase | Pendente: guia, Lei/regulamentos e procedimentos vigentes não foram obtidos em cópia legível/reconciliada | Não há checklist jurídica executável | Não tornar itens dos scans documentos obrigatórios; não inventar fonte, prazo, responsável oficial ou evidência | Bloqueado por fonte/revisão jurídica |
| Plano de exploração | Scans exploracao/scan0003.pdf e scan0004.pdf, classificados só pela pasta; OCR e conferência pendentes |
exploration_plan.activity_rows[] |
Linhas facultativas; período livre, existente/planeado, unidade; não soma áreas anuais | Validação estrutural no FormRequest; OCR não reconciliado |
| Consulta comunitária e pareceres | Scans Consulta/scan*.pdf, ainda sem OCR/revisão |
consultation.participants[], intervenções, oposição, acordos, documentos referidos |
Até 200 participantes; estados comunicados/preparatórios; não gera parecer, assinatura ou acta | Cobertura do formulário; sem validação de execução/interpretação legal |
| Anexos e documentos privados | Armazenamento privado e registo documents existente |
Documentos no caso | Tipos/tamanho limitados; acesso autenticado/proprietário; quarentena não descarregável | Implementado com bloqueio seguro; antimalware não configurado, sem libertação automática |
| Cópia preenchida, histórico e referência | Modelo InvestMoz land-assistance-v1 |
/imprimir |
Reflecte payload guardado e versão; referência interna; sem assinatura/número oficial simulado | HTML imprimível, não PDF electrónico; correspondência visual/browser ainda sem evidência nesta revisão |
| Apoio e CRM | InterestSubmission; migration aditiva 2026_10_03_210000_make_interest_request_email_nullable.php |
solicitar-apoio |
Email ou telefone; consentimento, transacção, idempotência e recibo interno | Telefone isolado persiste email NULL; LandAssistanceTest cobre percurso e rollback protegido. Consumidores downstream com email obrigatório ainda carecem de validação operacional |
| Acompanhamento externo e gestão | Nenhuma API pública de DUAT confirmada | Área privada e gestão | Estados internos; factos externos apenas informados ou sustentados por evidência; encaminhamento preparado não é envio | Implementado sem simular integração pública |
| Direitos, disponibilidade e intersecções | Não confirmáveis por dados/catálogos locais | Localização e documentos | Ausência de registo/intersecção não prova ausência de direitos; conflitos não são decididos | Salvaguarda de interface presente; confirmação cabe à entidade competente |
| Segurança, auditoria e reversão | PostgreSQL e padrões locais | Migrations 2026_10_03_200000_create_land_assistance_cases.php e 2026_10_03_210000_make_interest_request_email_nullable.php |
Payload/revisões cifrados; controlo de propriedade; concorrência optimista; eventos sem payload; upload privado em quarentena; rollback protegido | PostgreSQL 17 QA descartável: LandAssistanceTest 6/6 (46 asserções); nenhuma migration aplicada à base operacional |
| Fontes e versões históricas | Inventário read-only em source-inventory.md |
land-assistance-v1 |
SHA-256 dos sete PDFs; originais fora de public/; snapshots preservam versões |
Identidade dos ficheiros verificada anteriormente; conteúdo/actualidade pendentes |
Bloqueios antes de activar checklist legal ou canal oficial
- Obter o Guia Nacional e os textos integrais do Boletim da República; confrontar reproduções PDUL com o BR e consolidar alterações por artigo, jurisdição e vigência. A triagem consta de legal-source-review-2026-10-03.md.
- Extrair os scans numa cópia de trabalho, preservar originais/hashes e rever OCR página a página. Trechos ilegíveis ficam pendentes.
- Aprovar aplicabilidade, responsável, prazo e evidência por fonte competente antes de disponibilizar a checklist como requisito.
- Rever notificações, exports e integrações downstream perante registos com email
NULL; não inventar endereço para compatibilizar consumidor. - Configurar/testar antimalware, quarentena, retenção e auditoria antes de libertar uploads.
- Testar em navegador hierarquia territorial, persistência/retoma, impressão preenchida e permissões; complementar com teclado/leitor de ecrã e revisão humana.
Estado proposto
Fluxo interno de orientação e acompanhamento: parcialmente implementado e sujeito a validação funcional. Checklist legal, activação como formulário oficial, confirmação cadastral, submissão a autoridades e aprovação de DUAT: bloqueados/fora da capacidade do portal. Um pedido preenchido ou encaminhado ao CRM não é protocolo oficial.
Adenda — contacto telefónico sem email (2026-10-03)
A regra anterior desta matriz que marcava o email como obrigatório foi substituída no código: o pedido de apoio aceita email ou telefone. Email ausente é persistido como NULL, sem endereço inventado. Uma migration aditiva torna a coluna anulável; o rollback recusa-se a remover essa compatibilidade enquanto existirem pedidos só telefónicos. A conversão CRM para lead continua a exigir confirmação de email. Os testes de feature foram escritos, mas não executados porque a base isolada configurada em 127.0.0.1:55441 estava encerrada; não foi tentada ligação à porta operacional 5432.
Evidência posterior — migration e percurso telefónico (2026-10-03)
A nota anterior de tentativa bloqueada foi superada numa execução posterior: a nova base PostgreSQL 17 foi criada em pasta temporária exclusiva e usada através da porta QA 55441. LandAssistanceTest passou 4/4 (42 asserções) e a suite PHP completa passou 251/251 (2.586 asserções); isto executou a migration aditiva em QA. O cluster foi parado. Nenhuma migration foi executada na base da aplicação e a porta 5432 não foi usada.
Actualização dos testes de reversibilidade — 2026-10-03
LandAssistanceTest agora passa 6/6 (46 asserções), incluindo reversão normal da coluna para não nula quando não existem pedidos telefónicos e bloqueio do rollback quando existem. A suite PHP completa após esses testes passou 253/253 (2.590 asserções) no cluster PostgreSQL QA descartável. O cluster foi parado; nenhuma conexão de teste foi aberta na porta 5432. Nenhuma migration foi aplicada à base local ou de produção.