$report * @return array */ public function build(array $report): array { $claims = []; $add = function (string $id, string $text, string $section, string $label, string $pointer, mixed $basis) use (&$claims): void { $claims[] = ['id' => $id, 'text' => $text, 'source' => ['label' => $label, 'href' => '#report-'.$section, 'pointer' => $pointer], 'basis_sha256' => hash('sha256', json_encode($basis, JSON_THROW_ON_ERROR))]; }; $request = $report['requisition']; $states = ['draft' => 'rascunho', 'pending' => 'em aprovação', 'approved' => 'aprovada', 'rejected' => 'rejeitada', 'cancelled' => 'cancelada']; $add('request', 'A requisição encontra-se no estado '.($states[$request['status']] ?? 'registado no pedido').'.', 'request', 'Identificação do pedido', 'requisition.status', [$request['id'], $request['status']]); $comparison = $report['comparison']; $count = count($comparison['rows']); $add('comparison', $count.' propostas constam da comparação actual. '.($comparison['ready'] ? 'O método existente indica comparação pronta; isso não autoriza adjudicação ou emissão.' : 'O método existente ainda não indica comparação pronta.'), 'comparison', 'Comparação actual das propostas', 'comparison', $comparison); $qualification = $report['qualification']; $add('qualification', $qualification === null ? 'Não consta uma versão de qualificação documental nesta consulta.' : 'Qualificação documental na revisão '.$qualification['revision'].'. '.($qualification['is_current'] ? 'A base coincide com as propostas actuais.' : 'A base difere das propostas actuais; consultar o histórico antes de a usar.'), 'qualification', 'Qualificação documental', 'qualification', $qualification); $opening = $report['opening']; $add('opening', $opening === null ? 'Não consta acta de abertura neste módulo opcional.' : 'Acta de abertura na revisão '.$opening['revision'].'. '.($opening['source_changed'] ? 'Há diferenças face à base actual; a acta conserva a base original.' : 'A base coincide com os dados actuais.'), 'records', 'Registos do processo', 'opening', $opening); $add('order', $report['order'] === null ? 'Não consta ordem emitida nesta consulta.' : 'Consta uma ordem emitida; a existência da ordem não comprova entrega nem pagamento.', 'records', 'Registos do processo', 'order', $report['order']); $fulfilment = $report['fulfilment']; $add('receipts', count($fulfilment['receipts']).' registos de recepção constam da consulta; esta contagem não comprova execução integral.', 'fulfilment', 'Recepção, facturas e registos de pagamento', 'fulfilment.receipts', $fulfilment['receipts']); if ($fulfilment['finance_visible']) { $add('finance', count($fulfilment['invoices']).' facturas e '.count($fulfilment['payments']).' registos de pagamento constam do âmbito financeiro autorizado. A existência de um registo não confirma a sua validação ou liquidação.', 'fulfilment', 'Recepção, facturas e registos de pagamento', 'fulfilment', ['invoices' => $fulfilment['invoices'], 'payments' => $fulfilment['payments']]); } $basis = ['method' => 'procurement_evidence_brief_v1', 'requisition_id' => $request['id'], 'claims' => $claims]; return [...$basis, 'generated_at' => $report['generated_at'], 'basis_sha256' => hash('sha256', json_encode($basis, JSON_THROW_ON_ERROR)), 'finance_visible' => $fulfilment['finance_visible']]; } }