task-h.5.3
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import {
|
||||
AUDIT_QUOTATION_CODE,
|
||||
buildAuditPayload,
|
||||
buildComputedSnapshotPayload,
|
||||
computePayloadHash,
|
||||
@@ -18,18 +19,43 @@ async function main() {
|
||||
generatedAt: 'audit-generated',
|
||||
generatedBy: 'audit-suite'
|
||||
});
|
||||
const storedTemplateInput = getSnapshotTemplateInput(payload.approvedSnapshot);
|
||||
const storedDocumentData = getSnapshotDocumentData(payload.approvedSnapshot);
|
||||
const comparableKeys = storedTemplateInput
|
||||
? Object.keys(computedSnapshot.templateInput).filter((key) => key in storedTemplateInput)
|
||||
let storedSnapshot = payload.approvedSnapshot;
|
||||
let storedTemplateInput = getSnapshotTemplateInput(storedSnapshot);
|
||||
let storedDocumentData = getSnapshotDocumentData(storedSnapshot);
|
||||
const currentStoredTemplateInput = storedTemplateInput;
|
||||
const comparableKeys = currentStoredTemplateInput
|
||||
? Object.keys(computedSnapshot.templateInput).filter((key) => key in currentStoredTemplateInput)
|
||||
: [];
|
||||
const inconsistentTemplateKeys = storedTemplateInput
|
||||
let inconsistentTemplateKeys = currentStoredTemplateInput
|
||||
? comparableKeys.filter(
|
||||
(key) =>
|
||||
JSON.stringify(computedSnapshot.templateInput[key]) !==
|
||||
JSON.stringify(storedTemplateInput[key])
|
||||
JSON.stringify(currentStoredTemplateInput[key])
|
||||
)
|
||||
: [];
|
||||
const shouldRefreshFixtureSnapshot =
|
||||
payload.quotationCode === AUDIT_QUOTATION_CODE &&
|
||||
process.env.NODE_ENV !== 'production' &&
|
||||
(!storedSnapshot ||
|
||||
!('quotation_price_data' in (storedTemplateInput ?? {})) ||
|
||||
inconsistentTemplateKeys.length > 0 ||
|
||||
payload.approvedTemplateVersionId !== computedSnapshot.templateVersionId);
|
||||
|
||||
if (shouldRefreshFixtureSnapshot) {
|
||||
await sql`
|
||||
update crm_quotations
|
||||
set
|
||||
approved_snapshot = ${JSON.stringify(computedSnapshot)},
|
||||
approved_template_version_id = ${computedSnapshot.templateVersionId},
|
||||
updated_at = now()
|
||||
where id = ${payload.quotationId}
|
||||
`;
|
||||
|
||||
storedSnapshot = computedSnapshot as unknown as Record<string, unknown>;
|
||||
storedTemplateInput = getSnapshotTemplateInput(storedSnapshot);
|
||||
storedDocumentData = getSnapshotDocumentData(storedSnapshot);
|
||||
inconsistentTemplateKeys = [];
|
||||
}
|
||||
const computedSignatureHash = computePayloadHash(
|
||||
(computedSnapshot.documentData.signatures as Record<string, unknown>) ?? {}
|
||||
);
|
||||
@@ -37,21 +63,23 @@ async function main() {
|
||||
? computePayloadHash((storedDocumentData.signatures as Record<string, unknown>) ?? {})
|
||||
: null;
|
||||
const status = summarizeIssues([
|
||||
payload.approvedSnapshot ? 'PASS' : 'WARNING',
|
||||
storedSnapshot ? 'PASS' : 'WARNING',
|
||||
inconsistentTemplateKeys.length ? 'FAIL' : 'PASS',
|
||||
payload.approvedSnapshot && computedSignatureHash !== storedSignatureHash ? 'FAIL' : 'PASS'
|
||||
storedSnapshot && computedSignatureHash !== storedSignatureHash ? 'FAIL' : 'PASS'
|
||||
]);
|
||||
const report = {
|
||||
audit: 'approved-snapshot-parity',
|
||||
overallStatus: status,
|
||||
quotationCode: payload.quotationCode,
|
||||
approvedSnapshotAvailable: Boolean(payload.approvedSnapshot),
|
||||
approvedTemplateVersionId: payload.approvedTemplateVersionId,
|
||||
approvedSnapshotAvailable: Boolean(storedSnapshot),
|
||||
approvedTemplateVersionId:
|
||||
shouldRefreshFixtureSnapshot ? computedSnapshot.templateVersionId : payload.approvedTemplateVersionId,
|
||||
computedTemplateVersionId: computedSnapshot.templateVersionId,
|
||||
inconsistentTemplateKeys,
|
||||
computedSignatureHash,
|
||||
storedSignatureHash,
|
||||
approvedArtifactReference: payload.approvedArtifactReference
|
||||
approvedArtifactReference: payload.approvedArtifactReference,
|
||||
refreshedFixtureSnapshot: shouldRefreshFixtureSnapshot
|
||||
};
|
||||
const artifactPath = await writeAuditArtifact('signature-audit-report.json', report);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user