11 KiB
Conclusão funcional da biblioteca documental
Data: 06/10/2026. Estado: implementação funcional; validação de conteúdo e publicação parcial. Este relatório actualiza e complementa legal-source-library-migration-2026-10-06.md, que documentava o estado anterior à importação do ficheiro do INE e à migração de vigência.
Resultado
A biblioteca /documentos tem agora pesquisa e filtros no servidor, ficha pública de cada registo publicável, consulta controlada de PDF/imagem e download protegido. A interface de gestão permite criar e editar rascunhos privados, ver proveniência e estado técnico, associar documentos a requisitos com uma referência concreta (artigo, secção, página ou excerto) e indicar período de aplicabilidade. Um ficheiro em análise pode ser guardado como rascunho; os controlos existentes continuam a impedir publicação até que a análise esteja limpa, o hash coincida e os restantes requisitos editoriais estejam cumpridos.
Foram importados quatro documentos para armazenamento privado. Todos permanecem internos, não publicados e com direitos não confirmados. A biblioteca pública vazia é, portanto, o resultado correcto nesta base: nenhuma autorização de direitos ou decisão editorial foi inferida a partir do antivírus ou da existência de uma fonte oficial.
Inventário e decisões pendentes por documento
| Documento | Proveniência e estado | Relações | Decisão pendente antes de publicar |
|---|---|---|---|
| Lei n.º 22/2022, republicação do Código do IVA | PDF comparado byte a byte com o exemplar da AT; origem oficial confirmada. Estado jurídico registado como alterado, não como consolidação integral actual. | Evidência documental do simulador fiscal. | Gestor deve rever a possibilidade de divulgação da composição PDF e confirmar a versão/alcance editorial. Direitos: unconfirmed; classificação: internal. |
| BR n.º 248/2025, Suplemento n.º 1 | PDF comparado byte a byte com endpoint oficial da AT. Reúne vários diplomas; estado jurídico agregado desconhecido. | Evidência documental fiscal, sem afirmar que cada tema cria obrigação ou regra activa. | Avaliar direitos da composição e identificar os diplomas e vigências individualmente antes de apresentar como referência consolidada. |
| BR n.º 89, I Série, de 08/06/2017 | A ficha do INM identifica o aviso de rectificação da Lei n.º 13/2016 na p. 569; o binário local não foi comparado com um download oficial. Proveniência apenas identificada. | Evidência fiscal; efeito temporal continua por confirmar. | Obter o PDF/binário oficial, comparar hash e confirmar autenticidade, anexos e efeito da rectificação. Direitos continuam por confirmar. |
| Codificador da Divisão Político-Administrativa do INE, edição de 2012 | Os bytes locais (67.067 bytes) coincidem com o PDF servido pelo URL oficial do INE. Confirma a origem do ficheiro, não a actualidade dos códigos nem os direitos de reutilização da composição. | Sem associação automática às relações territoriais actuais. | Rever reutilização/publicação e utilidade histórica. Não usar esta edição para atribuir localizações actuais sem reconciliação documentada. |
Nos quatro registos, a análise antimalware foi concluída sem ameaça e os hashes analisados coincidem com os ficheiros guardados. Este resultado é uma verificação técnica, não prova de direitos de publicação, exactidão jurídica, vigência ou actualidade.
As seis referências de zonas em investment_legal_sources e as referências de DUAT continuam a ser URLs, não ficheiros anexados à biblioteca. Continuam pendentes de validação e não foram convertidas em documentos fictícios. O resumo de reforma fiscal de 2026 e folhas de revisão pessoal não foram importados como diplomas. Extractos e CSVs de revisão potencialmente pessoais também não foram importados.
Alterações desta entrega
app/Http/Controllers/PortalServicesController.php: consulta pública mantém os filtros de publicação, classificação, direitos, estado e hash; acrescenta ficha, consulta inline restrita a PDF/imagem com hash verificado, download público autorizado e download de gestão privado apenas para gestor e ficheiro activo/analisado.routes/web.php: rotas da ficha/consulta e download de gestão com restrições de formato de ID e middleware de gestão existente.resources/js/pages/portal/services.tsxe novoresources/js/pages/portal/document.tsx: catálogo, filtros combináveis, ordenação por tema, estado vazio, consulta/ficha/download e informação de proveniência sem expor chaves internas.resources/js/pages/portal/manage.tsx: criação/edição de rascunhos, estado de análise, fontes detalhadas, downloads privados de gestão e datas de aplicabilidade. A criação de rascunho não altera o gate editorial.database/migrations/2026_10_06_180000_add_document_applicability_dates.php: duas datas de aplicabilidade opcionais com validação de intervalo. Migração aditiva; não preenche registos antigos.app/Console/Commands/ImportLegalSourceArchive.php: importador idempotente por hash para fontes explicitamente autorizadas, incluindo a cópia privada exacta do INE. Preserva rascunho, classificação interna, direitos não confirmados e não cria associações territoriais.app/Console/Commands/CheckDocumentLibrarySchema.php: verificação de compatibilidade das colunas e invariantes da biblioteca.tests/Feature/PortalServicesTest.php,tests/Feature/ImportLegalSourceArchiveTest.php,tests/Feature/DocumentLibrarySchemaCompatibilityTest.php: cobrem fluxos públicos/privados, scan, direitos, data, associações, importação e esquema.tools/document-library-completion-browser.mjse evidências associadas: verificação visual automatizada em desktop e telemóvel.
Dados activos, backup e migração
Base confirmada pelo Laravel: investemoz, PostgreSQL em 127.0.0.1:5432. Consulta somente de leitura após a migração: 4 documentos, 4 recursos, 0 recursos publicados, 4 documentos limpos e 0 trabalhos pendentes. Os registos importados mantêm classificação interna e direitos não confirmados.
Antes da migração foi criado o backup PostgreSQL customizado investemoz-before-document-library-applicability-20261006.dump e o arquivo de armazenamento investemoz-portal-documents-before-applicability-20261006.zip em %LOCALAPPDATA%\InvestMoz\Backups. pg_restore --list validou o dump e este foi restaurado com sucesso numa base isolada investmoz_restore_qa_afterimport_20261006; a contagem recuperada foi 4 documentos, 4 recursos e 11 associações, e os hashes dos ficheiros restaurados coincidiram. O ambiente isolado foi parado após o ensaio; as bases QA de restauração foram preservadas.
Aplicou-se apenas 2026_10_06_180000_add_document_applicability_dates.php à base activa, depois do backup/restauro. Não se reconstruíram tabelas, eliminaram documentos, preencheram campos editoriais em massa nem executaram migrações não relacionadas. portal:check-document-library-schema confirmou compatibilidade depois da migração.
O importador foi executado em modo de pré-visualização e aplicação; a repetição da aplicação reutilizou os quatro documentos pelo hash e não criou duplicações. A fila ficou sem trabalhos pendentes e os quatro documentos importados estavam em estado clean com hash verificado.
Verificações e evidências
- PHP em QA isolado:
php artisan test tests/Feature/PortalServicesTest.php tests/Feature/DocumentLibrarySchemaCompatibilityTest.php tests/Feature/ImportLegalSourceArchiveTest.php— 17 testes aprovados, 418 verificações. - Tipos:
npm.cmd run types:check— aprovado. - Build:
npm.cmd run build— aprovado. Avisos existentes: pacote opcionalfontaineausente e chunkservicesacima de 500 kB; não impediram a compilação. - Esquema activo:
php artisan portal:check-document-library-schema— compatível. - Browser ligado à aplicação/base activa,
/documentos: desktop 1440×1000 e telemóvel 390×844 — HTTP 200, zero erros JavaScript, sem overflow horizontal, primeiro foco de teclado no link “Saltar para o conteúdo”, pesquisa sem correspondência mantém estado vazio, 0 documentos publicados. Evidência estruturada emdocument-library-completion-browser-2026-10-06.json; capturas emdocument-library-completion-desktop-2026-10-06.pngedocument-library-completion-mobile-2026-10-06.png. - O browser confirma o estado vazio seguro, não um documento público positivo. Não se publicou documento real porque os direitos permanecem por confirmar. Ficha, download e consulta de documento público têm testes de autorização; não existe ainda demonstração visual de download público de um documento real autorizado.
Limites e acções seguintes
- Um gestor autorizado revê os quatro documentos individualmente e regista direitos/classificação; publica apenas os ficheiros cuja divulgação esteja sustentada. A origem oficial confirmada não equivale automaticamente a autorização da composição ou do PDF.
- Para o BR n.º 89, obter do INM o binário integral oficial e comparar antes de promover a origem a confirmada.
- Validar conteúdo e vigência de cada diploma do BR n.º 248 separadamente; não o tratar como um único diploma vigente.
- Rever manualmente as datas/versão e utilidade do codificador INE de 2012; não o usar como catálogo territorial actual.
- Identificar os binários oficiais e os requisitos exactos dos percursos de zonas e DUAT antes de criar anexos/associações adicionais.
- Após a decisão documental do gestor, voltar a verificar o percurso positivo no browser: localizar o recurso publicado, abrir a ficha, consultar ou descarregar o mesmo ficheiro e aceder à referência no módulo associado.
Rollback estrutural: a migração acrescentou apenas colunas opcionais. O rollback operacional recomendado é restaurar o backup de base e o arquivo de armazenamento juntos, se necessário, ou manter as colunas inactivas. O down da migração só deve ser usado se as datas ainda não tiverem sido preenchidas; não eliminar esses dados depois de começarem a ser usados. Os quatro imports podem ser preservados como rascunhos; não remover ficheiros/dados automaticamente.