7.2 KiB
Preparação da importação INE — 28/09/2026
Execução parcial do novo anexo; a autorização para todas as fases está registada. Este incremento entrega validação offline, não o importador transaccional completo.
Aceitação expressa do responsável — aplicada
Em 28/09/2026, o utilizador instruiu: «aplicar os resultados e aceite os dados como validados e autenticados». A decisão foi aplicada ao pacote INE como aceite, validado e autenticado por declaração do responsável, vinculada aos checksums do PDF e da extracção. Não é uma alegação de autenticação independente pelo sistema.
A decisão foi gravada na base local em audit_events (source_system=territorial-owner-acceptance, action=owner_accepted) e em recibo privado geo-ine-review-20260928-v2/owner-acceptance-242d74394061d175e70e56161a48f66f02cce8d5989fc61098599d082da38f60.json. O script tools/record-territorial-owner-acceptance.php verifica os checksums antes da escrita; a segunda execução confirmou idempotência, sem duplicar o evento. Não foi atribuída a declaração a uma conta da aplicação.
A aprovação do responsável deixou de estar pendente para este pacote. O relatório original da extracção é preservado como histórico; a decisão posterior está no recibo. Permanecem pendentes as correspondências concretas entre colunas: aprovação não fornece os pares posto/distrito ausentes da extracção. Por isso, esta operação registou a aceitação mas não inseriu territórios nem alterou permissões ou publicou dados. O importador deve conservar separadamente a aceitação documental e a validação estrutural.
Fonte e evidência
Foi preservado o PDF do INE, cujo rodapé indica 07-06-2012. A disponibilidade no site não comprova vigência actual nem licença de reutilização.
- Original privado:
storage/app/private/geo-ine-source-20260928/original.pdf, 67.067 bytes. - SHA-256:
5c69b6f189a1d3f5307e0cf7dd8224554705158a682637d3105afad615db26e2. - Pacote concluído:
storage/app/private/geo-ine-review-20260928-v2/. - 666 linhas extraídas para revisão; zero territórios aceites automaticamente.
As colunas extraídas têm alturas diferentes e podem associar postos a distritos errados. Não se inferiram relações. Contagens de códigos por prefixo no relatório são ocorrências, não totais territoriais confirmados; a comparação visual com a fonte está pendente. O directório sem sufixo -v2 conserva apenas o original de uma tentativa interrompida pela convenção de exit code do Xpdf.
Componentes e execução
tools/territorial-pdf-review.py preserva o original, executa pdftotext, regista versão e checksums e gera review.csv e report.json. Recusa sobrescrever pacotes anteriores. Não gera associações a partir das colunas desalinhadas.
python tools/territorial-pdf-review.py original.pdf storage/app/private/ine-review `
--pdftotext C:/laragon/bin/git/mingw64/bin/pdftotext.exe `
--source-url 'URL da fonte' --source-version 'Versão documental'
Após revisão, o CSV deve ser UTF-8, separado por ;, com cabeçalho exacto:
province_code;province_name;district_code;district_name;admin_post_code;admin_post_name;locality_code;locality_name;locality_type;latitude;longitude
php artisan geo:audit-csv caminho/territorios.csv
O comando arquiva original e relatório num directório UUID privado. Consulta as províncias existentes sob país de código 508; o cadastro local vazio implica rejeição dos códigos até existir o seed. Não altera a base.
TerritorialCsvAudit valida UTF-8, limites de 20 MiB/50.000 registos, cabeçalho, campos obrigatórios, códigos numéricos preservados como texto, conflitos de código/nome/pai, nomes ambíguos e pares de coordenadas EPSG:4326. Localidade sem posto é rejeitada enquanto não existir o workflow de excepção. Não cria localidades a partir de postos. Duplicados idênticos são contados; qualquer erro rejeita o conjunto. Validade estrutural não equivale a aprovação documental.
Relatórios indicam ordinal do registo CSV e códigos de erro, sem repetir o conteúdo das linhas. O original privado conserva a evidência. Registos multilinha não têm ordinal igual à linha física.
Aceitação e próximas fases
Validação executada: suite PHP completa com 168 testes e 1.707 verificações aprovadas (32,524 s), incluindo seis novos testes unitários de CSV; PHPStan sem erros e Pint aprovado nos ficheiros PHP alterados. A extracção do PDF real terminou com 666 linhas de revisão. Não houve alteração de frontend nem alegação de testes visuais nesta fase.
| Critério | Situação e motivo | Impacto / próxima acção |
|---|---|---|
| Original, checksum e revisão reproduzível | Executado | Conservar pacote privado |
| Auditoria estrutural CSV | Executada | Não substitui carga ou aprovação |
| Seed MZ, 11 províncias e capitais em staging | Por implementar | Criar seed idempotente com proveniência, sem localidades fictícias |
| Batch persistente e carga atómica | Por implementar | Preservar rejeições e impedir alteração silenciosa de dados aprovados |
| CSV final extraído do PDF | Colunas ambíguas | Reconciliar visualmente e validar antes de converter |
| Vigência, licença e totais oficiais | Não comprovados | Obter evidência documental antes da publicação |
| Selectores em cascata e consumidores | Por implementar | Criar componente acessível e validar UUID/hierarquia no servidor |
| Atribuições FK, versões de limites e serviços espaciais | Por implementar | Completar schema e serviços sem duplicar cadastro |
| OIDC, OpenAPI integral, p95 e carga | Por implementar | Completar integração e ensaios; sessão local continua com limites documentados |
| UI editorial, acessibilidade e UAT | Por implementar | Entregar e testar jornadas no navegador |
| Go-live integral | Não concluído | Resolver itens anteriores e verificar critérios do anexo |
Nenhuma migration ou novo endpoint neste incremento; nenhum território importado, publicado ou alterado. Reversão: retirar os componentes acrescentados, preservando os pacotes de auditoria; não há rollback de dados. O núcleo territorial anterior está documentado em territorial-mvp.md. Os itens pendentes são trabalho restante, não novos pedidos de autorização.