362 lines
16 KiB
JSON
362 lines
16 KiB
JSON
{
|
|
"date": "2026-11-03T12:43:53.674Z",
|
|
"increment": "SGF-SUPPLIER-INVOICE-MATCHING-QA-v1",
|
|
"passed": true,
|
|
"functional_code": true,
|
|
"checks": 77,
|
|
"tests": {
|
|
"integration": {
|
|
"file": "private/receipt-composition-da77bb730751/invoice-result.json",
|
|
"sha256": "cecb1bec6cdb15a49fd651109a9b79286278d62fb31e37055e1fc87f0e22135c",
|
|
"checks": 45,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"main fixture begins before order receipt or invoice",
|
|
"finance sees no invented source order",
|
|
"procurement and warehouse cannot inspect invoice economics",
|
|
"actual foreign-tenant order is inaccessible",
|
|
"source adjudication issues an actual SGF order",
|
|
"issued order reaches invoice workspace without source rebinding",
|
|
"supplier invoice workspace served",
|
|
"no invoice is registered before accepted receipt",
|
|
"warehouse accepts actual order once through original writer",
|
|
"document total mismatch is refused",
|
|
"foreign source line cannot be substituted",
|
|
"price divergence from frozen order is refused",
|
|
"quantity beyond accepted source is refused",
|
|
"original registration preview normalises document and consumes no budget",
|
|
"invoice preview persists no invoice audit budget entry or consumption",
|
|
"tampered invoice preview refused",
|
|
"failure recording SGF origin aborts registration",
|
|
"invoice lines and native audit roll back with failed command receipt",
|
|
"independent sessions recover same registered invoice once",
|
|
"pending invoice is unique and consumes no commitment",
|
|
"same operation key with another number refused",
|
|
"normalised supplier document number cannot be registered twice",
|
|
"preparer with validation right cannot approve own invoice",
|
|
"another pending documentary invoice is retained without consuming budget",
|
|
"new invoice after preview requires renewed review",
|
|
"overlapping pending invoice has original matching before other validation",
|
|
"validation impact shows original40MZN commitment consumption",
|
|
"failed validation receipt rolls back status native audit and consumption",
|
|
"validation permission is rechecked after preview",
|
|
"distinct eligible reviewers commit once and refuse stale concurrent decision",
|
|
"one original40MZN consumption is recorded",
|
|
"validated command replay does not consume twice",
|
|
"validation of another invoice invalidates old matching preview",
|
|
"overlapping document remains pending when cumulative accepted quantity is exceeded",
|
|
"remaining0.6UN is registered with the original cumulative matching",
|
|
"distinct finance validates remaining60MZN",
|
|
"two partial invoices consume exactly100MZN in the same budget",
|
|
"single order commitment is consumed without another reservation or commitment",
|
|
"original documents and incompatible pending document are preserved",
|
|
"invoice registration and matching create no additional physical movement",
|
|
"invoice history contains only invoice events with server pagination",
|
|
"unmapped unit cannot reuse an invoice source",
|
|
"fully invoiced receipt cannot be invoiced again",
|
|
"matching does not recognise a payable automatically",
|
|
"matching creates no payment"
|
|
],
|
|
"registration_statuses": [
|
|
200,
|
|
201
|
|
],
|
|
"validation_statuses": [
|
|
201,
|
|
409
|
|
],
|
|
"validated_invoices": 2,
|
|
"pending_invoices": 1,
|
|
"consumed_minor": 10000,
|
|
"receipt_movements_unchanged": true,
|
|
"physical_fingerprint": "8fc992e83559200f691b253fd72e22986a972eb58f77b50bdf32d4d18d5f5dd4",
|
|
"payable_table_present": true,
|
|
"payable_auto_recognised": false,
|
|
"payment_created": false,
|
|
"visual_review": false,
|
|
"deployment_capacity_validated": false
|
|
}
|
|
},
|
|
"boundaries": {
|
|
"file": "private/receipt-composition-da77bb730751/invoice-boundaries.json",
|
|
"sha256": "3b018bacff8ccc00a94d022bb17ca0af8c46ecf4672f7b34bbe635c114726797",
|
|
"checks": 4,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"new session context generation invalidates invoice preview",
|
|
"supplier source version change requires new matching preview",
|
|
"changed source binding invalidates invoice preview",
|
|
"boundary probes persist no revalidation audit consumption or invoice change"
|
|
],
|
|
"before": "b8c13494b744356af9bdcac3f28f4847ea87b54a6e4bfbe51a0fdf50151c2c5d",
|
|
"after": "b8c13494b744356af9bdcac3f28f4847ea87b54a6e4bfbe51a0fdf50151c2c5d",
|
|
"valid45_checks_not_repeated": true,
|
|
"probe": "rollback-only original idempotent validation preview and rejected confirmations"
|
|
}
|
|
},
|
|
"guards": {
|
|
"file": "private/receipt-composition-da77bb730751/invoice-guards.json",
|
|
"sha256": "bb1140c8bd0f0b2f0240679590e738438483160a5b8f96c0d435f878f6f2db8b",
|
|
"checks": 6,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"disabled invoice runtime refuses before SQL",
|
|
"disabled invoice preview refuses before validation and SQL",
|
|
"production refuses synthetic invoice workflow",
|
|
"invoice route remains in purchasing: purchasing/invoices",
|
|
"invoice route remains in purchasing: api/purchasing-invoices",
|
|
"invoice route remains in purchasing: api/purchasing-invoices/orders/1/confirm"
|
|
],
|
|
"database_queries": 0
|
|
}
|
|
},
|
|
"demonstration": {
|
|
"file": "private/receipt-composition-197109b57c62/invoice-demo-smoke.json",
|
|
"sha256": "4558766316b1cdeaf5201e6ab8f10a374ba1bf71a1ad2f0b92a15a3ab7e956ee",
|
|
"checks": 13,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"main demo starts before order receipt invoice or consumption",
|
|
"invoice access and empty order list match issuer",
|
|
"invoice workspace is live",
|
|
"session exposes explicit invoice composition capability",
|
|
"foreign order stays hidden in live demo",
|
|
"invoice access and empty order list match reviewer",
|
|
"invoice access and empty order list match auditor",
|
|
"invoice access and empty order list match actor",
|
|
"buyer starts with one approved award and no issued main order",
|
|
"invoice access and empty order list match validator",
|
|
"warehouse waits for actual main order",
|
|
"served invoice script matches delivery",
|
|
"demo smoke leaves business and budget evidence unchanged"
|
|
],
|
|
"before": "0c56650460998a89f46afde359b06556171a8561940b33397837cdbc42df50ee",
|
|
"after": "0c56650460998a89f46afde359b06556171a8561940b33397837cdbc42df50ee",
|
|
"main_orders": 0,
|
|
"invoices": 0,
|
|
"consumptions": 0,
|
|
"visual_review": false
|
|
}
|
|
},
|
|
"assets": {
|
|
"file": "private/receipt-composition-197109b57c62/invoice-demo-assets.json",
|
|
"sha256": "d8aba4e3083b80d903fb39144035f2b3942dda324d01328a5728da60832e401f",
|
|
"checks": 3,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"private frontend build succeeds",
|
|
"served built assets match private build",
|
|
"invoice module is served through private static whitelist"
|
|
],
|
|
"assets": [
|
|
"assets/app-KvXs64E7.js",
|
|
"assets/app-BLSNCrO7.css"
|
|
],
|
|
"visual_review": false
|
|
}
|
|
},
|
|
"navigation": {
|
|
"file": "docs/proofs/invoice-home-20261103.json",
|
|
"sha256": "b0a904a2dee08e6b97ea428d880c8899e79b9c6d5f414475ca17907d777df8aa",
|
|
"checks": 6,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": 6,
|
|
"names": [
|
|
"invoice view and capability expose link",
|
|
"missing right hides link",
|
|
"another unit right cannot expose link",
|
|
"disabled composition hides link",
|
|
"unit selection required",
|
|
"existing order and receipt navigation remains available"
|
|
],
|
|
"source": "resources/js/PurchasingHome.jsx",
|
|
"sha256": "f34bf1060bf987bd1b22e999e6ca05d76a3004607b8f670f580de37ddd847bd0",
|
|
"visual_review": false
|
|
}
|
|
}
|
|
},
|
|
"sources": [
|
|
{
|
|
"file": "app/Modules/Purchasing/InvoiceController.php",
|
|
"sha256": "0d729bd0485cc6a3222a445c00149a2b1511b90f5652c9985e63b38b767804aa"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/ReceiptRuntime.php",
|
|
"sha256": "980e5d67b5c1ac74fa958ca54af8151f58364ba97f20bb680af2dd20cc7116fe"
|
|
},
|
|
{
|
|
"file": "config/receipt_qa.php",
|
|
"sha256": "dbca506ec4f99390d85d861c89faa0b4584d1661fef49b859741ad51b8b09e3a"
|
|
},
|
|
{
|
|
"file": "routes/web.php",
|
|
"sha256": "64db854bc3188672f059a16a44dd64f0ccd24f04c939ad335b542a34ee500df0"
|
|
},
|
|
{
|
|
"file": "app/Shared/Context/ModuleNavigation.php",
|
|
"sha256": "518b7c8e70114e7438073f2d3a80f2173c8e5dfad3c5de45db3d4f8fc5b847a7"
|
|
},
|
|
{
|
|
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
|
|
"sha256": "4ca66687bde3d9683186d32668e5b8c5336a735f9ed34edefdb79f0d3a381443"
|
|
},
|
|
{
|
|
"file": "resources/js/PurchasingHome.jsx",
|
|
"sha256": "f34bf1060bf987bd1b22e999e6ca05d76a3004607b8f670f580de37ddd847bd0"
|
|
},
|
|
{
|
|
"file": "resources/views/supplier-invoice-workspace.blade.php",
|
|
"sha256": "c1c284a45836731d07a00b8023d423853bf94fa6bd7ded1f13ee7de1ab57bb53"
|
|
},
|
|
{
|
|
"file": "public/supplier-invoice-workspace.mjs",
|
|
"sha256": "68671400153a97387f77ad0cddbc0f7f6367caeaebef8fc219d84fc8cf118eb3"
|
|
},
|
|
{
|
|
"file": "scripts/order-native-setup.php",
|
|
"sha256": "0700db002a37a52423d095adb7cf322ef6f55aee23bed592fcd12b71977e0e15"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-native-negative.php",
|
|
"sha256": "4db198b0bd3f4e087823f44c5db438dd6b32877c2f8d3b4a67fbaaa72e2f83b9"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-host-setup.php",
|
|
"sha256": "1b2a20044b82bc8e9841ad7e9777996a467e531b9d6813d8bf31dc6b5be86be3"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-composition-proof.php",
|
|
"sha256": "239ef481fec70454d6a715d7a1b143a5f7b1674ce11ba1401ff326f43817c039"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-proof-body.php",
|
|
"sha256": "6783b24ab6c4a50bea5ddb9ce3ed1f006a0f8a7f6f325442e3f2ed70f2e65c8f"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-boundary-proof.php",
|
|
"sha256": "396f2fe73e458a73f5d6d5c46f1c002a6a927fc437cf74b32fd2bda45f0bc593"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-boundary-body.php",
|
|
"sha256": "99de5e1ac2a520f4886e469a95afa0b53ed2caf504a14aa151e7e38117ee4e2d"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-guard-proof.php",
|
|
"sha256": "257bbd70e73f7bf930a48af74eb97aa9fc191ed093abca2b00b0565559d9fb44"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-demo-smoke.php",
|
|
"sha256": "dc71195cf0ba3d0392862a3f2556b94595814197d0dbda0b6b1d427cf22f2399"
|
|
},
|
|
{
|
|
"file": "scripts/invoice-demo-assets.mjs",
|
|
"sha256": "b0912dd788f5c236056d6023b5c28aca2ec17c8d1232103ce62215927de0bfbb"
|
|
},
|
|
{
|
|
"file": "scripts/receipt-composition-run.mjs",
|
|
"sha256": "b5f8b7b5abde64995fa9f689e5f51d99faf2221cc81fc5044221d0ff66cac396"
|
|
},
|
|
{
|
|
"file": "scripts/receipt-composition-http.php",
|
|
"sha256": "d99f782d70e7d5be9bf86c86a2902f2efbb3daa529bb3d8ac3cce0eeb76b2422"
|
|
},
|
|
{
|
|
"file": "scripts/receipt-composition-extra.mjs",
|
|
"sha256": "9da4aed2f4b4d7963692034ebb224cd8abd9968c61c2ddc549f15743d8928db1"
|
|
},
|
|
{
|
|
"file": "scripts/stock-ledger-entry.php",
|
|
"sha256": "3841d3be7c941b8ceb978a2bd7656a463dc68cabd64bee50b4e2d7f4e2599124"
|
|
}
|
|
],
|
|
"pinned_native_manifests": {
|
|
"bundle": "7709a3d447d54c17d2fb4be4f9a0f70455c4a38c34e4bb8c643f6b5169071556",
|
|
"economic": "8b2d3aa61054e0edc54fcd818467eb2bacb5e1178f903b12ab44119e0f2e8d2e",
|
|
"internal": "2343af71f72259dd705f4cc3a3b163c90edf331a5b6ebe173531aeb341649e1b"
|
|
},
|
|
"original_source_hashes": {
|
|
"app/Services/InvoiceWorkflow.php": "f1e8530315e33d3c8eb23752699b3bbcba0af5248af478e861f3b3e75a462c11",
|
|
"app/Http/Controllers/InvoiceController.php": "2bcb3ed8a2e1d8e69831650bf3e228133ee105094784b3fd1f3e1fc825d96aa3",
|
|
"app/Services/CommonBudget.php": "185b1e5d6e4c572dc1d033ea8ed2e00fec96448c8ad0e470f51c0bf2b7c97296"
|
|
},
|
|
"financial_effects": {
|
|
"single_order_commitment_minor": 10000,
|
|
"validated_invoice_minor": [
|
|
4000,
|
|
6000
|
|
],
|
|
"original_budget_consumptions": 2,
|
|
"total_consumed_minor": 10000,
|
|
"additional_physical_movements": 0,
|
|
"payable_auto_recognised": false,
|
|
"payments_created": 0,
|
|
"ledger_posted": false
|
|
},
|
|
"qa_rights": [
|
|
"purchasing_invoices.view",
|
|
"purchasing_invoices.prepare",
|
|
"purchasing_invoices.validate"
|
|
],
|
|
"demo": {
|
|
"buyer_url": "http://127.0.0.1:8070/qa/enter/actor?open=1",
|
|
"warehouse_url": "http://127.0.0.1:8070/qa/enter/validator?open=1",
|
|
"preparer_url": "http://127.0.0.1:8070/qa/enter/issuer?open=1",
|
|
"reviewer_url": "http://127.0.0.1:8070/qa/enter/reviewer?open=1",
|
|
"second_reviewer_url": "http://127.0.0.1:8070/qa/enter/auditor?open=1",
|
|
"initial_main_orders": 0,
|
|
"initial_main_receipts": 0,
|
|
"initial_invoices": 0,
|
|
"initial_consumptions": 0,
|
|
"approved_award_prepared": true,
|
|
"foreign_order_is_negative_fixture": true
|
|
},
|
|
"prior_proofs_preserved": [
|
|
{
|
|
"file": "docs/proofs/geography-composition-20261103.json",
|
|
"sha256": "2f181320e2cc01095266d64f660b1e28697cb1e44529b89357fbfb21ab436a9e"
|
|
},
|
|
{
|
|
"file": "docs/proofs/request-to-receipt-composition-20261103.json",
|
|
"sha256": "1713f42e3352ef13718a7394260b97c0c5ada40a9a3bbc87ab852313f6ab32ce"
|
|
},
|
|
{
|
|
"file": "docs/proofs/order-composition-20261103.json",
|
|
"sha256": "3334bf6f45ca629f1c1a0ea907f7b0804f0e90752d1ade0e9fb07599b4d310e3"
|
|
},
|
|
{
|
|
"file": "docs/proofs/module-association-consolidation-summary-20261102.json",
|
|
"sha256": "8f693f39763ee21a22ebd3929d95ba1480f339eca18742fa53055c69eb5219ef"
|
|
}
|
|
],
|
|
"preservation": {
|
|
"installed_purchasing_sha256": "81899e531e9eec449717e694d8bdc106a9e220a828f5491ce918c1d2dc612787",
|
|
"target_database_connected": false,
|
|
"protected_six_records_changed": false,
|
|
"blocked_cache_cleared": false,
|
|
"previous_demo_data_written": false,
|
|
"concurrent_compras_sources_written": false,
|
|
"public_rights_changed": false,
|
|
"purchasing_activated_at_destination": false,
|
|
"publication": false,
|
|
"checkpoint": false
|
|
},
|
|
"limitations": [
|
|
"Technical supplier-document matching only, using the original frozen workflow. No fiscal issuance or statement of real documentary validity.",
|
|
"Budget consumption is the original authorised native effect. Payable recognition, payment and ledger remain separate; the earlier common-payable11,600MZN proof is not declared joined to these100MZN invoices.",
|
|
"The incompatible pending70MZN document is preserved; invoice correction/rejection/credit notes and binary document attachments are outside this increment.",
|
|
"Date/currency/tolerance rules are those of the pinned native workflow, including current-year MZN and exact matching.",
|
|
"Order list pages25 and invoice-history pages15; show/revision materialises the invoices and dependencies of the selected order. Very large per-order invoice histories are not load-validated.",
|
|
"The boundary probes use rollback-only previews of original idempotent validation and rejected confirmations; they repeat no posted decision.",
|
|
"Native/economic bundles and common writer source pins are recorded; current concurrent Compras changes and existing demos were not upgraded.",
|
|
"Visual review, sustained load, general destination installation and owner/runtime privilege separation remain pending."
|
|
],
|
|
"visual_review_pending": true,
|
|
"deployment_capacity_validated": false
|
|
}
|