Files
Investidor-V2/docs/investmoz/gis/ine-import-status.md
T
nala 1106509116
tests / ci (push) Canceled after 0s
vrsao 2
2026-10-08 14:02:01 +02:00

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.