Permitir consulta pública dos ecrãs reais com dados privados protegidos
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-30 20:14:24 +02:00
parent c6373365bf
commit 2134aa084b
83 changed files with 3894 additions and 3127 deletions
+16 -16
View File
@@ -8,22 +8,22 @@
Estado actualizado em 28 de Outubro de 2026. Projecto activo: C:\laragon\www\compras, Laravel + React + PostgreSQL, http://127.0.0.1:8015. Preservar conta, dados, configuração, cookie e porta. SGF Tempo e Investmoz são independentes. A implementação Python separada fica apenas como referência; não importar contas, sessões ou bases experimentais.
| Área | Implementado no Laravel | Pendente |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| Acesso e organização | Fortify, conta, empresa, equipa, departamentos e centros de custo | MFA obrigatório e ciclo completo de acessos |
| Requisições e aprovações | Rascunhos, cálculos exactos, etapas, segregação e snapshots | Validação empresarial das regras provisórias |
| Fornecedores | Cadastro, anexos privados e versões bancárias com duas validações | Múltiplas contas e verificação bancária externa |
| Cotações | Propostas, avaliações e matriz comparativa | Multimoeda e revisão das propostas |
| RF-AF-01 | Declarações pessoais, histórico e ConflictGuard no servidor | Política de periodicidade, validade e levantamento |
| Adjudicação | Escolha, aprovação final e cancelamento sem ordem sob política publicada; rascunho revisto ligado | Cancelamento de ordens emitidas, compromissos, estornos e devoluções fora deste circuito |
| Ordens | Emissão única, snapshots, compromisso orçamental, consulta e impressão | Cancelamento de ordens emitidas e validação operacional integral |
| Recepção | Parcial/total, qualidade, divergências, pendentes, segregação do emitente e auditoria | Substituições e anexos; rejeições não autorizam receber acima do total |
| Stock | Artigos, armazéns, entradas, saídas fundamentadas, transferências atómicas, contagens e ajustes auditados por empresa | Revisão visual, reposição e conversões |
| Equipamentos e peças | Cadastro, compatibilidade, mínimos, validação técnica e investimento condicionado | Configuração empresarial, agregação por projecto e fraccionamento |
| Orçamento | Dotação, reforços aprovados, reservas e compromissos por empresa/centro/exercício | Revisão visual, reduções/transferências e validação operacional integral |
| Facturas e pagamentos | Facturas, consumo e registo/conferência de pagamentos externos | Estornos, notas de crédito e anexos |
| Início e navegação | Página inicial própria, menus por área/perfil e consulta pública por módulo | Revisão visual |
| Auditoria | Histórico das operações implementadas | Exportações, retenção e protecção contra SQL administrativo |
| Área | Implementado no Laravel | Pendente |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| Acesso e organização | Fortify, conta, empresa, equipa, departamentos e centros de custo | MFA obrigatório e ciclo completo de acessos |
| Requisições e aprovações | Rascunhos, cálculos exactos, etapas, segregação e snapshots | Validação empresarial das regras provisórias |
| Fornecedores | Cadastro, anexos privados e versões bancárias com duas validações | Múltiplas contas e verificação bancária externa |
| Cotações | Propostas, avaliações e matriz comparativa | Multimoeda e revisão das propostas |
| RF-AF-01 | Declarações pessoais, histórico e ConflictGuard no servidor | Política de periodicidade, validade e levantamento |
| Adjudicação | Escolha, aprovação final e cancelamento sem ordem sob política publicada; rascunho revisto ligado | Cancelamento de ordens emitidas, compromissos, estornos e devoluções fora deste circuito |
| Ordens | Emissão única, snapshots, compromisso orçamental, consulta e impressão | Cancelamento de ordens emitidas e validação operacional integral |
| Recepção | Parcial/total, qualidade, divergências, pendentes, segregação do emitente e auditoria | Substituições e anexos; rejeições não autorizam receber acima do total |
| Stock | Artigos, armazéns, entradas, saídas fundamentadas, transferências atómicas, contagens e ajustes auditados por empresa | Revisão visual, reposição e conversões |
| Equipamentos e peças | Cadastro, compatibilidade, mínimos, validação técnica e investimento condicionado | Configuração empresarial, agregação por projecto e fraccionamento |
| Orçamento | Dotação, reforços aprovados, reservas e compromissos por empresa/centro/exercício | Revisão visual, reduções/transferências e validação operacional integral |
| Facturas e pagamentos | Facturas, consumo e registo/conferência de pagamentos externos | Estornos, notas de crédito e anexos |
| Início e navegação | Página inicial própria, menus por área/perfil e consulta pública por módulo | Revisão visual |
| Auditoria | Histórico das operações implementadas | Exportações, retenção e protecção contra SQL administrativo |
| Revisão de compras | Política por empresa com duas aprovações administrativas; decisão independente de Finanças; reserva não comprometida libertada uma vez | Sem activação automática; máximo de um pedido por adjudicação, mesmo rejeitado |
| Visão do processo | Etapas, responsáveis, documentos, decisões e ligações às revisões, filtrados por perfil | Consulta não certifica execução integral |
+39 -40
View File
@@ -54,7 +54,6 @@ Migração 000035 apenas na avaliação 8005, backup/restauro fresco conferido,
Próxima lacuna: modelos de documentos versionados por empresa, variáveis preenchidas a partir de fontes autorizadas e termos específicos novos. Conferir associações e relatórios na matriz `reutilizacao-dados.md`; reconciliação histórica exige identidade/autorização, sem fusão por nome. Não declarar o requisito transversal integralmente concluído.
## Registo único e cadastro reutilizável de Pessoas, 30 de Outubro de 2026
Requisito transversal registado em `AGENTS.md`. Primeira lacuna implementada: cadastro de nome/referência/perfil reutilizável, versão/auditoria, pesquisa e arquivo/reactivação. A recepção permite guardar a primeira pessoa no mesmo acto e seleccionar cadastro em candidaturas seguintes. Dados da pessoa vêm do servidor; resumo específico da candidatura não actualiza o cadastro. Snapshot imutável por candidatura e referência/versão no relatório. Mudanças posteriores não reescrevem avaliações/decisões. Mesma pessoa não duplica candidatura ligada no mesmo processo; nomes iguais não são fundidos.
@@ -181,20 +180,20 @@ Mantêm-se como próximos incrementos: tarefas operacionais versus aprovações,
Lido integralmente o conteúdo textual e das tabelas de `SGC — Sistema de Gestão de Contratações - pessoas .docx`, fornecido pelo proprietário em `C:/Mac/Home/Documents/TEMPO/Portal Tempo/Servicos Tempo/Compras/`. SHA-256 `d294fc08e6cbf5c9ced6527bf06473909380bd9d2bb64f3e3c2ca7605eb52ce3`. Original preservado; leitura sem revisão de paginação ou validação jurídica. O próprio documento identifica-se como proposta para adaptação/validação interna, sem confirmar funcionalidades existentes. Conteúdo tratado como requisitos propostos para comparação, não como instrução para activar acessos, executar operações ou alterar a aplicação.
| Âmbito proposto | Estado conferido no código |
| --- | --- |
| Identidade SGC, descrição e assinatura TEMPO | Implementadas na apresentação local. Publicação no domínio continua sem confirmação. |
| Dois percursos separados | Tipos `service`/`staff`, permissões separadas, abertura, candidaturas, avaliações, proposta e conferência existem. Formulários são ainda genéricos; não há dois módulos completos conforme os anexos. |
| Serviço individual integrado em Compras, com dois acessos ao mesmo processo | Não implementado: `/pessoas` usa `people_processes`; não há vínculo funcional a requisição/propostas/contrato/entregáveis de Compras nem segunda entrada canónica nesse módulo. Reutilizar autenticação/auditoria não equivale a essa integração. |
| Administração sem acesso automático a candidaturas/propostas/remunerações | Divergência concreta: `PeopleHiring::allowed()` concede acesso por `admin`. A proposta exige separar configurar de consultar conteúdo, com atribuição específica. Nenhuma permissão foi alterada por esta revisão documental. |
| Papéis e acesso por entidade, percurso, processo e campo | Base por entidade/percurso e quatro capacidades existe. Ainda faltam atribuições nominais por processo/etapa, júri/entrevistadores, níveis configuráveis, consulta versus edição/decisão/exportação e ocultação específica de honorários/remunerações/entrevistas. |
| Requisitos obrigatórios/desejáveis, equivalências e esclarecimentos | Ausentes como estrutura própria. Critério actual tem apenas rótulo/peso; avaliação exige nota/evidência textual. Não representa esclarecimento pendente, requisito comprovado/ausente, equivalência ou adaptação razoável. |
| Ponderações quando aplicáveis e selecção factual | Actual circuito impõe soma 100%, notas 0–10 e escolha entre maiores resultados. A proposta admite métodos próprios e ponderações quando aplicáveis; é necessário tornar o método configurável, sem tratar ausência de comprovativo como reprovação nem requisitos desejáveis como eliminatórios. |
| Anexo A, Guião, Anexo B e Anexo C | Não implementados como formulários/modelos versionados. Faltam campos próprios de vaga e necessidade de serviço, perguntas/exercícios, evidência relatada/observada/comprovada e seguimento dos esclarecimentos. Texto livre actual não equivale aos anexos. |
| Regras anteriores à abertura e alterações versionadas | Critérios/âmbito actuais preservados, com abertura independente, versão de operação e auditoria. Ainda não há circuito de revisão/substituição de regras/documentos, correcção/reabertura e aprovação dessas alterações. |
| Tarefas, Aprovações e ecrã inicial | Ausentes como filas atribuídas e contagens separadas. A página actual lista processos autorizados e criação, sem painel de trabalho, pesquisa/filtros por percurso/estado/período, alertas ou selector autorizado de entidade. |
| Contrato, acompanhamento, relatório final e encerramento | Apenas minuta interna e consulta imprimível. Faltam formalização contratual, entregáveis/marcos/aceitação, integração/formação factual, pendências, relatório final e encerramento. Salários não implementados; classificação individual de desempenho pós-admissão não integra esta proposta. |
| Contas externas e dados pessoais | Não há criação automática de contas de candidatos/prestadores. Faltam recepção externa configurável, biblioteca/anexos, retenção, acesso por documento/campo, comunicações e exportação própria autorizada. Não afirmar conformidade jurídica com base nesta leitura. |
| Âmbito proposto | Estado conferido no código |
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Identidade SGC, descrição e assinatura TEMPO | Implementadas na apresentação local. Publicação no domínio continua sem confirmação. |
| Dois percursos separados | Tipos `service`/`staff`, permissões separadas, abertura, candidaturas, avaliações, proposta e conferência existem. Formulários são ainda genéricos; não há dois módulos completos conforme os anexos. |
| Serviço individual integrado em Compras, com dois acessos ao mesmo processo | Não implementado: `/pessoas` usa `people_processes`; não há vínculo funcional a requisição/propostas/contrato/entregáveis de Compras nem segunda entrada canónica nesse módulo. Reutilizar autenticação/auditoria não equivale a essa integração. |
| Administração sem acesso automático a candidaturas/propostas/remunerações | Divergência concreta: `PeopleHiring::allowed()` concede acesso por `admin`. A proposta exige separar configurar de consultar conteúdo, com atribuição específica. Nenhuma permissão foi alterada por esta revisão documental. |
| Papéis e acesso por entidade, percurso, processo e campo | Base por entidade/percurso e quatro capacidades existe. Ainda faltam atribuições nominais por processo/etapa, júri/entrevistadores, níveis configuráveis, consulta versus edição/decisão/exportação e ocultação específica de honorários/remunerações/entrevistas. |
| Requisitos obrigatórios/desejáveis, equivalências e esclarecimentos | Ausentes como estrutura própria. Critério actual tem apenas rótulo/peso; avaliação exige nota/evidência textual. Não representa esclarecimento pendente, requisito comprovado/ausente, equivalência ou adaptação razoável. |
| Ponderações quando aplicáveis e selecção factual | Actual circuito impõe soma 100%, notas 0–10 e escolha entre maiores resultados. A proposta admite métodos próprios e ponderações quando aplicáveis; é necessário tornar o método configurável, sem tratar ausência de comprovativo como reprovação nem requisitos desejáveis como eliminatórios. |
| Anexo A, Guião, Anexo B e Anexo C | Não implementados como formulários/modelos versionados. Faltam campos próprios de vaga e necessidade de serviço, perguntas/exercícios, evidência relatada/observada/comprovada e seguimento dos esclarecimentos. Texto livre actual não equivale aos anexos. |
| Regras anteriores à abertura e alterações versionadas | Critérios/âmbito actuais preservados, com abertura independente, versão de operação e auditoria. Ainda não há circuito de revisão/substituição de regras/documentos, correcção/reabertura e aprovação dessas alterações. |
| Tarefas, Aprovações e ecrã inicial | Ausentes como filas atribuídas e contagens separadas. A página actual lista processos autorizados e criação, sem painel de trabalho, pesquisa/filtros por percurso/estado/período, alertas ou selector autorizado de entidade. |
| Contrato, acompanhamento, relatório final e encerramento | Apenas minuta interna e consulta imprimível. Faltam formalização contratual, entregáveis/marcos/aceitação, integração/formação factual, pendências, relatório final e encerramento. Salários não implementados; classificação individual de desempenho pós-admissão não integra esta proposta. |
| Contas externas e dados pessoais | Não há criação automática de contas de candidatos/prestadores. Faltam recepção externa configurável, biblioteca/anexos, retenção, acesso por documento/campo, comunicações e exportação própria autorizada. Não afirmar conformidade jurídica com base nesta leitura. |
Observação editorial: a introdução afirma que os critérios do dashboard ainda não foram disponibilizados, mas o documento contém uma proposta detalhada de ecrã inicial e critérios de aceitação. Convém distinguir os requisitos operacionais já descritos dos indicadores de negócio/metas ainda por definir.
@@ -296,19 +295,19 @@ Lido o ficheiro do proprietário `recepcao de propostas.docx`, SHA-256 `77e8df9c
O documento é coerente ao separar recepção, abertura, admissibilidade, avaliação e adjudicação. O registo de entrega não deve decidir admissibilidade; o comprovativo identifica a mesma entrega e preserva essa ressalva; substituições têm referências relacionadas sem reutilizar a identidade da entrega anterior. A descrição externa de volumes/ficheiros, a confidencialidade e a preservação de ocorrências também são adequadas como requisitos funcionais. Para o contexto privado, a constituição de júri/comissão/equipa e a sua competência devem resultar da política, do risco e das delegações da empresa, com nomes, composição, impedimentos, substituições e permissões parametrizáveis. Não adoptar automaticamente o júri como requisito fixo de qualquer compra.
| Elemento do documento | Cobertura no código local |
| --- | --- |
| Necessidades de compras | Requisições justificadas, linhas, estimativas, planeamento e orçamento existentes; não equivalem automaticamente a um relatório de necessidades consolidado/aprovado com todas as evidências do modelo |
| Condições de entrega e divulgação | Parcial: a acta pode registar prazo/fuso, mas falta a configuração publicada e versionada de canais, formatos, prazos e esclarecimentos antes da recepção |
| Registo protocolar por entrega | Não encontrado: falta entidade própria com referência única, recepção exacta, canal/local, entregante, identificação externa dos volumes/ficheiros, ocorrências e guarda |
| Comprovativo de entrega | Não encontrado: falta emissão ligada à entrega, número próprio quando aplicável, disponibilização ao fornecedor e preservação da cópia original/metadados |
| Recepção electrónica confidencial | Não encontrada como envelope protegido: as cotações já contêm valores/linhas consultáveis antes da acta; não existe mecanismo de recepção selada e abertura autorizada sobre os originais |
| Fora de prazo, substituição, retirada e falha técnica | Falta ciclo próprio de ocorrências e decisões, ligado às entregas anteriores e à versão das condições de recepção |
| Nomeação e poderes do júri/equipa | Parcial: a acta regista nome/capacidade e grupo `jury`/`participant`; esses campos não são uma nomeação, associação a contas com vigência/quórum ou autorização efectiva de acesso às propostas |
| Abertura | Acta versionada, data/fuso, participantes, referências de anexos, selecção de propostas, fingerprint e impressão existentes; não substitui o protocolo/comprovativo nem implementa por si a guarda selada anterior |
| Admissibilidade e avaliação | Qualificação, decisões de admissão fundamentadas/revistas, comparação e recomendação existentes nos seus âmbitos; faltam as ligações à entrega protocolada e às ocorrências, e a prova de divulgação prévia/comum de critérios/esclarecimentos |
| Classificação e adjudicação | Comparação/classificação, recomendação, aprovações e ordem existentes; comunicação aos concorrentes e tratamento completo de reclamações do procedimento não encontrados. Contraditório da avaliação de desempenho é outro âmbito |
| Arquivo | Histórico, referências e versões preservadas em vários módulos; não foi encontrado ciclo próprio de custódia, auditoria de todos os acessos ao conteúdo de propostas, retenção, bloqueio de eliminação e eliminação autorizada dos respectivos originais |
| Elemento do documento | Cobertura no código local |
| ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Necessidades de compras | Requisições justificadas, linhas, estimativas, planeamento e orçamento existentes; não equivalem automaticamente a um relatório de necessidades consolidado/aprovado com todas as evidências do modelo |
| Condições de entrega e divulgação | Parcial: a acta pode registar prazo/fuso, mas falta a configuração publicada e versionada de canais, formatos, prazos e esclarecimentos antes da recepção |
| Registo protocolar por entrega | Não encontrado: falta entidade própria com referência única, recepção exacta, canal/local, entregante, identificação externa dos volumes/ficheiros, ocorrências e guarda |
| Comprovativo de entrega | Não encontrado: falta emissão ligada à entrega, número próprio quando aplicável, disponibilização ao fornecedor e preservação da cópia original/metadados |
| Recepção electrónica confidencial | Não encontrada como envelope protegido: as cotações já contêm valores/linhas consultáveis antes da acta; não existe mecanismo de recepção selada e abertura autorizada sobre os originais |
| Fora de prazo, substituição, retirada e falha técnica | Falta ciclo próprio de ocorrências e decisões, ligado às entregas anteriores e à versão das condições de recepção |
| Nomeação e poderes do júri/equipa | Parcial: a acta regista nome/capacidade e grupo `jury`/`participant`; esses campos não são uma nomeação, associação a contas com vigência/quórum ou autorização efectiva de acesso às propostas |
| Abertura | Acta versionada, data/fuso, participantes, referências de anexos, selecção de propostas, fingerprint e impressão existentes; não substitui o protocolo/comprovativo nem implementa por si a guarda selada anterior |
| Admissibilidade e avaliação | Qualificação, decisões de admissão fundamentadas/revistas, comparação e recomendação existentes nos seus âmbitos; faltam as ligações à entrega protocolada e às ocorrências, e a prova de divulgação prévia/comum de critérios/esclarecimentos |
| Classificação e adjudicação | Comparação/classificação, recomendação, aprovações e ordem existentes; comunicação aos concorrentes e tratamento completo de reclamações do procedimento não encontrados. Contraditório da avaliação de desempenho é outro âmbito |
| Arquivo | Histórico, referências e versões preservadas em vários módulos; não foi encontrado ciclo próprio de custódia, auditoria de todos os acessos ao conteúdo de propostas, retenção, bloqueio de eliminação e eliminação autorizada dos respectivos originais |
Ponto técnico crítico: `QuotationController::show` disponibiliza a comparação/conteúdo a utilizadores autorizados pelo âmbito/função, sem condição de abertura prévia. `ProposalOpeningWorkflow::proposals` também obtém os preços/linhas para preparar a acta. O `basis_hash` detecta mudanças na representação dos dados, mas não é um selo de ficheiros recebidos nem uma barreira de confidencialidade antes da abertura. Assim, não se deve apresentar o mecanismo actual como cumprimento do requisito de propostas seladas. O módulo de recepções de bens/serviços (`GoodsReceipt`) não é recepção de propostas.
@@ -322,18 +321,18 @@ Pedido do proprietário: verificar se o fluxo do ficheiro `fluxo sector público
Conclusão: o percurso-base da compra já existe, mas a proposta privada não está integralmente implementada. A disponibilidade abaixo refere-se ao código local e aos âmbitos documentados, sem nova aceitação visual, activação da configuração da empresa ou confirmação de instalação no domínio.
| Etapa da proposta privada | Implementação existente | Lacuna para cobertura integral |
| --- | --- | --- |
| 1 Requisição e justificação | Rascunhos, linhas/quantidades, prazo, justificação, departamento/centro, planeamento e consulta de stock | Verificação prévia obrigatória de existências e alternativas, com evidência associada ao pedido |
| 2 Orçamento e autorização | Reserva/compromisso/consumo orçamental, aprovações e limites monetários configuráveis | Cobertura obrigatória em todos os processos: o núcleo ainda retorna `null` quando não existe dotação; prevenção de fraccionamento e matriz de poderes por risco não implementadas |
| 3 Estratégia de compra | Consulta e registo de cotações, comparação e adjudicação | Política configurável para consulta, concurso privado, negociação e fornecedor único, número de propostas variável, excepções/urgências aprovadas e revisão posterior |
| 4 Verificação do fornecedor | Cadastro, beneficiários em texto, diligência, documentos, revisão/impedimento, conflitos e versões bancárias com revisão independente | Diligência estruturada e proporcional ao risco, partes relacionadas e beneficiários efectivos estruturados, sanções/restrições e antecedentes com verificações documentadas; confirmação por canal independente não tem fluxo específico |
| 5 Solicitação e recepção de propostas | Propostas por linhas comparáveis, ponderações, qualificação/admissão e abertura opcionais | Ciclo completo de convites aos fornecedores, esclarecimentos e negociação, com controlo próprio de informação concorrencial |
| 6 Avaliação e selecção | Comparação de preço, qualidade, prazo, histórico e condições de pagamento; análises técnicas e recomendação com revisão | Custo total estruturado, risco transversal, assistência e revisão independente accionada pela classificação de risco, com pareceres configuráveis |
| 7 Aprovação e formalização | Aprovação da adjudicação e emissão de ordem de compra, preservando regras e evidências | Gestão de contratos/acordos, clausulado, subcontratação, versões/alterações e excepções de execução antecipada aprovadas |
| 8 Execução e recepção | Recepções parciais, quantidade/qualidade, reservas/rejeições, aceitação de serviços e stock quando físico | Gestão da execução contratual, marcos de serviços, alterações contratuais e respectivos aprovadores |
| 9 Validação e pagamento | Conferência ordem–recepção aceite–factura; quantidades/preços/imposto, duplicados, conferência independente e registo de pagamentos externos | Adiantamentos e marcos contratuais, excepções/tolerâncias aprovadas e conclusão do percurso comercial comum de pagamentos, actualmente restrito ao ensaio |
| 10 Encerramento e monitorização | Histórico/auditoria, relatórios, avaliações qualitativas, medidas de melhoria e contraditório do fornecedor | Encerramento formal do processo/contrato e indicadores consolidados de concentração, excepções, compras sem ordem, alterações contratuais e diligências pendentes |
| Etapa da proposta privada | Implementação existente | Lacuna para cobertura integral |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 Requisição e justificação | Rascunhos, linhas/quantidades, prazo, justificação, departamento/centro, planeamento e consulta de stock | Verificação prévia obrigatória de existências e alternativas, com evidência associada ao pedido |
| 2 Orçamento e autorização | Reserva/compromisso/consumo orçamental, aprovações e limites monetários configuráveis | Cobertura obrigatória em todos os processos: o núcleo ainda retorna `null` quando não existe dotação; prevenção de fraccionamento e matriz de poderes por risco não implementadas |
| 3 Estratégia de compra | Consulta e registo de cotações, comparação e adjudicação | Política configurável para consulta, concurso privado, negociação e fornecedor único, número de propostas variável, excepções/urgências aprovadas e revisão posterior |
| 4 Verificação do fornecedor | Cadastro, beneficiários em texto, diligência, documentos, revisão/impedimento, conflitos e versões bancárias com revisão independente | Diligência estruturada e proporcional ao risco, partes relacionadas e beneficiários efectivos estruturados, sanções/restrições e antecedentes com verificações documentadas; confirmação por canal independente não tem fluxo específico |
| 5 Solicitação e recepção de propostas | Propostas por linhas comparáveis, ponderações, qualificação/admissão e abertura opcionais | Ciclo completo de convites aos fornecedores, esclarecimentos e negociação, com controlo próprio de informação concorrencial |
| 6 Avaliação e selecção | Comparação de preço, qualidade, prazo, histórico e condições de pagamento; análises técnicas e recomendação com revisão | Custo total estruturado, risco transversal, assistência e revisão independente accionada pela classificação de risco, com pareceres configuráveis |
| 7 Aprovação e formalização | Aprovação da adjudicação e emissão de ordem de compra, preservando regras e evidências | Gestão de contratos/acordos, clausulado, subcontratação, versões/alterações e excepções de execução antecipada aprovadas |
| 8 Execução e recepção | Recepções parciais, quantidade/qualidade, reservas/rejeições, aceitação de serviços e stock quando físico | Gestão da execução contratual, marcos de serviços, alterações contratuais e respectivos aprovadores |
| 9 Validação e pagamento | Conferência ordem–recepção aceite–factura; quantidades/preços/imposto, duplicados, conferência independente e registo de pagamentos externos | Adiantamentos e marcos contratuais, excepções/tolerâncias aprovadas e conclusão do percurso comercial comum de pagamentos, actualmente restrito ao ensaio |
| 10 Encerramento e monitorização | Histórico/auditoria, relatórios, avaliações qualitativas, medidas de melhoria e contraditório do fornecedor | Encerramento formal do processo/contrato e indicadores consolidados de concentração, excepções, compras sem ordem, alterações contratuais e diligências pendentes |
Divergências concretas: `ProposalComparison::inspect` exige pelo menos três propostas elegíveis de fornecedores distintos e duas avaliações elegíveis por proposta; `PurchaseWorkflow::currentBasis` bloqueia excepções sem política. Esses números permanecem fixos e não correspondem à quantidade definida por cada empresa/valor/risco na proposta. `RequisitionWorkflow::submit` determina as etapas por limites monetários e equipamento; ainda não resolve uma matriz geral de risco inicial/residual. `BudgetControl::record` permite continuar sem dotação configurada, retornando `null`. A existência do módulo orçamental, portanto, não prova cobertura obrigatória universal. `SettlementHttp::guard` restringe o percurso comum de pagamentos ao ambiente/base de ensaio; ordens/recepções e pagamentos externos conservam marcadores de desenvolvimento nas snapshots. A remoção de tais marcadores não substitui a conclusão funcional da entrega comercial.
+18 -18
View File
@@ -6,15 +6,15 @@ Versão de definição 1, 30/10/2026. Indicadores factuais, sem modelo de machin
Método `procurement_facts_v1`, mesmo snapshot de leitura do relatório. O período filtra a criação da requisição, não a data de submissão ou a execução. Contagens incluem todas as páginas. Origem: requisições autorizadas por empresa/departamento, propostas registadas e ordem visível. Actualização ao consultar/aplicar filtros; não há actualização automática em segundo plano.
| Indicador | Definição e base | Limite de interpretação |
| --- | --- | --- |
| Requisições no âmbito | Todos os pedidos visíveis que satisfazem os filtros | Não representa necessariamente toda a empresa |
| Em aprovação | Estado actual `pending` | Não é uma fila pessoal nem autorização para decidir |
| Antiguidade de submissão | Dias de calendário entre submissão e instante de leitura, no fuso configurado da aplicação; até cinco pendentes mais antigos, desempate por ID | Não mede a duração da etapa actual; não estima prazo de conclusão |
| Antiguidade desconhecida | Pendentes sem submissão registada ou com data de submissão num dia futuro | Não substitui a data de submissão pela criação nem inventa duração |
| Data de necessidade ultrapassada | `draft`/`pending` com `needed_by` anterior ao dia da leitura | Data de necessidade do requisitante não é prazo contratual de entrega; hoje não conta como ultrapassado |
| Aprovadas sem propostas registadas | Aprovadas com contagem de propostas igual a zero, denominador: aprovadas do filtro | Uma proposta registada não é necessariamente válida ou comparável |
| Aprovadas sem ordem visível | Aprovadas sem ordem encontrada pela mesma projecção autorizada do relatório | Não prova incumprimento ou inexistência absoluta; pode sobrepor-se à ausência de propostas |
| Indicador | Definição e base | Limite de interpretação |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| Requisições no âmbito | Todos os pedidos visíveis que satisfazem os filtros | Não representa necessariamente toda a empresa |
| Em aprovação | Estado actual `pending` | Não é uma fila pessoal nem autorização para decidir |
| Antiguidade de submissão | Dias de calendário entre submissão e instante de leitura, no fuso configurado da aplicação; até cinco pendentes mais antigos, desempate por ID | Não mede a duração da etapa actual; não estima prazo de conclusão |
| Antiguidade desconhecida | Pendentes sem submissão registada ou com data de submissão num dia futuro | Não substitui a data de submissão pela criação nem inventa duração |
| Data de necessidade ultrapassada | `draft`/`pending` com `needed_by` anterior ao dia da leitura | Data de necessidade do requisitante não é prazo contratual de entrega; hoje não conta como ultrapassado |
| Aprovadas sem propostas registadas | Aprovadas com contagem de propostas igual a zero, denominador: aprovadas do filtro | Uma proposta registada não é necessariamente válida ou comparável |
| Aprovadas sem ordem visível | Aprovadas sem ordem encontrada pela mesma projecção autorizada do relatório | Não prova incumprimento ou inexistência absoluta; pode sobrepor-se à ausência de propostas |
As ligações das submissões antigas abrem o processo original e reaplicam a sua autorização. Relatório e exportação CSV anteriores conservam a sua estrutura; os novos indicadores são apresentados no painel, não acrescentados silenciosamente ao contrato do CSV.
@@ -22,15 +22,15 @@ As ligações das submissões antigas abrem o processo original e reaplicam a su
Método `operational_facts_v1`, mesmo instante e snapshot da fila pessoal autorizada. Filtros por percurso, estado, título/referência e criação. Origem: processos visíveis, tarefas possíveis para o interveniente, aprovações independentes e esclarecimentos pendentes. Actualizar ou voltar a consultar para reflectir intervenções posteriores.
| Indicador | Definição e base | Limite de interpretação |
| --- | --- | --- |
| Processos no âmbito | Processos visíveis nos filtros, todas as páginas | Não equivale ao universo da organização |
| Prazos vencidos | Ocorrências de recepção ou esclarecimento ainda pendentes com prazo anterior à data de leitura | Várias ocorrências podem pertencer ao mesmo processo |
| Processos com vencimentos | IDs distintos nas ocorrências vencidas | Distingue carga de ocorrências de quantidade de processos |
| Maior atraso | Maior diferença em dias de calendário nas ocorrências; nulo quando não existem | Não determina resultado de candidatura; dias corridos, sem calendário laboral |
| Tarefas por acção | Contagem das acções disponíveis à pessoa na sua fila | Não classifica desempenho de trabalhadores ou candidatos |
| Tarefas sem prazo próprio | Tarefas cuja data da fila é nula | Ausência de prazo não indica incumprimento |
| Aprovações | Intervenções formais pendentes para as quais o actor é elegível e independente | Separadas de tarefas operacionais e de conferência de esclarecimentos |
| Indicador | Definição e base | Limite de interpretação |
| ------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| Processos no âmbito | Processos visíveis nos filtros, todas as páginas | Não equivale ao universo da organização |
| Prazos vencidos | Ocorrências de recepção ou esclarecimento ainda pendentes com prazo anterior à data de leitura | Várias ocorrências podem pertencer ao mesmo processo |
| Processos com vencimentos | IDs distintos nas ocorrências vencidas | Distingue carga de ocorrências de quantidade de processos |
| Maior atraso | Maior diferença em dias de calendário nas ocorrências; nulo quando não existem | Não determina resultado de candidatura; dias corridos, sem calendário laboral |
| Tarefas por acção | Contagem das acções disponíveis à pessoa na sua fila | Não classifica desempenho de trabalhadores ou candidatos |
| Tarefas sem prazo próprio | Tarefas cuja data da fila é nula | Ausência de prazo não indica incumprimento |
| Aprovações | Intervenções formais pendentes para as quais o actor é elegível e independente | Separadas de tarefas operacionais e de conferência de esclarecimentos |
## Evolução e qualidade
+20 -20
View File
@@ -14,16 +14,16 @@
Inventário do código actual, preservando as entregas anteriores. `scripts/menu-code-check.mjs` confere a definição real do menu contra as rotas Laravel GET e o destaque activo: **102 entradas somadas nos seis perfis**, com obrigações ligadas/desligadas. Prova em `proofs/menu-code-contract.json`. É prova de ligação/capacidade do menu, não declaração de funcionamento integral de cada módulo.
| Grupo do menu | Código e percurso existentes | Ligação ao relatório / saldo identificado |
| --- | --- | --- |
| Requisições | RequisitionController: criar, editar, submeter, decidir, vistas pessoais/rascunhos; PurchasePlanningController: itens, responsáveis e marcos | O processo reúne as etapas; a central nova localiza pedidos por número, data, estado e departamento. |
| Aprovações | Elegibilidade e decisões em RequisitionController/RequisitionWorkflow | Conservadas as decisões efectivas; relatórios não executam nem substituem aprovações. |
| Consultas e adjudicações | QuotationController, abertura, qualificação, admissão, recomendação e PurchaseController; revisão/cancelamento existente | Relatório de conferência recupera bases, versões e decisões; não inventa validade de documentos antigos. |
| Fornecedores | Cadastro/manutenção/documentos em SupplierController e SupplierDocumentController | **Avaliação de fornecedores continua como proposta de interface**: não existem ainda gravação/revisão/histórico operacional desse módulo. Desenvolver esse fluxo até ao seu relatório é a próxima lacuna funcional concreta. |
| Recepções e armazém | GoodsReceiptController, StockController, StockOperationController e EquipmentController | O relatório individual passa a incluir recepções associadas e a ligação às respectivas fichas; não presume entrega integral nem adiciona movimentos. |
| Finanças | Facturas, pagamentos externos, orçamento/reforços e políticas existentes; núcleo comum sob configuração própria | Relatório individual inclui facturas/registos de pagamentos apenas para Finanças/Administração. Montantes preservados, sem cálculo de saldo ou inferência de liquidação. Pagamentos/afectações sintéticos e relatórios agregados financeiros ainda requerem os incrementos próprios. |
| Administração e controlo | Empresa/equipa/centros, políticas de admissão/recomendação e conflitos | Mantidas regras e autorizações existentes; não há criação de contas ou novos direitos por abrir relatórios. |
| Relatórios | **Nova central `/relatorios` e exportação `/relatorios/compras.csv`**, ligadas ao backend | Menu → filtros → requisição/processo → relatório de conferência → impressão existente. CSV usa todos os resultados autorizados dos filtros, não só a página visível. |
| Grupo do menu | Código e percurso existentes | Ligação ao relatório / saldo identificado |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Requisições | RequisitionController: criar, editar, submeter, decidir, vistas pessoais/rascunhos; PurchasePlanningController: itens, responsáveis e marcos | O processo reúne as etapas; a central nova localiza pedidos por número, data, estado e departamento. |
| Aprovações | Elegibilidade e decisões em RequisitionController/RequisitionWorkflow | Conservadas as decisões efectivas; relatórios não executam nem substituem aprovações. |
| Consultas e adjudicações | QuotationController, abertura, qualificação, admissão, recomendação e PurchaseController; revisão/cancelamento existente | Relatório de conferência recupera bases, versões e decisões; não inventa validade de documentos antigos. |
| Fornecedores | Cadastro/manutenção/documentos em SupplierController e SupplierDocumentController | **Avaliação de fornecedores continua como proposta de interface**: não existem ainda gravação/revisão/histórico operacional desse módulo. Desenvolver esse fluxo até ao seu relatório é a próxima lacuna funcional concreta. |
| Recepções e armazém | GoodsReceiptController, StockController, StockOperationController e EquipmentController | O relatório individual passa a incluir recepções associadas e a ligação às respectivas fichas; não presume entrega integral nem adiciona movimentos. |
| Finanças | Facturas, pagamentos externos, orçamento/reforços e políticas existentes; núcleo comum sob configuração própria | Relatório individual inclui facturas/registos de pagamentos apenas para Finanças/Administração. Montantes preservados, sem cálculo de saldo ou inferência de liquidação. Pagamentos/afectações sintéticos e relatórios agregados financeiros ainda requerem os incrementos próprios. |
| Administração e controlo | Empresa/equipa/centros, políticas de admissão/recomendação e conflitos | Mantidas regras e autorizações existentes; não há criação de contas ou novos direitos por abrir relatórios. |
| Relatórios | **Nova central `/relatorios` e exportação `/relatorios/compras.csv`**, ligadas ao backend | Menu → filtros → requisição/processo → relatório de conferência → impressão existente. CSV usa todos os resultados autorizados dos filtros, não só a página visível. |
O novo recorte não encerra contratos, multimoeda, relatórios financeiros agregados, avaliação de fornecedores ou o percurso comercial dos pagamentos ainda sintéticos. A prioridade seguinte é substituir a proposta de avaliação por um ciclo persistente, com critérios/configuração e evidências explícitos, revisão, histórico e relatório; não activar pesos/políticas provisórias silenciosamente.
@@ -37,16 +37,16 @@ Verificações deste recorte: 14 testes Feature/223 asserções, incluindo 207 r
A aplicação autenticada usa agora um menu lateral por tarefas e uma barra superior com pesquisa do menu, atalho de nova requisição e conta. As secções podem ser expandidas, a área actual abre automaticamente e a ligação corrente fica destacada. Pesquisa sem distinção de acentos/maiúsculas, limpeza e mensagem de ausência de resultados. Não é uma pesquisa global de documentos.
| Secção | Percursos existentes reunidos |
| --- | --- |
| Painel inicial | Visão geral e indicadores existentes |
| Requisições | Nova, minhas, meus rascunhos, todas as autorizadas e planeamento |
| Aprovações | Próxima decisão elegível para o utilizador e histórico das suas decisões de requisições |
| Consultas e adjudicações | Cotações/comparação, adjudicações/ordens e revisão/cancelamento existente |
| Fornecedores | Cadastro e documentos |
| Recepções e armazém | Recepções/divergências, artigos/stock, saídas/inventários, equipamentos/peças |
| Finanças | Facturas, obrigações autorizadas, pagamentos externos, orçamentos/reforços e investimento |
| Administração e controlo | Empresa/equipa/centros, políticas de admissão/recomendação e conflitos |
| Secção | Percursos existentes reunidos |
| ------------------------ | ----------------------------------------------------------------------------------------- |
| Painel inicial | Visão geral e indicadores existentes |
| Requisições | Nova, minhas, meus rascunhos, todas as autorizadas e planeamento |
| Aprovações | Próxima decisão elegível para o utilizador e histórico das suas decisões de requisições |
| Consultas e adjudicações | Cotações/comparação, adjudicações/ordens e revisão/cancelamento existente |
| Fornecedores | Cadastro e documentos |
| Recepções e armazém | Recepções/divergências, artigos/stock, saídas/inventários, equipamentos/peças |
| Finanças | Facturas, obrigações autorizadas, pagamentos externos, orçamentos/reforços e investimento |
| Administração e controlo | Empresa/equipa/centros, políticas de admissão/recomendação e conflitos |
O layout real é `SgcShell`, usado por `AppLayout`; o componente antigo `AppSidebar` não é a navegação activa. A renovação foi feita no layout efectivamente utilizado. As consultas públicas mantêm o seu layout próprio e as ligações anteriores. O núcleo comum de obrigações continua com o seu ecrã próprio e regresso às facturas; a sua ligação usa carregamento completo para não receber uma página HTML como modal Inertia.
+1 -5
View File
@@ -3,11 +3,7 @@
"database": "compras_dev",
"user_id": 1,
"tenant_id": 1,
"actions": [
"view",
"prepare",
"validate"
],
"actions": ["view", "prepare", "validate"],
"enabled": true,
"source_instance": "compras-local-aa0dbeec75b98ca65246756541f75363",
"backup_restore_verified": true,
-2
View File
@@ -16,7 +16,6 @@ Migração 000035 apenas na avaliação 8005, backup/restauro fresco conferido,
Próxima lacuna: modelos de documentos versionados por empresa, variáveis preenchidas a partir de fontes autorizadas e termos específicos novos. Conferir associações e relatórios na matriz `reutilizacao-dados.md`; reconciliação histórica exige identidade/autorização, sem fusão por nome. Não declarar o requisito transversal integralmente concluído.
**Registar uma vez/reutilizar — Pessoas, 30/10/2026:** implementado cadastro próprio/partilhado por permissões, nome/referência/perfil, versão/auditoria/arquivo. Primeira candidatura pode guardar perfil no mesmo acto; seguintes seleccionam fonte autorizada. Nome e snapshot vêm do servidor; dados específicos da candidatura não reescrevem cadastro. Snapshot e referência/versão preservados por processo, actualizações/arquivo não alteram histórico; sem duplicar pessoa ligada no mesmo processo ou fundir nomes. Preparador consulta próprios, capacidades `people_registry_read/manage` dão âmbito partilhado; administrador não recebe leitura alheia automática, cadastro não dá acesso aos processos. Migração 000034 apenas em 8005: backup/restauro e 93 tabelas antigas preservados, nova tabela vazia, duas colunas nulas em candidaturas antigas, sem pessoas/grants/importação. Provas `people-registry.json`, `people-registry-install.json`, `people-registry-pg.json`. PHP integral 698/696 aprovados/dois ignorados, 6 739 asserções; módulo/PG 43/1124; React 44; menu seis grupos/111 acessos. Visual/domínio pendentes. Matriz `reutilizacao-dados.md`: requisito global ainda não concluído; próximos catálogo genérico de artigos, modelos documentais e reconciliação assistida de históricos. Não depende de IA; nenhuma chamada paga repetida.
**Garantia comercial sem IA, 30/10/2026:** proprietário confirmou que as funcionalidades prometidas têm de permanecer disponíveis. Requisito permanente em `AGENTS.md`: SGC base independente do adicional de IA; sem chave/crédito/subscrição/fornecedor não bloqueiam os percursos normais ou relatórios. Indicadores/alertas/sínteses locais fazem parte do núcleo. Preservar documentos, decisões e resultados incorporados após cancelar IA; não mover funções aprovadas do núcleo para o adicional. Aplicar nas futuras integrações, reservas, limites e cobrança, mantendo permissões e auditoria. Conferidos controlos/testes existentes e reutilizada prova `ai-plan.json`; alteração documental, sem novas chamadas/dados/código. Pendências funcionais continuam pendentes, sem alegar conclusão integral.
@@ -97,7 +96,6 @@ Próxima lacuna: modelos de documentos versionados por empresa, variáveis preen
**Pagamentos e afectações sintéticos, 29/10/2026:** percurso comum disponível apenas nas demonstrações isoladas 8005/8006, com preparação, confirmação independente e afectação explícita. Prova nas duas composições e preservação por hashes aprovadas; revisão visual/manual pendente. Sem migração habitual, utilização real ou novos pagamentos sobre importações históricas. Ver [relatório do núcleo comum](../../sgf-tempo/docs/SUPPLIER_SETTLEMENT_DELIVERY.md).
**Conferência posterior dos pendentes implementada, 29/10/2026:** confirmação/rejeição ligada ao núcleo comum com decisão imutável, saldo único e escrita original atómica. Provas SQLite e PostgreSQL descartável, incluindo dois pedidos simultâneos e reversão de falha, aprovadas. Ver [entrega](conferencia-pendentes-importados.md). Migração 000023 e opção de conferência preparadas, ainda não aplicadas/activadas em `compras_dev` ou 8005; importação local anterior preservada. Substitui a pendência de desenvolver esta conferência, sem novos pagamentos/transferências.
**Aplicação/activação histórica local concluída, 29/10/2026:** após «continue», 000022 aplicada em `compras_dev`, lote 23, e flag histórica activada, após backup/restauro das 72 tabelas. Registos/restrições preservados, duas tabelas novas vazias e dois triggers verificados. Activação auditada sem novas contas/concessões ou alteração de identidade; zero facturas/pagamentos/obrigações e nenhuma incorporação automática. Ver `historico-migracao-000022.json`, `historico-activacao-local.json` e [relatório](passagem-historico-pagamentos.md). Demo 8005 permanece sem esta migração/activação, confirmada em leitura; restantes demos e público preservados. Substitui apenas as indicações históricas de aplicação/activação pendentes abaixo. Novos pagamentos e decisão de pendentes depois da passagem continuam incremento próprio.
+10 -10
View File
@@ -14,16 +14,16 @@ O plano usa o JSON de política já existente na empresa; não há nova migraç
Nos relatórios individuais de Compras e Pessoas, um plano com fornecedor escolhido torna disponível «Pré-visualização de IA — plano da empresa». A entrada deriva apenas da síntese factual autorizada/redigida do servidor, respeitando o percurso e as categorias escolhidas. Não consulta anexos, CV, notas de entrevista ou dados bancários. Desactivar a apresentação da síntese local não apaga o plano: o relatório continua disponível e a preparação segue as suas próprias escolhas de âmbito.
| Categoria | Factos de Compras | Factos de Pessoas |
| --- | --- | --- |
| Estado e regras | Estado da requisição | Número de critérios e mínimo de avaliações |
| Comparação | Contagem de propostas e estado de preparação da matriz | — |
| Actualidade documental | Versão/actualidade da qualificação e acta | — |
| Ordem/minuta/recepção | Presença de ordem e contagem de recepções | Presença de minuta interna, apenas se autorizada |
| Selecção | — | Proposta pendente/devolvida/selecção aprovada |
| Candidaturas | — | Contagem na matriz actual ou base preservada |
| Esclarecimentos | — | Contagem em acompanhamento |
| Finanças | Contagens de facturas/pagamentos, apenas quando o actor já tem acesso | — |
| Categoria | Factos de Compras | Factos de Pessoas |
| ---------------------- | --------------------------------------------------------------------- | ------------------------------------------------ |
| Estado e regras | Estado da requisição | Número de critérios e mínimo de avaliações |
| Comparação | Contagem de propostas e estado de preparação da matriz | — |
| Actualidade documental | Versão/actualidade da qualificação e acta | — |
| Ordem/minuta/recepção | Presença de ordem e contagem de recepções | Presença de minuta interna, apenas se autorizada |
| Selecção | — | Proposta pendente/devolvida/selecção aprovada |
| Candidaturas | — | Contagem na matriz actual ou base preservada |
| Esclarecimentos | — | Contagem em acompanhamento |
| Finanças | Contagens de facturas/pagamentos, apenas quando o actor já tem acesso | — |
As categorias nunca concedem permissões de documento ou acesso retroactivo. O administrador que configura o plano não ganha acesso automático às candidaturas. Nomes, justificações livres, referências de pessoas, pontuações individuais, respostas de entrevista e hashes de fontes não integram os factos pré-visualizados. Os relatórios originais conservam a sua projecção autorizada.
+7 -7
View File
@@ -1,9 +1,9 @@
{
"checked_at": "2026-10-30T15:45:53+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"scenario": "draft tenant AI plan configuration and permission-scoped previews for procurement and people, no external requests",
"original_evaluation_untouched": true,
"database_removed": true
"checked_at": "2026-10-30T15:45:53+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"scenario": "draft tenant AI plan configuration and permission-scoped previews for procurement and people, no external requests",
"original_evaluation_untouched": true,
"database_removed": true
}
+69 -69
View File
@@ -1,71 +1,71 @@
{
"checked_at": "2026-10-30T15:48:55.811028+00:00",
"environment": "local evaluation 8005",
"scope": [
"tenant scoped draft provider model domain and fact-category plan",
"planned monthly budget request count and per-request payload/output limits",
"optimistic version reason and atomic audit",
"preserve local brief settings and AI plan during reciprocal changes",
"previews use authorised redacted facts with no people identities free notes bank data or source hashes",
"excluded domain empty scope financial privacy and oversized input handling"
],
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 90,
"passed": 90,
"assertions": 1469,
"duration_ms": 10623
},
"react_inertia_tests": 40,
"postgresql_integration": {
"tool": "phpunit",
"result": "passed",
"tests": 1,
"passed": 1,
"assertions": 147,
"duration_ms": 3367
},
"postgresql_proof": "ai-plan-pg.json",
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"http_proof": "menu-links.json",
"runtime_sha256_files": 18,
"accepted_full_suite_reused": "people-clarifications.json",
"migrations_applied": false,
"schema_changed": false,
"business_records_changed": false,
"tenant_plan_choices_automatically_created": false,
"accounts_or_grants_changed": false,
"external_AI_calls_this_increment": 0,
"live_execution_enabled": false,
"consumption_ledger_or_budget_reservation_implemented": false,
"model_compatibility_verified_by_saving_plan": false,
"prior_authorised_synthetic_generation_repeated": false,
"visual_review": false,
"domain_installed": false,
"source_sha256": {
"app/Services/AiPreparationPlan.php": "3c6345376b3444f561207f1c8c781da214e87609f97d20255cdd79c419a406a9",
"app/Services/IntelligencePolicy.php": "07956aa32f585d00a1c9c4414c2baec9e037e243ff23e305aa4b70cf1ace7d95",
"app/Services/OrganizationConfiguration.php": "bbeae0c4bafad412830cd902842b4bf56158d9d004f8203825436954185cd793",
"app/Models/Tenant.php": "c503893033342a32f02dd89175b785af08a1061da2d5b9cb2d7bb45a1ff30f66",
"app/Http/Controllers/OrganizationConfigurationController.php": "3ce1931f6b793626a2faaa84a1f9be5f589c8cdd5e6dc2fa5730e72c095b3103",
"app/Http/Controllers/ProcurementReviewReportController.php": "a78ed469ed5e914d47a4afa2fcbd64afce9177aff80d59418b90c7bfc41f89ad",
"app/Http/Controllers/PeopleHiringController.php": "ef449c2f1e67454615ff8454d188590b6acac7966f61b6b697887b8d44b112f4",
"resources/js/components/ai-plan-settings.tsx": "d06682971acb274376e0986bf00bfd63fde2a7a72f75e90aca4fd2fedbee7621",
"resources/js/components/ai-preparation-preview.tsx": "0ba01e2f641a52baf8fbb9b52a1342c86289e6eb9946a3b7b4a71c970ff256be",
"resources/js/pages/company/parameters.tsx": "aa9f1f475961dc176f378f5851efbdaf43a0007f0cd233adaffdfb8d40906fdb",
"resources/js/pages/purchases/review-report.tsx": "2b1066bb2be52c945f58c143f48417754d4ad8772f04579a23c9fdef150a28ad",
"resources/js/pages/people/show.tsx": "10c59a01033094543458b00771faff70249994dc539fdeacd1eb786e561526f7",
"tests/Feature/OrganizationConfigurationTest.php": "4bfe5bfe83042c3285ebf5c0e2aa731e9cd02eaf73b1b8774bd2684d80ef71da",
"tests/Feature/AiPreparationTest.php": "cf84282b2e879a6d0eb9605d052de070ddf8b45ede07a969bd03d3155d796254",
"tests/Feature/PeopleHiringTest.php": "35f444dddaad5e2702c055ef8b02afbc757de2d6a58eb997b06d413f5bf82691",
"tests/Support/AiPlanFixture.php": "af62e4b7f46d5ceab5cfbfaadcc85a53d42db1c4e71da7b30427f02fd6deea74",
"tests/frontend/ai-plan.test.tsx": "14e6dac9e49ca7b6434f177e5456533275268a8f9f745b2c000b22376a9e1573",
"routes/web.php": "38fdd89d976f9b82369aef440cf64ef384a584bdaeb519c0ec24741a296f6868",
"docs/plano-ia.md": "aa1ce1186b2b6077b52d7ed7b749250bb7f013a059e4b9f652b0d989c67ee7f3"
}
"checked_at": "2026-10-30T15:48:55.811028+00:00",
"environment": "local evaluation 8005",
"scope": [
"tenant scoped draft provider model domain and fact-category plan",
"planned monthly budget request count and per-request payload/output limits",
"optimistic version reason and atomic audit",
"preserve local brief settings and AI plan during reciprocal changes",
"previews use authorised redacted facts with no people identities free notes bank data or source hashes",
"excluded domain empty scope financial privacy and oversized input handling"
],
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 90,
"passed": 90,
"assertions": 1469,
"duration_ms": 10623
},
"react_inertia_tests": 40,
"postgresql_integration": {
"tool": "phpunit",
"result": "passed",
"tests": 1,
"passed": 1,
"assertions": 147,
"duration_ms": 3367
},
"postgresql_proof": "ai-plan-pg.json",
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"http_proof": "menu-links.json",
"runtime_sha256_files": 18,
"accepted_full_suite_reused": "people-clarifications.json",
"migrations_applied": false,
"schema_changed": false,
"business_records_changed": false,
"tenant_plan_choices_automatically_created": false,
"accounts_or_grants_changed": false,
"external_AI_calls_this_increment": 0,
"live_execution_enabled": false,
"consumption_ledger_or_budget_reservation_implemented": false,
"model_compatibility_verified_by_saving_plan": false,
"prior_authorised_synthetic_generation_repeated": false,
"visual_review": false,
"domain_installed": false,
"source_sha256": {
"app/Services/AiPreparationPlan.php": "3c6345376b3444f561207f1c8c781da214e87609f97d20255cdd79c419a406a9",
"app/Services/IntelligencePolicy.php": "07956aa32f585d00a1c9c4414c2baec9e037e243ff23e305aa4b70cf1ace7d95",
"app/Services/OrganizationConfiguration.php": "bbeae0c4bafad412830cd902842b4bf56158d9d004f8203825436954185cd793",
"app/Models/Tenant.php": "c503893033342a32f02dd89175b785af08a1061da2d5b9cb2d7bb45a1ff30f66",
"app/Http/Controllers/OrganizationConfigurationController.php": "3ce1931f6b793626a2faaa84a1f9be5f589c8cdd5e6dc2fa5730e72c095b3103",
"app/Http/Controllers/ProcurementReviewReportController.php": "a78ed469ed5e914d47a4afa2fcbd64afce9177aff80d59418b90c7bfc41f89ad",
"app/Http/Controllers/PeopleHiringController.php": "ef449c2f1e67454615ff8454d188590b6acac7966f61b6b697887b8d44b112f4",
"resources/js/components/ai-plan-settings.tsx": "d06682971acb274376e0986bf00bfd63fde2a7a72f75e90aca4fd2fedbee7621",
"resources/js/components/ai-preparation-preview.tsx": "0ba01e2f641a52baf8fbb9b52a1342c86289e6eb9946a3b7b4a71c970ff256be",
"resources/js/pages/company/parameters.tsx": "aa9f1f475961dc176f378f5851efbdaf43a0007f0cd233adaffdfb8d40906fdb",
"resources/js/pages/purchases/review-report.tsx": "2b1066bb2be52c945f58c143f48417754d4ad8772f04579a23c9fdef150a28ad",
"resources/js/pages/people/show.tsx": "10c59a01033094543458b00771faff70249994dc539fdeacd1eb786e561526f7",
"tests/Feature/OrganizationConfigurationTest.php": "4bfe5bfe83042c3285ebf5c0e2aa731e9cd02eaf73b1b8774bd2684d80ef71da",
"tests/Feature/AiPreparationTest.php": "cf84282b2e879a6d0eb9605d052de070ddf8b45ede07a969bd03d3155d796254",
"tests/Feature/PeopleHiringTest.php": "35f444dddaad5e2702c055ef8b02afbc757de2d6a58eb997b06d413f5bf82691",
"tests/Support/AiPlanFixture.php": "af62e4b7f46d5ceab5cfbfaadcc85a53d42db1c4e71da7b30427f02fd6deea74",
"tests/frontend/ai-plan.test.tsx": "14e6dac9e49ca7b6434f177e5456533275268a8f9f745b2c000b22376a9e1573",
"routes/web.php": "38fdd89d976f9b82369aef440cf64ef384a584bdaeb519c0ec24741a296f6868",
"docs/plano-ia.md": "aa1ce1186b2b6077b52d7ed7b749250bb7f013a059e4b9f652b0d989c67ee7f3"
}
}
+16 -16
View File
@@ -1,18 +1,18 @@
{
"checked_at": "2026-10-30T15:08:33.102627+00:00",
"authorisation": "granted by owner after cost estimate",
"authorised_live_calls": 1,
"live_calls_executed": 1,
"destination": "https://api.openai.com/v1/responses",
"model": "gpt-5.6-terra",
"data_scope": "three built-in synthetic facts only",
"max_output_tokens": 1000,
"credential_presence_checked_without_value_output": true,
"dedicated_credential_configured": false,
"standard_openai_credential_available": false,
"rehearsal_enabled": false,
"execution_status": "completed: one successful synthetic generation, see ai-rehearsal-live.json",
"new_authorisation_required_for_same_call": false,
"successful_generations": 1,
"live_call_count_definition": "successful generation; transport and authentication failures separately recorded in ai-rehearsal-live.json"
"checked_at": "2026-10-30T15:08:33.102627+00:00",
"authorisation": "granted by owner after cost estimate",
"authorised_live_calls": 1,
"live_calls_executed": 1,
"destination": "https://api.openai.com/v1/responses",
"model": "gpt-5.6-terra",
"data_scope": "three built-in synthetic facts only",
"max_output_tokens": 1000,
"credential_presence_checked_without_value_output": true,
"dedicated_credential_configured": false,
"standard_openai_credential_available": false,
"rehearsal_enabled": false,
"execution_status": "completed: one successful synthetic generation, see ai-rehearsal-live.json",
"new_authorisation_required_for_same_call": false,
"successful_generations": 1,
"live_call_count_definition": "successful generation; transport and authentication failures separately recorded in ai-rehearsal-live.json"
}
+62 -62
View File
@@ -1,64 +1,64 @@
{
"checked_at": "2026-10-30T15:37:00+00:00",
"authorisation": "owner authorised one synthetic paid call",
"attempts": 3,
"destination": "https://api.openai.com/v1/responses",
"model": "gpt-5.6-terra",
"max_output_tokens": 1000,
"real_business_data_sent": false,
"status": "completed",
"automatic_retry": false,
"prior_transport_failure": {
"php_curl_errno": 60,
"diagnosis": "local issuer certificate unavailable before HTTPS establishment"
},
"tls_verification_disabled": false,
"trust_source": "Windows trusted root certificate stores; process-only CA configuration",
"prior_rejected_request": {
"http_status": 401,
"code": "invalid_api_key",
"local_cause": "duplicated setting and embedded assignment normalised without exposing key"
},
"http_status": 200,
"usage": {
"input_tokens": 204,
"output_tokens": 81,
"total_tokens": 285
},
"result_sha256": "d3412a0c4f7e34bfef51be924903c21e8724813e8cb7500a923a55fb0a96ebce",
"assessment": {
"method": "synthetic_ai_assessment_v1",
"facts": 3,
"claims": 3,
"cited_facts": 3,
"uncited_fact_ids": [],
"citation_coverage_complete": true,
"exact_source_text_matches": 1,
"requires_human_review": true,
"semantic_accuracy": "not_automatically_verified"
},
"reviewed_at": "2026-10-30T15:37:34.123863+00:00",
"human_content_review": {
"three_source_facts_preserved": true,
"invented_approval": false,
"invented_order": false,
"invented_delivery_or_payment": false,
"synthetic_scenario_accepted": true,
"general_model_quality_certified": false
},
"attempt_outcomes": [
"TLS trust failure before HTTPS establishment",
"HTTP 401 for malformed local credential setting",
"HTTP 200 completed after local corrections"
],
"successful_generations": 1,
"estimated_text_cost_usd": "0.001380",
"cost_basis": {
"input_tokens": 204,
"output_tokens": 81,
"input_usd_per_million": "2.00",
"output_usd_per_million": "12.00",
"billing_balance_or_credit_deduction_verified": false
},
"real_document_processing_enabled": false
"checked_at": "2026-10-30T15:37:00+00:00",
"authorisation": "owner authorised one synthetic paid call",
"attempts": 3,
"destination": "https://api.openai.com/v1/responses",
"model": "gpt-5.6-terra",
"max_output_tokens": 1000,
"real_business_data_sent": false,
"status": "completed",
"automatic_retry": false,
"prior_transport_failure": {
"php_curl_errno": 60,
"diagnosis": "local issuer certificate unavailable before HTTPS establishment"
},
"tls_verification_disabled": false,
"trust_source": "Windows trusted root certificate stores; process-only CA configuration",
"prior_rejected_request": {
"http_status": 401,
"code": "invalid_api_key",
"local_cause": "duplicated setting and embedded assignment normalised without exposing key"
},
"http_status": 200,
"usage": {
"input_tokens": 204,
"output_tokens": 81,
"total_tokens": 285
},
"result_sha256": "d3412a0c4f7e34bfef51be924903c21e8724813e8cb7500a923a55fb0a96ebce",
"assessment": {
"method": "synthetic_ai_assessment_v1",
"facts": 3,
"claims": 3,
"cited_facts": 3,
"uncited_fact_ids": [],
"citation_coverage_complete": true,
"exact_source_text_matches": 1,
"requires_human_review": true,
"semantic_accuracy": "not_automatically_verified"
},
"reviewed_at": "2026-10-30T15:37:34.123863+00:00",
"human_content_review": {
"three_source_facts_preserved": true,
"invented_approval": false,
"invented_order": false,
"invented_delivery_or_payment": false,
"synthetic_scenario_accepted": true,
"general_model_quality_certified": false
},
"attempt_outcomes": [
"TLS trust failure before HTTPS establishment",
"HTTP 401 for malformed local credential setting",
"HTTP 200 completed after local corrections"
],
"successful_generations": 1,
"estimated_text_cost_usd": "0.001380",
"cost_basis": {
"input_tokens": 204,
"output_tokens": 81,
"input_usd_per_million": "2.00",
"output_usd_per_million": "12.00",
"billing_balance_or_credit_deduction_verified": false
},
"real_document_processing_enabled": false
}
+35 -35
View File
@@ -1,37 +1,37 @@
{
"checked_at": "2026-10-30T14:55:29.383515+00:00",
"scope": "synthetic-only OpenAI Responses rehearsal, no web or business integration",
"tests": {
"tool": "pest",
"result": "passed",
"tests": 15,
"passed": 15,
"assertions": 41,
"duration_ms": 1041
},
"phpstan_errors": 0,
"pint": "passed",
"preview_executed": true,
"live_external_calls": 0,
"model": "gpt-5.6-terra",
"maximum_request_bytes": 4500,
"maximum_output_tokens": 1000,
"automatic_retries": 0,
"HTTP_redirects": false,
"server_credentials_changed": false,
"real_data_allowed": false,
"factual_accuracy_automatically_verified": false,
"live_authorisation": "pending",
"review_document": "../ensaio-ia.md",
"official_docs": [
"https://developers.openai.com/api/docs/guides/structured-outputs",
"https://developers.openai.com/api/docs/models/gpt-5.6-terra"
],
"source_sha256": {
"app/Services/SyntheticAiRehearsal.php": "96dee8e663b7b211f8b3be0b9c98ded1745a1019457dced413de62d265c35d41",
"app/Console/Commands/SgcAiRehearsal.php": "3003a8bcdd1cea5bc53dc4071ea22c970f59e802fe0deeb42abed7d963f5d1e7",
"config/sgc_intelligence.php": "ac385a06fd4c5a7421fa7ebc45185e81db790b17a5ef45cce469e769787587da",
"tests/Feature/SyntheticAiRehearsalTest.php": "ae03beda519ae06b175b0ad0a63848af831689153387aef5f1adc9d5105874f2",
"docs/ensaio-ia.md": "a1bef675b436f63b2f8ff434c73daeea53efc5a01b1374a53b8f0512e0a97b50"
}
"checked_at": "2026-10-30T14:55:29.383515+00:00",
"scope": "synthetic-only OpenAI Responses rehearsal, no web or business integration",
"tests": {
"tool": "pest",
"result": "passed",
"tests": 15,
"passed": 15,
"assertions": 41,
"duration_ms": 1041
},
"phpstan_errors": 0,
"pint": "passed",
"preview_executed": true,
"live_external_calls": 0,
"model": "gpt-5.6-terra",
"maximum_request_bytes": 4500,
"maximum_output_tokens": 1000,
"automatic_retries": 0,
"HTTP_redirects": false,
"server_credentials_changed": false,
"real_data_allowed": false,
"factual_accuracy_automatically_verified": false,
"live_authorisation": "pending",
"review_document": "../ensaio-ia.md",
"official_docs": [
"https://developers.openai.com/api/docs/guides/structured-outputs",
"https://developers.openai.com/api/docs/models/gpt-5.6-terra"
],
"source_sha256": {
"app/Services/SyntheticAiRehearsal.php": "96dee8e663b7b211f8b3be0b9c98ded1745a1019457dced413de62d265c35d41",
"app/Console/Commands/SgcAiRehearsal.php": "3003a8bcdd1cea5bc53dc4071ea22c970f59e802fe0deeb42abed7d963f5d1e7",
"config/sgc_intelligence.php": "ac385a06fd4c5a7421fa7ebc45185e81db790b17a5ef45cce469e769787587da",
"tests/Feature/SyntheticAiRehearsalTest.php": "ae03beda519ae06b175b0ad0a63848af831689153387aef5f1adc9d5105874f2",
"docs/ensaio-ia.md": "a1bef675b436f63b2f8ff434c73daeea53efc5a01b1374a53b8f0512e0a97b50"
}
}
+6 -6
View File
@@ -1,8 +1,8 @@
{
"checked_at": "2026-10-30T17:04:03.991Z",
"administration": 200,
"unconfigured_public_portal": 404,
"staff_session_does_not_authenticate_candidate": true,
"registration_open": false,
"accounts_created": 0
"checked_at": "2026-10-30T17:04:03.991Z",
"administration": 200,
"unconfigured_public_portal": 404,
"staff_session_does_not_authenticate_candidate": true,
"registration_open": false,
"accounts_created": 0
}
+61 -61
View File
@@ -1,63 +1,63 @@
{
"checked_at": "2026-10-30T17:04:58.049470+00:00",
"scope": [
"separate candidate authentication scoped by company",
"explicit portal registration policy and versioned notice acknowledgment",
"immutable own profile revisions including province district locality",
"no staff or cross-account access",
"atomic profile and audit rollback",
"login and logout history clearing"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 715,
"passed": 713,
"assertions": 6985,
"duration_ms": 149158,
"skipped": 2
},
"candidate_tests": 5,
"candidate_assertions": 81,
"disposable_postgresql_tests": 47,
"disposable_postgresql_assertions": 1163,
"react_inertia_tests": 52,
"phpstan_errors": 0,
"typescript": "passed",
"pint": "passed",
"targeted_lint": "passed",
"build_exit": 0,
"menu_entries_across_six_roles": 111,
"runtime_sha256_files": 18,
"postgresql_proof": "candidate-portal-pg.json",
"installation_proof": "candidate-portal-install.json",
"http_proof": "candidate-portal-http.json",
"visual_review": false,
"domain_installed": false,
"registration_open_in_evaluation": false,
"candidate_accounts_created_in_evaluation": 0,
"external_AI_calls": 0,
"emails_sent": 0,
"outstanding": [
"email/identity verification",
"password recovery",
"submission to opportunities and frozen profile documents",
"attachment security verification",
"triage complements revisions",
"retention deletion and privacy policy configuration before public use"
],
"source_sha256": {
"database/migrations/2026_10_30_000037_create_candidate_profiles.php": "159648252836af068226978666d8eb11148ed6890cba2082b0d5c8b415365e97",
"app/Models/CandidateAccount.php": "ab30a14616554bbe7d5ec0dec2347582754f846c0a4ade5455cfa095d73e4bec",
"app/Services/CandidateProfiles.php": "54e1e95e10c9004fef69fbdd14b54f85d617f3296cc27a7aba2f1f51552f2cad",
"app/Http/Controllers/CandidatePortalController.php": "9ff56978b43c4a2401c02ca3f7f2a95c7f3a550009b3385c682dafcecd6f2615",
"config/auth.php": "e3fd9d4244bc9dd92b6e8d76dc2e5163834ef21b4b9df7dd04f1015d82d32ba6",
"app/Http/Middleware/HandleInertiaRequests.php": "8db70b1500d683f1df3b7a26ce019c72b5c917ab51b020fdec59700100d588ed",
"resources/js/app.tsx": "5669117aa4b607b1d6c3b1f51af8b18650c80c75a5eb697ff7f89a3146c851a9",
"resources/js/pages/candidate/entry.tsx": "90b178c84d4a20ff4a1a8624f317d36eeb02ef017647fe524da03aee28a86e79",
"resources/js/pages/candidate/profile.tsx": "6a51689bc0bbe63255467c5c454593707c08bfd0e3867e59b50259eb20d1a306",
"resources/js/pages/company/candidate-portal.tsx": "07882a3695897d7cc184c1b09c7c616b76c362556e75f8e82d292925a5da9c09",
"tests/Feature/CandidatePortalTest.php": "b603113232db600105462577022da5018b76b8e852a50128e0bceb65e3e3e5b1",
"tests/frontend/candidate-portal.test.tsx": "81f3199e33bb46f16c8f73f2b641c1d9778579c12cd1f4f2d33e727f11d241af"
}
"checked_at": "2026-10-30T17:04:58.049470+00:00",
"scope": [
"separate candidate authentication scoped by company",
"explicit portal registration policy and versioned notice acknowledgment",
"immutable own profile revisions including province district locality",
"no staff or cross-account access",
"atomic profile and audit rollback",
"login and logout history clearing"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 715,
"passed": 713,
"assertions": 6985,
"duration_ms": 149158,
"skipped": 2
},
"candidate_tests": 5,
"candidate_assertions": 81,
"disposable_postgresql_tests": 47,
"disposable_postgresql_assertions": 1163,
"react_inertia_tests": 52,
"phpstan_errors": 0,
"typescript": "passed",
"pint": "passed",
"targeted_lint": "passed",
"build_exit": 0,
"menu_entries_across_six_roles": 111,
"runtime_sha256_files": 18,
"postgresql_proof": "candidate-portal-pg.json",
"installation_proof": "candidate-portal-install.json",
"http_proof": "candidate-portal-http.json",
"visual_review": false,
"domain_installed": false,
"registration_open_in_evaluation": false,
"candidate_accounts_created_in_evaluation": 0,
"external_AI_calls": 0,
"emails_sent": 0,
"outstanding": [
"email/identity verification",
"password recovery",
"submission to opportunities and frozen profile documents",
"attachment security verification",
"triage complements revisions",
"retention deletion and privacy policy configuration before public use"
],
"source_sha256": {
"database/migrations/2026_10_30_000037_create_candidate_profiles.php": "159648252836af068226978666d8eb11148ed6890cba2082b0d5c8b415365e97",
"app/Models/CandidateAccount.php": "ab30a14616554bbe7d5ec0dec2347582754f846c0a4ade5455cfa095d73e4bec",
"app/Services/CandidateProfiles.php": "54e1e95e10c9004fef69fbdd14b54f85d617f3296cc27a7aba2f1f51552f2cad",
"app/Http/Controllers/CandidatePortalController.php": "9ff56978b43c4a2401c02ca3f7f2a95c7f3a550009b3385c682dafcecd6f2615",
"config/auth.php": "e3fd9d4244bc9dd92b6e8d76dc2e5163834ef21b4b9df7dd04f1015d82d32ba6",
"app/Http/Middleware/HandleInertiaRequests.php": "8db70b1500d683f1df3b7a26ce019c72b5c917ab51b020fdec59700100d588ed",
"resources/js/app.tsx": "5669117aa4b607b1d6c3b1f51af8b18650c80c75a5eb697ff7f89a3146c851a9",
"resources/js/pages/candidate/entry.tsx": "90b178c84d4a20ff4a1a8624f317d36eeb02ef017647fe524da03aee28a86e79",
"resources/js/pages/candidate/profile.tsx": "6a51689bc0bbe63255467c5c454593707c08bfd0e3867e59b50259eb20d1a306",
"resources/js/pages/company/candidate-portal.tsx": "07882a3695897d7cc184c1b09c7c616b76c362556e75f8e82d292925a5da9c09",
"tests/Feature/CandidatePortalTest.php": "b603113232db600105462577022da5018b76b8e852a50128e0bceb65e3e3e5b1",
"tests/frontend/candidate-portal.test.tsx": "81f3199e33bb46f16c8f73f2b641c1d9778579c12cd1f4f2d33e727f11d241af"
}
}
+8 -8
View File
@@ -1,10 +1,10 @@
{
"checked_at": "2026-10-30T17:15:17.008Z",
"administration": 200,
"unconfigured_recovery": 404,
"unauthenticated_opportunity": 401,
"unauthenticated_receipt": 401,
"registration_open": false,
"candidates_created": 0,
"email_transport_available": false
"checked_at": "2026-10-30T17:15:17.008Z",
"administration": 200,
"unconfigured_recovery": 404,
"unauthenticated_opportunity": 401,
"unauthenticated_receipt": 401,
"registration_open": false,
"candidates_created": 0,
"email_transport_available": false
}
+13 -13
View File
@@ -1,15 +1,15 @@
{
"checked_at": "2026-10-30T17:19:13+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"CandidateAccessTest",
"CandidatePortalTest",
"CandidateSubmissionsTest"
],
"original_evaluation_untouched": true,
"database_removed": true,
"tests": 14,
"assertions": 161
"checked_at": "2026-10-30T17:19:13+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"CandidateAccessTest",
"CandidatePortalTest",
"CandidateSubmissionsTest"
],
"original_evaluation_untouched": true,
"database_removed": true,
"tests": 14,
"assertions": 161
}
+72 -72
View File
@@ -1,74 +1,74 @@
{
"checked_at": "2026-10-30T17:19:44.183589+00:00",
"scope": [
"single-use hashed email verification and recovery tokens",
"no secret links in mail log transports or request query strings",
"candidate session revocation on password reset",
"explicit publication by assigned process preparer",
"verified own-account data-only submission with frozen profile form and answers",
"idempotent receipt and own account access",
"internal received inbox separated from assessment",
"mandatory-file opportunities rejected until attachment intake exists"
],
"module_tests": 14,
"module_assertions": 161,
"postgresql_tests": 14,
"postgresql_assertions": 161,
"react_inertia_tests": 56,
"typescript": "passed",
"phpstan_errors": 0,
"pint": "passed",
"targeted_lint": "passed",
"build_exit": 0,
"mail_template_render_without_delivery": "passed",
"menu_entries_across_six_roles": 111,
"runtime_sha256_files": 18,
"installation_proof": "candidate-submissions-install.json",
"postgresql_proof": "candidate-submissions-pg.json",
"http_proof": "candidate-submissions-http.json",
"visual_review": false,
"domain_installed": false,
"emails_sent": 0,
"external_AI_calls": 0,
"candidate_accounts_created_in_evaluation": 0,
"portals_or_opportunities_activated": 0,
"outstanding": [
"secure attachment intake storage and verification",
"triage and controlled reuse into internal assessment",
"complements corrections and revisions",
"spontaneous submissions and supplier intake",
"configured mail transport and real delivery rehearsal",
"privacy retention deletion policies and public visual acceptance"
],
"source_sha256": {
"database/migrations/2026_10_30_000038_create_candidate_access_tokens.php": "a461cd157d23c00f0c54dccd8b739e0efe6803d3d3495253a86477972c25b0cb",
"database/migrations/2026_10_30_000039_create_candidate_submissions.php": "7901cf6b7dd31e4753ff92ca791f436ee13732eec7faa197b1ef829ba5cc4b7a",
"app/Services/CandidateAccess.php": "d63452a1148911fa4bf8e5cb0e2d5c0d68e4d6d4b7c2f9371a4a4ecf85d59a86",
"app/Services/CandidateSubmissions.php": "33114852f9c4444675206876662ad28b3846a72b8ded1d03c6f0e074118b8fa2",
"app/Services/CandidateProfiles.php": "0bfaa3602261e897b940a63e302bf4c2655c6dd2d8aa8bdd02bd350e3d39081f",
"app/Http/Controllers/CandidatePortalController.php": "13477331e1f0a270300143f1465e6493a9e52e20944fb542a0241d66e81ae588",
"app/Models/CandidateAccount.php": "8fc2fc485ad1bb2ccc27a971dbd9417bec7263bf5c51d170f45629bfec8e5d86",
"app/Mail/CandidateAccessLink.php": "67a9c556646114af96857537e2a60836d4eaa3b5243dbb8493071562fc1cfcbd",
"resources/views/mail/candidate-access.blade.php": "81eefd72fb05d2272a05fe9c9479a0652140c06d91dbc6e1694770109046abff",
"bootstrap/app.php": "a57fa8ea590c68d1007e1457611c95cf8b52576bfd8e5cdd7af2389ed18384f6",
"routes/web.php": "3d9b9755e1387eae89285b3ba3f4ad78730b69df9756853f063aa4e98fe20c7f",
"resources/js/pages/candidate/access.tsx": "4a0b92b6903d659a429db7dafaf25acccfee3c48a151a588e352d2b34eb18142",
"resources/js/pages/candidate/opportunity.tsx": "4da4db3e1f02138a73e4399aaf50eca969e53b02a004818165891cb24457239b",
"resources/js/pages/candidate/receipt.tsx": "59dd13beed2df74481740afabc4e78637ab8f6c244d3873eaafdd9b661c57392",
"resources/js/pages/candidate/profile.tsx": "39ae2da3182bf9fac69bdf88b69a376de3aa0750e659d9a05721070e2e207798",
"resources/js/pages/people/submissions.tsx": "9f79cbcda18154b685429f10c9bc31b49765ef0c1c93b1a19e4b001a7074eb43",
"tests/Feature/CandidateAccessTest.php": "7c953d2a633e3cc71d5d8ad0a97432a4056a01c2985ead0cc5743f368166b490",
"tests/Feature/CandidateSubmissionsTest.php": "7862130e921864e74469a364a19aa631635595598324133491fbcbffa419e0e7",
"tests/frontend/candidate-submissions.test.tsx": "4857543a847754fed542cb7ec32a961e94cb7fd287a5c67627d0cb17b7520ace"
},
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 724,
"passed": 722,
"assertions": 7063,
"duration_ms": 146678,
"skipped": 2
},
"full_suite_reused_with_latest_permission_regression_retested_in_module": true
"checked_at": "2026-10-30T17:19:44.183589+00:00",
"scope": [
"single-use hashed email verification and recovery tokens",
"no secret links in mail log transports or request query strings",
"candidate session revocation on password reset",
"explicit publication by assigned process preparer",
"verified own-account data-only submission with frozen profile form and answers",
"idempotent receipt and own account access",
"internal received inbox separated from assessment",
"mandatory-file opportunities rejected until attachment intake exists"
],
"module_tests": 14,
"module_assertions": 161,
"postgresql_tests": 14,
"postgresql_assertions": 161,
"react_inertia_tests": 56,
"typescript": "passed",
"phpstan_errors": 0,
"pint": "passed",
"targeted_lint": "passed",
"build_exit": 0,
"mail_template_render_without_delivery": "passed",
"menu_entries_across_six_roles": 111,
"runtime_sha256_files": 18,
"installation_proof": "candidate-submissions-install.json",
"postgresql_proof": "candidate-submissions-pg.json",
"http_proof": "candidate-submissions-http.json",
"visual_review": false,
"domain_installed": false,
"emails_sent": 0,
"external_AI_calls": 0,
"candidate_accounts_created_in_evaluation": 0,
"portals_or_opportunities_activated": 0,
"outstanding": [
"secure attachment intake storage and verification",
"triage and controlled reuse into internal assessment",
"complements corrections and revisions",
"spontaneous submissions and supplier intake",
"configured mail transport and real delivery rehearsal",
"privacy retention deletion policies and public visual acceptance"
],
"source_sha256": {
"database/migrations/2026_10_30_000038_create_candidate_access_tokens.php": "a461cd157d23c00f0c54dccd8b739e0efe6803d3d3495253a86477972c25b0cb",
"database/migrations/2026_10_30_000039_create_candidate_submissions.php": "7901cf6b7dd31e4753ff92ca791f436ee13732eec7faa197b1ef829ba5cc4b7a",
"app/Services/CandidateAccess.php": "d63452a1148911fa4bf8e5cb0e2d5c0d68e4d6d4b7c2f9371a4a4ecf85d59a86",
"app/Services/CandidateSubmissions.php": "33114852f9c4444675206876662ad28b3846a72b8ded1d03c6f0e074118b8fa2",
"app/Services/CandidateProfiles.php": "0bfaa3602261e897b940a63e302bf4c2655c6dd2d8aa8bdd02bd350e3d39081f",
"app/Http/Controllers/CandidatePortalController.php": "13477331e1f0a270300143f1465e6493a9e52e20944fb542a0241d66e81ae588",
"app/Models/CandidateAccount.php": "8fc2fc485ad1bb2ccc27a971dbd9417bec7263bf5c51d170f45629bfec8e5d86",
"app/Mail/CandidateAccessLink.php": "67a9c556646114af96857537e2a60836d4eaa3b5243dbb8493071562fc1cfcbd",
"resources/views/mail/candidate-access.blade.php": "81eefd72fb05d2272a05fe9c9479a0652140c06d91dbc6e1694770109046abff",
"bootstrap/app.php": "a57fa8ea590c68d1007e1457611c95cf8b52576bfd8e5cdd7af2389ed18384f6",
"routes/web.php": "3d9b9755e1387eae89285b3ba3f4ad78730b69df9756853f063aa4e98fe20c7f",
"resources/js/pages/candidate/access.tsx": "4a0b92b6903d659a429db7dafaf25acccfee3c48a151a588e352d2b34eb18142",
"resources/js/pages/candidate/opportunity.tsx": "4da4db3e1f02138a73e4399aaf50eca969e53b02a004818165891cb24457239b",
"resources/js/pages/candidate/receipt.tsx": "59dd13beed2df74481740afabc4e78637ab8f6c244d3873eaafdd9b661c57392",
"resources/js/pages/candidate/profile.tsx": "39ae2da3182bf9fac69bdf88b69a376de3aa0750e659d9a05721070e2e207798",
"resources/js/pages/people/submissions.tsx": "9f79cbcda18154b685429f10c9bc31b49765ef0c1c93b1a19e4b001a7074eb43",
"tests/Feature/CandidateAccessTest.php": "7c953d2a633e3cc71d5d8ad0a97432a4056a01c2985ead0cc5743f368166b490",
"tests/Feature/CandidateSubmissionsTest.php": "7862130e921864e74469a364a19aa631635595598324133491fbcbffa419e0e7",
"tests/frontend/candidate-submissions.test.tsx": "4857543a847754fed542cb7ec32a961e94cb7fd287a5c67627d0cb17b7520ace"
},
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 724,
"passed": 722,
"assertions": 7063,
"duration_ms": 146678,
"skipped": 2
},
"full_suite_reused_with_latest_permission_regression_retested_in_module": true
}
+6 -6
View File
@@ -1,8 +1,8 @@
{
"checked_at": "2026-10-30T17:32:58.543Z",
"people_workspace": 200,
"portal_settings": 200,
"unauthenticated_receipt": 401,
"portal_opened": false,
"candidates_created": 0
"checked_at": "2026-10-30T17:32:58.543Z",
"people_workspace": 200,
"portal_settings": 200,
"unauthenticated_receipt": 401,
"portal_opened": false,
"candidates_created": 0
}
+13 -13
View File
@@ -1,15 +1,15 @@
{
"checked_at": "2026-10-30T17:30:39+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"CandidateSubmissionsTest",
"PeopleHiringTest",
"CandidatePortalTest"
],
"original_evaluation_untouched": true,
"database_removed": true,
"tests": 53,
"assertions": 1234
"checked_at": "2026-10-30T17:30:39+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"CandidateSubmissionsTest",
"PeopleHiringTest",
"CandidatePortalTest"
],
"original_evaluation_untouched": true,
"database_removed": true,
"tests": 53,
"assertions": 1234
}
+65 -65
View File
@@ -1,67 +1,67 @@
{
"checked_at": "2026-10-30T17:35:03.695737+00:00",
"scope": [
"explicit accepted-for-analysis or not-accepted triage",
"separate confidential reason and public communication",
"immutable idempotent decision and atomic application linkage",
"frozen submitted profile reused without re-entry or name-based merging",
"triager registered as application author preserving independent assessment",
"source reading restricted to preparers or reviewers with evidence scope",
"pending triage routed in workdesk and checked before close evaluation selection",
"admission blocked after reviews start",
"cross-company/process composite foreign keys"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 730,
"passed": 728,
"assertions": 7141,
"duration_ms": 150333,
"skipped": 2
},
"module_sqlite_tests": 48,
"module_sqlite_assertions": 1153,
"postgresql_tests": 53,
"postgresql_assertions": 1234,
"react_inertia_tests": 59,
"typescript": "passed",
"phpstan_errors": 0,
"pint": "passed",
"targeted_lint": "passed",
"build_exit": 0,
"menu_entries_across_six_roles": 111,
"runtime_sha256_files": 18,
"installation_proof": "candidate-triage-install.json",
"postgresql_proof": "candidate-triage-pg.json",
"http_proof": "candidate-triage-http.json",
"visual_review": false,
"domain_installed": false,
"emails_sent": 0,
"external_AI_calls": 0,
"candidate_accounts_created_in_evaluation": 0,
"automatic_transfers_in_evaluation": 0,
"outstanding": [
"secure attachment intake",
"triage revision and reopening",
"candidate complements and corrected submissions",
"spontaneous and supplier electronic intake",
"real mail transport delivery rehearsal",
"visual validation and deployment"
],
"source_sha256": {
"database/migrations/2026_10_30_000040_create_candidate_triage.php": "4a054bceb7abaa7d3ff1796f0529bb777061156927d91fab1f5ab324b2af8195",
"app/Services/CandidateTriage.php": "3566f527c99f8fea076d9babe68431c7d9e8f539be685e69d9c43a1cde8d5527",
"app/Services/PeopleHiring.php": "6fff082fede593e5a29d02d291d82d1d07492fdd941483a4301c4e99365cacbd",
"app/Services/PeopleWorkdesk.php": "f3b8096209897f0b9199804bd5f230a42627b6210f66a881ee755bc9a5c77767",
"app/Http/Controllers/CandidatePortalController.php": "e776651fa41ae071f7bfe8da301cc9c9e0b19df0f34c63dd58175de3b231b217",
"app/Http/Controllers/PeopleHiringController.php": "365e6cd116ed0d4e253e45b7e1768e586aaf6c6987a5c753809c52204c70469d",
"routes/web.php": "5d61be0bfaa196d8b81f1a124f863e475c0e428f282bfa3926d64395d2651a24",
"resources/js/pages/people/submissions.tsx": "57a4b57962b22797c560de928b0155d166a43212442641ca860016ce0554390e",
"resources/js/pages/people/show.tsx": "de1b290772a7e3f0b2083511dab0fcee9cf5fc7ca71e5014f87a892cdd32c06d",
"resources/js/pages/candidate/receipt.tsx": "5667ac51c6fd654fc96bff7bece924617561bac16b552dfce371aafdcb2e8830",
"resources/js/components/people-operational-insights.tsx": "55ce0f42e7d574e7c8832ec869aceaecd41d70a2ba8117b9397ce30528aab82f",
"tests/Feature/CandidateSubmissionsTest.php": "73808825233b55169f185c1fad555c53aa13bf6933c39fe2d84777638a9bf39d",
"tests/frontend/candidate-triage.test.tsx": "9d0455f569112f4869627bd22f1aaa6862cd34fc6f8912ab61b621c67ea1d880"
}
"checked_at": "2026-10-30T17:35:03.695737+00:00",
"scope": [
"explicit accepted-for-analysis or not-accepted triage",
"separate confidential reason and public communication",
"immutable idempotent decision and atomic application linkage",
"frozen submitted profile reused without re-entry or name-based merging",
"triager registered as application author preserving independent assessment",
"source reading restricted to preparers or reviewers with evidence scope",
"pending triage routed in workdesk and checked before close evaluation selection",
"admission blocked after reviews start",
"cross-company/process composite foreign keys"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 730,
"passed": 728,
"assertions": 7141,
"duration_ms": 150333,
"skipped": 2
},
"module_sqlite_tests": 48,
"module_sqlite_assertions": 1153,
"postgresql_tests": 53,
"postgresql_assertions": 1234,
"react_inertia_tests": 59,
"typescript": "passed",
"phpstan_errors": 0,
"pint": "passed",
"targeted_lint": "passed",
"build_exit": 0,
"menu_entries_across_six_roles": 111,
"runtime_sha256_files": 18,
"installation_proof": "candidate-triage-install.json",
"postgresql_proof": "candidate-triage-pg.json",
"http_proof": "candidate-triage-http.json",
"visual_review": false,
"domain_installed": false,
"emails_sent": 0,
"external_AI_calls": 0,
"candidate_accounts_created_in_evaluation": 0,
"automatic_transfers_in_evaluation": 0,
"outstanding": [
"secure attachment intake",
"triage revision and reopening",
"candidate complements and corrected submissions",
"spontaneous and supplier electronic intake",
"real mail transport delivery rehearsal",
"visual validation and deployment"
],
"source_sha256": {
"database/migrations/2026_10_30_000040_create_candidate_triage.php": "4a054bceb7abaa7d3ff1796f0529bb777061156927d91fab1f5ab324b2af8195",
"app/Services/CandidateTriage.php": "3566f527c99f8fea076d9babe68431c7d9e8f539be685e69d9c43a1cde8d5527",
"app/Services/PeopleHiring.php": "6fff082fede593e5a29d02d291d82d1d07492fdd941483a4301c4e99365cacbd",
"app/Services/PeopleWorkdesk.php": "f3b8096209897f0b9199804bd5f230a42627b6210f66a881ee755bc9a5c77767",
"app/Http/Controllers/CandidatePortalController.php": "e776651fa41ae071f7bfe8da301cc9c9e0b19df0f34c63dd58175de3b231b217",
"app/Http/Controllers/PeopleHiringController.php": "365e6cd116ed0d4e253e45b7e1768e586aaf6c6987a5c753809c52204c70469d",
"routes/web.php": "5d61be0bfaa196d8b81f1a124f863e475c0e428f282bfa3926d64395d2651a24",
"resources/js/pages/people/submissions.tsx": "57a4b57962b22797c560de928b0155d166a43212442641ca860016ce0554390e",
"resources/js/pages/people/show.tsx": "de1b290772a7e3f0b2083511dab0fcee9cf5fc7ca71e5014f87a892cdd32c06d",
"resources/js/pages/candidate/receipt.tsx": "5667ac51c6fd654fc96bff7bece924617561bac16b552dfce371aafdcb2e8830",
"resources/js/components/people-operational-insights.tsx": "55ce0f42e7d574e7c8832ec869aceaecd41d70a2ba8117b9397ce30528aab82f",
"tests/Feature/CandidateSubmissionsTest.php": "73808825233b55169f185c1fad555c53aa13bf6933c39fe2d84777638a9bf39d",
"tests/frontend/candidate-triage.test.tsx": "9d0455f569112f4869627bd22f1aaa6862cd34fc6f8912ab61b621c67ea1d880"
}
}
+46 -46
View File
@@ -1,48 +1,48 @@
{
"checked_at": "2026-10-30T11:11:26.981246+00:00",
"environment": "local evaluation 8005",
"scope": [
"company-configured minimum eligible suppliers and independent evaluators",
"company-configured criterion weights totalling 100 percent",
"policy frozen when a request is created and retained on draft edits",
"old processes retain compatibility rules",
"quotation weights validated against process policy",
"policy included in new comparison hashes and order snapshots",
"policy visible in request comparison award reports and order print"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 622,
"passed": 620,
"assertions": 5306,
"duration_ms": 113835,
"skipped": 2
},
"postgresql": {
"tests": 45,
"assertions": 367,
"disposable_database_removed": true
},
"phpstan_errors": 0,
"typescript": "passed",
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"installation_proof": "comparison-policy-install.json",
"company_policy_automatically_activated": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/ComparisonPolicy.php": "bdcd5739b1d52fc57759ff59a2257a059ce7772b21552a09ef6aa83966f0145e",
"app/Services/ProposalComparison.php": "d091f73065064dd132196cb79033835f38f7bd55ec6a98a54a76bbcdfd4e6df0",
"app/Services/RequisitionWorkflow.php": "e06c11e0208f0cf2cff80e44b5de3c55de05e8cce079d4f1a77f1d9f37f08323",
"app/Services/PurchaseWorkflow.php": "30c622685cb80766addaaba9987281ea40b5890b51c907f1a50743e3ba7540c5",
"app/Services/OrganizationConfiguration.php": "478c5605ec6933e868d38f904c9e87727f884b2d1663ba6c0f58cc5872d90e95",
"app/Http/Controllers/QuotationController.php": "0ca2ec13459d2daefacc62ac30fa437217cdb648ab35c90083a958261ccd9f84",
"app/Http/Controllers/OrganizationConfigurationController.php": "c1d017a550619705ea3521f5ea794e4b5585be3fbbe3bc9557c1dc625502b9bf",
"resources/js/components/comparison-policy-summary.tsx": "c086bafc0e08e900938bd49a6b802880f4be7ba11ba29c9272ed85b42143bfe9",
"resources/js/pages/company/parameters.tsx": "e7ca03fc6600ec6db7395d0db289f5f277b2ba6a05053b1b136202600e195b3d",
"database/migrations/2026_10_30_000029_add_comparison_policy_snapshots.php": "92eacb2835908fe26938111098163e167d1afa6a42ad682c9ef63711c92274cc"
}
"checked_at": "2026-10-30T11:11:26.981246+00:00",
"environment": "local evaluation 8005",
"scope": [
"company-configured minimum eligible suppliers and independent evaluators",
"company-configured criterion weights totalling 100 percent",
"policy frozen when a request is created and retained on draft edits",
"old processes retain compatibility rules",
"quotation weights validated against process policy",
"policy included in new comparison hashes and order snapshots",
"policy visible in request comparison award reports and order print"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 622,
"passed": 620,
"assertions": 5306,
"duration_ms": 113835,
"skipped": 2
},
"postgresql": {
"tests": 45,
"assertions": 367,
"disposable_database_removed": true
},
"phpstan_errors": 0,
"typescript": "passed",
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"installation_proof": "comparison-policy-install.json",
"company_policy_automatically_activated": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/ComparisonPolicy.php": "bdcd5739b1d52fc57759ff59a2257a059ce7772b21552a09ef6aa83966f0145e",
"app/Services/ProposalComparison.php": "d091f73065064dd132196cb79033835f38f7bd55ec6a98a54a76bbcdfd4e6df0",
"app/Services/RequisitionWorkflow.php": "e06c11e0208f0cf2cff80e44b5de3c55de05e8cce079d4f1a77f1d9f37f08323",
"app/Services/PurchaseWorkflow.php": "30c622685cb80766addaaba9987281ea40b5890b51c907f1a50743e3ba7540c5",
"app/Services/OrganizationConfiguration.php": "478c5605ec6933e868d38f904c9e87727f884b2d1663ba6c0f58cc5872d90e95",
"app/Http/Controllers/QuotationController.php": "0ca2ec13459d2daefacc62ac30fa437217cdb648ab35c90083a958261ccd9f84",
"app/Http/Controllers/OrganizationConfigurationController.php": "c1d017a550619705ea3521f5ea794e4b5585be3fbbe3bc9557c1dc625502b9bf",
"resources/js/components/comparison-policy-summary.tsx": "c086bafc0e08e900938bd49a6b802880f4be7ba11ba29c9272ed85b42143bfe9",
"resources/js/pages/company/parameters.tsx": "e7ca03fc6600ec6db7395d0db289f5f277b2ba6a05053b1b136202600e195b3d",
"database/migrations/2026_10_30_000029_add_comparison_policy_snapshots.php": "92eacb2835908fe26938111098163e167d1afa6a42ad682c9ef63711c92274cc"
}
}
+50 -50
View File
@@ -1,52 +1,52 @@
{
"checked_at": "2026-10-30T10:54:53.071479+00:00",
"environment": "local evaluation 8005",
"scope": [
"company default VAT for new lines only",
"explicit unit discounts before VAT",
"tie warning without automatic winner",
"invalid and missing prices excluded",
"discount evidence in comparison award order and reports",
"six functional navigation groups with unchanged permissions"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 618,
"passed": 616,
"assertions": 5245,
"duration_ms": 181394,
"skipped": 2
},
"postgresql": {
"tests": 42,
"assertions": 327,
"disposable_database_removed": true
},
"order_workflow_tests": 71,
"phpstan_errors": 0,
"typescript": "passed",
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"runtime_sha256_files": 18,
"menu_contract_entries_by_role": 107,
"menu_role_count": 6,
"fresh_backup_and_restore": "economic-install.json",
"http_proof": "menu-links.json",
"spreadsheet_original_modified": false,
"spreadsheet_example_values_imported": false,
"visual_review": false,
"domain_installed": false,
"source_sha256": {
"app/Services/QuotationPricing.php": "4b4ef22c0be338742b4ebf17a8018bf35dd0996d4b9d0fc460d4c02c2c0b8fa6",
"app/Services/ProposalComparison.php": "a106e659a855ddaf8a1279e3918ed7f631ff0ed6c374488d06d4dfe95b9a8872",
"app/Services/ProposalOpeningWorkflow.php": "ef7bc41fd696cd51bfa4113c9aa1ab42c91a86a6b36f1926b51a8b1fcd01284c",
"app/Services/OrganizationConfiguration.php": "89e452c699ccab4a388e0643e777bf77305e7ea6cde2357801d3d3b16406912a",
"app/Http/Controllers/QuotationController.php": "cf2a2064004d73c49d61e1aa21d8fa100300dfb5baa8fc737e1da72b4b57242d",
"resources/js/lib/procurement-navigation.ts": "488efff63a6ff1505abaab41f4e248ff740a8da456d9a627cc9143dfd6b26bbf",
"resources/js/components/sgc-workspace-shell.tsx": "892de779373aaf7689c95c4b3112734e0683fd60197916464a965ba1eabd1466",
"resources/js/pages/quotations/show.tsx": "e756b347e0da3b06e5e5f2d67ccb8d3370360db219b134227b611e91d1af7958",
"database/migrations/2026_10_30_000028_add_economic_comparison_terms.php": "dba2a5f8bfd3e76fee5fed032e11e71b2800dead3dfc9d66d040502e53c7e2c5"
}
"checked_at": "2026-10-30T10:54:53.071479+00:00",
"environment": "local evaluation 8005",
"scope": [
"company default VAT for new lines only",
"explicit unit discounts before VAT",
"tie warning without automatic winner",
"invalid and missing prices excluded",
"discount evidence in comparison award order and reports",
"six functional navigation groups with unchanged permissions"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 618,
"passed": 616,
"assertions": 5245,
"duration_ms": 181394,
"skipped": 2
},
"postgresql": {
"tests": 42,
"assertions": 327,
"disposable_database_removed": true
},
"order_workflow_tests": 71,
"phpstan_errors": 0,
"typescript": "passed",
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"runtime_sha256_files": 18,
"menu_contract_entries_by_role": 107,
"menu_role_count": 6,
"fresh_backup_and_restore": "economic-install.json",
"http_proof": "menu-links.json",
"spreadsheet_original_modified": false,
"spreadsheet_example_values_imported": false,
"visual_review": false,
"domain_installed": false,
"source_sha256": {
"app/Services/QuotationPricing.php": "4b4ef22c0be338742b4ebf17a8018bf35dd0996d4b9d0fc460d4c02c2c0b8fa6",
"app/Services/ProposalComparison.php": "a106e659a855ddaf8a1279e3918ed7f631ff0ed6c374488d06d4dfe95b9a8872",
"app/Services/ProposalOpeningWorkflow.php": "ef7bc41fd696cd51bfa4113c9aa1ab42c91a86a6b36f1926b51a8b1fcd01284c",
"app/Services/OrganizationConfiguration.php": "89e452c699ccab4a388e0643e777bf77305e7ea6cde2357801d3d3b16406912a",
"app/Http/Controllers/QuotationController.php": "cf2a2064004d73c49d61e1aa21d8fa100300dfb5baa8fc737e1da72b4b57242d",
"resources/js/lib/procurement-navigation.ts": "488efff63a6ff1505abaab41f4e248ff740a8da456d9a627cc9143dfd6b26bbf",
"resources/js/components/sgc-workspace-shell.tsx": "892de779373aaf7689c95c4b3112734e0683fd60197916464a965ba1eabd1466",
"resources/js/pages/quotations/show.tsx": "e756b347e0da3b06e5e5f2d67ccb8d3370360db219b134227b611e91d1af7958",
"database/migrations/2026_10_30_000028_add_economic_comparison_terms.php": "dba2a5f8bfd3e76fee5fed032e11e71b2800dead3dfc9d66d040502e53c7e2c5"
}
}
+47 -47
View File
@@ -1,49 +1,49 @@
{
"checked_at": "2026-10-30T10:29:54.976Z",
"base": "http://127.0.0.1:8005",
"owner_modules": [
"/dashboard",
"/empresa",
"/requisicoes",
"/planeamento",
"/fornecedores",
"/cotacoes",
"/ordens",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/orcamentos",
"/regras-investimento",
"/facturas",
"/pagamentos",
"/obrigacoes-fornecedores",
"/conflitos",
"/revisao-compras",
"/politica-admissao",
"/politica-recomendacao",
"/relatorios",
"/relatorios/medidas-fornecedores",
"/administracao/parametrizacao"
],
"roles": [
"requester",
"department_head",
"procurement",
"finance",
"warehouse",
"admin"
],
"csrf_enforced": true,
"arbitrary_role_refused": true,
"arbitrary_user_refused": true,
"logout": true,
"business_commands": 0,
"real_accounts_changed": false,
"operational_entry_status": "not running",
"visual_review": false,
"dashboard_auto_entry": true,
"other_routes_require_session": true,
"guest_report_redirect": true,
"intended_report_and_filters_preserved": true
"checked_at": "2026-10-30T10:29:54.976Z",
"base": "http://127.0.0.1:8005",
"owner_modules": [
"/dashboard",
"/empresa",
"/requisicoes",
"/planeamento",
"/fornecedores",
"/cotacoes",
"/ordens",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/orcamentos",
"/regras-investimento",
"/facturas",
"/pagamentos",
"/obrigacoes-fornecedores",
"/conflitos",
"/revisao-compras",
"/politica-admissao",
"/politica-recomendacao",
"/relatorios",
"/relatorios/medidas-fornecedores",
"/administracao/parametrizacao"
],
"roles": [
"requester",
"department_head",
"procurement",
"finance",
"warehouse",
"admin"
],
"csrf_enforced": true,
"arbitrary_role_refused": true,
"arbitrary_user_refused": true,
"logout": true,
"business_commands": 0,
"real_accounts_changed": false,
"operational_entry_status": "not running",
"visual_review": false,
"dashboard_auto_entry": true,
"other_routes_require_session": true,
"guest_report_redirect": true,
"intended_report_and_filters_preserved": true
}
+66 -66
View File
@@ -1,68 +1,68 @@
{
"checked_at": "2026-10-30T14:55:29.383515+00:00",
"environment": "local evaluation 8005",
"scope": [
"separate procurement and people evidence briefs",
"source paths and section anchors",
"redacted authorised report projections only",
"SHA256 basis without private financial content",
"current frozen returned approved and unsigned draft distinctions",
"PostgreSQL read snapshot on people detail"
],
"procurement_tests": {
"tool": "pest",
"result": "passed",
"tests": 18,
"passed": 18,
"assertions": 317,
"duration_ms": 4718
},
"people_tests": {
"tool": "pest",
"result": "passed",
"tests": 35,
"passed": 35,
"assertions": 972,
"duration_ms": 11099
},
"postgresql_integration": {
"tool": "phpunit",
"result": "passed",
"tests": 1,
"passed": 1,
"assertions": 64,
"duration_ms": 2543
},
"react_inertia_tests": 31,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"http_proof": "menu-links.json",
"postgresql_proof": "evidence-brief-pg.json",
"prior_full_suite_reused": "people-clarifications.json",
"migrations_applied": false,
"business_records_changed": false,
"domain_installed": false,
"visual_review": false,
"visual_attempt_errors": [
"Computer Use native pipe is unavailable (os error 2)",
"The browser access host is unavailable"
],
"AI_provider_used_for_reports": false,
"source_sha256": {
"app/Services/ProcurementEvidenceBrief.php": "9a610e1d80f1040fa7a46117a5e251bebc4a6ca6d02383aa2c9d62f0ba3aef08",
"app/Services/PeopleEvidenceBrief.php": "76f5a6bdd36fb8878eac5aa80cbb34db5784979ad654166778775c5c28f5f80a",
"app/Http/Controllers/ProcurementReviewReportController.php": "ba96649bb5585ace55249f706dfb740cc12918676bc2ff3b4dac620ad602fb57",
"app/Http/Controllers/PeopleHiringController.php": "bc6656d73a033bffa540d2b555d15d9c52a38c84446d892710d7d8ded35200ec",
"resources/js/components/evidence-brief.tsx": "3b4630e44fdc02191d1e8ecebcd451c20b9e5a35b49ded9f5d78044bd1e24932",
"resources/js/components/procurement.tsx": "846599386826eece0c9d5f48f4a30d3d52815fce3fde4d781073ff9347bf97c6",
"resources/js/pages/purchases/review-report.tsx": "e29457affd4d2005b4393f4d21ee8ae1fbd9e4ccdc4ffbc253122d4628c1ba89",
"resources/js/pages/people/show.tsx": "247e4e80d4ffca649b46fe00ee665de7e4c5476f2ce3cc1e5590e7cced049e47",
"tests/Feature/ProcurementReviewReportTest.php": "46b95f3fc21b557021dd013357016a312078b99d20911a29e4e5ca3d09a5ed20",
"tests/Feature/PeopleHiringTest.php": "fbd93d8134298d6b666634659223487646dbcb8074bd05889d660e378c40be5a",
"tests/frontend/evidence-brief.test.tsx": "385b617074ac8c718f97e52981acce2a7b3dda9b965432e7e2be04c1ca7ef279",
"tests/frontend/people-hiring.test.tsx": "24c51db9886358dfb1bd43d6b82c2a45ac731abdab76bc4e9dea3b85cbcb8bb4"
}
"checked_at": "2026-10-30T14:55:29.383515+00:00",
"environment": "local evaluation 8005",
"scope": [
"separate procurement and people evidence briefs",
"source paths and section anchors",
"redacted authorised report projections only",
"SHA256 basis without private financial content",
"current frozen returned approved and unsigned draft distinctions",
"PostgreSQL read snapshot on people detail"
],
"procurement_tests": {
"tool": "pest",
"result": "passed",
"tests": 18,
"passed": 18,
"assertions": 317,
"duration_ms": 4718
},
"people_tests": {
"tool": "pest",
"result": "passed",
"tests": 35,
"passed": 35,
"assertions": 972,
"duration_ms": 11099
},
"postgresql_integration": {
"tool": "phpunit",
"result": "passed",
"tests": 1,
"passed": 1,
"assertions": 64,
"duration_ms": 2543
},
"react_inertia_tests": 31,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"http_proof": "menu-links.json",
"postgresql_proof": "evidence-brief-pg.json",
"prior_full_suite_reused": "people-clarifications.json",
"migrations_applied": false,
"business_records_changed": false,
"domain_installed": false,
"visual_review": false,
"visual_attempt_errors": [
"Computer Use native pipe is unavailable (os error 2)",
"The browser access host is unavailable"
],
"AI_provider_used_for_reports": false,
"source_sha256": {
"app/Services/ProcurementEvidenceBrief.php": "9a610e1d80f1040fa7a46117a5e251bebc4a6ca6d02383aa2c9d62f0ba3aef08",
"app/Services/PeopleEvidenceBrief.php": "76f5a6bdd36fb8878eac5aa80cbb34db5784979ad654166778775c5c28f5f80a",
"app/Http/Controllers/ProcurementReviewReportController.php": "ba96649bb5585ace55249f706dfb740cc12918676bc2ff3b4dac620ad602fb57",
"app/Http/Controllers/PeopleHiringController.php": "bc6656d73a033bffa540d2b555d15d9c52a38c84446d892710d7d8ded35200ec",
"resources/js/components/evidence-brief.tsx": "3b4630e44fdc02191d1e8ecebcd451c20b9e5a35b49ded9f5d78044bd1e24932",
"resources/js/components/procurement.tsx": "846599386826eece0c9d5f48f4a30d3d52815fce3fde4d781073ff9347bf97c6",
"resources/js/pages/purchases/review-report.tsx": "e29457affd4d2005b4393f4d21ee8ae1fbd9e4ccdc4ffbc253122d4628c1ba89",
"resources/js/pages/people/show.tsx": "247e4e80d4ffca649b46fe00ee665de7e4c5476f2ce3cc1e5590e7cced049e47",
"tests/Feature/ProcurementReviewReportTest.php": "46b95f3fc21b557021dd013357016a312078b99d20911a29e4e5ca3d09a5ed20",
"tests/Feature/PeopleHiringTest.php": "fbd93d8134298d6b666634659223487646dbcb8074bd05889d660e378c40be5a",
"tests/frontend/evidence-brief.test.tsx": "385b617074ac8c718f97e52981acce2a7b3dda9b965432e7e2be04c1ca7ef279",
"tests/frontend/people-hiring.test.tsx": "24c51db9886358dfb1bd43d6b82c2a45ac731abdab76bc4e9dea3b85cbcb8bb4"
}
}
+7 -7
View File
@@ -1,9 +1,9 @@
{
"checked_at": "2026-10-30T15:13:30+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"scenario": "real report snapshots, tenant policy toggles, stale version rejection and authorisation",
"original_evaluation_untouched": true,
"database_removed": true
"checked_at": "2026-10-30T15:13:30+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"scenario": "real report snapshots, tenant policy toggles, stale version rejection and authorisation",
"original_evaluation_untouched": true,
"database_removed": true
}
+76 -76
View File
@@ -1,78 +1,78 @@
{
"checked_at": "2026-10-30T15:16:21.466309+00:00",
"environment": "local evaluation 8005",
"scope": [
"independent tenant settings for procurement and people local briefs",
"optimistic version reason and transactional audit",
"preserve full reports process decisions and access rules",
"offline synthetic AI assessment of citation coverage and literal matches",
"no automatic semantic certification"
],
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 82,
"passed": 82,
"assertions": 1337,
"duration_ms": 12897
},
"react_inertia_tests": 33,
"postgresql_integration": {
"tool": "phpunit",
"result": "passed",
"tests": 1,
"passed": 1,
"assertions": 110,
"duration_ms": 2935
},
"postgresql_proof": "intelligence-policy-pg.json",
"installation_proof": "intelligence-policy-install.json",
"manual_fixture_assessment": {
"method": "synthetic_ai_assessment_v1",
"facts": 3,
"claims": 3,
"cited_facts": 3,
"uncited_fact_ids": [],
"citation_coverage_complete": true,
"exact_source_text_matches": 3,
"requires_human_review": true,
"semantic_accuracy": "not_automatically_verified"
},
"fixture_is_model_output": false,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"http_proof": "menu-links.json",
"prior_full_suite_reused": "people-clarifications.json",
"accounts_or_grants_changed": false,
"tenant_policy_choices_automatically_created": false,
"live_external_calls": 0,
"live_authorisation": "previously granted for one synthetic call; pending credential setup by owner",
"real_document_AI_enabled": false,
"visual_review": false,
"domain_installed": false,
"source_sha256": {
"app/Services/IntelligencePolicy.php": "c25d9c97e3902327486dc128274662d77b3da041b18d675510b0d29a76c7465b",
"app/Services/OrganizationConfiguration.php": "6a3a95f03491f47e0d80f12568d7e04a9a202a463d980d82daa794bbba17328e",
"app/Services/SyntheticAiAssessment.php": "a664903a3b0e4889e931d085697891588df7aced7e868e8e80c438d798365963",
"app/Services/SyntheticAiRehearsal.php": "76d0f2fa2ef07e670dc74b67e098d0d49df3755354342dc8592fbcb8f96796c6",
"app/Console/Commands/SgcAiAssess.php": "e47320fa2aeb0787e1d43b3c6fe2acb73c5732b63aa57d2f1ec6ae7109b1213d",
"app/Models/Tenant.php": "e7446af40d11ef77747caac54e623efb7c560d60bf05161557dac3086ea72d96",
"app/Http/Controllers/OrganizationConfigurationController.php": "88916867ddc3bcaccae9145bf9ca0c8598b3f6c8206c9222cbaed91c1490427b",
"app/Http/Controllers/PeopleHiringController.php": "6da8c0728838050b32db5bbde09420e164265cd78b185d500b040f03cb46e35f",
"app/Http/Controllers/ProcurementReviewReportController.php": "9ff40d3ee01cc0e5e97b900d2d0d6be8909c93c42df949deb14a33e21de7e828",
"database/migrations/2026_10_30_000033_add_intelligence_policy.php": "37b109a2bcad6572498e6350363e75e9f981da5f0ba921c50e861805a34a0ada",
"resources/js/components/intelligence-settings.tsx": "f63b9f7795bdfd9a263a9339d752618d13b87d05d3985272062aa5a5cfacfb79",
"resources/js/pages/company/parameters.tsx": "380ccc3933131004950d281108100b568c8b90a69a2286788fb8798500fc6ff2",
"resources/js/pages/people/show.tsx": "ad2f1ec8aeb350ade2da2ebd242ef448e068ca2974912aae3afdedf0530ecdb0",
"resources/js/pages/purchases/review-report.tsx": "7f572d0f27b2e1b35cddb4518846534940dbf99c13e76e3270eb572c0fef83ee",
"tests/Feature/OrganizationConfigurationTest.php": "1072451618d1104e61cec0b879597de3e3f3a7060f53c91f3196a181ad912bb3",
"tests/Feature/PeopleHiringTest.php": "9db07af59529ea6e9bc559531498813c5983bfc7d64c5f5729ad23d30aedfa1f",
"tests/Feature/SyntheticAiAssessmentTest.php": "6913b68906d41806312b244f9909385892ed8ce88129fad6e711c0d9fe6ead36",
"tests/Fixtures/ai-synthetic-result.json": "d488c086b2199a70b98f2238634d595d89fd086e3c52dc3aa85c80da1ebd959f",
"tests/frontend/intelligence-settings.test.tsx": "80feabb237675ecda8a4a516a58a4cc74cfd633e5900964625d1b0431f3c8670",
"routes/web.php": "279f3d92fabd359e8da154a288f6ff45a46c287897b424081d4a19d54636eeb5"
}
"checked_at": "2026-10-30T15:16:21.466309+00:00",
"environment": "local evaluation 8005",
"scope": [
"independent tenant settings for procurement and people local briefs",
"optimistic version reason and transactional audit",
"preserve full reports process decisions and access rules",
"offline synthetic AI assessment of citation coverage and literal matches",
"no automatic semantic certification"
],
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 82,
"passed": 82,
"assertions": 1337,
"duration_ms": 12897
},
"react_inertia_tests": 33,
"postgresql_integration": {
"tool": "phpunit",
"result": "passed",
"tests": 1,
"passed": 1,
"assertions": 110,
"duration_ms": 2935
},
"postgresql_proof": "intelligence-policy-pg.json",
"installation_proof": "intelligence-policy-install.json",
"manual_fixture_assessment": {
"method": "synthetic_ai_assessment_v1",
"facts": 3,
"claims": 3,
"cited_facts": 3,
"uncited_fact_ids": [],
"citation_coverage_complete": true,
"exact_source_text_matches": 3,
"requires_human_review": true,
"semantic_accuracy": "not_automatically_verified"
},
"fixture_is_model_output": false,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"http_proof": "menu-links.json",
"prior_full_suite_reused": "people-clarifications.json",
"accounts_or_grants_changed": false,
"tenant_policy_choices_automatically_created": false,
"live_external_calls": 0,
"live_authorisation": "previously granted for one synthetic call; pending credential setup by owner",
"real_document_AI_enabled": false,
"visual_review": false,
"domain_installed": false,
"source_sha256": {
"app/Services/IntelligencePolicy.php": "c25d9c97e3902327486dc128274662d77b3da041b18d675510b0d29a76c7465b",
"app/Services/OrganizationConfiguration.php": "6a3a95f03491f47e0d80f12568d7e04a9a202a463d980d82daa794bbba17328e",
"app/Services/SyntheticAiAssessment.php": "a664903a3b0e4889e931d085697891588df7aced7e868e8e80c438d798365963",
"app/Services/SyntheticAiRehearsal.php": "76d0f2fa2ef07e670dc74b67e098d0d49df3755354342dc8592fbcb8f96796c6",
"app/Console/Commands/SgcAiAssess.php": "e47320fa2aeb0787e1d43b3c6fe2acb73c5732b63aa57d2f1ec6ae7109b1213d",
"app/Models/Tenant.php": "e7446af40d11ef77747caac54e623efb7c560d60bf05161557dac3086ea72d96",
"app/Http/Controllers/OrganizationConfigurationController.php": "88916867ddc3bcaccae9145bf9ca0c8598b3f6c8206c9222cbaed91c1490427b",
"app/Http/Controllers/PeopleHiringController.php": "6da8c0728838050b32db5bbde09420e164265cd78b185d500b040f03cb46e35f",
"app/Http/Controllers/ProcurementReviewReportController.php": "9ff40d3ee01cc0e5e97b900d2d0d6be8909c93c42df949deb14a33e21de7e828",
"database/migrations/2026_10_30_000033_add_intelligence_policy.php": "37b109a2bcad6572498e6350363e75e9f981da5f0ba921c50e861805a34a0ada",
"resources/js/components/intelligence-settings.tsx": "f63b9f7795bdfd9a263a9339d752618d13b87d05d3985272062aa5a5cfacfb79",
"resources/js/pages/company/parameters.tsx": "380ccc3933131004950d281108100b568c8b90a69a2286788fb8798500fc6ff2",
"resources/js/pages/people/show.tsx": "ad2f1ec8aeb350ade2da2ebd242ef448e068ca2974912aae3afdedf0530ecdb0",
"resources/js/pages/purchases/review-report.tsx": "7f572d0f27b2e1b35cddb4518846534940dbf99c13e76e3270eb572c0fef83ee",
"tests/Feature/OrganizationConfigurationTest.php": "1072451618d1104e61cec0b879597de3e3f3a7060f53c91f3196a181ad912bb3",
"tests/Feature/PeopleHiringTest.php": "9db07af59529ea6e9bc559531498813c5983bfc7d64c5f5729ad23d30aedfa1f",
"tests/Feature/SyntheticAiAssessmentTest.php": "6913b68906d41806312b244f9909385892ed8ce88129fad6e711c0d9fe6ead36",
"tests/Fixtures/ai-synthetic-result.json": "d488c086b2199a70b98f2238634d595d89fd086e3c52dc3aa85c80da1ebd959f",
"tests/frontend/intelligence-settings.test.tsx": "80feabb237675ecda8a4a516a58a4cc74cfd633e5900964625d1b0431f3c8670",
"routes/web.php": "279f3d92fabd359e8da154a288f6ff45a46c287897b424081d4a19d54636eeb5"
}
}
+9 -9
View File
@@ -1,11 +1,11 @@
{
"checked_at": "2026-10-29T18:41:52.592Z",
"documents_checked": 1,
"per_invoice_entry": true,
"return_to_invoices": true,
"invalid_identifiers_refused": true,
"unknown_invoice_refused": true,
"full_listing_unchanged": true,
"business_commands": 0,
"visual_review": false
"checked_at": "2026-10-29T18:41:52.592Z",
"documents_checked": 1,
"per_invoice_entry": true,
"return_to_invoices": true,
"invalid_identifiers_refused": true,
"unknown_invoice_refused": true,
"full_listing_unchanged": true,
"business_commands": 0,
"visual_review": false
}
File diff suppressed because it is too large Load Diff
+169 -169
View File
@@ -1,174 +1,174 @@
{
"checked_at": "2026-10-30T17:33:21.203Z",
"results": [
{
"role": "admin",
"checked_entries": 32,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/requisicoes?view=approvals",
"/requisicoes?view=decided",
"/cotacoes",
"/ordens",
"/revisao-compras",
"/fornecedores",
"/fornecedores/avaliacoes",
"/pessoas/cadastro",
"/pessoas",
"/pessoas?kind=service",
"/pessoas?kind=staff",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/facturas",
"/obrigacoes-fornecedores",
"/pagamentos",
"checked_at": "2026-10-30T17:33:21.203Z",
"results": [
{
"role": "admin",
"checked_entries": 32,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/requisicoes?view=approvals",
"/requisicoes?view=decided",
"/cotacoes",
"/ordens",
"/revisao-compras",
"/fornecedores",
"/fornecedores/avaliacoes",
"/pessoas/cadastro",
"/pessoas",
"/pessoas?kind=service",
"/pessoas?kind=staff",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/facturas",
"/obrigacoes-fornecedores",
"/pagamentos",
"/orcamentos",
"/regras-investimento",
"/empresa",
"/administracao/parametrizacao",
"/politica-admissao",
"/politica-recomendacao",
"/conflitos",
"/relatorios",
"/relatorios/medidas-fornecedores"
]
},
{
"role": "procurement",
"checked_entries": 20,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/requisicoes?view=approvals",
"/requisicoes?view=decided",
"/cotacoes",
"/ordens",
"/revisao-compras",
"/fornecedores",
"/fornecedores/avaliacoes",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/regras-investimento",
"/conflitos",
"/relatorios",
"/relatorios/medidas-fornecedores"
]
},
{
"role": "finance",
"checked_entries": 24,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/requisicoes?view=approvals",
"/requisicoes?view=decided",
"/cotacoes",
"/ordens",
"/revisao-compras",
"/fornecedores",
"/fornecedores/avaliacoes",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/facturas",
"/obrigacoes-fornecedores",
"/pagamentos",
"/orcamentos",
"/regras-investimento",
"/conflitos",
"/relatorios",
"/relatorios/medidas-fornecedores"
]
},
{
"role": "department_head",
"checked_entries": 17,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/requisicoes?view=approvals",
"/requisicoes?view=decided",
"/cotacoes",
"/ordens",
"/revisao-compras",
"/fornecedores",
"/fornecedores/avaliacoes",
"/recepcoes",
"/equipamentos",
"/conflitos",
"/relatorios",
"/relatorios/medidas-fornecedores"
]
},
{
"role": "warehouse",
"checked_entries": 11,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/revisao-compras",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/conflitos"
]
},
{
"role": "requester",
"checked_entries": 7,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/revisao-compras",
"/conflitos"
]
}
],
"request_detail_checked": true,
"invoice_count": 1,
"process_links_checked": [
"/requisicoes/1",
"/orcamentos",
"/regras-investimento",
"/empresa",
"/administracao/parametrizacao",
"/politica-admissao",
"/politica-recomendacao",
"/conflitos",
"/relatorios",
"/relatorios/medidas-fornecedores"
]
},
{
"role": "procurement",
"checked_entries": 20,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/requisicoes?view=approvals",
"/requisicoes?view=decided",
"/cotacoes",
"/ordens",
"/revisao-compras",
"/fornecedores",
"/fornecedores/avaliacoes",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/regras-investimento",
"/conflitos",
"/relatorios",
"/relatorios/medidas-fornecedores"
]
},
{
"role": "finance",
"checked_entries": 24,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/requisicoes?view=approvals",
"/requisicoes?view=decided",
"/cotacoes",
"/ordens",
"/revisao-compras",
"/fornecedores",
"/fornecedores/avaliacoes",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/requisicoes/1/cotacoes",
"/requisicoes/1/adjudicacao",
"/ordens/1",
"/ordens/1/recepcoes",
"/facturas",
"/obrigacoes-fornecedores",
"/pagamentos",
"/orcamentos",
"/regras-investimento",
"/conflitos",
"/relatorios",
"/relatorios/medidas-fornecedores"
]
},
{
"role": "department_head",
"checked_entries": 17,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/requisicoes?view=approvals",
"/requisicoes?view=decided",
"/cotacoes",
"/ordens",
"/revisao-compras",
"/fornecedores",
"/fornecedores/avaliacoes",
"/recepcoes",
"/equipamentos",
"/conflitos",
"/relatorios",
"/relatorios/medidas-fornecedores"
]
},
{
"role": "warehouse",
"checked_entries": 11,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/revisao-compras",
"/recepcoes",
"/stock",
"/stock/operacoes",
"/equipamentos",
"/conflitos"
]
},
{
"role": "requester",
"checked_entries": 7,
"paths": [
"/requisicoes/criar",
"/requisicoes?view=mine",
"/requisicoes?view=mine&status=draft",
"/requisicoes?view=all",
"/planeamento",
"/revisao-compras",
"/conflitos"
]
}
],
"request_detail_checked": true,
"invoice_count": 1,
"process_links_checked": [
"/requisicoes/1",
"/orcamentos",
"/requisicoes/1/cotacoes",
"/requisicoes/1/adjudicacao",
"/ordens/1",
"/ordens/1/recepcoes",
"/facturas",
"/pagamentos",
"/requisicoes/1/relatorio",
"/requisicoes/1/admissao",
"/requisicoes/1/recomendacao",
"/recepcoes/1"
],
"canonical_query_order": true,
"active_subroutes": true,
"vat_setting_and_default_checked": true,
"comparison_ties_and_reasons_checked": true,
"business_history_unchanged": true,
"business_commands": 0
"/requisicoes/1/relatorio",
"/requisicoes/1/admissao",
"/requisicoes/1/recomendacao",
"/recepcoes/1"
],
"canonical_query_order": true,
"active_subroutes": true,
"vat_setting_and_default_checked": true,
"comparison_ties_and_reasons_checked": true,
"business_history_unchanged": true,
"business_commands": 0
}
+23 -23
View File
@@ -1,25 +1,25 @@
{
"checked_at": "2026-10-30T08:46:09.751Z",
"base": "http://127.0.0.1:8005",
"path": "/administracao/parametrizacao",
"roles": [
"admin",
"requester",
"department_head",
"procurement",
"finance",
"warehouse"
],
"owner_access": true,
"other_legacy_profiles_refused": true,
"passwords_not_returned": true,
"configuration_state": {
"active": false,
"version": 1,
"profiles": 0
},
"business_commands": 0,
"accounts_created": 0,
"permissions_changed": false,
"visual_review": false
"checked_at": "2026-10-30T08:46:09.751Z",
"base": "http://127.0.0.1:8005",
"path": "/administracao/parametrizacao",
"roles": [
"admin",
"requester",
"department_head",
"procurement",
"finance",
"warehouse"
],
"owner_access": true,
"other_legacy_profiles_refused": true,
"passwords_not_returned": true,
"configuration_state": {
"active": false,
"version": 1,
"profiles": 0
},
"business_commands": 0,
"accounts_created": 0,
"permissions_changed": false,
"visual_review": false
}
+61 -61
View File
@@ -1,63 +1,63 @@
{
"checked_at": "2026-10-30T08:47:37.236992+00:00",
"full_suite": {
"total": 603,
"passed": 601,
"skipped": 2,
"assertions": 5157,
"log": "storage/logs/organization-delivery-tests.log"
},
"postgresql_configuration": {
"tests": 13,
"passed": 13,
"assertions": 96,
"disposable_database_removed": true,
"log": "storage/logs/organization-pg-tests.log"
},
"phpstan_errors": 0,
"typescript": "passed",
"lint_format_targeted": "passed",
"pint": "passed",
"build": "passed",
"build_log": "storage/logs/organization-build.log",
"runtime_files_verified": 18,
"menu_entries": 107,
"evaluation_catalog_pages": 23,
"installed_only_in_evaluation": true,
"configuration_activated_in_evaluation": false,
"accounts_or_permissions_changed_in_evaluation": false,
"maintenance": {
"named_account": true,
"normal_authentication": true,
"expiry_required": true,
"revocable": true,
"audited": true,
"read_only": true,
"universal_password": false,
"hidden_entry": false
},
"domain_installed": false,
"visual_review": false,
"remaining": [
"permission granularity by operation",
"universal workflow stage/condition editor",
"specific common financial identity and entitlement associations",
"visual and print review"
],
"sources": {
"app/Services/OrganizationAccess.php": "872f06e50d561714ab50d88dc113c0fa054dea9f170a09bb37f8d39d07b78a09",
"app/Services/OrganizationConfiguration.php": "e2d6e725a78dc4f10d931017969d0fcdacaed4dd6b37a4a08a96cb44b09fd1b5",
"app/Http/Controllers/OrganizationConfigurationController.php": "9765cee7b1770f48fde4affcefc518a36576190bbaeac8bce079655353377c72",
"app/Http/Controllers/CompanyController.php": "5a8112e0f1535f90aeb8cf9785259da8d713d1bfcd3ad908aa3eabd161dba8a3",
"app/Http/Middleware/EnsureOrganizationAccess.php": "6782164f18f982fedb91dfb4fb2365895c757d776d7bf1728a91682fa95b8b02",
"app/Models/User.php": "835c119c097e7927136e8c7775ebb5ed677f964e766a213ec3c04e0b7388e740",
"app/Enums/PurchasingRole.php": "91da2d40bf11988fd6324aba8e5068e6be7c92222be31baf83844c134affe1c4",
"database/migrations/2026_10_30_000027_create_organization_access.php": "130d92ba8a093a8f77678e1ce4c1a90125bb996e88ed81633359d224fe77a853",
"database/seeders/DatabaseSeeder.php": "2aaea71ca2eba604abd5723e95cd1a99521c61b6f00b70dfedba246f3dcfae48",
"resources/js/pages/company/parameters.tsx": "c0760c50d100c8b2dfb3d3ad3b2a05fae14eed7900e95461c766a885d07677d1",
"resources/js/pages/company/setup.tsx": "614000ad22692ea3e707a00103227953d95f32fd7d9a7fc031bdbba7a1ccdb48",
"resources/js/lib/procurement-navigation.ts": "d7a42ec76e0166e4783bb496834325ad583b903ebf8c999c2ba5a2307431d56d",
"tests/Feature/OrganizationConfigurationTest.php": "eef7e82a6efc8ebad46cea8752861c01bec53c552874d72120a6e982f0114d73",
"scripts/organization-access-check.mjs": "1ca7cd2bdafa5f62afb26fa0b074d879273cda27c8350b968de54c8f53328bb0"
}
"checked_at": "2026-10-30T08:47:37.236992+00:00",
"full_suite": {
"total": 603,
"passed": 601,
"skipped": 2,
"assertions": 5157,
"log": "storage/logs/organization-delivery-tests.log"
},
"postgresql_configuration": {
"tests": 13,
"passed": 13,
"assertions": 96,
"disposable_database_removed": true,
"log": "storage/logs/organization-pg-tests.log"
},
"phpstan_errors": 0,
"typescript": "passed",
"lint_format_targeted": "passed",
"pint": "passed",
"build": "passed",
"build_log": "storage/logs/organization-build.log",
"runtime_files_verified": 18,
"menu_entries": 107,
"evaluation_catalog_pages": 23,
"installed_only_in_evaluation": true,
"configuration_activated_in_evaluation": false,
"accounts_or_permissions_changed_in_evaluation": false,
"maintenance": {
"named_account": true,
"normal_authentication": true,
"expiry_required": true,
"revocable": true,
"audited": true,
"read_only": true,
"universal_password": false,
"hidden_entry": false
},
"domain_installed": false,
"visual_review": false,
"remaining": [
"permission granularity by operation",
"universal workflow stage/condition editor",
"specific common financial identity and entitlement associations",
"visual and print review"
],
"sources": {
"app/Services/OrganizationAccess.php": "872f06e50d561714ab50d88dc113c0fa054dea9f170a09bb37f8d39d07b78a09",
"app/Services/OrganizationConfiguration.php": "e2d6e725a78dc4f10d931017969d0fcdacaed4dd6b37a4a08a96cb44b09fd1b5",
"app/Http/Controllers/OrganizationConfigurationController.php": "9765cee7b1770f48fde4affcefc518a36576190bbaeac8bce079655353377c72",
"app/Http/Controllers/CompanyController.php": "5a8112e0f1535f90aeb8cf9785259da8d713d1bfcd3ad908aa3eabd161dba8a3",
"app/Http/Middleware/EnsureOrganizationAccess.php": "6782164f18f982fedb91dfb4fb2365895c757d776d7bf1728a91682fa95b8b02",
"app/Models/User.php": "835c119c097e7927136e8c7775ebb5ed677f964e766a213ec3c04e0b7388e740",
"app/Enums/PurchasingRole.php": "91da2d40bf11988fd6324aba8e5068e6be7c92222be31baf83844c134affe1c4",
"database/migrations/2026_10_30_000027_create_organization_access.php": "130d92ba8a093a8f77678e1ce4c1a90125bb996e88ed81633359d224fe77a853",
"database/seeders/DatabaseSeeder.php": "2aaea71ca2eba604abd5723e95cd1a99521c61b6f00b70dfedba246f3dcfae48",
"resources/js/pages/company/parameters.tsx": "c0760c50d100c8b2dfb3d3ad3b2a05fae14eed7900e95461c766a885d07677d1",
"resources/js/pages/company/setup.tsx": "614000ad22692ea3e707a00103227953d95f32fd7d9a7fc031bdbba7a1ccdb48",
"resources/js/lib/procurement-navigation.ts": "d7a42ec76e0166e4783bb496834325ad583b903ebf8c999c2ba5a2307431d56d",
"tests/Feature/OrganizationConfigurationTest.php": "eef7e82a6efc8ebad46cea8752861c01bec53c552874d72120a6e982f0114d73",
"scripts/organization-access-check.mjs": "1ca7cd2bdafa5f62afb26fa0b074d879273cda27c8350b968de54c8f53328bb0"
}
}
+23 -26
View File
@@ -1,28 +1,25 @@
{
"checked_at": "2026-10-29T19:41:38.688Z",
"passed": true,
"fault_recovery": true,
"concurrent_recognition": true,
"original_business_history_unchanged": true,
"new_transfers_executed": false,
"scenario": {
"principal_minor": 1160000,
"balance_minor": 860000,
"confirmed_minor": 300000,
"pending_minor": 100000,
"rejected_minor": 50000,
"obligations": 1,
"imports": 1,
"payment_links": 3,
"business_fingerprint": "fb66326abf7968aa818b0c6a214c2a1f59966fa11d3692e748fa0fa1aaa3cf1f",
"ui_balance_correct": true,
"due_on": null,
"days_overdue": null,
"append_only_tables": [
"pa_history_imports",
"pa_imported_payments"
],
"changed_history_refused": true
},
"visual_review": false
"checked_at": "2026-10-29T19:41:38.688Z",
"passed": true,
"fault_recovery": true,
"concurrent_recognition": true,
"original_business_history_unchanged": true,
"new_transfers_executed": false,
"scenario": {
"principal_minor": 1160000,
"balance_minor": 860000,
"confirmed_minor": 300000,
"pending_minor": 100000,
"rejected_minor": 50000,
"obligations": 1,
"imports": 1,
"payment_links": 3,
"business_fingerprint": "fb66326abf7968aa818b0c6a214c2a1f59966fa11d3692e748fa0fa1aaa3cf1f",
"ui_balance_correct": true,
"due_on": null,
"days_overdue": null,
"append_only_tables": ["pa_history_imports", "pa_imported_payments"],
"changed_history_refused": true
},
"visual_review": false
}
+17 -17
View File
@@ -1,19 +1,19 @@
{
"checked_at": "2026-10-29T19:41:38.669Z",
"passed": true,
"atomic_rollback": true,
"concurrent_decision_once": true,
"original_import_preserved": true,
"new_transfers_executed": false,
"scenario": {
"balance_minor": 760000,
"confirmed_minor": 400000,
"pending_minor": 0,
"decisions": 1,
"events": 1,
"original_status": "confirmed",
"append_only": true,
"frozen": "4b5aa40f964c0709661449b4ab5bfd7cd8295eac9c4d186822d0a1e10aa63534"
},
"visual_review": false
"checked_at": "2026-10-29T19:41:38.669Z",
"passed": true,
"atomic_rollback": true,
"concurrent_decision_once": true,
"original_import_preserved": true,
"new_transfers_executed": false,
"scenario": {
"balance_minor": 760000,
"confirmed_minor": 400000,
"pending_minor": 0,
"decisions": 1,
"events": 1,
"original_status": "confirmed",
"append_only": true,
"frozen": "4b5aa40f964c0709661449b4ab5bfd7cd8295eac9c4d186822d0a1e10aa63534"
},
"visual_review": false
}
+1 -3
View File
@@ -3,9 +3,7 @@
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"PeopleHiringTest"
],
"test_files": ["PeopleHiringTest"],
"original_evaluation_untouched": true,
"database_removed": true
}
+53 -53
View File
@@ -1,55 +1,55 @@
{
"checked_at": "2026-10-30T12:12:17.828306+00:00",
"environment": "local evaluation 8005",
"scope": [
"separate purchasing and people navigation and workflows",
"per-process named access with expiry revocation version and audit",
"administrative team setup without automatic candidate access",
"server-side financial interview and contract projections including selection copies",
"separate service and staff annex fields and classified requirements",
"typed reported observed and verified interview evidence",
"old records and rules preserved"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 638,
"passed": 636,
"assertions": 5556,
"duration_ms": 135871,
"skipped": 2
},
"latest_module_tests": {
"sqlite": 16,
"postgresql": 16,
"assertions": 286,
"disposable_database_removed": true
},
"react_inertia_tests": 22,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"runtime_sha256_files": 18,
"menu_entries_by_role": 110,
"menu_groups_maximum": 6,
"http_proof": "menu-links.json",
"installation_proof": "people-access-install.json",
"business_accounts_or_grants_created_in_evaluation": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/PeopleHiring.php": "ec0365c2ef2b1035468f16e8d4923b458889fc8438bbc6532de95791dda17548",
"app/Services/PeopleAccess.php": "5ed3feac3f48a4516bd611638e9720ae1096ee86ef6bc00ee6c48fbc67ccf4ea",
"app/Services/PeopleForms.php": "9ae5c1da667566cf08c4cc250cdc04a8ecba8a9c9af19b07a4138b1501aa4da8",
"app/Http/Controllers/PeopleHiringController.php": "7b4dd572ec3d67c112e02243d6db69d71fe5f17a8e64712738b553b114a4e275",
"database/migrations/2026_10_30_000031_create_people_process_access.php": "e899d6adc07122ec6d4ec7606a4714ae69ddc6db30479d4ad66f92767d8d2560",
"resources/js/pages/people/access.tsx": "399beb8193906491528954680eb8900d4aa5b5a7a8dd3af6557e6e0fd579780d",
"resources/js/pages/people/index.tsx": "a822ee13c1dc158e76396959e944d30e01b7385879050cd0d977c8972e98d6a8",
"resources/js/pages/people/show.tsx": "84a3910c9840f88c8c42465d2209834b5d82a94df860dfec31705b1a95623663",
"resources/js/lib/procurement-navigation.ts": "bcad7f21492355f8f66687d5dfb74fa105a2b575cf210dc1618f90ddea8e9251",
"tests/Feature/PeopleHiringTest.php": "611db1c7e744dae085b966c1c01583336a59ef8daa4087f8904ba14c5b9dcd61",
"tests/frontend/people-hiring.test.tsx": "67b9fe5af8f9b076b2b8ee8abc6b441b3a36bd8d4dd5bf04978eb5aa0f02a3a3"
}
"checked_at": "2026-10-30T12:12:17.828306+00:00",
"environment": "local evaluation 8005",
"scope": [
"separate purchasing and people navigation and workflows",
"per-process named access with expiry revocation version and audit",
"administrative team setup without automatic candidate access",
"server-side financial interview and contract projections including selection copies",
"separate service and staff annex fields and classified requirements",
"typed reported observed and verified interview evidence",
"old records and rules preserved"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 638,
"passed": 636,
"assertions": 5556,
"duration_ms": 135871,
"skipped": 2
},
"latest_module_tests": {
"sqlite": 16,
"postgresql": 16,
"assertions": 286,
"disposable_database_removed": true
},
"react_inertia_tests": 22,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"runtime_sha256_files": 18,
"menu_entries_by_role": 110,
"menu_groups_maximum": 6,
"http_proof": "menu-links.json",
"installation_proof": "people-access-install.json",
"business_accounts_or_grants_created_in_evaluation": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/PeopleHiring.php": "ec0365c2ef2b1035468f16e8d4923b458889fc8438bbc6532de95791dda17548",
"app/Services/PeopleAccess.php": "5ed3feac3f48a4516bd611638e9720ae1096ee86ef6bc00ee6c48fbc67ccf4ea",
"app/Services/PeopleForms.php": "9ae5c1da667566cf08c4cc250cdc04a8ecba8a9c9af19b07a4138b1501aa4da8",
"app/Http/Controllers/PeopleHiringController.php": "7b4dd572ec3d67c112e02243d6db69d71fe5f17a8e64712738b553b114a4e275",
"database/migrations/2026_10_30_000031_create_people_process_access.php": "e899d6adc07122ec6d4ec7606a4714ae69ddc6db30479d4ad66f92767d8d2560",
"resources/js/pages/people/access.tsx": "399beb8193906491528954680eb8900d4aa5b5a7a8dd3af6557e6e0fd579780d",
"resources/js/pages/people/index.tsx": "a822ee13c1dc158e76396959e944d30e01b7385879050cd0d977c8972e98d6a8",
"resources/js/pages/people/show.tsx": "84a3910c9840f88c8c42465d2209834b5d82a94df860dfec31705b1a95623663",
"resources/js/lib/procurement-navigation.ts": "bcad7f21492355f8f66687d5dfb74fa105a2b575cf210dc1618f90ddea8e9251",
"tests/Feature/PeopleHiringTest.php": "611db1c7e744dae085b966c1c01583336a59ef8daa4087f8904ba14c5b9dcd61",
"tests/frontend/people-hiring.test.tsx": "67b9fe5af8f9b076b2b8ee8abc6b441b3a36bd8d4dd5bf04978eb5aa0f02a3a3"
}
}
+1 -3
View File
@@ -3,9 +3,7 @@
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"PeopleHiringTest"
],
"test_files": ["PeopleHiringTest"],
"original_evaluation_untouched": true,
"database_removed": true
}
+58 -58
View File
@@ -1,60 +1,60 @@
{
"checked_at": "2026-10-30T12:56:09.626883+00:00",
"environment": "local evaluation 8005",
"scope": [
"assigned clarification follow-up from immutable review",
"late responses and reassignment",
"independent review return or justified waiver",
"privacy limited to assigned question",
"personal operational tasks overdue alerts and printable report",
"deadline-only change preserves pending selection basis",
"substantive changes checked before pending approval",
"approved selection and original scores preserved"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 652,
"passed": 650,
"assertions": 6142,
"duration_ms": 103765,
"skipped": 2
},
"disposable_postgresql": {
"tool": "pest",
"result": "passed",
"tests": 30,
"passed": 30,
"assertions": 836,
"duration_ms": 21163
},
"react_inertia_tests": 25,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build": "passed",
"runtime_sha256_files": 18,
"http_proof": "menu-links.json",
"installation_proof": "people-clarifications-install.json",
"postgresql_proof": "people-clarifications-pg.json",
"new_accounts": 0,
"new_local_assignments": 0,
"outbound_messages": 0,
"domain_installed": false,
"visual_review": false,
"production_consulta_hotfix_published": false,
"source_sha256": {
"app/Services/PeopleClarifications.php": "f52dfd2a29eb7a8180a0449d7c4d9a4ffd15da1569d492f22c58c2c704d245b3",
"app/Services/PeopleHiring.php": "ba43edecf4eb09ec0fd34b0639faa3053e985ba65fd10d737a4ee7cc5cc105f2",
"app/Services/PeopleWorkdesk.php": "db901201362434d89743641306cfb1cee0b7bb70059ab87593fd6e00fef9bc21",
"app/Http/Controllers/PeopleHiringController.php": "11b01291e8378e7e330bcba9e28a68d0fbb707bd0200881a8b126c866c3793ff",
"database/migrations/2026_10_30_000032_create_people_clarifications.php": "a8cd29710192f1cb1f9046d4643a10e1aa4df1a463a2939e880082fe4b76da6d",
"resources/js/components/people-clarifications.tsx": "a378159cf383d8cfa78c2ffaaf151d311a3e2c6f58ae3d72f21ebe9f9852e95b",
"resources/js/pages/people/show.tsx": "e51622810a0c70436cc00eefadf51a9f37cf350098fa2d049f652988916d0d3c",
"resources/js/pages/people/index.tsx": "84a956018fd12a4cb8de9df875742a4d119d8975c70f1a88ca2b0b6275f034c5",
"tests/Feature/PeopleHiringTest.php": "47e15747b5fbf5a618289ae4d25efc9749166e889078c404f166ab366e615b5b",
"tests/frontend/people-hiring.test.tsx": "7709432faf232497ff3c057afd1d5b6516b7cb5a6d8d52d83a1a4cc0afb70561",
"routes/web.php": "c7255ae11660d009f9b25d263681500dedb0f1a700d19c2994312612d599286f"
}
"checked_at": "2026-10-30T12:56:09.626883+00:00",
"environment": "local evaluation 8005",
"scope": [
"assigned clarification follow-up from immutable review",
"late responses and reassignment",
"independent review return or justified waiver",
"privacy limited to assigned question",
"personal operational tasks overdue alerts and printable report",
"deadline-only change preserves pending selection basis",
"substantive changes checked before pending approval",
"approved selection and original scores preserved"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 652,
"passed": 650,
"assertions": 6142,
"duration_ms": 103765,
"skipped": 2
},
"disposable_postgresql": {
"tool": "pest",
"result": "passed",
"tests": 30,
"passed": 30,
"assertions": 836,
"duration_ms": 21163
},
"react_inertia_tests": 25,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build": "passed",
"runtime_sha256_files": 18,
"http_proof": "menu-links.json",
"installation_proof": "people-clarifications-install.json",
"postgresql_proof": "people-clarifications-pg.json",
"new_accounts": 0,
"new_local_assignments": 0,
"outbound_messages": 0,
"domain_installed": false,
"visual_review": false,
"production_consulta_hotfix_published": false,
"source_sha256": {
"app/Services/PeopleClarifications.php": "f52dfd2a29eb7a8180a0449d7c4d9a4ffd15da1569d492f22c58c2c704d245b3",
"app/Services/PeopleHiring.php": "ba43edecf4eb09ec0fd34b0639faa3053e985ba65fd10d737a4ee7cc5cc105f2",
"app/Services/PeopleWorkdesk.php": "db901201362434d89743641306cfb1cee0b7bb70059ab87593fd6e00fef9bc21",
"app/Http/Controllers/PeopleHiringController.php": "11b01291e8378e7e330bcba9e28a68d0fbb707bd0200881a8b126c866c3793ff",
"database/migrations/2026_10_30_000032_create_people_clarifications.php": "a8cd29710192f1cb1f9046d4643a10e1aa4df1a463a2939e880082fe4b76da6d",
"resources/js/components/people-clarifications.tsx": "a378159cf383d8cfa78c2ffaaf151d311a3e2c6f58ae3d72f21ebe9f9852e95b",
"resources/js/pages/people/show.tsx": "e51622810a0c70436cc00eefadf51a9f37cf350098fa2d049f652988916d0d3c",
"resources/js/pages/people/index.tsx": "84a956018fd12a4cb8de9df875742a4d119d8975c70f1a88ca2b0b6275f034c5",
"tests/Feature/PeopleHiringTest.php": "47e15747b5fbf5a618289ae4d25efc9749166e889078c404f166ab366e615b5b",
"tests/frontend/people-hiring.test.tsx": "7709432faf232497ff3c057afd1d5b6516b7cb5a6d8d52d83a1a4cc0afb70561",
"routes/web.php": "c7255ae11660d009f9b25d263681500dedb0f1a700d19c2994312612d599286f"
}
}
+1 -3
View File
@@ -3,9 +3,7 @@
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"PeopleHiringTest"
],
"test_files": ["PeopleHiringTest"],
"original_evaluation_untouched": true,
"database_removed": true
}
+57 -57
View File
@@ -1,59 +1,59 @@
{
"checked_at": "2026-10-30T11:46:07.311681+00:00",
"environment": "local evaluation 8005",
"scope": [
"individual service provider hiring",
"staff recruitment",
"process-specific criteria weights and minimum independent reviews",
"independent opening evaluation and final decision",
"candidate records and evidence",
"reasoned selection including ties and returns",
"unsigned internal contract draft and printable process report",
"separate configurable preparation and review permissions per kind"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 633,
"passed": 631,
"assertions": 5438,
"duration_ms": 178754,
"skipped": 2
},
"latest_module_tests": {
"tests": 11,
"assertions": 133,
"sqlite": "passed",
"disposable_postgresql": "passed",
"database_removed": true
},
"react_inertia_tests": 21,
"phpstan_errors": 0,
"typescript": "passed",
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"runtime_sha256_files": 18,
"installation_proof": "people-hiring-install.json",
"menu_proof": "menu-links.json",
"menu_contract_entries_by_role": 108,
"company_accounts_or_grants_created": false,
"evaluation_tables_initially_empty": true,
"external_messages_sent": false,
"signed_contracts_created": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/PeopleHiring.php": "a7e50e55034ce4085d35184f04d8549741c7fb29e4585dc334dd3bf9525a3d09",
"app/Http/Controllers/PeopleHiringController.php": "4e07d58c9f474eec85f5854e9e442978f198888994c27be376f100a0d4e2263c",
"app/Models/PeopleProcess.php": "10b1ed29426ab6988d01f1ed43b77f49b689520197c7a9023b41338fe60e7e4b",
"app/Services/OrganizationAccess.php": "84f3cddc43b1446f12390d9d3ffcf504f4a1f8909d88612ee30a9fdcb1bd7137",
"database/migrations/2026_10_30_000030_create_people_hiring.php": "c1f69354ec82ec5b3aabd0eff85c88c4a8a9eb3cb77c16e9a942d47eb1149c1b",
"resources/js/pages/people/index.tsx": "8d65c71d2c5862d640f14a37e7aea997bdfa6aacd7d128568532cbf5821295fd",
"resources/js/pages/people/show.tsx": "ffa77f0bb5e72877f7aab6fb30ae129cd7dd7c72911c0ef156a958f821451dc0",
"resources/js/lib/people-hiring.ts": "65efd515d39541c7e875127c91731bfc1a379f8db58fcd34e0f39e1a8d75f807",
"resources/js/lib/procurement-navigation.ts": "9578b8ac69b8b8a8e6cb0f7134e3cac55e19c1e973ecb21015b592fc8b804318",
"tests/Feature/PeopleHiringTest.php": "f1cceadb0ddf7faaf901dd2283953812dad5fb9ebc4f1f3c4f57e546f4591abc",
"tests/frontend/people-hiring.test.tsx": "5548b79b353bc36451b42888f7f7727f2524d46df677e106a60968c8e6039dc9"
}
"checked_at": "2026-10-30T11:46:07.311681+00:00",
"environment": "local evaluation 8005",
"scope": [
"individual service provider hiring",
"staff recruitment",
"process-specific criteria weights and minimum independent reviews",
"independent opening evaluation and final decision",
"candidate records and evidence",
"reasoned selection including ties and returns",
"unsigned internal contract draft and printable process report",
"separate configurable preparation and review permissions per kind"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 633,
"passed": 631,
"assertions": 5438,
"duration_ms": 178754,
"skipped": 2
},
"latest_module_tests": {
"tests": 11,
"assertions": 133,
"sqlite": "passed",
"disposable_postgresql": "passed",
"database_removed": true
},
"react_inertia_tests": 21,
"phpstan_errors": 0,
"typescript": "passed",
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"runtime_sha256_files": 18,
"installation_proof": "people-hiring-install.json",
"menu_proof": "menu-links.json",
"menu_contract_entries_by_role": 108,
"company_accounts_or_grants_created": false,
"evaluation_tables_initially_empty": true,
"external_messages_sent": false,
"signed_contracts_created": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/PeopleHiring.php": "a7e50e55034ce4085d35184f04d8549741c7fb29e4585dc334dd3bf9525a3d09",
"app/Http/Controllers/PeopleHiringController.php": "4e07d58c9f474eec85f5854e9e442978f198888994c27be376f100a0d4e2263c",
"app/Models/PeopleProcess.php": "10b1ed29426ab6988d01f1ed43b77f49b689520197c7a9023b41338fe60e7e4b",
"app/Services/OrganizationAccess.php": "84f3cddc43b1446f12390d9d3ffcf504f4a1f8909d88612ee30a9fdcb1bd7137",
"database/migrations/2026_10_30_000030_create_people_hiring.php": "c1f69354ec82ec5b3aabd0eff85c88c4a8a9eb3cb77c16e9a942d47eb1149c1b",
"resources/js/pages/people/index.tsx": "8d65c71d2c5862d640f14a37e7aea997bdfa6aacd7d128568532cbf5821295fd",
"resources/js/pages/people/show.tsx": "ffa77f0bb5e72877f7aab6fb30ae129cd7dd7c72911c0ef156a958f821451dc0",
"resources/js/lib/people-hiring.ts": "65efd515d39541c7e875127c91731bfc1a379f8db58fcd34e0f39e1a8d75f807",
"resources/js/lib/procurement-navigation.ts": "9578b8ac69b8b8a8e6cb0f7134e3cac55e19c1e973ecb21015b592fc8b804318",
"tests/Feature/PeopleHiringTest.php": "f1cceadb0ddf7faaf901dd2283953812dad5fb9ebc4f1f3c4f57e546f4591abc",
"tests/frontend/people-hiring.test.tsx": "5548b79b353bc36451b42888f7f7727f2524d46df677e106a60968c8e6039dc9"
}
}
+43 -43
View File
@@ -1,45 +1,45 @@
{
"checked_at": "2026-10-30T13:01:28.499029+00:00",
"environment": "local evaluation 8005",
"scope": [
"authorised filtered operational reading",
"calendar delays and oldest five source links",
"separate overdue occurrence and process counts",
"personal task distribution and independent approval counts",
"explicit missing deadlines and deterministic method",
"documented AI ML product roadmap"
],
"method": "operational_facts_v1",
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 32,
"passed": 32,
"assertions": 856,
"duration_ms": 10518
},
"react_inertia_tests": 26,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"accepted_full_suite_reused": "people-clarifications.json",
"http_proof": "menu-links.json",
"new_migrations": 0,
"new_data_writes": 0,
"external_AI_calls": 0,
"trained_ml_model": false,
"AI_provider_configured": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/PeopleOperationalInsights.php": "fab92b0b0c58fe608a7e030cbfaa2e36842cf391a609fd05bb6f4b443be1ede6",
"app/Http/Controllers/PeopleHiringController.php": "5cf48435c3ba22505544dbaecd368d7abf27bb97edf55158308507db4c36f767",
"resources/js/components/people-operational-insights.tsx": "fce6a71ecc15979749437945639aed6b4ed3bcbfedcee82d50d95a9469ca4300",
"resources/js/pages/people/index.tsx": "bf0753393b9d5cc851be7dccadc27fb3421c0bc1a5215b6af779e1a114034bb9",
"tests/Feature/PeopleHiringTest.php": "01dacd9895e10391732f65372a7a8872576527e4d13b8a4ae8f612c2485fc958",
"tests/frontend/people-hiring.test.tsx": "b1fce7ede76258ee62a686e487e2bcce666b43b9595619d4da1a73d6c9d42d71",
"docs/inteligencia-sgc.md": "51e5ecf9fa8d54a54272fa263b4202f69873145572a9ea7892a5603c37c334cd"
}
"checked_at": "2026-10-30T13:01:28.499029+00:00",
"environment": "local evaluation 8005",
"scope": [
"authorised filtered operational reading",
"calendar delays and oldest five source links",
"separate overdue occurrence and process counts",
"personal task distribution and independent approval counts",
"explicit missing deadlines and deterministic method",
"documented AI ML product roadmap"
],
"method": "operational_facts_v1",
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 32,
"passed": 32,
"assertions": 856,
"duration_ms": 10518
},
"react_inertia_tests": 26,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"accepted_full_suite_reused": "people-clarifications.json",
"http_proof": "menu-links.json",
"new_migrations": 0,
"new_data_writes": 0,
"external_AI_calls": 0,
"trained_ml_model": false,
"AI_provider_configured": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/PeopleOperationalInsights.php": "fab92b0b0c58fe608a7e030cbfaa2e36842cf391a609fd05bb6f4b443be1ede6",
"app/Http/Controllers/PeopleHiringController.php": "5cf48435c3ba22505544dbaecd368d7abf27bb97edf55158308507db4c36f767",
"resources/js/components/people-operational-insights.tsx": "fce6a71ecc15979749437945639aed6b4ed3bcbfedcee82d50d95a9469ca4300",
"resources/js/pages/people/index.tsx": "bf0753393b9d5cc851be7dccadc27fb3421c0bc1a5215b6af779e1a114034bb9",
"tests/Feature/PeopleHiringTest.php": "01dacd9895e10391732f65372a7a8872576527e4d13b8a4ae8f612c2485fc958",
"tests/frontend/people-hiring.test.tsx": "b1fce7ede76258ee62a686e487e2bcce666b43b9595619d4da1a73d6c9d42d71",
"docs/inteligencia-sgc.md": "51e5ecf9fa8d54a54272fa263b4202f69873145572a9ea7892a5603c37c334cd"
}
}
+1 -4
View File
@@ -3,10 +3,7 @@
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"PeopleHiringTest",
"PeopleRegistryTest"
],
"test_files": ["PeopleHiringTest", "PeopleRegistryTest"],
"original_evaluation_untouched": true,
"database_removed": true
}
+75 -75
View File
@@ -1,77 +1,77 @@
{
"checked_at": "2026-10-30T16:08:01.496023+00:00",
"environment": "local evaluation 8005",
"scope": [
"reusable person identity and profile registry",
"private creator scope and explicit shared read/manage permissions",
"save first profile during reception or select authorised existing record",
"immutable source snapshot per candidature and historical source version display",
"stale or archived registry selection rejected",
"same person unique within process and names never merged automatically",
"atomic registry candidature process and audit rollback",
"cross-company application/registry composite foreign key",
"legacy applications preserved unlinked"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 698,
"passed": 696,
"assertions": 6739,
"duration_ms": 103510,
"skipped": 2
},
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 43,
"passed": 43,
"assertions": 1124,
"duration_ms": 7925
},
"disposable_postgresql": {
"tool": "pest",
"result": "passed",
"tests": 43,
"passed": 43,
"assertions": 1124,
"duration_ms": 24156
},
"postgresql_proof": "people-registry-pg.json",
"installation_proof": "people-registry-install.json",
"react_inertia_tests": 44,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"menu_code_proof": "menu-code-contract.json",
"menu_entries_across_six_roles": 111,
"http_proof": "menu-links.json",
"runtime_sha256_files": 18,
"legacy_records_auto_linked": false,
"people_created_in_evaluation": 0,
"accounts_or_grants_changed": false,
"external_AI_calls": 0,
"global_enter_once_requirement_complete": false,
"remaining_coverage_matrix": "../reutilizacao-dados.md",
"visual_review": false,
"domain_installed": false,
"source_sha256": {
"database/migrations/2026_10_30_000034_create_people_registry.php": "f5869f09cad06b2ded831bce66da4b1f923c001acd56ac8dbfda53d3d79bcc8c",
"app/Services/PeopleRegistry.php": "cbef69cbc127b61731bf44f246201a77f1c78b2447e1d11601635260e066d89c",
"app/Services/PeopleHiring.php": "6b6cf58a022fe1fe9da2f40177557735d0e4112c946fde7e0c9b5eae32b78514",
"app/Services/OrganizationAccess.php": "76809e2f24003a2a1343cae317f47b972544adb231882ed56c6c8484dbaa4ea1",
"app/Http/Controllers/PeopleRegistryController.php": "e702275161464a9835c02f817ebf5215a1c6b3f4c875a77d717fda7c490b0db0",
"app/Http/Controllers/PeopleHiringController.php": "f0d82d3d8bff9fe46abc93bfb4faacb6e6a8d49079c6ca8499fbe479db68aa18",
"resources/js/pages/people/registry.tsx": "3b1249c3425ac1173f50031db99dc979ea875d5ea33b886dc84d003ba1011e92",
"resources/js/components/people-registry-choice.tsx": "9a2a61518b54cbbc30e45126f8fbae76663f0ac5d4c1b7fc010c3c141df00102",
"resources/js/pages/people/show.tsx": "9aaf142675ae73b2a9857a56d91121073bb1180bf7b01fec8fe657f0fbc205e1",
"resources/js/lib/procurement-navigation.ts": "242ebdea74d4d26eca32b716f88f7c9608bca590abefee56ab282010820afe2e",
"routes/web.php": "7097d8299c17ad3912e3fe3d35370d63f38365410325319eb4c571ebf5cc6fb3",
"tests/Feature/PeopleRegistryTest.php": "7b3cefce0fcf25aa910d6ffd138af00ee506d693dbb673e334a70298054a480b",
"tests/frontend/people-registry.test.tsx": "02e6915167cfdd66121ef3768fd55dd95b46bf169fda791e6e68eaf7f974ef21",
"scripts/menu-code-check.mjs": "40063716dee602fd57edd82fed90cc4c69cd315174065f067cfb377877669d9f",
"docs/reutilizacao-dados.md": "937620871fa9504b889e81b727468156a5f2cdeb17408e76389478bd10db9405"
}
"checked_at": "2026-10-30T16:08:01.496023+00:00",
"environment": "local evaluation 8005",
"scope": [
"reusable person identity and profile registry",
"private creator scope and explicit shared read/manage permissions",
"save first profile during reception or select authorised existing record",
"immutable source snapshot per candidature and historical source version display",
"stale or archived registry selection rejected",
"same person unique within process and names never merged automatically",
"atomic registry candidature process and audit rollback",
"cross-company application/registry composite foreign key",
"legacy applications preserved unlinked"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 698,
"passed": 696,
"assertions": 6739,
"duration_ms": 103510,
"skipped": 2
},
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 43,
"passed": 43,
"assertions": 1124,
"duration_ms": 7925
},
"disposable_postgresql": {
"tool": "pest",
"result": "passed",
"tests": 43,
"passed": 43,
"assertions": 1124,
"duration_ms": 24156
},
"postgresql_proof": "people-registry-pg.json",
"installation_proof": "people-registry-install.json",
"react_inertia_tests": 44,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"menu_code_proof": "menu-code-contract.json",
"menu_entries_across_six_roles": 111,
"http_proof": "menu-links.json",
"runtime_sha256_files": 18,
"legacy_records_auto_linked": false,
"people_created_in_evaluation": 0,
"accounts_or_grants_changed": false,
"external_AI_calls": 0,
"global_enter_once_requirement_complete": false,
"remaining_coverage_matrix": "../reutilizacao-dados.md",
"visual_review": false,
"domain_installed": false,
"source_sha256": {
"database/migrations/2026_10_30_000034_create_people_registry.php": "f5869f09cad06b2ded831bce66da4b1f923c001acd56ac8dbfda53d3d79bcc8c",
"app/Services/PeopleRegistry.php": "cbef69cbc127b61731bf44f246201a77f1c78b2447e1d11601635260e066d89c",
"app/Services/PeopleHiring.php": "6b6cf58a022fe1fe9da2f40177557735d0e4112c946fde7e0c9b5eae32b78514",
"app/Services/OrganizationAccess.php": "76809e2f24003a2a1343cae317f47b972544adb231882ed56c6c8484dbaa4ea1",
"app/Http/Controllers/PeopleRegistryController.php": "e702275161464a9835c02f817ebf5215a1c6b3f4c875a77d717fda7c490b0db0",
"app/Http/Controllers/PeopleHiringController.php": "f0d82d3d8bff9fe46abc93bfb4faacb6e6a8d49079c6ca8499fbe479db68aa18",
"resources/js/pages/people/registry.tsx": "3b1249c3425ac1173f50031db99dc979ea875d5ea33b886dc84d003ba1011e92",
"resources/js/components/people-registry-choice.tsx": "9a2a61518b54cbbc30e45126f8fbae76663f0ac5d4c1b7fc010c3c141df00102",
"resources/js/pages/people/show.tsx": "9aaf142675ae73b2a9857a56d91121073bb1180bf7b01fec8fe657f0fbc205e1",
"resources/js/lib/procurement-navigation.ts": "242ebdea74d4d26eca32b716f88f7c9608bca590abefee56ab282010820afe2e",
"routes/web.php": "7097d8299c17ad3912e3fe3d35370d63f38365410325319eb4c571ebf5cc6fb3",
"tests/Feature/PeopleRegistryTest.php": "7b3cefce0fcf25aa910d6ffd138af00ee506d693dbb673e334a70298054a480b",
"tests/frontend/people-registry.test.tsx": "02e6915167cfdd66121ef3768fd55dd95b46bf169fda791e6e68eaf7f974ef21",
"scripts/menu-code-check.mjs": "40063716dee602fd57edd82fed90cc4c69cd315174065f067cfb377877669d9f",
"docs/reutilizacao-dados.md": "937620871fa9504b889e81b727468156a5f2cdeb17408e76389478bd10db9405"
}
}
+1 -3
View File
@@ -3,9 +3,7 @@
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"PeopleHiringTest"
],
"test_files": ["PeopleHiringTest"],
"original_evaluation_untouched": true,
"database_removed": true
}
+50 -50
View File
@@ -1,52 +1,52 @@
{
"checked_at": "2026-10-30T12:28:22.580872+00:00",
"environment": "local evaluation 8005",
"scope": [
"personal operational task queue",
"separate independent formal approval queue",
"original process links and candidate selection hint",
"permission scoped counts filters and reception deadline alerts",
"complete filtered totals beyond pagination",
"minimal list projection excluding rules financial data interviews selection and contract",
"PostgreSQL repeatable read read-only normal index request"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 643,
"passed": 641,
"assertions": 5859,
"duration_ms": 135280,
"skipped": 2
},
"latest_module_tests": {
"tests": 21,
"assertions": 562,
"sqlite": "passed",
"disposable_postgresql": "passed",
"database_removed": true
},
"react_inertia_tests": 23,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"runtime_sha256_files": 18,
"http_proof": "menu-links.json",
"new_tables": 0,
"migrations_applied": false,
"new_assignments_created": false,
"background_decisions_created": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/PeopleWorkdesk.php": "b840eb70a94cbfc3c02869602097a15cfd9fed0333d4d871dd5240ed446b5a8c",
"app/Services/PeopleHiring.php": "c13a0c029496f9e0ab988265501bacfbf5562d70a7176afac2836ad28d4aecd8",
"app/Http/Controllers/PeopleHiringController.php": "a207f268ed65c6da6c75d325142f0df81316b2e1242c3e9745c0ab4b116cf43e",
"resources/js/pages/people/index.tsx": "ed95ed6a64cf8532ed101cc597423c240e699b243083acc22892c65a2875cac2",
"resources/js/pages/people/show.tsx": "67e8d2f3bcd9e85ba52a6f29e285f5572764e65c591a7167f1d4f7f29629a5ab",
"tests/Feature/PeopleHiringTest.php": "82a3a2b2351b233a4a40c5f8fb2babb247d80fa6454974fe61bc6749ad444567",
"tests/frontend/people-hiring.test.tsx": "5f7bfbfa873a66bc6681c746e196bc89a769e929d67293ab8f5465ee21f6dde4"
}
"checked_at": "2026-10-30T12:28:22.580872+00:00",
"environment": "local evaluation 8005",
"scope": [
"personal operational task queue",
"separate independent formal approval queue",
"original process links and candidate selection hint",
"permission scoped counts filters and reception deadline alerts",
"complete filtered totals beyond pagination",
"minimal list projection excluding rules financial data interviews selection and contract",
"PostgreSQL repeatable read read-only normal index request"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 643,
"passed": 641,
"assertions": 5859,
"duration_ms": 135280,
"skipped": 2
},
"latest_module_tests": {
"tests": 21,
"assertions": 562,
"sqlite": "passed",
"disposable_postgresql": "passed",
"database_removed": true
},
"react_inertia_tests": 23,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"runtime_sha256_files": 18,
"http_proof": "menu-links.json",
"new_tables": 0,
"migrations_applied": false,
"new_assignments_created": false,
"background_decisions_created": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"app/Services/PeopleWorkdesk.php": "b840eb70a94cbfc3c02869602097a15cfd9fed0333d4d871dd5240ed446b5a8c",
"app/Services/PeopleHiring.php": "c13a0c029496f9e0ab988265501bacfbf5562d70a7176afac2836ad28d4aecd8",
"app/Http/Controllers/PeopleHiringController.php": "a207f268ed65c6da6c75d325142f0df81316b2e1242c3e9745c0ab4b116cf43e",
"resources/js/pages/people/index.tsx": "ed95ed6a64cf8532ed101cc597423c240e699b243083acc22892c65a2875cac2",
"resources/js/pages/people/show.tsx": "67e8d2f3bcd9e85ba52a6f29e285f5572764e65c591a7167f1d4f7f29629a5ab",
"tests/Feature/PeopleHiringTest.php": "82a3a2b2351b233a4a40c5f8fb2babb247d80fa6454974fe61bc6749ad444567",
"tests/frontend/people-hiring.test.tsx": "5f7bfbfa873a66bc6681c746e196bc89a769e929d67293ab8f5465ee21f6dde4"
}
}
+54 -54
View File
@@ -1,56 +1,56 @@
{
"checked_at": "2026-10-30T14:40:19.164501+00:00",
"environment": "local evaluation 8005",
"method": "procurement_facts_v1",
"scope": [
"authorised filtered report across all pages",
"pending submission calendar age and unknown age",
"need date distinguished from supplier delivery deadline",
"approved requests without registered quotations or visible orders",
"source links and shared indicator definitions"
],
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 9,
"passed": 9,
"assertions": 197,
"duration_ms": 5247
},
"postgresql_integration": {
"tool": "phpunit",
"result": "passed",
"tests": 1,
"passed": 1,
"assertions": 36,
"duration_ms": 2364
},
"postgresql_note": "Standalone PHPUnit scenario without RefreshDatabase outer transaction; report transaction guard preserved. Disposable database removed.",
"postgresql_proof": "procurement-intelligence-pg.json",
"react_inertia_tests": 28,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"http_proof": "menu-links.json",
"prior_full_suite_reused": "people-clarifications.json",
"migrations_installed": false,
"business_data_changed": false,
"csv_contract_changed": false,
"domain_installed": false,
"visual_review": false,
"ml_model_active": false,
"external_AI_calls": 0,
"source_sha256": {
"app/Services/ProcurementOperationalInsights.php": "ddd1eab9214fd8bd029b6a3de2a6999af703d32eeed639419b93527cd9a92930",
"app/Http/Controllers/ProcurementReportController.php": "96c33da41d00de5a6263ce1cb474e8ded64a28a1bdc9688659dbd82f6f37f992",
"app/Models/Requisition.php": "e915153723afa5dc3e7c0642502800cd3b7d9df3e3109809adcd43c122e803d6",
"resources/js/components/procurement-operational-insights.tsx": "beed70921e0287830aa3ae9126a5ef6b7f4a634c986a5e4a5f5be8a09b3e96fa",
"resources/js/pages/reports/procurement.tsx": "11af82a74fc516bf5e1c47741b7c081d0b63c2196c6ac148e45df2da29f03f7a",
"tests/Feature/ProcurementReportsTest.php": "e51ad3f19533c0b0e974ccd2e8138755eeadf0d65f81ba7c2a3eb434c1f9fb9d",
"tests/frontend/procurement-insights.test.tsx": "182639a220ea4b8bb09195a9623b03f17cc32a588a4c8619648595bc592a89f4",
"docs/indicadores-sgc.md": "83a3c486e77622da635574065d5f4147f60a6558b009fb1ab1ad43944c433c11",
"docs/inteligencia-sgc.md": "360e21b342c26d31e543ca8ce5dbbe0d7e155f57e0be8d4b214599d4c9f4ddac"
}
"checked_at": "2026-10-30T14:40:19.164501+00:00",
"environment": "local evaluation 8005",
"method": "procurement_facts_v1",
"scope": [
"authorised filtered report across all pages",
"pending submission calendar age and unknown age",
"need date distinguished from supplier delivery deadline",
"approved requests without registered quotations or visible orders",
"source links and shared indicator definitions"
],
"module_tests": {
"tool": "pest",
"result": "passed",
"tests": 9,
"passed": 9,
"assertions": 197,
"duration_ms": 5247
},
"postgresql_integration": {
"tool": "phpunit",
"result": "passed",
"tests": 1,
"passed": 1,
"assertions": 36,
"duration_ms": 2364
},
"postgresql_note": "Standalone PHPUnit scenario without RefreshDatabase outer transaction; report transaction guard preserved. Disposable database removed.",
"postgresql_proof": "procurement-intelligence-pg.json",
"react_inertia_tests": 28,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"http_proof": "menu-links.json",
"prior_full_suite_reused": "people-clarifications.json",
"migrations_installed": false,
"business_data_changed": false,
"csv_contract_changed": false,
"domain_installed": false,
"visual_review": false,
"ml_model_active": false,
"external_AI_calls": 0,
"source_sha256": {
"app/Services/ProcurementOperationalInsights.php": "ddd1eab9214fd8bd029b6a3de2a6999af703d32eeed639419b93527cd9a92930",
"app/Http/Controllers/ProcurementReportController.php": "96c33da41d00de5a6263ce1cb474e8ded64a28a1bdc9688659dbd82f6f37f992",
"app/Models/Requisition.php": "e915153723afa5dc3e7c0642502800cd3b7d9df3e3109809adcd43c122e803d6",
"resources/js/components/procurement-operational-insights.tsx": "beed70921e0287830aa3ae9126a5ef6b7f4a634c986a5e4a5f5be8a09b3e96fa",
"resources/js/pages/reports/procurement.tsx": "11af82a74fc516bf5e1c47741b7c081d0b63c2196c6ac148e45df2da29f03f7a",
"tests/Feature/ProcurementReportsTest.php": "e51ad3f19533c0b0e974ccd2e8138755eeadf0d65f81ba7c2a3eb434c1f9fb9d",
"tests/frontend/procurement-insights.test.tsx": "182639a220ea4b8bb09195a9623b03f17cc32a588a4c8619648595bc592a89f4",
"docs/indicadores-sgc.md": "83a3c486e77622da635574065d5f4147f60a6558b009fb1ab1ad43944c433c11",
"docs/inteligencia-sgc.md": "360e21b342c26d31e543ca8ce5dbbe0d7e155f57e0be8d4b214599d4c9f4ddac"
}
}
+48 -48
View File
@@ -1,50 +1,50 @@
{
"date": "2026-10-30",
"base_commit": "0235c7609ed52345e91ae1a6b268e45e1eb991af",
"scope": "Menu routing inventory, central filtered procurement reports/CSV and existing individual report extended to receipt/invoice/external-payment records.",
"checks": {
"feature_passed": 14,
"assertions": 223,
"new_cases": 8,
"existing_report_regressions": 6,
"export_fixture_records": 207,
"menu_entries_across_roles": 102,
"roles": 6,
"types": "passed",
"lint": "passed",
"format": "passed",
"pint": "passed",
"phpstan": "passed after correcting the documented date cast type",
"build": "passed",
"new_module_http": 200,
"evaluation_entry_http": 200,
"runtime_manifest_files": 18
},
"source_sha256": {
"app/Http/Controllers/ProcurementReportController.php": "5161063f8f9684595c83300f22e6516e03700917e3b578651dee7254ee5f6a55",
"app/Services/ProcurementReviewReport.php": "1d5a41b59c471ad1db5e7f39eb15ac4b080239968341ccdf9a78ce17a301144c",
"app/Models/GoodsReceipt.php": "ec9b86ca625a8d4d8972ba1d91636bf37475f680f2212faa1e31c44709660a5a",
"routes/web.php": "1014ea42f0544428df49304c16cc55fb0632188ac0ad1940ba6a637b9f228be0",
"resources/js/lib/procurement-navigation.ts": "f250199564cd56e73ff5d5851a19dcbbe41df6da7b5c2cb9024c0965b8e087dc",
"resources/js/pages/reports/procurement.tsx": "a4ec4c51a8b7b8012852f1ad1d36ac931fec25c41a383c10a9449fddc3bd23d5",
"resources/js/pages/purchases/review-report.tsx": "8a5a02d99b5dd5d6f50a41e6e76711b15e578fd09dc039e2b6defc64d20abe04",
"tests/Feature/ProcurementReportsTest.php": "fc88ceef66d419ef72e9231e8273da20f2e1f400ad9610ad5ff85cadeb2259b2",
"scripts/menu-code-check.mjs": "8480ec5b1f3fd26aa7ff7cbc52c304a632b11e0eaa5a4cacadab0e119ceac236"
},
"menu_proof": "docs/proofs/menu-code-contract.json",
"build_log_local": "storage/logs/development-reports-build.log",
"build_log_sha256": "2709a9c383c3110469d6aa08a1efc8b821e24c3b7b8f9a5d3552e403ea9f5ad6",
"preservation": {
"migrations": 0,
"active_business_writes": 0,
"new_accounts_or_grants": 0,
"balance_or_tax_recalculation": false,
"remote_deployment": false
},
"limits": [
"Visual and manual printing not executed.",
"PostgreSQL snapshot clause implemented using the existing report pattern; new tests used isolated SQLite, not a PostgreSQL concurrency proof.",
"Supplier evaluations remain an interface proposal pending its operational implementation.",
"Not a consolidated debt/bank/accounting report; common settlements keep their own history."
]
"date": "2026-10-30",
"base_commit": "0235c7609ed52345e91ae1a6b268e45e1eb991af",
"scope": "Menu routing inventory, central filtered procurement reports/CSV and existing individual report extended to receipt/invoice/external-payment records.",
"checks": {
"feature_passed": 14,
"assertions": 223,
"new_cases": 8,
"existing_report_regressions": 6,
"export_fixture_records": 207,
"menu_entries_across_roles": 102,
"roles": 6,
"types": "passed",
"lint": "passed",
"format": "passed",
"pint": "passed",
"phpstan": "passed after correcting the documented date cast type",
"build": "passed",
"new_module_http": 200,
"evaluation_entry_http": 200,
"runtime_manifest_files": 18
},
"source_sha256": {
"app/Http/Controllers/ProcurementReportController.php": "5161063f8f9684595c83300f22e6516e03700917e3b578651dee7254ee5f6a55",
"app/Services/ProcurementReviewReport.php": "1d5a41b59c471ad1db5e7f39eb15ac4b080239968341ccdf9a78ce17a301144c",
"app/Models/GoodsReceipt.php": "ec9b86ca625a8d4d8972ba1d91636bf37475f680f2212faa1e31c44709660a5a",
"routes/web.php": "1014ea42f0544428df49304c16cc55fb0632188ac0ad1940ba6a637b9f228be0",
"resources/js/lib/procurement-navigation.ts": "f250199564cd56e73ff5d5851a19dcbbe41df6da7b5c2cb9024c0965b8e087dc",
"resources/js/pages/reports/procurement.tsx": "a4ec4c51a8b7b8012852f1ad1d36ac931fec25c41a383c10a9449fddc3bd23d5",
"resources/js/pages/purchases/review-report.tsx": "8a5a02d99b5dd5d6f50a41e6e76711b15e578fd09dc039e2b6defc64d20abe04",
"tests/Feature/ProcurementReportsTest.php": "fc88ceef66d419ef72e9231e8273da20f2e1f400ad9610ad5ff85cadeb2259b2",
"scripts/menu-code-check.mjs": "8480ec5b1f3fd26aa7ff7cbc52c304a632b11e0eaa5a4cacadab0e119ceac236"
},
"menu_proof": "docs/proofs/menu-code-contract.json",
"build_log_local": "storage/logs/development-reports-build.log",
"build_log_sha256": "2709a9c383c3110469d6aa08a1efc8b821e24c3b7b8f9a5d3552e403ea9f5ad6",
"preservation": {
"migrations": 0,
"active_business_writes": 0,
"new_accounts_or_grants": 0,
"balance_or_tax_recalculation": false,
"remote_deployment": false
},
"limits": [
"Visual and manual printing not executed.",
"PostgreSQL snapshot clause implemented using the existing report pattern; new tests used isolated SQLite, not a PostgreSQL concurrency proof.",
"Supplier evaluations remain an interface proposal pending its operational implementation.",
"Not a consolidated debt/bank/accounting report; common settlements keep their own history."
]
}
+1 -4
View File
@@ -3,10 +3,7 @@
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"RequisitionCatalogueTest",
"ReceiptStockTest"
],
"test_files": ["RequisitionCatalogueTest", "ReceiptStockTest"],
"original_evaluation_untouched": true,
"database_removed": true
}
+50 -50
View File
@@ -1,52 +1,52 @@
{
"checked_at": "2026-10-30T16:26:29.650769+00:00",
"scope": [
"published company article selection in requisition",
"server-authoritative descriptors",
"frozen source and version through order",
"receipt stock identification and rejection of other stock",
"legacy rows preserved without automatic linking"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 703,
"passed": 701,
"assertions": 6828,
"duration_ms": 163777,
"skipped": 2
},
"postgresql_tests": 35,
"postgresql_assertions": 252,
"react_inertia_tests": 47,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"menu_entries_across_six_roles": 111,
"http_proof": "menu-links.json",
"runtime_sha256_files": 18,
"installation_proof": "requisition-catalogue-install.json",
"postgresql_proof": "requisition-catalogue-pg.json",
"visual_review": false,
"domain_installed": false,
"external_AI_calls": 0,
"global_enter_once_requirement_complete": false,
"remaining_coverage_matrix": "../reutilizacao-dados.md",
"source_sha256": {
"database/migrations/2026_10_30_000035_create_requisition_catalogue.php": "8899a8f118a3fed3ef2302f82cb75008445ebfdd5bf08f7ef3b3f167bdd9fdb6",
"app/Services/RequisitionCatalogue.php": "ddf8079125a0c6ce2a898780ac82c8eb8f0f335e46f499c10f8c04b6a74b879e",
"app/Services/RequisitionWorkflow.php": "8d35c229c22bee4ccb2bbde1b204c35b2e61231ae05ce850f1dec3f6c874dd56",
"app/Services/PurchaseWorkflow.php": "09cfdb70966b5067b3cfab0a7b8e87d83307ef89e566bf700a38048647b0ac11",
"app/Services/ReceiptWorkflow.php": "736c13dce0812e5c4b0b949cbdd38a6988de6a0651566876935379f8f4b673d6",
"app/Http/Controllers/RequisitionCatalogueController.php": "86540cba2c4f5219e56a254fa5278ff4421126f8b6c78cc3e92b69800603e422",
"app/Http/Requests/StoreRequisitionRequest.php": "83685bf281027d36cc78734078bb567a3808b7c313efe775df205a78e521851e",
"resources/js/pages/requisitions/form.tsx": "a8df407caa3aa859f34dfd18820a25b9c7e36ddf15342ff3e13ff409bfd4b070",
"resources/js/pages/stock/catalogue.tsx": "560f529f1c61dd1dd731c00f05e0d5a0f4f5147abc63916cafdacd406b4b7776",
"resources/js/pages/receipts/order.tsx": "635c8759254bd559b7a0f84bf26a9eeade9062aeb0c847488bd1b9949617ad72",
"tests/Feature/RequisitionCatalogueTest.php": "8bc598ff89e4c15bedb763f67891ee493e7a248ce387ff96b9355e9f6385fbf2",
"tests/Feature/PurchaseAwardOrderTest.php": "914a8459cb98a049fb38c6e6e745953b3068499829162568f7f7accce71bb068",
"tests/frontend/requisition-catalogue.test.tsx": "2dc95238e5b50a93ad4879f0ac5df161c9ced3227afe15a15e501e32e0314c13"
}
"checked_at": "2026-10-30T16:26:29.650769+00:00",
"scope": [
"published company article selection in requisition",
"server-authoritative descriptors",
"frozen source and version through order",
"receipt stock identification and rejection of other stock",
"legacy rows preserved without automatic linking"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 703,
"passed": 701,
"assertions": 6828,
"duration_ms": 163777,
"skipped": 2
},
"postgresql_tests": 35,
"postgresql_assertions": 252,
"react_inertia_tests": 47,
"typescript": "passed",
"phpstan_errors": 0,
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"menu_entries_across_six_roles": 111,
"http_proof": "menu-links.json",
"runtime_sha256_files": 18,
"installation_proof": "requisition-catalogue-install.json",
"postgresql_proof": "requisition-catalogue-pg.json",
"visual_review": false,
"domain_installed": false,
"external_AI_calls": 0,
"global_enter_once_requirement_complete": false,
"remaining_coverage_matrix": "../reutilizacao-dados.md",
"source_sha256": {
"database/migrations/2026_10_30_000035_create_requisition_catalogue.php": "8899a8f118a3fed3ef2302f82cb75008445ebfdd5bf08f7ef3b3f167bdd9fdb6",
"app/Services/RequisitionCatalogue.php": "ddf8079125a0c6ce2a898780ac82c8eb8f0f335e46f499c10f8c04b6a74b879e",
"app/Services/RequisitionWorkflow.php": "8d35c229c22bee4ccb2bbde1b204c35b2e61231ae05ce850f1dec3f6c874dd56",
"app/Services/PurchaseWorkflow.php": "09cfdb70966b5067b3cfab0a7b8e87d83307ef89e566bf700a38048647b0ac11",
"app/Services/ReceiptWorkflow.php": "736c13dce0812e5c4b0b949cbdd38a6988de6a0651566876935379f8f4b673d6",
"app/Http/Controllers/RequisitionCatalogueController.php": "86540cba2c4f5219e56a254fa5278ff4421126f8b6c78cc3e92b69800603e422",
"app/Http/Requests/StoreRequisitionRequest.php": "83685bf281027d36cc78734078bb567a3808b7c313efe775df205a78e521851e",
"resources/js/pages/requisitions/form.tsx": "a8df407caa3aa859f34dfd18820a25b9c7e36ddf15342ff3e13ff409bfd4b070",
"resources/js/pages/stock/catalogue.tsx": "560f529f1c61dd1dd731c00f05e0d5a0f4f5147abc63916cafdacd406b4b7776",
"resources/js/pages/receipts/order.tsx": "635c8759254bd559b7a0f84bf26a9eeade9062aeb0c847488bd1b9949617ad72",
"tests/Feature/RequisitionCatalogueTest.php": "8bc598ff89e4c15bedb763f67891ee493e7a248ce387ff96b9355e9f6385fbf2",
"tests/Feature/PurchaseAwardOrderTest.php": "914a8459cb98a049fb38c6e6e745953b3068499829162568f7f7accce71bb068",
"tests/frontend/requisition-catalogue.test.tsx": "2dc95238e5b50a93ad4879f0ac5df161c9ced3227afe15a15e501e32e0314c13"
}
}
+27 -27
View File
@@ -1,29 +1,29 @@
{
"checked_at": "2026-10-30T11:53:42.906027+00:00",
"name": "SGC - Sistema de Gestão de Contratações",
"tagline": "Aquisições, serviços e pessoas",
"signature": "Uma solução TEMPO",
"acronym": "SGC",
"php_tests": 35,
"assertions": 228,
"react_inertia_tests": 21,
"typescript": "passed",
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"local_entry_http": "passed",
"migrations_applied": false,
"business_data_changed": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"resources/js/components/sgc-workspace-shell.tsx": "4c6857d4e66bd5732af61c7ff52659fd38db7ea7805173f58398acb7a4a0f287",
"resources/js/components/sgc-shell.tsx": "76e8059c5b5a9ae1e4351ee8efaa0e376394dc7133bc7524b5ee653009836687",
"resources/js/pages/home.tsx": "719c1feb0ed0070545a98b00e012b09ef2a8dbd2877c94a0fbb0f0ba25548d87",
"resources/js/pages/auth/login.tsx": "13256348dc44f9f19105c320782ba7f54ddea9e92bd95f2dabc38dc86958ffa6",
"resources/js/layouts/auth/auth-simple-layout.tsx": "a08bee2476691273897ff1218f93c9da2e26a7d0e9b98558c3aa78a49f76edc4",
"resources/views/app.blade.php": "d16385dff24a46c10efe39ee201ad5de9441eaa7dd88407540330c00894fac13",
"resources/views/purchases/opening.blade.php": "7a630cf84e8189c65d3e24b477b5685a5411d9f1ca06da238c91c46a1a2d9592",
"resources/views/purchases/recommendation-print.blade.php": "6854c841bf6132875e9994dd76598c47074ed8e6640e4983bd9fa9b8bb26edc8"
}
"checked_at": "2026-10-30T11:53:42.906027+00:00",
"name": "SGC - Sistema de Gestão de Contratações",
"tagline": "Aquisições, serviços e pessoas",
"signature": "Uma solução TEMPO",
"acronym": "SGC",
"php_tests": 35,
"assertions": 228,
"react_inertia_tests": 21,
"typescript": "passed",
"targeted_lint": "passed",
"pint": "passed",
"build_exit": 0,
"local_entry_http": "passed",
"migrations_applied": false,
"business_data_changed": false,
"domain_installed": false,
"visual_review": false,
"source_sha256": {
"resources/js/components/sgc-workspace-shell.tsx": "4c6857d4e66bd5732af61c7ff52659fd38db7ea7805173f58398acb7a4a0f287",
"resources/js/components/sgc-shell.tsx": "76e8059c5b5a9ae1e4351ee8efaa0e376394dc7133bc7524b5ee653009836687",
"resources/js/pages/home.tsx": "719c1feb0ed0070545a98b00e012b09ef2a8dbd2877c94a0fbb0f0ba25548d87",
"resources/js/pages/auth/login.tsx": "13256348dc44f9f19105c320782ba7f54ddea9e92bd95f2dabc38dc86958ffa6",
"resources/js/layouts/auth/auth-simple-layout.tsx": "a08bee2476691273897ff1218f93c9da2e26a7d0e9b98558c3aa78a49f76edc4",
"resources/views/app.blade.php": "d16385dff24a46c10efe39ee201ad5de9441eaa7dd88407540330c00894fac13",
"resources/views/purchases/opening.blade.php": "7a630cf84e8189c65d3e24b477b5685a5411d9f1ca06da238c91c46a1a2d9592",
"resources/views/purchases/recommendation-print.blade.php": "6854c841bf6132875e9994dd76598c47074ed8e6640e4983bd9fa9b8bb26edc8"
}
}
+7 -7
View File
@@ -1,9 +1,9 @@
{
"checked_at": "2026-10-30T16:47:29.726Z",
"admin": 200,
"warehouse": 403,
"modalities": 6,
"initial_saved_versions": 0,
"availability_location": true,
"external_portal_available": false
"checked_at": "2026-10-30T16:47:29.726Z",
"admin": 200,
"warehouse": 403,
"modalities": 6,
"initial_saved_versions": 0,
"availability_location": true,
"external_portal_available": false
}
+13 -13
View File
@@ -1,15 +1,15 @@
{
"checked_at": "2026-10-30T16:45:32+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"SubmissionAnswersTest",
"SubmissionFormsTest",
"PeopleHiringTest"
],
"original_evaluation_untouched": true,
"database_removed": true,
"tests": 44,
"assertions": 1088
"checked_at": "2026-10-30T16:45:32+00:00",
"database": "disposable PostgreSQL",
"application_role_reused_without_privilege_change": true,
"result": "passed",
"test_files": [
"SubmissionAnswersTest",
"SubmissionFormsTest",
"PeopleHiringTest"
],
"original_evaluation_untouched": true,
"database_removed": true,
"tests": 44,
"assertions": 1088
}
+59 -59
View File
@@ -1,61 +1,61 @@
{
"checked_at": "2026-10-30T16:48:55.574914+00:00",
"scope": [
"six independently versioned company intake form configurations",
"immutable append-only definitions and history",
"stale update rejection and audit rollback",
"frozen form definition at preparation of new people opportunities",
"structured province district locality availability field and reusable validation"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 710,
"passed": 708,
"assertions": 6904,
"duration_ms": 149093,
"skipped": 2
},
"module_sqlite_tests": 44,
"module_assertions": 1088,
"disposable_postgresql_tests": 44,
"disposable_postgresql_assertions": 1088,
"react_inertia_tests": 49,
"phpstan_errors": 0,
"typescript": "passed",
"pint": "passed",
"targeted_lint": "passed",
"build_exit": 0,
"menu_code_proof": "menu-code-contract.json",
"menu_links_proof": "menu-links.json",
"runtime_sha256_files": 18,
"postgresql_proof": "submission-forms-pg.json",
"installation_proof": "submission-forms-install.json",
"http_proof": "submission-forms-http.json",
"visual_review": false,
"domain_installed": false,
"external_portal_available": false,
"external_AI_calls": 0,
"original_document_changed": false,
"outstanding": [
"external identity and reusable candidate profile",
"submission uploads security verification receipt and triage",
"complements and revisions",
"official territory validation and multiple availability locations",
"privacy and retention configuration before public operation"
],
"source_sha256": {
"database/migrations/2026_10_30_000036_create_submission_forms.php": "158a2a4dbe7a5b1af281281619e13e9fef573dc4e2afe5a6e79c56dd1ecb9e7a",
"app/Services/SubmissionForms.php": "033c65865c3a8bdb354a297585ce0728c954b94a78ccb7fbd95c93b8be9b1236",
"app/Services/SubmissionAnswers.php": "49c203f85b3eec68d6a343e9f1c9b693eb56d42411d6d3b798c359e12eddc130",
"app/Services/PeopleHiring.php": "18ffaaa08774b1a5a0ec3f9a06898f40cc20ee564b89e252113ff8e7ad81b5a3",
"app/Http/Controllers/SubmissionFormsController.php": "c9c937e8b03c24410c156d70fbbc0c6e65ede3e57e741dfe6849c2f2cee0eefa",
"resources/js/pages/company/submission-forms.tsx": "ebe9b36d1ae9b42780d3f54cb86770358f1333bfc822b602ba1ca5dbfbbc9271",
"resources/js/pages/company/parameters.tsx": "80f8bc5304066fcaceb5727374c2f5b3a9cc9e61194d8c35cf64e093b1aee3d3",
"resources/js/pages/people/show.tsx": "d7dcd65a1f70b0e30223ac0a8bb1062f991443dc4ed9700be97a9b02eca2307f",
"tests/Feature/SubmissionFormsTest.php": "06e567b030486fdfec459ef69d125bc5b6916a6c54968ef1666471cc52d5bda8",
"tests/Feature/SubmissionAnswersTest.php": "a152ba6fd7129490d6fa6294645d01ed824a8c4c73342ce38a1fb3d95a3044c4",
"tests/Feature/PeopleHiringTest.php": "52028989c405043e96a33807232250a64e8c7e48b8f49eac282664c894e1cb9c",
"tests/frontend/submission-forms.test.tsx": "e0460f9227964d27f331c1f0801339998f4fd8693cc5b27e13bcf1d51c5fc156"
}
"checked_at": "2026-10-30T16:48:55.574914+00:00",
"scope": [
"six independently versioned company intake form configurations",
"immutable append-only definitions and history",
"stale update rejection and audit rollback",
"frozen form definition at preparation of new people opportunities",
"structured province district locality availability field and reusable validation"
],
"full_suite": {
"tool": "pest",
"result": "passed",
"tests": 710,
"passed": 708,
"assertions": 6904,
"duration_ms": 149093,
"skipped": 2
},
"module_sqlite_tests": 44,
"module_assertions": 1088,
"disposable_postgresql_tests": 44,
"disposable_postgresql_assertions": 1088,
"react_inertia_tests": 49,
"phpstan_errors": 0,
"typescript": "passed",
"pint": "passed",
"targeted_lint": "passed",
"build_exit": 0,
"menu_code_proof": "menu-code-contract.json",
"menu_links_proof": "menu-links.json",
"runtime_sha256_files": 18,
"postgresql_proof": "submission-forms-pg.json",
"installation_proof": "submission-forms-install.json",
"http_proof": "submission-forms-http.json",
"visual_review": false,
"domain_installed": false,
"external_portal_available": false,
"external_AI_calls": 0,
"original_document_changed": false,
"outstanding": [
"external identity and reusable candidate profile",
"submission uploads security verification receipt and triage",
"complements and revisions",
"official territory validation and multiple availability locations",
"privacy and retention configuration before public operation"
],
"source_sha256": {
"database/migrations/2026_10_30_000036_create_submission_forms.php": "158a2a4dbe7a5b1af281281619e13e9fef573dc4e2afe5a6e79c56dd1ecb9e7a",
"app/Services/SubmissionForms.php": "033c65865c3a8bdb354a297585ce0728c954b94a78ccb7fbd95c93b8be9b1236",
"app/Services/SubmissionAnswers.php": "49c203f85b3eec68d6a343e9f1c9b693eb56d42411d6d3b798c359e12eddc130",
"app/Services/PeopleHiring.php": "18ffaaa08774b1a5a0ec3f9a06898f40cc20ee564b89e252113ff8e7ad81b5a3",
"app/Http/Controllers/SubmissionFormsController.php": "c9c937e8b03c24410c156d70fbbc0c6e65ede3e57e741dfe6849c2f2cee0eefa",
"resources/js/pages/company/submission-forms.tsx": "ebe9b36d1ae9b42780d3f54cb86770358f1333bfc822b602ba1ca5dbfbbc9271",
"resources/js/pages/company/parameters.tsx": "80f8bc5304066fcaceb5727374c2f5b3a9cc9e61194d8c35cf64e093b1aee3d3",
"resources/js/pages/people/show.tsx": "d7dcd65a1f70b0e30223ac0a8bb1062f991443dc4ed9700be97a9b02eca2307f",
"tests/Feature/SubmissionFormsTest.php": "06e567b030486fdfec459ef69d125bc5b6916a6c54968ef1666471cc52d5bda8",
"tests/Feature/SubmissionAnswersTest.php": "a152ba6fd7129490d6fa6294645d01ed824a8c4c73342ce38a1fb3d95a3044c4",
"tests/Feature/PeopleHiringTest.php": "52028989c405043e96a33807232250a64e8c7e48b8f49eac282664c894e1cb9c",
"tests/frontend/submission-forms.test.tsx": "e0460f9227964d27f331c1f0801339998f4fd8693cc5b27e13bcf1d51c5fc156"
}
}
+13 -13
View File
@@ -1,15 +1,15 @@
{
"checked_at": "2026-10-30T07:33:29.638Z",
"base": "http://127.0.0.1:8005",
"report_path": "/fornecedores/avaliacoes/1/relatorio",
"revision_path": "/fornecedores/avaliacoes/2",
"create_submit_return_correct_approve": true,
"self_approval_refused": true,
"stale_write_refused": true,
"approved_edit_refused": true,
"prior_approved_revision_preserved": true,
"history_events": 6,
"synthetic_example_only": true,
"financial_commands": 0,
"visual_review": false
"checked_at": "2026-10-30T07:33:29.638Z",
"base": "http://127.0.0.1:8005",
"report_path": "/fornecedores/avaliacoes/1/relatorio",
"revision_path": "/fornecedores/avaliacoes/2",
"create_submit_return_correct_approve": true,
"self_approval_refused": true,
"stale_write_refused": true,
"approved_edit_refused": true,
"prior_approved_revision_preserved": true,
"history_events": 6,
"synthetic_example_only": true,
"financial_commands": 0,
"visual_review": false
}
@@ -1,24 +1,16 @@
{
"checked_at": "2026-10-30T07:51:21.312Z",
"base": "http://127.0.0.1:8005",
"path": "/relatorios/medidas-fornecedores",
"readers": [
"admin",
"procurement",
"finance",
"department_head"
],
"denied": [
"requester",
"warehouse"
],
"total": 1,
"filtered_total": 1,
"filters_and_csv_match": true,
"csv_ignores_page": true,
"closed_not_overdue": true,
"invalid_range_refused": true,
"linked_evaluation_and_report": true,
"business_commands": 0,
"visual_review": false
"checked_at": "2026-10-30T07:51:21.312Z",
"base": "http://127.0.0.1:8005",
"path": "/relatorios/medidas-fornecedores",
"readers": ["admin", "procurement", "finance", "department_head"],
"denied": ["requester", "warehouse"],
"total": 1,
"filtered_total": 1,
"filters_and_csv_match": true,
"csv_ignores_page": true,
"closed_not_overdue": true,
"invalid_range_refused": true,
"linked_evaluation_and_report": true,
"business_commands": 0,
"visual_review": false
}
+27 -27
View File
@@ -1,29 +1,29 @@
{
"checked_at": "2026-10-30T07:52:09.806123+00:00",
"targeted_tests": 36,
"assertions": 542,
"new_report_test_cases": 6,
"csv_batch_test_rows": 207,
"phpstan_errors": 0,
"typescript": "passed",
"lint_and_format_targeted": "passed",
"pint_targeted": "passed",
"build": "passed",
"build_log": "storage/logs/supplier-improvement-report-build.log",
"menu_entries": 106,
"roles": 6,
"evaluation_catalog_pages": 22,
"schema_changes": false,
"business_commands": 0,
"domain_installed": false,
"visual_review": false,
"sources": {
"app/Http/Controllers/SupplierImprovementReportController.php": "fdaf0d5484e91481cdd5d676eb6951f8575bcc328961e993acf3290f5d8343cc",
"app/Models/SupplierImprovement.php": "762af10d9c14d70dd03e51ef6d9a80efe36171a9a0121a985ae0c17f06f03d4e",
"resources/js/pages/reports/supplier-improvements.tsx": "070d4c5eaf0a75439751504b21262df1c2f0e60d59e93538ff5d9c5959fe6398",
"resources/js/components/supplier-improvements.tsx": "7add7f51d907943682d3f132dc135f0e41b726dd67ddf2478852cf30ba5a21dd",
"resources/js/lib/procurement-navigation.ts": "a2a26bbd50c288e7cde589c7d8c2aaa3929f5ae20fc8b01c502db031d95085d4",
"tests/Feature/SupplierImprovementReportTest.php": "daf90f8da729a489bdc5116b318514c82a91b89ffbfb2c082b11457661544985",
"scripts/supplier-improvement-report-check.mjs": "60c57d36ebc83928198734573b5072240291504b57f2b88be3167f8f7c40c906"
}
"checked_at": "2026-10-30T07:52:09.806123+00:00",
"targeted_tests": 36,
"assertions": 542,
"new_report_test_cases": 6,
"csv_batch_test_rows": 207,
"phpstan_errors": 0,
"typescript": "passed",
"lint_and_format_targeted": "passed",
"pint_targeted": "passed",
"build": "passed",
"build_log": "storage/logs/supplier-improvement-report-build.log",
"menu_entries": 106,
"roles": 6,
"evaluation_catalog_pages": 22,
"schema_changes": false,
"business_commands": 0,
"domain_installed": false,
"visual_review": false,
"sources": {
"app/Http/Controllers/SupplierImprovementReportController.php": "fdaf0d5484e91481cdd5d676eb6951f8575bcc328961e993acf3290f5d8343cc",
"app/Models/SupplierImprovement.php": "762af10d9c14d70dd03e51ef6d9a80efe36171a9a0121a985ae0c17f06f03d4e",
"resources/js/pages/reports/supplier-improvements.tsx": "070d4c5eaf0a75439751504b21262df1c2f0e60d59e93538ff5d9c5959fe6398",
"resources/js/components/supplier-improvements.tsx": "7add7f51d907943682d3f132dc135f0e41b726dd67ddf2478852cf30ba5a21dd",
"resources/js/lib/procurement-navigation.ts": "a2a26bbd50c288e7cde589c7d8c2aaa3929f5ae20fc8b01c502db031d95085d4",
"tests/Feature/SupplierImprovementReportTest.php": "daf90f8da729a489bdc5116b318514c82a91b89ffbfb2c082b11457661544985",
"scripts/supplier-improvement-report-check.mjs": "60c57d36ebc83928198734573b5072240291504b57f2b88be3167f8f7c40c906"
}
}
+17 -17
View File
@@ -1,19 +1,19 @@
{
"checked_at": "2026-10-30T07:41:16.109Z",
"base": "http://127.0.0.1:8005",
"evaluation_path": "/fornecedores/avaliacoes/1",
"measure_id": 1,
"create_retry_idempotent": true,
"missing_evidence_refused": true,
"self_closure_refused": true,
"planner_closure_refused": true,
"return_replan_correct_submit_close": true,
"stale_plan_refused": true,
"closed_edit_refused": true,
"parent_evaluation_unchanged": true,
"history_events": 7,
"report_includes_closed_measure": true,
"synthetic_example_only": true,
"financial_commands": 0,
"visual_review": false
"checked_at": "2026-10-30T07:41:16.109Z",
"base": "http://127.0.0.1:8005",
"evaluation_path": "/fornecedores/avaliacoes/1",
"measure_id": 1,
"create_retry_idempotent": true,
"missing_evidence_refused": true,
"self_closure_refused": true,
"planner_closure_refused": true,
"return_replan_correct_submit_close": true,
"stale_plan_refused": true,
"closed_edit_refused": true,
"parent_evaluation_unchanged": true,
"history_events": 7,
"report_includes_closed_measure": true,
"synthetic_example_only": true,
"financial_commands": 0,
"visual_review": false
}
+18 -18
View File
@@ -1,20 +1,20 @@
{
"checked_at": "2026-10-30T07:57:43.108Z",
"base": "http://127.0.0.1:8005",
"evaluation_path": "/fornecedores/avaliacoes/1",
"response_id": 1,
"idempotent_creation": true,
"incomplete_submit_refused": true,
"stale_save_refused": true,
"self_decision_refused": true,
"return_correction_independent_conclusion": true,
"accepted_follow_up_required": true,
"concluded_edit_refused": true,
"parent_evaluation_unchanged": true,
"history_events": 7,
"individual_report": true,
"synthetic_example_only": true,
"external_messages_sent": 0,
"financial_commands": 0,
"visual_review": false
"checked_at": "2026-10-30T07:57:43.108Z",
"base": "http://127.0.0.1:8005",
"evaluation_path": "/fornecedores/avaliacoes/1",
"response_id": 1,
"idempotent_creation": true,
"incomplete_submit_refused": true,
"stale_save_refused": true,
"self_decision_refused": true,
"return_correction_independent_conclusion": true,
"accepted_follow_up_required": true,
"concluded_edit_refused": true,
"parent_evaluation_unchanged": true,
"history_events": 7,
"individual_report": true,
"synthetic_example_only": true,
"external_messages_sent": 0,
"financial_commands": 0,
"visual_review": false
}
+26 -26
View File
@@ -1,28 +1,28 @@
{
"checked_at": "2026-10-30T07:59:03.931961+00:00",
"targeted_tests": 39,
"assertions": 505,
"new_test_cases": 11,
"phpstan_errors": 0,
"typescript": "passed",
"lint_format_pint_targeted": "passed",
"build": "passed",
"build_log": "storage/logs/supplier-responses-build.log",
"menu_entries": 106,
"roles": 6,
"installed_in_local_evaluation": true,
"domain_installed": false,
"external_messages_sent": 0,
"visual_review": false,
"source_hashes": {
"app/Models/SupplierResponse.php": "fc3877f2e787483cb56f31ca877eb2dc4f2d266c2eefa47dab1b1ae3ecf163fc",
"app/Services/SupplierResponseWorkflow.php": "772af0878f55cd9818cddec62aca3850ae4868c13acf86fe7dd003bac1fbb0b5",
"app/Http/Controllers/SupplierResponseController.php": "6960500484974f6ba2be1c63bb1156abde976c9e42837f6d3101a1f8a73092d3",
"app/Http/Controllers/SupplierEvaluationController.php": "2523eb6a858fdb62c494d74a8ce7988e7f29d4e0c51c53d3f0899de02987f17d",
"database/migrations/2026_10_30_000026_create_supplier_responses.php": "d414f637587088e589d886f792d678674337707e8391a0ab0fcf86dc9ebfaaf4",
"resources/js/components/supplier-responses.tsx": "ec0becd110e879f5929a7179c61352e1f31478674e654a41b1f85c64ecd1adf1",
"resources/js/pages/suppliers/evaluation.tsx": "509d27438a2a3b5337572357b9c69a2703201789ea75a487b36dfc301f65c8db",
"tests/Feature/SupplierResponseTest.php": "00faa0131f7335e1d2f18d781aa16cb914bf13acb1090ab902269f737b87c3c6",
"scripts/supplier-response-check.mjs": "31c7b741bbb0becc0426d0437a1d9853616199a86730831dc09b902e66f469c2"
}
"checked_at": "2026-10-30T07:59:03.931961+00:00",
"targeted_tests": 39,
"assertions": 505,
"new_test_cases": 11,
"phpstan_errors": 0,
"typescript": "passed",
"lint_format_pint_targeted": "passed",
"build": "passed",
"build_log": "storage/logs/supplier-responses-build.log",
"menu_entries": 106,
"roles": 6,
"installed_in_local_evaluation": true,
"domain_installed": false,
"external_messages_sent": 0,
"visual_review": false,
"source_hashes": {
"app/Models/SupplierResponse.php": "fc3877f2e787483cb56f31ca877eb2dc4f2d266c2eefa47dab1b1ae3ecf163fc",
"app/Services/SupplierResponseWorkflow.php": "772af0878f55cd9818cddec62aca3850ae4868c13acf86fe7dd003bac1fbb0b5",
"app/Http/Controllers/SupplierResponseController.php": "6960500484974f6ba2be1c63bb1156abde976c9e42837f6d3101a1f8a73092d3",
"app/Http/Controllers/SupplierEvaluationController.php": "2523eb6a858fdb62c494d74a8ce7988e7f29d4e0c51c53d3f0899de02987f17d",
"database/migrations/2026_10_30_000026_create_supplier_responses.php": "d414f637587088e589d886f792d678674337707e8391a0ab0fcf86dc9ebfaaf4",
"resources/js/components/supplier-responses.tsx": "ec0becd110e879f5929a7179c61352e1f31478674e654a41b1f85c64ecd1adf1",
"resources/js/pages/suppliers/evaluation.tsx": "509d27438a2a3b5337572357b9c69a2703201789ea75a487b36dfc301f65c8db",
"tests/Feature/SupplierResponseTest.php": "00faa0131f7335e1d2f18d781aa16cb914bf13acb1090ab902269f737b87c3c6",
"scripts/supplier-response-check.mjs": "31c7b741bbb0becc0426d0437a1d9853616199a86730831dc09b902e66f469c2"
}
}
+9 -9
View File
@@ -16,16 +16,16 @@ Registos sem vínculo de cadastro continuam em compatibilidade; não foram ligad
## Matriz transversal de cobertura
| Percurso | Reutilização observada/implementada | Evolução ainda necessária |
| --- | --- | --- |
| Empresa, utilizadores, departamentos e centros | Identificadores seleccionados; contexto do actor usado nos pedidos; regras preservadas nos processos | Conferir reutilização de campos em todos os documentos e associações de funções/unidades |
| Fornecedor → proposta → adjudicação/ordem | Cadastro por ID e linhas/fonte herdadas; dados preservados na emissão | Inventariar referências/documentos repetidos e uniformizar selecção de evidências |
| Requisição → proposta → ordem | Catálogo de artigos publicados pelo armazém/administração para insumos/outros bens; descrição, categoria, unidade e tipo vêm da fonte; versão preservada por linha e na ordem | Equipamento/peças mantêm roteiro técnico; serviços continuam manuais; conferir referências documentais repetidas |
| Ordem → recepção/factura | Linhas, fornecedor e valores de origem usados; artigo do catálogo identificado automaticamente na recepção; quantidades e datas são novos eventos | Conferir os restantes formulários e associações sem reintrodução de descrições |
| Pessoas → candidaturas → avaliação/selecção | Novo cadastro reutilizável, selecção autorizada e snapshot por candidatura; avaliações usam a mesma candidatura | Reconciliação assistida dos históricos e campos de cadastro adicionais quando forem definidos |
| Percurso | Reutilização observada/implementada | Evolução ainda necessária |
| ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Empresa, utilizadores, departamentos e centros | Identificadores seleccionados; contexto do actor usado nos pedidos; regras preservadas nos processos | Conferir reutilização de campos em todos os documentos e associações de funções/unidades |
| Fornecedor → proposta → adjudicação/ordem | Cadastro por ID e linhas/fonte herdadas; dados preservados na emissão | Inventariar referências/documentos repetidos e uniformizar selecção de evidências |
| Requisição → proposta → ordem | Catálogo de artigos publicados pelo armazém/administração para insumos/outros bens; descrição, categoria, unidade e tipo vêm da fonte; versão preservada por linha e na ordem | Equipamento/peças mantêm roteiro técnico; serviços continuam manuais; conferir referências documentais repetidas |
| Ordem → recepção/factura | Linhas, fornecedor e valores de origem usados; artigo do catálogo identificado automaticamente na recepção; quantidades e datas são novos eventos | Conferir os restantes formulários e associações sem reintrodução de descrições |
| Pessoas → candidaturas → avaliação/selecção | Novo cadastro reutilizável, selecção autorizada e snapshot por candidatura; avaliações usam a mesma candidatura | Reconciliação assistida dos históricos e campos de cadastro adicionais quando forem definidos |
| Perfil externo → candidatura electrónica → avaliação | Perfil versionado com disponibilidade província/distrito/localidade; respostas pré-preenchidas e comprovativo preservado; aceitação explícita para análise aproveita nome/resumo/referência/data na candidatura interna e identifica a fonte/versão | Anexos verificados, complementos/revisões, modalidades espontâneas e eventual inclusão em cadastro por decisão própria; não fundir por nome |
| Minutas/modelos de documentos | Processos e decisões preservam os seus dados; minuta interna de Pessoas ainda recebe termos específicos | Modelos versionados por empresa e preenchimento de variáveis por fontes autorizadas, mantendo termos novos editáveis |
| Relatórios, indicadores e sínteses | Derivam dos registos originais autorizados, sem novo preenchimento | Conferir cobertura funcional e visual de todos os relatórios; não confundir síntese com nova evidência |
| Minutas/modelos de documentos | Processos e decisões preservam os seus dados; minuta interna de Pessoas ainda recebe termos específicos | Modelos versionados por empresa e preenchimento de variáveis por fontes autorizadas, mantendo termos novos editáveis |
| Relatórios, indicadores e sínteses | Derivam dos registos originais autorizados, sem novo preenchimento | Conferir cobertura funcional e visual de todos os relatórios; não confundir síntese com nova evidência |
## Critério para fechar cada lacuna