Compare commits

...
Author SHA1 Message Date
nala 92a7418cb6 docs(iva): prepare G7D delivery after verified backup and isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 22:35:57 +02:00
nala 76be72c38c docs(iva): record G7D P095 QA and preserve 81 deliveries 2026-10-24 22:34:04 +02:00
nala 3bcd98e78e feat(iva): prepare P095 regulated fuel base excluding TC in QA 2026-10-24 22:33:57 +02:00
nala 9600880169 docs(iva): record installed G7C P094 and preserved valuation scope 2026-10-24 22:29:08 +02:00
nala df7cb7fa47 docs(iva): prepare G7C delivery after verified backup and isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 22:26:45 +02:00
nala 287f2f8321 docs(iva): record G7C P094 QA and preserve 80 deliveries 2026-10-24 22:23:42 +02:00
nala 4672789f2b feat(iva): prepare P094 act transfer valuation bases in QA 2026-10-24 22:23:10 +02:00
nala 15894f4b04 docs(iva): record installed G7B P091 and preserved commission directions 2026-10-24 22:15:55 +02:00
nala e62b7dfdc2 docs(iva): prepare G7B delivery after verified backup and isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 22:13:42 +02:00
nala 9bd2e062f4 docs(iva): record G7B P091 QA and preserve 79 delivered branches 2026-10-24 22:04:25 +02:00
nala 948621a65c feat(iva): determine goods commission sale and purchase tax bases 2026-10-24 22:03:44 +02:00
nala 50463ca716 docs(iva): record installed G7A P090 with base VAT separation 2026-10-24 21:52:31 +02:00
nala 4193056bdd docs(iva): prepare G7A delivery after verified backup and isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 21:50:21 +02:00
nala 20bfeb4f71 docs(iva): record G7A P090 QA and preserve 78 delivered branches 2026-10-24 21:47:38 +02:00
nala 1dda6ea258 feat(iva): determine public authority compensation tax bases 2026-10-24 21:46:47 +02:00
nala 0a80f1c457 docs(iva): record installed G6H P060 and preserved decision scope 2026-10-24 21:39:03 +02:00
nala eb9294ef42 docs(iva): prepare G6H delivery after verified backup and isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 21:36:55 +02:00
nala 2359a88dba docs(iva): record G6H P060 QA and preserve 77 delivered branches 2026-10-24 21:29:32 +02:00
nala 69b6c49a60 feat(iva): classify UN development imports with proportional relief 2026-10-24 21:29:22 +02:00
nala 163e090ea5 docs(iva): record installed G6G P056 delivery and preserved authorization scope 2026-10-24 21:13:56 +02:00
nala 9b26217dec docs(iva): prepare G6G delivery after verified backup and isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 21:11:50 +02:00
nala ebf5e53c3c docs(iva): record G6G P056 QA and preserve 76 delivered branches 2026-10-24 20:53:12 +02:00
nala 9783c54b2c feat(iva): classify authorized class K investment equipment imports 2026-10-24 20:52:32 +02:00
nala 0f9f7e3409 docs(iva): record installed G6F and partial P084 P085 delivery 2026-10-24 20:47:58 +02:00
nala 78c9f4a356 docs(iva): prepare G6F delivery after verified backup and restore
tests / ci (push) Canceled after 0s
2026-10-24 20:45:46 +02:00
nala 7996c35933 docs(iva): record G6F P050 QA and authorized partial offer coverage 2026-10-24 20:41:20 +02:00
nala 29e708ba2d fix(iva): exclude import-linked services from goods gift references 2026-10-24 20:39:54 +02:00
nala f9fb04f947 feat(iva): classify P050 services included in import taxable base 2026-10-24 20:39:23 +02:00
nala 77d1290258 docs(iva): record distinct offer paths and scoped conditional scenarios QA 2026-10-24 20:33:20 +02:00
nala 946fc08906 fix(iva): preserve exact and literal scope of offer decisions 2026-10-24 20:31:58 +02:00
nala 7ecf9ec79a feat(iva): distinguish offer requests emergency drafts and conditional scenarios 2026-10-24 20:30:54 +02:00
nala 536559d651 docs(iva): receipt for installed G6E P052 and partial draft preparation 2026-10-24 20:26:59 +02:00
nala c1314cdf90 docs(iva): prepare G6E delivery after fresh backup and isolated restore
tests / ci (push) Waiting to run
2026-10-24 20:23:46 +02:00
nala ff8848d32d docs(iva): record G6E QA and Model I1 enabling-diploma scope 2026-10-24 20:19:29 +02:00
nala 1565aa4ffb feat(iva): classify P052 onboard supply imports with statutory exclusions 2026-10-24 20:18:20 +02:00
nala 4e4bf6b859 docs(iva): record P084 P085 draft-only QA and joint source research 2026-10-24 20:11:22 +02:00
nala 5ec2f198a3 feat(iva): prepare distinct P084 P085 offer drafts without applying benefits 2026-10-24 20:10:28 +02:00
nala e32690799f docs(iva): receipt for installed joint P048 P080 delivery 2026-10-24 20:07:57 +02:00
nala 2d889a211b docs(iva): prepare joint P048 P080 Git delivery after verified restore
tests / ci (push) Canceled after 0s
2026-10-24 20:04:30 +02:00
nala 50fdd97916 docs(iva): record P080 QA and individual P084 P085 remaining work 2026-10-24 20:01:41 +02:00
nala 9842dcbb0e feat(iva): classify P080 special-regime imports and delimit P084/P085 2026-10-24 20:00:48 +02:00
nala e384418ecc docs(iva): record G6D P048 three treatments QA and preserved 72 closures 2026-10-24 19:55:26 +02:00
nala 0eb37ef59b feat(iva): classify P048 import customs regimes with full duty exemption 2026-10-24 19:54:06 +02:00
nala 2ed62165b7 docs(delivery): record G6C installed delta and reconciled 72 plus 60 balance 2026-10-24 19:48:13 +02:00
nala d46b794ab2 docs(delivery): prepare G6C with fresh backup and verified isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 19:45:57 +02:00
nala d65d3f5c4e docs(iva): record G6C P053 P054 four treatments QA and preserved 70 closures 2026-10-24 19:43:54 +02:00
nala 8e5565d5e0 feat(iva): classify eligible vessel and aircraft imports in scoped G6C 2026-10-24 19:42:37 +02:00
nala 72e56f7ae5 docs(delivery): record G6B installed delta and reconciled 70 plus 62 balance 2026-10-24 19:37:22 +02:00
nala 4cebd61765 docs(delivery): prepare G6B with fresh backup and verified isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 19:35:02 +02:00
nala 1efb32c244 docs(iva): record G6B P055 P057 QA and preserved 68 delivered branches 2026-10-24 19:32:07 +02:00
nala f75f36f0e3 feat(iva): classify artwork and fire brigade imports in scoped G6B 2026-10-24 19:29:00 +02:00
nala a23f1dcb6e docs(delivery): record G6A installed delta and reconciled 68 plus 64 balance 2026-10-24 19:24:39 +02:00
nala e3601c124d docs(delivery): prepare G6A with fresh backup and verified isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 19:22:06 +02:00
nala 615f78e79f docs(iva): record G6A P049 P051 QA and preserved 66 delivered branches 2026-10-24 19:20:09 +02:00
nala 965da26426 feat(iva): classify reimports and central bank gold imports in scoped G6A 2026-10-24 19:18:46 +02:00
nala e99ea1d013 docs(delivery): record G5B eliminated provision routing and installed delta 2026-10-24 19:10:47 +02:00
nala 6f056359df docs(delivery): prepare G5B with fresh backup and verified isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 19:08:39 +02:00
nala 0cd7e9fb62 docs(iva): record P086 rectification and demonstrated G5B acquisition continuity QA 2026-10-24 19:05:10 +02:00
nala 689a4c93c3 feat(iva): explain eliminated P086 exemption and preserve acquisition continuity 2026-10-24 19:03:00 +02:00
nala d3e9f3732c docs(delivery): record G5A installed delta and reconciled 65 plus 67 balance 2026-10-24 18:49:57 +02:00
nala 69f2e365bf chore(delivery): prepare G5A with fresh authenticated backup and restore
tests / ci (push) Waiting to run
2026-10-24 18:47:03 +02:00
nala 4e97cd05ea docs(iva): map accepted G4E treatments and record demonstrated G5A QA 2026-10-24 18:37:36 +02:00
nala 1f7fc13872 feat(iva): add G5A goods and connected services under special regimes 2026-10-24 18:36:01 +02:00
nala 0eb2c485cc docs(delivery): record G4E installed delta and reconciled 62 plus 70 balance 2026-10-24 18:28:22 +02:00
nala 2e21ca4500 chore(delivery): prepare G4E after fresh authenticated backup and restore
tests / ci (push) Canceled after 0s
2026-10-24 18:26:03 +02:00
nala fae8162c58 docs(iva): close G4E QA from Tempo manual visual confirmation 2026-10-24 18:23:30 +02:00
nala d03101bb69 docs(iva): record G4E QA evidence and pending directed visual check 2026-10-24 18:22:16 +02:00
nala 38faeac685 feat(iva): add G4E export buyer and beneficiary conditions in QA 2026-10-24 18:20:04 +02:00
nala 3be371c823 docs(delivery): record G4D installed delta and beverage follow-up in L2 L3 2026-10-24 18:09:53 +02:00
nala 686328a085 chore(delivery): prepare G4D with verified destination backup and restore
tests / ci (push) Canceled after 0s
2026-10-24 18:07:35 +02:00
nala 40a4ddcbde docs(iva): close G4D QA with Tempo directed visual confirmation 2026-10-24 18:06:14 +02:00
nala e50733ba1d docs(iva): record G4D coverage exclusions and pending visual proof 2026-10-24 18:05:20 +02:00
nala 8df721ac51 feat(iva): classify G4D onboard supplies with explicit beverage exceptions 2026-10-24 18:04:31 +02:00
nala 25cae1d98b docs(delivery): record G4C installed delta and preserved baseline 2026-10-24 17:59:25 +02:00
nala 679203d4b1 chore(delivery): prepare G4C after authenticated backup and isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 17:56:23 +02:00
nala 2fccbc8ee8 docs(iva): close G4C QA with Tempo manual visual confirmation 2026-10-24 17:55:23 +02:00
nala 19b31d51c5 docs(iva): record G4C code/API coverage and pending directed visual proof 2026-10-24 17:54:36 +02:00
nala b1c8e0e343 feat(iva): add G4C linked export services with explicit operation reference 2026-10-24 17:53:35 +02:00
nala 117f2a70a8 docs(iva): record G4B homologation delivery and preserved balance 2026-10-24 17:42:50 +02:00
nala a153d0782f docs(iva): prepare G4B delivery with fresh authenticated backup and restore
tests / ci (push) Canceled after 0s
2026-10-24 17:40:34 +02:00
nala 0b0e002d15 docs(iva): record Tempo G4B visual completion and current saved result 2026-10-24 17:31:20 +02:00
nala b641887274 docs(iva): record G4B code QA and explicit browser access gate 2026-10-24 17:29:11 +02:00
nala f946364baa feat(iva): implement G4B eligible vessel aircraft and direct services 2026-10-24 17:27:32 +02:00
nala 3846be8fc6 docs(iva): record G4A homologation delivery and preserved balance 2026-10-24 17:21:31 +02:00
nala b898955603 docs(iva): prepare G4A delivery with fresh backup and restore
tests / ci (push) Canceled after 0s
2026-10-24 17:19:15 +02:00
nala 7b54efb0fc docs(iva): record Tempo G4A visual completion and preserved historical result 2026-10-24 17:16:23 +02:00
nala 7a58fa2435 docs(iva): record G4A code QA coverage and explicit visual remainder 2026-10-24 17:08:36 +02:00
nala 0f0d2e566f feat(iva): implement G4A direct international operations with scoped evidence 2026-10-24 17:07:26 +02:00
nala 82e010c44f docs(iva): record G3 homologation delivery and preserved balance 2026-10-24 17:03:13 +02:00
nala 6eefe4b332 docs(iva): prepare G3 delivery with fresh backup restore and compatible rollback
tests / ci (push) Canceled after 0s
2026-10-24 17:01:08 +02:00
nala 0dc2d64b20 docs(iva): record Tempo visual completion of G3 QA 2026-10-24 16:58:34 +02:00
nala bda6d1e3a0 docs(iva): record G3 cessation code QA and explicit visual verification remainder 2026-10-24 16:54:23 +02:00
nala ac948bd8b7 feat(iva): implement G3 temporary benefit cessation and explicit treatment continuity 2026-10-24 16:51:52 +02:00
nala 908c8afc54 docs(iva): make G2L manual visual evidence and technical corroboration explicit 2026-10-24 16:44:26 +02:00
nala 643ba6ed72 docs(iva): record G2K G2L homologation delivery and preserved balance 2026-10-24 16:41:57 +02:00
nala ccdecbd8d7 docs(iva): verify G2K G2L joint delivery backup and restore
tests / ci (push) Canceled after 0s
2026-10-24 16:39:06 +02:00
nala da798dd1d8 docs(iva): complete G2L QA with Tempo review and actual saved payload evidence 2026-10-24 16:36:58 +02:00
nala 0304612093 docs(iva): record partial Tempo review and clarify QA save recovery controls 2026-10-24 16:33:05 +02:00
nala d76078a81f docs(iva): accept Tempo manual verification route without claiming G2L closure 2026-10-24 16:24:02 +02:00
nala c4cc7d83e7 docs(iva): record G2L code QA and explicit pending visual access gate 2026-10-24 16:20:31 +02:00
nala 744682835a feat(iva): implement G2L Annex I and explicit continuity pending visual QA 2026-10-24 16:19:52 +02:00
nala 1fe742561f docs(iva): record G2K P008 QA candidate and preserved balance 2026-10-24 16:06:48 +02:00
nala 8882dc54d0 feat(iva): implement G2K pharmaceutical manufacturing inputs in QA 2026-10-24 16:05:55 +02:00
nala eb9e0dbc60 docs(iva): record G2I G2J homologation delivery and calendar resolution 2026-10-24 15:52:45 +02:00
nala e45a1394fa docs(iva): verify G2I G2J joint delivery backup and calendar evidence
tests / ci (push) Canceled after 0s
2026-10-24 15:49:08 +02:00
nala 72f4187d3b feat(iva): add fundraising group and correct production option calendar in QA 2026-10-24 15:47:02 +02:00
nala a5ac8ca1c9 docs(iva): record G2I QA candidate and explicit calendar limit 2026-10-24 15:31:29 +02:00
nala fe69a16eea feat(iva): add own-production exemptions and dated tax options in QA 2026-10-24 15:31:27 +02:00
nala 7696af6814 docs(iva): record G2G G2H homologation delivery and preserved balance 2026-10-24 15:15:49 +02:00
nala d4eae917ee docs(iva): verify G2G G2H joint delivery backup and compatibility
tests / ci (push) Canceled after 0s
2026-10-24 15:13:32 +02:00
nala b297058d11 docs(iva): record G2H QA candidate and one-branch coverage 2026-10-24 15:12:30 +02:00
nala 48146089cd feat(iva): add eighteen enumerated products within P026 in QA 2026-10-24 15:12:14 +02:00
nala 2440cb448a docs(iva): record G2G QA candidate and four-branch balance 2026-10-24 15:06:45 +02:00
nala 9dbfdd67ad feat(iva): add conditional public official and asset-sale operations in QA 2026-10-24 15:06:43 +02:00
nala b1928b61e5 docs(iva): clarify delivered G2F IDs and evidence paths 2026-10-24 15:03:42 +02:00
nala 541ea70484 docs(iva): record G2E G2F homologation delivery and preservation 2026-10-24 15:01:45 +02:00
nala 9a56d98242 docs(iva): verify G2E G2F destination backup and isolated restore
tests / ci (push) Canceled after 0s
2026-10-24 14:59:24 +02:00
nala 38b49bd5fa docs(iva): prepare G2E G2F joint delivery and authenticated preflight 2026-10-24 14:57:53 +02:00
nala 9b0f437073 docs(iva): record G2F candidate and seven QA branches 2026-10-24 14:57:23 +02:00
nala 8171c7992e feat(iva): add games stamped values and passenger transport in QA 2026-10-24 14:57:22 +02:00
nala 30760cab9b docs(iva): record G2E QA candidate and preserved balance 2026-10-24 14:53:24 +02:00
nala 33d18b9efc feat(iva): add conditional agropecuary operations in QA 2026-10-24 14:53:23 +02:00
nala 0aac0d1555 docs(iva): record G2C G2D homologation delivery and preservation 2026-10-24 14:49:27 +02:00
nala 3b788ec009 docs(iva): record G2C G2D backup and activation scope
tests / ci (push) Canceled after 0s
2026-10-24 14:46:36 +02:00
nala db4ff64e87 docs(iva): prepare verified G2C G2D joint Git delivery 2026-10-24 14:46:24 +02:00
nala c28e290b42 docs(iva): record G2D candidate and joint QA balance 2026-10-24 14:42:43 +02:00
nala 8d127799cd feat(iva): add author rights and eligible publications in QA 2026-10-24 14:42:38 +02:00
nala d32ad1e0a6 docs(iva): record G2C QA candidate and preserved delivery balance 2026-10-24 14:39:04 +02:00
nala 122f4f04b9 feat(iva): add conditional cultural and membership operations in QA 2026-10-24 14:38:55 +02:00
nala dacda11c07 Record joint L1 homologation delivery 490527b9 and verified preservation 2026-10-24 14:32:35 +02:00
nala 490527b92c Record joint L1 QA candidate, verified Git bundle and integration preview
tests / ci (push) Canceled after 0s
2026-10-24 14:22:15 +02:00
nala 4a35d63cd3 Complete G2B social QA and prepare joint L1 delivery with compatible rollback 2026-10-24 14:21:21 +02:00
nala 0e644b5524 Record G2A QA candidate and reconciled L1 closure counts 2026-10-24 14:04:45 +02:00
nala 675cf38f67 Implement G2A health exemptions in QA and reconcile L1 branch inventory 2026-10-24 14:04:18 +02:00
nala 89ab288334 Record L1 grouped QA candidate and verified final export evidence 2026-10-24 13:54:42 +02:00
nala 5030116ee5 Group L1 coverage and implement documented service exemptions in QA 2026-10-24 13:54:32 +02:00
nala 8719e916ea docs: record rational VAT QA candidate and open form dependency 2026-10-24 13:20:52 +02:00
nala 689e7cbe8b feat: preserve exact included VAT fractions and enumerate L1 remainder 2026-10-24 13:20:32 +02:00
nala d89912e579 docs: record IVA L1 QA candidate and explicit remaining scope 2026-10-24 13:00:26 +02:00
nala 544068e8cc feat: demonstrate scoped IVA operations L1 in QA 2026-10-24 12:59:37 +02:00
nala e8c39a1b54 docs: receipt for installed Modelo A acquisitions and totals 2026-10-24 12:19:34 +02:00
nala 1655f57e69 docs: register Modelo A acquisitions QA candidate and evidence
tests / ci (push) Canceled after 0s
2026-10-24 12:14:21 +02:00
nala d18ff0f049 feat: implement opportunity-scoped Modelo A acquisitions in QA 2026-10-24 12:13:57 +02:00
nala 355656b5c8 docs: receipt for installed simulator S1-S3 closure in homologation 2026-10-24 11:41:57 +02:00
nala cd10cccbf4 docs: close S3 monthly PDF review and mark simulator candidate ready for integration
tests / ci (push) Canceled after 0s
2026-10-24 11:37:09 +02:00
nala d044ef1efc docs: record S1 and S2 QA results and directed S3 file checks 2026-10-24 11:30:59 +02:00
nala 65b87819a0 fix: preserve cashflow currency and recover admitted monthly IVA executions in QA 2026-10-24 11:29:15 +02:00
nala be62783b98 docs: delimit simulator closure to two code gaps and monthly export proof 2026-10-24 11:16:42 +02:00
243 changed files with 33686 additions and 46 deletions
@@ -37,7 +37,7 @@ class StoreSimulationFormDraftRequest extends FormRequest
'contact_province', 'contact_district', 'preferred_channel',
];
$economic = [
'context_opportunity', 'context_applicability_snapshot', 'investment_regime', 'context_reuse', 'compatible_fields_snapshot', 'published_iva_base', 'published_iva_currency', 'published_iva_date', 'published_iva_scope', 'monthly_iva_settings', 'monthly_iva_snapshot', 'journey_type', 'detail_level', 'business_plan_snapshot', 'financial_tools_snapshot', 'cashflow_snapshot', 'project_team_snapshot', 'project_execution_snapshot', 'purpose', 'manifestation_type', 'preferred_language', 'project_title', 'project_summary', 'project_problem', 'target_customers', 'value_proposition', 'market_assumption', 'market_source', 'project_milestones', 'selection_labels', 'project_type',
'context_opportunity', 'context_applicability_snapshot', 'investment_regime', 'context_reuse', 'compatible_fields_snapshot', 'published_iva_base', 'published_iva_currency', 'published_iva_date', 'published_iva_scope', 'monthly_iva_settings', 'monthly_iva_snapshot', 'modelo_a_snapshot', 'journey_type', 'detail_level', 'business_plan_snapshot', 'financial_tools_snapshot', 'cashflow_snapshot', 'project_team_snapshot', 'project_execution_snapshot', 'purpose', 'manifestation_type', 'preferred_language', 'project_title', 'project_summary', 'project_problem', 'target_customers', 'value_proposition', 'market_assumption', 'market_source', 'project_milestones', 'selection_labels', 'project_type',
'competitor_assumption', 'sales_channel_assumption', 'marketing_approach', 'location_rationale', 'project_risk_responses_snapshot', 'project_questionnaire_version',
'customer_validation_status', 'cost_estimate_status', 'location_assessment_status', 'funding_status', 'receivables_timing_status',
'project_type_other', 'sector_id', 'activity_id', 'products_services', 'maturity_stage', 'expected_start_date',
@@ -83,6 +83,8 @@ class StoreSimulationFormDraftRequest extends FormRequest
'economic_snapshot.published_iva_scope' => ['nullable', 'string', 'in:yes,no'],
'economic_snapshot.monthly_iva_settings' => ['nullable', 'string', 'max:2000'],
'economic_snapshot.monthly_iva_snapshot' => ['nullable', 'string', 'max:60000'],
// Preserve operation books and explicit history as the draft grows.
'economic_snapshot.modelo_a_snapshot' => ['nullable', 'string', 'json', 'max:4000000'],
'economic_snapshot.project_team_snapshot' => ['nullable', 'string', 'max:30000'],
'economic_snapshot.project_execution_snapshot' => ['nullable', 'string', 'max:30000'],
'economic_snapshot.project_risk_responses_snapshot' => ['nullable', 'string', 'max:30000'],
@@ -78,3 +78,6 @@
"Cópia privada ou derivado";"C:\laragon\www\portal-investidor\storage\app\private\portal-documents\b0ea969a-30ec-477b-8b8b-b7af82a11bfe";"b0ea969a-30ec-477b-8b8b-b7af82a11bfe";"67067";"5C69B6F189A1D3F5307E0CF7DD8224554705158A682637D3105AFAD615DB26E2";"b0ea969a-30ec-477b-8b8b-b7af82a11bfe";"C:\laragon\www\portal-investidor\storage\app\private\geo-ine-review-20260928\original.pdf + C:\laragon\www\portal-investidor\storage\app\private\geo-ine-review-20260928-v2\original.pdf + C:\laragon\www\portal-investidor\storage\app\private\portal-documents\b0ea969a-30ec-477b-8b8b-b7af82a11bfe";"Private stored copy already represented by its document record";"Acessível em armazenamento privado";"Inventariado por caminho, tamanho e SHA-256; não publicado nem aberto nesta revisão."
"Formulario fornecido Tempo";"\\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\portal do investidor\Notas\Novo Modelo A.docx";"Novo Modelo A.docx";"532008";"62C198E90D8C6792F7D5CCEFC6386DF2E4B6089573067D3A6E1EAE7FC2B9572B";"IVA Modelo A - exemplar Tempo";"";"Original privado na biblioteca QA; sem publicacao ou activacao";"Acessivel / importado QA / privado / scan limpo";"Imagem incorporada lida visualmente; edicao/vigencia nao certificada. Correspondencia na reconciliacao Modelo A, AUD-SIM-INT02. Variante de bytes preservada, nao duplicado por nome."
"Formulario fornecido Tempo";"\\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\portal do investidor\Notas\Novo Modelo A v1.docx";"Novo Modelo A v1.docx";"532100";"63D45FA80DB17A60B43619D55A25813229D670D14C758273F86316285DB8E02B";"IVA Modelo A - exemplar Tempo";"";"Original privado na biblioteca QA; sem publicacao ou activacao";"Acessivel / importado QA / privado / scan limpo";"Imagem incorporada lida visualmente; edicao/vigencia nao certificada. Correspondencia na reconciliacao Modelo A, AUD-SIM-INT02. Variante de bytes preservada, nao duplicado por nome."
"Documento oficial localizado para consultaQA";"C:\laragon\www\portal-investidor\outputs\iva-l1-g5d-offer-drafts-20261024\BR-11-I-2010-03-17-despacho-modelos.pdf";"BR-11-I-2010-03-17-despacho-modelos.pdf";"376928";"384fb46354e1888df43f72288dfed7933e30c7534211e0dcb6994f43b10e0059";"BR11/I Série17/03/2010,DespachoMF06/01/2010,ModelosRCBFDecreto56/2009";"";"Preservar original e origem;sem publicação/importação/activação de regra";"Acessível";"PDF1–5 lidos;ModeloI.1versoPDF3 localizado;âmbito ligação14(3)/alterações por conferir,sem nova autenticação da fonte oficial"
"Fonte oficial localizada para cotejoQA";"C:\laragon\www\portal-investidor\outputs\iva-l1-g6e-supplies-20261024\Decreto56-2009-BR40.pdf";"Decreto56-2009-BR40.pdf";"422005";"6ea1b8d93daed48c6d590481d874010fa1708211d8f27c319dc9a31328456017";"Decreto56/2009/CBFLei4/2009 — originalBR40 ecompilaçãoMIREME";"";"Preservar original/origem;sem publicação ou activação de cálculo";"Acessível";"CotejoModeloI.1;âmbitoCBF não demonstra remissãoCIVA14(3);não autenticação adicional"
"Fonte oficial localizada para cotejoQA";"C:\laragon\www\portal-investidor\outputs\iva-l1-g6e-supplies-20261024\MIREME-legislacao-investimentos.pdf";"MIREME-legislacao-investimentos.pdf";"1674566";"df50f6a489ffb35a4252fddec0ffa1f9c58d7b8cb4e54c9f25b7904bd39218b7";"Decreto56/2009/CBFLei4/2009 — originalBR40 ecompilaçãoMIREME";"";"Preservar original/origem;sem publicação ou activação de cálculo";"Acessível";"CotejoModeloI.1;âmbitoCBF não demonstra remissãoCIVA14(3);não autenticação adicional"
1 RecordType Path FileName SizeBytes SHA256 TitleOrSubject DuplicateGroup Disposition Status Notes
78 Cópia privada ou derivado C:\laragon\www\portal-investidor\storage\app\private\portal-documents\b0ea969a-30ec-477b-8b8b-b7af82a11bfe b0ea969a-30ec-477b-8b8b-b7af82a11bfe 67067 5C69B6F189A1D3F5307E0CF7DD8224554705158A682637D3105AFAD615DB26E2 b0ea969a-30ec-477b-8b8b-b7af82a11bfe C:\laragon\www\portal-investidor\storage\app\private\geo-ine-review-20260928\original.pdf + C:\laragon\www\portal-investidor\storage\app\private\geo-ine-review-20260928-v2\original.pdf + C:\laragon\www\portal-investidor\storage\app\private\portal-documents\b0ea969a-30ec-477b-8b8b-b7af82a11bfe Private stored copy already represented by its document record Acessível em armazenamento privado Inventariado por caminho, tamanho e SHA-256; não publicado nem aberto nesta revisão.
79 Formulario fornecido Tempo \\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\portal do investidor\Notas\Novo Modelo A.docx Novo Modelo A.docx 532008 62C198E90D8C6792F7D5CCEFC6386DF2E4B6089573067D3A6E1EAE7FC2B9572B IVA Modelo A - exemplar Tempo Original privado na biblioteca QA; sem publicacao ou activacao Acessivel / importado QA / privado / scan limpo Imagem incorporada lida visualmente; edicao/vigencia nao certificada. Correspondencia na reconciliacao Modelo A, AUD-SIM-INT02. Variante de bytes preservada, nao duplicado por nome.
80 Formulario fornecido Tempo \\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\portal do investidor\Notas\Novo Modelo A v1.docx Novo Modelo A v1.docx 532100 63D45FA80DB17A60B43619D55A25813229D670D14C758273F86316285DB8E02B IVA Modelo A - exemplar Tempo Original privado na biblioteca QA; sem publicacao ou activacao Acessivel / importado QA / privado / scan limpo Imagem incorporada lida visualmente; edicao/vigencia nao certificada. Correspondencia na reconciliacao Modelo A, AUD-SIM-INT02. Variante de bytes preservada, nao duplicado por nome.
81 Documento oficial localizado para consultaQA C:\laragon\www\portal-investidor\outputs\iva-l1-g5d-offer-drafts-20261024\BR-11-I-2010-03-17-despacho-modelos.pdf BR-11-I-2010-03-17-despacho-modelos.pdf 376928 384fb46354e1888df43f72288dfed7933e30c7534211e0dcb6994f43b10e0059 BR11/I Série17/03/2010,DespachoMF06/01/2010,ModelosRCBFDecreto56/2009 Preservar original e origem;sem publicação/importação/activação de regra Acessível PDF1–5 lidos;ModeloI.1versoPDF3 localizado;âmbito ligação14(3)/alterações por conferir,sem nova autenticação da fonte oficial
82 Fonte oficial localizada para cotejoQA C:\laragon\www\portal-investidor\outputs\iva-l1-g6e-supplies-20261024\Decreto56-2009-BR40.pdf Decreto56-2009-BR40.pdf 422005 6ea1b8d93daed48c6d590481d874010fa1708211d8f27c319dc9a31328456017 Decreto56/2009/CBFLei4/2009 — originalBR40 ecompilaçãoMIREME Preservar original/origem;sem publicação ou activação de cálculo Acessível CotejoModeloI.1;âmbitoCBF não demonstra remissãoCIVA14(3);não autenticação adicional
83 Fonte oficial localizada para cotejoQA C:\laragon\www\portal-investidor\outputs\iva-l1-g6e-supplies-20261024\MIREME-legislacao-investimentos.pdf MIREME-legislacao-investimentos.pdf 1674566 df50f6a489ffb35a4252fddec0ffa1f9c58d7b8cb4e54c9f25b7904bd39218b7 Decreto56/2009/CBFLei4/2009 — originalBR40 ecompilaçãoMIREME Preservar original/origem;sem publicação ou activação de cálculo Acessível CotejoModeloI.1;âmbitoCBF não demonstra remissãoCIVA14(3);não autenticação adicional
@@ -24,3 +24,6 @@
"docs/investmoz/simulations/official-source-register.md";"sumário oficial INM do BR 134/2024";"https://www.inm.gov.mz/pt-br/content/sum%C3%A1rio-br-n%C2%BA-134-de-110724-boletim-da-rep%C3%BAblica-i-serie-p%C3%A1g-2827";"Não identificado por esta referência; URL registada";"Referência de pesquisa/documentação; não conta como ficheiro importado";"Manter como fonte externa a obter/conferir; não activa regra fiscal"
"docs/investmoz/simulations/official-source-register.md";"ficha oficial INM do aviso";"https://www.inm.gov.mz/pt-br/content/assembleia-da-rep%C3%BAblica-br-n%C2%BA-89-de-080617-boletim-da-rep%C3%BAblica-i-serie-p%C3%A1g-569";"Não identificado por esta referência; URL registada";"Referência de pesquisa/documentação; não conta como ficheiro importado";"Manter como fonte externa a obter/conferir; não activa regra fiscal"
"docs/investmoz/simulations/official-source-register.md";"reprodução integral de terceiro, auxiliar";"https://www.lexlink.eu/FileGet.aspx?FileId=2999523";"Não identificado por esta referência; URL registada";"Referência de pesquisa/documentação; não conta como ficheiro importado";"Manter como fonte externa a obter/conferir; não activa regra fiscal"
"docs/investmoz/simulations/iva-l1-p084-p085-draft-preparation-qa-20261024.json";"BR11/2010,DespachoMF06/01/2010,ModeloI.1versoPDF3";"https://www.cipmoz.org/wp-content/uploads/2023/parcerias-publico-privadas/9PP%29%20Despacho_Mecanismos%20Implementacao%20do%20Regulamento%20do%20Codigo%20dos%20Beneficios%20Fiscais.pdf";"C:\laragon\www\portal-investidor\outputs\iva-l1-g5d-offer-drafts-20261024\BR-11-I-2010-03-17-despacho-modelos.pdf";"Original oficialBR obtido/hash;âmbito específico ainda por conferir";"Consulta autorizada;sem publicação ou activação fiscal"
"docs/investmoz/simulations/iva-l1-p084-p085-model-i1-cotejo-20261024.json";"Decreto56/2009/RegCBFLei4/2009,origemModeloI.1";"https://fracessoriasa.co.mz/wp-content/uploads/2021/03/10-Decreto-n_56.2009-REGULAMENTO-DOS-BENEFICIOS-FISCAIS.pdf";"C:\laragon\www\portal-investidor\outputs\iva-l1-g6e-supplies-20261024\Decreto56-2009-BR40.pdf";"OriginalBR ecompilaçãooficial obtidos/hash,âmbito cotejado";"Sem correspondênciaCIVA14(3)demonstrada;sem publicação ou activação fiscal"
"docs/investmoz/simulations/iva-l1-p084-p085-model-i1-cotejo-20261024.json";"Decreto56/2009/RegCBFLei4/2009,origemModeloI.1";"https://mireme.gov.mz/wp-content/uploads/2022/03/Lei-e-Regualamento-das-zonas-francas-industriais-investimentos.pdf";"C:\laragon\www\portal-investidor\outputs\iva-l1-g6e-supplies-20261024\MIREME-legislacao-investimentos.pdf";"OriginalBR ecompilaçãooficial obtidos/hash,âmbito cotejado";"Sem correspondênciaCIVA14(3)demonstrada;sem publicação ou activação fiscal"
1 SourceRegister Label URL LocalBinary State Disposition
24 docs/investmoz/simulations/official-source-register.md sumário oficial INM do BR 134/2024 https://www.inm.gov.mz/pt-br/content/sum%C3%A1rio-br-n%C2%BA-134-de-110724-boletim-da-rep%C3%BAblica-i-serie-p%C3%A1g-2827 Não identificado por esta referência; URL registada Referência de pesquisa/documentação; não conta como ficheiro importado Manter como fonte externa a obter/conferir; não activa regra fiscal
25 docs/investmoz/simulations/official-source-register.md ficha oficial INM do aviso https://www.inm.gov.mz/pt-br/content/assembleia-da-rep%C3%BAblica-br-n%C2%BA-89-de-080617-boletim-da-rep%C3%BAblica-i-serie-p%C3%A1g-569 Não identificado por esta referência; URL registada Referência de pesquisa/documentação; não conta como ficheiro importado Manter como fonte externa a obter/conferir; não activa regra fiscal
26 docs/investmoz/simulations/official-source-register.md reprodução integral de terceiro, auxiliar https://www.lexlink.eu/FileGet.aspx?FileId=2999523 Não identificado por esta referência; URL registada Referência de pesquisa/documentação; não conta como ficheiro importado Manter como fonte externa a obter/conferir; não activa regra fiscal
27 docs/investmoz/simulations/iva-l1-p084-p085-draft-preparation-qa-20261024.json BR11/2010,DespachoMF06/01/2010,ModeloI.1versoPDF3 https://www.cipmoz.org/wp-content/uploads/2023/parcerias-publico-privadas/9PP%29%20Despacho_Mecanismos%20Implementacao%20do%20Regulamento%20do%20Codigo%20dos%20Beneficios%20Fiscais.pdf C:\laragon\www\portal-investidor\outputs\iva-l1-g5d-offer-drafts-20261024\BR-11-I-2010-03-17-despacho-modelos.pdf Original oficialBR obtido/hash;âmbito específico ainda por conferir Consulta autorizada;sem publicação ou activação fiscal
28 docs/investmoz/simulations/iva-l1-p084-p085-model-i1-cotejo-20261024.json Decreto56/2009/RegCBFLei4/2009,origemModeloI.1 https://fracessoriasa.co.mz/wp-content/uploads/2021/03/10-Decreto-n_56.2009-REGULAMENTO-DOS-BENEFICIOS-FISCAIS.pdf C:\laragon\www\portal-investidor\outputs\iva-l1-g6e-supplies-20261024\Decreto56-2009-BR40.pdf OriginalBR ecompilaçãooficial obtidos/hash,âmbito cotejado Sem correspondênciaCIVA14(3)demonstrada;sem publicação ou activação fiscal
29 docs/investmoz/simulations/iva-l1-p084-p085-model-i1-cotejo-20261024.json Decreto56/2009/RegCBFLei4/2009,origemModeloI.1 https://mireme.gov.mz/wp-content/uploads/2022/03/Lei-e-Regualamento-das-zonas-francas-industriais-investimentos.pdf C:\laragon\www\portal-investidor\outputs\iva-l1-g6e-supplies-20261024\MIREME-legislacao-investimentos.pdf OriginalBR ecompilaçãooficial obtidos/hash,âmbito cotejado Sem correspondênciaCIVA14(3)demonstrada;sem publicação ou activação fiscal
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,99 @@
{
"key": "iva_l1_g4e_beneficiaries_code_API_QA_visual_pending_20261024",
"status": "delivered_with_QA_proofs_preserved",
"base": "3be371c8",
"group": "G4E",
"branches": {
"AUD-SIM-L1-P061": "export_nonresident_buyer",
"AUD-SIM-L1-P069": "export_diplomatic_mission",
"AUD-SIM-L1-P070": "export_international_organisation",
"AUD-SIM-L1-P071": "export_humanitarian_organisation"
},
"branch_count": 4,
"treatment_count": 4,
"source": "CIVA13(1)(b/j/k/l),PDF12/p1426(270),19(1)(b)(i),PDF15/p1426(273); alterações2022/2025 reutilizadas",
"preservation": {
"initial_worktree": "clean at3be371c8",
"accepted_delivered": 58,
"prior_books": 18,
"prior_books_identical_current": true,
"confirmed_losses": [],
"active": "No remote changes; accepted G4D inventory reused, not freshly re-read"
},
"tests": {
"frontend_new": 3,
"frontend_delta_with_G4D": 7,
"API_tests": 1,
"API_assertions": 39,
"database": "simulator_fiscal_delta_20261021_test:55441",
"rollback": true,
"types": "passed",
"production": "built successfully; plugin timings warning; PowerShell classified native stderr as nonzero",
"visual": false,
"report_visual": false,
"Word_PDF": "accepted exporter proofs reused; no pagination claim",
"QA_build": "built successfully; existing future Vite config compatibility warning",
"QA_storage": "save/recover/reject passed in temporary directory",
"QA_HTTP": "200 HTML and module entrypoints; no visual claim"
},
"limits": "2026/MZN; projecção sob condições/documento ou pressuposto expresso, sem certificar exportação, acordo, reconhecimento ou despacho. Sem isenção geral do destinatário, dedução automática de compras, apuramento integral IVA ou submissãoAT. Bebidas permanecemL2/L3; P001só05/06; Estatísticas/IAadiadas.",
"counts": {
"delivered": 62,
"QA_ready_for_delivery": 0,
"functional_pending": 70,
"documentary": 1,
"total": 133
},
"candidate": "38faeac6",
"manual_visual_completion": {
"status": "demonstrated_QA_not_installed",
"candidate": "38faeac6",
"prior_code_record": "d03101bb",
"group": "G4E",
"branches": [
"P061",
"P069",
"P070",
"P071"
],
"visual": {
"actor": "Tempo",
"method": "manual",
"url": "http://127.0.0.1:18639/g4e.html",
"request": "Quatro tratamentos; condição em falta sem apagar preço; Guardar → Recuperar → Relatório",
"reply_exact": "ja efectuado",
"tool_visual_observation": false,
"no_repeat_of_accepted_proofs": true
},
"counts": {
"delivered": 58,
"QA": 4,
"functional_pending": 70,
"documentary": 1,
"total": 133
},
"homologation": "686328a0/3be371c8",
"L1_complete": false,
"P001": "05/06 only",
"beverages": "L2/L3; not closed",
"statistics_AI": "deferred"
},
"visual_pending_historical": {
"url": "http://127.0.0.1:18639/g4e.html",
"reason": "Browser inventory empty; Edge reports Browser is not available. No security setting changed or workaround.",
"request": "Quatro tratamentos; retirar condição de acordo/reconhecimento torna apuramento indeterminado sem apagar preço; Guardar → Recuperar → Relatório; comparar G4D preservado."
},
"delivery_followup": {
"served_commit": "2e21ca45002b76adcef0347135783c706d37dd42",
"record": "iva_l1_g4e_homologation_20261024",
"receipt": "l1-g4e-delivery-20261024.json"
},
"qa_acceptance_counts": {
"delivered": 58,
"QA_ready_for_delivery": 4,
"functional_pending": 70,
"documentary": 1,
"total": 133
},
"qa_acceptance_status": "demonstrated_QA_not_installed"
}
@@ -0,0 +1,94 @@
{
"key": "iva_l1_g5a_special_regimes_QA_demonstrated_20261024",
"status": "delivered_with_QA_proofs_preserved",
"candidate": "1f7fc13872bd706f583a6f4d29024cd3c22ec265",
"base": "0eb2c485",
"homologation": "2e21ca45/0eb2c485",
"group": "G5A",
"branches": {
"AUD-SIM-L1-P081": [
"regime_dispatch_goods",
"regime_dispatch_transport"
],
"AUD-SIM-L1-P082": [
"regime_internal_goods",
"regime_internal_services"
],
"AUD-SIM-L1-P083": [
"regime_transit_goods",
"regime_transit_transport"
]
},
"branch_count": 3,
"treatment_count": 6,
"source": "CIVA14(1)(b/c/d),PDF13/p1426(271),19(1)(b)(iv),PDF15/p1426(273);Lei22/2022art1;Lei10/2025art1/PDF12–13; fontes aceites, texto/remissões conferidos",
"new_field": "specialRegime opcional nos livros anteriores,obrigatório nos seis tratamentos; selecção apenas do regime compatível com a alínea; escolha não comprova as condições",
"preservation": {
"delivered": 62,
"prior_books": 19,
"prior_books_identical_current_without_recalculation": true,
"UI_prior_books_identical": true,
"confirmed_losses": [],
"active_inventory": "Accepted G4E receipt reused; no fresh active query/mutation claimed"
},
"tests": {
"frontend_new": 4,
"API_tests": 1,
"API_assertions": 44,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed; existing plugin timing warnings",
"QA_build": "passed; existing future config/chunk size warnings",
"QA_storage": "save/recover/reject passed in temporary directory",
"UI": {
"actor": "Codex",
"method": "Edge extension/CUA observed actions",
"URL": "http://127.0.0.1:18640/g5a.html",
"observed": [
"six distinct treatments initially visible",
"no-final-use condition unchecked -> indeterminate; price100MZN retained",
"unknown regime -> indeterminate; price/currency/period retained",
"restore regime and explicitly recheck conditions ->600MZN/05",
"Guardar -> Recuperar -> Relatório with context/regime/source and totals",
"three previous results in history;19priorbooks unchanged"
],
"manual_Tempo_reply": null,
"screenshot": "outputs/iva-l1-g5-regimes-20261024/qa-recovered-report.png",
"screenshot_sha256": "ec68a1287ade198f34544fed0e5b1f49a6c15c2e6855fcaf13dc34ceb45c8772"
},
"Word_PDF": "accepted exporter/numeric proofs reused; no new pagination claim"
},
"counts": {
"delivered": 65,
"QA": 0,
"functional_pending": 67,
"documentary": 1,
"total": 133
},
"G5": {
"delivered": 3,
"QA": 0,
"functional_pending": 4
},
"limits": "2026/MZN; condição inicial14(1),regime/destino/permanência e ligação directa próprios; preço distinto dos bens/serviços. Sem isenção pelo mapa, certificação de regime, cálculo da própria importação/saída, aquisições14(2),dedução automática ou submissãoAT. P080/P084/P085/P086 continuam pendentes. L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"G4E_summary_reused": {
"P061": "export_nonresident_buyer",
"P069": "export_diplomatic_mission",
"P070": "export_international_organisation",
"P071": "export_humanitarian_organisation"
},
"qa_acceptance_status": "demonstrated_QA_not_installed",
"qa_acceptance_counts": {
"delivered": 62,
"QA": 3,
"functional_pending": 67,
"documentary": 1,
"total": 133
},
"delivery_followup": {
"served_commit": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"record": "iva_l1_g5a_homologation_20261024",
"receipt": "l1-g5a-delivery-20261024.json"
}
}
@@ -0,0 +1,156 @@
{
"key": "iva_l1_g5b_P086_acquisition_continuity_QA_demonstrated_20261024",
"status": "delivered_with_QA_proofs_preserved",
"candidate": "689a4c93c33cd737c6fc90823533b34b5219b5d3",
"base": "d3e9f373",
"homologation": "69f2e365/d3e9f373",
"group": "G5B",
"branches": {
"AUD-SIM-L1-P086": "former_exploration_exemption -> explicit normal acquisition continuation"
},
"branch_count": 1,
"scope": "nonapplication and continuation;not a newly active exemption",
"source": {
"rectification": {
"file": "docs\\investmoz\\simulations\\source-archive\\BR-89-I-Serie-2017-06-08.pdf",
"bytes": 9456358,
"sha256": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5",
"pages": 16
},
"page": "PDF1/p569,visual inspected",
"CIVA_original": "14(2)(c),PDF13/p1426(271)",
"2022_2025": "art1 lists checked;no reintroduction14(2)(c)",
"acceptance": "Tempo08/10/2026;no generic provenance/legal revalidation added"
},
"inventory": {
"archive_files": [
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-16-I-Serie-2008-04-16.pdf",
"bytes": 2267865,
"sha256": "fc373ff5637edf75ec6a9595dec8763a8503d4ee786e3b7d8f1c742eae9d80ee",
"pages": 28
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-248-I-Suplemento-1-2025.pdf",
"bytes": 440018,
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
"pages": 21
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-89-I-Serie-2017-06-08.pdf",
"bytes": 9456358,
"sha256": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5",
"pages": 16
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-95-I-Suplemento-2025-05-21.pdf",
"bytes": 329070,
"sha256": "e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358",
"pages": 2
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-13-2016-CIVA-BR-156-10-suplemento.pdf",
"bytes": 2127554,
"sha256": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
"pages": 32
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf",
"bytes": 1834284,
"sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
"pages": 18
}
],
"existing_corpus_references": [
{
"path": "docs/investmoz/document-corpus-inventory-2026-10-06.csv",
"sha256": "3a24442558ad2b9d4ac9b58cc6d281bd0db83b4c93d4696e30a6f8981d9eaa7b",
"usage": "existing corpus/source inventory reused; no claim of newly reviewing every source"
},
{
"path": "docs/investmoz/fiscal-source-references-2026-10-06.csv",
"sha256": "f2fde2257fd481f984e59bdfc62ce209c849b350961111616d2c2927c1421d6f",
"usage": "existing corpus/source inventory reused; no claim of newly reviewing every source"
}
]
},
"preservation": {
"delivered": 65,
"sales_books": 20,
"sales_books_identical_current_without_recalculation": true,
"purchase_books_in_frozen_fixture": 0,
"UI_previous_sales_identical": true,
"new_purchase_context": "opportunity:329",
"UI_history_count": 3,
"confirmed_losses": [],
"active": "Accepted G5A receipt reused;no fresh active query/mutation"
},
"implementation": {
"optional_fields": [
"acquisitionTreatment",
"acquisitionTreatmentOrigin",
"AcquisitionBook.history"
],
"legacy_fields": "No new mandatory keys on previous rows/books;scoped continuity version only on new chosen treatment",
"manual_periods": "calculate only explicit purchase-book months;budget reuse still verifies existing source;no sales month required for direct entries",
"period_change_impact": "Report includes declared purchase months rather than implicit financial-plan months;previous accepted4-month scenarios pass;no frozen result recalculated",
"history": "Previous result snapshots retained when explicitly recalculating;old reference/document/values/answers conserved",
"not_applicable_UI": "Normal deduction controls hidden while former eliminated reference selected;no deleted data"
},
"tests": {
"frontend_new": 4,
"existing_changed_acquisition_suite": 8,
"frontend_total": 12,
"latest_delta": 4,
"API_tests": 1,
"API_assertions": 45,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin timing warnings",
"QA_build": "passed;existing config/chunk warnings",
"QA_storage": "save/recover/reject passed in temporary directory",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18641/g5b.html",
"observed": [
"former14(2)(c) selected -> eliminated notice;deduction indeterminate,100/16/116MZN retained",
"normal deduction controls hidden while nonapplicable",
"explicit continue ->normal controls/facts restored;calculate ->16MZN field10 under normal declared conditions",
"Guardar -> Recuperar -> Relatório with document,source,period/context;17/18 remain indeterminate",
"three results in history and20salesbooks unchanged in saved file"
],
"manual_Tempo_reply": null,
"screenshot": "outputs/iva-l1-g5b-acquisitions-20261024/qa-recovered-report.png",
"screenshot_sha256": "e29df1a8daf66f43ab7aaab9f78f472cf331272860aaac0edcde6ff40fd3a9d5"
},
"Word_PDF": "Existing exporter/numeric proofs reused;no new pagination claim"
},
"counts": {
"delivered": 66,
"QA": 0,
"functional_pending": 66,
"documentary": 1,
"total": 133
},
"G5": {
"delivered": 4,
"QA": 0,
"functional_pending": 3
},
"limits": "2026/MZN;P086 é não aplicação da antiga14(2)(c),eliminada pelo Aviso2017,e continuidade deliberada na aquisição normal; não é isenção nova/activa nem cálculo retroactivo. Sem taxa presumida,dedução automática,importação,apuramento integral ou submissãoAT. P080/P084/P085 pendentes. L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"qa_acceptance_status": "demonstrated_QA_not_installed",
"qa_acceptance_counts": {
"delivered": 65,
"QA": 1,
"functional_pending": 66,
"documentary": 1,
"total": 133
},
"delivery_followup": {
"served_commit": "6f056359df4231f9e1802922782b21263a8dae0b",
"record": "iva_l1_g5b_homologation_20261024",
"receipt": "l1-g5b-delivery-20261024.json"
}
}
@@ -0,0 +1,181 @@
{
"candidate": "9842dcbb0e570bc9af6d4f0d20b76f67bee30178",
"status": "delivered_with_QA_proofs_preserved",
"coverage": {
"P080": [
"special_economic_zone_import",
"free_zone_import",
"free_warehouse_import",
"general_free_warehouse_import",
"customs_warehouse_import",
"duty_free_shop_import"
]
},
"source": "Lei13/2016,CIVA14(1)(a),initial condition14(1),PDF13/p1426(271);no14change in consulted2022/2025 amendments",
"source_reused": "Existing six-file source archive and general corpus/reference inventories;official source acceptanceTempo08/10;not reauthenticated",
"legal_interpretation_limits": "P080 own import,not sale;not mere geography;all six regimes,customs control,applicable provisions,permanence,no final use/consumption;no automatic field11/duties/normalVAT",
"tests": {
"frontend": {
"passed": 20,
"failed": 0,
"new": 3,
"record": "node:test tool output this session;no separately saved stdout claimed"
},
"API": {
"tests": 1,
"assertions": 26,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g5c-review-20261024\\api-tests.xml",
"target": "simulator_fiscal_delta_20261021_test:55441",
"transactions": "rollback"
},
"types": "passed",
"production_build": "passed;existing plugin/chunk warnings",
"UI": "Codex Edge/CUA,real component;unknown->indeterminate,no->nonapplication,yes->exempt;save/recover/report;not manualTempo acceptance",
"synthetic_QA_storage": "1 test passed;UTF8 multibyte buffer decoding preserved"
},
"preservation": {
"base": "e384418ecc76ed77fe34a30814c4737a96887b00",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"preservation": "Reuse accepted G6C installed receipt d46b794a/2ed62165; no active code/schema/data/config/permissions changes in this QA task",
"frozen": "tests/frontend/fixtures/iva-g6d-inputs.json",
"frozen_sha256": "26f9b75b4b436bfd2e21487b8eed12e8db62e9ebfc46e3ace9c92271994fc80b",
"books": {
"sales": 20,
"acquisitions": 1,
"imports": 4
},
"counts_before": {
"delivered": 72,
"QA": 1,
"pending": 59,
"P001": 1,
"total": 133
},
"G6D": "P048 remains QA, not installed"
},
"UI_book": {
"rows": 6,
"history": 5,
"opportunity": "334",
"province": "Manica",
"period": "2026-12",
"document_date": "2026-11-14"
},
"counts": {
"delivered": 72,
"QA": 2,
"functional_pending": 58,
"documentary_P001": 1,
"total": 133
},
"active": "unchanged d46b794a/2ed62165;no push,installation,migration or active data change",
"other_QA": "P048 G6D candidate0eb37ef5 preserved,not delivered",
"pending": {
"P084": {
"source": "14(2)(a),14(3),samePDF13",
"treatment": "Acquisition/import of goods for gifts to national public-interest/relevant-social institutions;goods wholly suitable and used in evident public-interest activities;no services",
"documentary": "Application procedure referred to in14(3) not located in consulted sources;not declared nonexistent",
"development": "Specific acquisition/import flow absent;common persistence/report reused",
"verification": "Not performed for this branch",
"action": "Locate applicable implementing provision and amendments/scope,then implement only express conditions and verify save/recover/report",
"estimate": "6–10h preliminary development/verification after documentary delimitation;unmeasured;document retrieval ETA unknown"
},
"P085": {
"source": "14(2)(b),14(3),samePDF13",
"treatment": "Acquisition of goods for gifts mitigating effects of natural disasters;no automatic extension to import/services",
"documentary": "Application procedure referred to in14(3) not located in consulted sources;not declared nonexistent",
"development": "Specific acquisition/goods/disaster-purpose flow absent",
"verification": "Not performed for this branch",
"action": "Locate applicable implementation procedure;reuse P084 common fields while keeping own scope;verify complete flow",
"estimate": "4–8h preliminary after documentary delimitation,reusingP084;unmeasured;retrieval ETA unknown"
}
},
"limits": "72delivered remainclosed;L1open;P001only05/06;beveragesL2/L3;Statistics/AIdeferred;L1closure doesnot requireL2/L3/alltaxes",
"qa_status_preserved": "P080 demonstrated QA,not delivered;P084/P085 individually diagnosed and still pending",
"delivery_followup": {
"served_commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"record": "iva_l1_P048_P080_joint_homologation_20261024",
"receipt": "l1-g6d-g5c-delivery-20261024.json",
"counts": {
"delivered": 74,
"QA": 0,
"functional_pending": 58,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,207 @@
{
"key": "iva_l1_g6a_P049_P051_import_exemptions_QA_demonstrated_20261024",
"status": "delivered_with_QA_proofs_preserved",
"candidate": "965da2642627ad1e484d52587e07b4a60cae6af2",
"base": "e99ea1d0",
"homologation": "6f056359/e99ea1d0",
"group": "G6A",
"branches": {
"AUD-SIM-L1-P049": "reimport_same_state",
"AUD-SIM-L1-P051": "central_bank_gold"
},
"branch_count": 2,
"source": {
"reference": "CIVA12(1)(d/f),Lei13/2016PDF11/p1426(269),visual inspected;2022PDF2/p2252(26) and2025PDF12–13/p2180(12–13) retain d/f",
"acceptance": "Tempo08/10/2026;no new generic authenticity/legal approval",
"archive": [
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-16-I-Serie-2008-04-16.pdf",
"sha256": "fc373ff5637edf75ec6a9595dec8763a8503d4ee786e3b7d8f1c742eae9d80ee",
"pages": 28
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-248-I-Suplemento-1-2025.pdf",
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
"pages": 21
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-89-I-Serie-2017-06-08.pdf",
"sha256": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5",
"pages": 16
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-95-I-Suplemento-2025-05-21.pdf",
"sha256": "e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358",
"pages": 2
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-13-2016-CIVA-BR-156-10-suplemento.pdf",
"sha256": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
"pages": 32
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf",
"sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
"pages": 18
}
],
"existing_corpus_references": [
"docs/investmoz/document-corpus-inventory-2026-10-06.csv",
"docs/investmoz/fiscal-source-references-2026-10-06.csv"
]
},
"preservation": {
"base": "e99ea1d0137543ca3fc37cb2c79732f3bb7c3edf",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"accepted_active_receipt": "l1-g5b-delivery-20261024.json;6f056359/e99ea1d0;174tables/369files/29published/28relations/408geometries;no schema/content/permissions changes",
"frozen_fixture_sha256": "96f239cd9edd6d522447ce16e7b6dc32610f836a9d25dc8ea8789fb3042cf6f2",
"sales_books": 20,
"purchase_books": 1,
"preserved_open": [
"P080",
"P084",
"P085"
],
"counts": {
"delivered": 66,
"QA": 0,
"functional_pending": 66,
"documentary": 1,
"total": 133
}
},
"tests": {
"frontend_new": 5,
"affected_report_tests": 14,
"frontend_total": 19,
"API_tests": 1,
"API_assertions": 20,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin warnings",
"QA_build": "passed;existing chunk warning",
"QA_storage": "save/recover/reject passed,temporary file only",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18642/g6a.html",
"observed": [
"unknown condition ->indeterminate",
"failed condition ->nonapplication,normal tax unknown",
"affirmative conditions ->exempt import VAT0.00",
"switch treatment ->only applicable questions;answers,document,1000MZN retained",
"save/recover/report ->P049/P051,Manica,2026-12,documents,sources",
"three previous UI results;20salesbooks and1purchasebook identical"
],
"manual_Tempo_reply": null,
"screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6a-imports-20261024\\qa-recovered-report.png",
"screenshot_sha256": "e6914778f6513e2ea22850d1b30a79ff3592e0c8085cb09c38f1ffb23541cf9c"
},
"Word_PDF": "Existing exporter proofs reused;no new pagination claim"
},
"implementation": {
"optional_snapshot_key": "importExemptions",
"no_schema_change": true,
"legacy_books": "no additional required fields;20sales and1purchase unchanged/current",
"data_conditions": "per branch;unknown != false;no ordinary rate inferred",
"value": "declared/previsional value preserved,optional;no invented customs taxable base",
"period": "explicit import period independent from supporting document date and sales calendar",
"history": "explicit classification archives previous result;edits keep historical state;reports show only applicable conditions",
"roll_back": "l1-g6a-readonly-rollback-20261024.patch checked,not applied;readers/history/reports retained"
},
"counts": {
"delivered": 68,
"QA": 0,
"functional_pending": 64,
"documentary": 1,
"total": 133
},
"G6": {
"delivered": 2,
"QA": 0,
"functional_pending": 13
},
"limits": "2026/MZN;classificação L1 de12(1)(d/f),sem direitosaduaneirosL13,dedução/campo11L2,baseaduaneira,taxa normal presumida,apuramento integral ou submissãoAT. P080/P084/P085 explicitamente abertos;L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"qa_acceptance_status": "demonstrated_QA_not_installed",
"qa_acceptance_counts": {
"delivered": 66,
"QA": 2,
"functional_pending": 64,
"documentary": 1,
"total": 133
},
"delivery_followup": {
"served_commit": "e3601c124d50fa2b52ea9d9fb86fbddf1d224d51",
"record": "iva_l1_g6a_homologation_20261024",
"receipt": "l1-g6a-delivery-20261024.json"
}
}
@@ -0,0 +1,220 @@
{
"key": "iva_l1_g6b_P055_P057_import_exemptions_QA_demonstrated_20261024",
"status": "delivered_with_QA_proofs_preserved",
"candidate": "f75f36f0e36a5d9981f631b6e22f3c9e723ee454",
"base": "a23f1dcb",
"homologation": "e3601c12/a23f1dcb",
"group": "G6B",
"branches": {
"AUD-SIM-L1-P055": "author_art_import",
"AUD-SIM-L1-P057": "fire_brigade_vehicle"
},
"branch_count": 2,
"source": {
"reference": "CIVA12(1)(j/l),Lei13/2016PDF11/p1426(269),visual inspected;2022PDF2/p2252(26) and2025PDF12–13/p2180(12–13) retain j/l",
"acceptance": "Tempo08/10/2026;no new generic authenticity/legal approval",
"archive": [
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-16-I-Serie-2008-04-16.pdf",
"sha256": "fc373ff5637edf75ec6a9595dec8763a8503d4ee786e3b7d8f1c742eae9d80ee",
"pages": 28
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-248-I-Suplemento-1-2025.pdf",
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
"pages": 21
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-89-I-Serie-2017-06-08.pdf",
"sha256": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5",
"pages": 16
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-95-I-Suplemento-2025-05-21.pdf",
"sha256": "e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358",
"pages": 2
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-13-2016-CIVA-BR-156-10-suplemento.pdf",
"sha256": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
"pages": 32
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf",
"sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
"pages": 18
}
],
"existing_corpus_references": [
"docs/investmoz/document-corpus-inventory-2026-10-06.csv",
"docs/investmoz/fiscal-source-references-2026-10-06.csv"
]
},
"preservation": {
"base": "a23f1dcb6e886a6de75917f17f2da4b9ab94599e",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"accepted_active_receipt": "l1-g6a-delivery-20261024.json;e3601c12/a23f1dcb;174tables/369files/29published/28relations/408geometries;no schema/content/permissions changes",
"frozen_fixture_sha256": "6765354faf917282ea03bed31cee071d1a44cf008a7560171048adb8ffa6debf",
"sales_books": 20,
"purchase_books": 1,
"import_books": 1,
"import_history": 3,
"preserved_open": [
"P080",
"P084",
"P085"
],
"counts": {
"delivered": 68,
"QA": 0,
"functional_pending": 64,
"documentary": 1,
"total": 133
}
},
"tests": {
"frontend_new": 4,
"existing_import_suite": 5,
"frontend_total": 9,
"API_tests": 1,
"API_assertions": 23,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin warnings",
"QA_build": "passed;existing chunk warning",
"QA_storage": "save/recover/reject and UTF8 split-multibyte boundary passed;Buffer concatenation before decoding;temporary file only",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18643/g6b.html",
"observed": [
"unknown condition ->indeterminate",
"failed condition ->nonapplication,normal tax unknown",
"affirmative conditions ->exempt import VAT0.00",
"switch treatment ->only applicable questions;answers,document,2500MZN retained",
"save/recover/report ->P055/P057,Manica,2026-12,documents,sources",
"four previous UI results;20salesbooks,1purchase and1importbook identical"
],
"manual_Tempo_reply": null,
"screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6b-imports-20261024\\qa-recovered-report.png",
"screenshot_sha256": "7f6ef7c5a3ee5aca026ad29279510b2ab9fa63d76d13b878007a5c58f4163a7e"
},
"Word_PDF": "Existing exporter proofs reused;no new pagination claim"
},
"implementation": {
"existing_snapshot_key": "importExemptions",
"scoped_version": "import-beneficiaries/1 only when new treatment selected;legacy keys/source preserved",
"no_schema_change": true,
"legacy_books": "no additional required fields;20sales,1purchase and1importbook unchanged/current",
"data_conditions": "per branch;unknown != false;no ordinary rate inferred",
"value": "declared/previsional value preserved,optional;no invented customs taxable base",
"period": "explicit import period independent from supporting document date and sales calendar",
"history": "explicit classification archives previous result;edits keep historical state;reports show only applicable conditions",
"roll_back": "l1-g6b-readonly-rollback-20261024.patch checked,not applied;readers/history/reports retained"
},
"counts": {
"delivered": 70,
"QA": 0,
"functional_pending": 62,
"documentary": 1,
"total": 133
},
"G6": {
"delivered": 4,
"QA": 0,
"functional_pending": 11
},
"limits": "2026/MZN;classificação L1 de12(1)(j/l),sem direitosaduaneirosL13,dedução/campo11L2,baseaduaneira,taxa normal presumida,apuramento integral ou submissãoAT. P080/P084/P085 explicitamente abertos;L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"QA_auxiliary_encoding_correction": {
"cause": "Demo middleware decoded each incoming byte chunk separately;one split UTF8 character changed in a prior-history key",
"scope": "local synthetic QA file only;private API and accepted active data unchanged",
"before": "ui-saved-before-utf8-fix.json preserved",
"fix": "Concatenate buffers before UTF8 decoding;boundary regression test passed",
"verification": "Reset from exact private API recovery via explicit QA button;save/recover/report repeated;all20sales+1purchase+1importbooks identical to frozen baseline",
"helper_sha256": "3cbaac752269c91c6675a10e95646292cc8191949c23700b37805ed46a49672f"
},
"qa_acceptance_status": "demonstrated_QA_not_installed",
"qa_acceptance_counts": {
"delivered": 68,
"QA": 2,
"functional_pending": 62,
"documentary": 1,
"total": 133
},
"delivery_followup": {
"served_commit": "4cebd617651ca877bd4715c661973873e69f05e1",
"record": "iva_l1_g6b_homologation_20261024",
"receipt": "l1-g6b-delivery-20261024.json"
}
}
@@ -0,0 +1,224 @@
{
"key": "iva_l1_g6c_P053_P054_import_assets_QA_demonstrated_20261024",
"status": "delivered_with_QA_proofs_preserved",
"candidate": "8e5565d5e0501ecd2a40ae684f4948b867308c54",
"base": "72e56f7a",
"homologation": "4cebd617/72e56f7a",
"group": "G6C",
"branches": {
"AUD-SIM-L1-P053": [
"eligible_ship_import",
"ship_operation_object_import"
],
"AUD-SIM-L1-P054": [
"eligible_aircraft_import",
"aircraft_operation_object_import"
]
},
"branch_count": 2,
"treatment_count": 4,
"source": {
"reference": "CIVA12(1)(h/i),Lei13/2016PDF11/p1426(269),by reference13(1)(f/g) and13(1)(c/d),PDF12/p1426(270);full-page visual proofs G6A/G4B reused;2022PDF2/p2252(26) and2025PDF13/p2180(13) retain h/i and do not change13",
"acceptance": "Tempo08/10/2026;no generic authenticity/legal revalidation",
"archive": [
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-16-I-Serie-2008-04-16.pdf",
"sha256": "fc373ff5637edf75ec6a9595dec8763a8503d4ee786e3b7d8f1c742eae9d80ee",
"pages": 28
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-248-I-Suplemento-1-2025.pdf",
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
"pages": 21
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-89-I-Serie-2017-06-08.pdf",
"sha256": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5",
"pages": 16
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-95-I-Suplemento-2025-05-21.pdf",
"sha256": "e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358",
"pages": 2
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-13-2016-CIVA-BR-156-10-suplemento.pdf",
"sha256": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
"pages": 32
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf",
"sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
"pages": 18
}
],
"existing_corpus_references": [
"docs/investmoz/document-corpus-inventory-2026-10-06.csv",
"docs/investmoz/fiscal-source-references-2026-10-06.csv"
]
},
"preservation": {
"base": "72e56f7ae5b3c5d8c0f22b61778ec291b2bca2f6",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"accepted_active_receipt": "l1-g6b-delivery-20261024.json;4cebd617/72e56f7a;174tables/369files/29published/28relations/408geometries;no schema/content/permissions changes",
"frozen_fixture_sha256": "acbd2187c64bf4952b90117d247e5d8440b71cf094aad36ffe147e2098ef9d17",
"sales_books": 20,
"purchase_books": 1,
"import_books": 2,
"import_histories": {
"opportunity:330": 3,
"opportunity:331": 4
},
"preserved_open": [
"P080",
"P084",
"P085"
],
"counts": {
"delivered": 70,
"QA": 0,
"functional_pending": 62,
"documentary": 1,
"total": 133
}
},
"tests": {
"frontend_new": 4,
"existing_import_suites": 9,
"frontend_total": 13,
"API_tests": 1,
"API_assertions": 24,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin timing warnings",
"QA_build": "passed;existing chunk warning",
"QA_storage": "save/recover/reject and split-multibyte UTF8 boundary passed;inherited Buffer concatenation preserved",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18644/g6c.html",
"observed": [
"four treatments mapped to two IDs",
"object link unknown ->indeterminate;negative ->nonapplication;affirmative ->exempt0.00",
"switch object to principal aircraft ->own condition unknown,object response retained;return ->response restored",
"4000MZN/document/2026-12 conserved",
"save/recover/report ->P053/P054/four treatments,Manica,opportunity332,source12h/i and13f/g",
"four previous new-book UI results;all23acceptedbooks identical"
],
"manual_Tempo_reply": null,
"screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6c-imports-20261024\\qa-recovered-report.png",
"screenshot_sha256": "d09a98c6a6c73a526c8803358eef6448cdc634a8a430c6ab8fe691ecdbd32bf4"
},
"Word_PDF": "Existing exporter proofs reused;no new pagination claim"
},
"implementation": {
"existing_snapshot_key": "importExemptions",
"no_schema_change": true,
"scoped_version": "import-assets/1 only for selected asset treatments;G6A/G6B keys/source remain unchanged",
"shared_definitions": "internationalShipEligibility/internationalAircraftEligibility export existing G4B strings without changing sale treatments",
"legacy_books": "20sales,1purchase and2importbooks identical/current without recalculation",
"history": "explicit classification archives previous result;edits keep earlier version",
"not_applicable_UI": "only conditions for selected principal asset/object;hidden answers retained",
"field11": "no deduction or ModeloA totals populated by classification",
"rollback": "l1-g6c-readonly-rollback-20261024.patch checked,not applied;readers/history/reports retained"
},
"counts": {
"delivered": 72,
"QA": 0,
"functional_pending": 60,
"documentary": 1,
"total": 133
},
"G6": {
"delivered": 6,
"QA": 0,
"functional_pending": 9
},
"limits": "2026/MZN;classificação12(1)(h/i),bem principal ou objecto da exploração identificado,sem baseaduaneira,direitosL13,dedução/campo11L2,taxa normal presumida,apuramento integral ou submissãoAT. Não encerraP052/abastecimentos. P080/P084/P085 explicitamente abertos;L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"qa_acceptance_status": "demonstrated_QA_not_installed",
"qa_acceptance_counts": {
"delivered": 70,
"QA": 2,
"functional_pending": 60,
"documentary": 1,
"total": 133
},
"delivery_followup": {
"served_commit": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"record": "iva_l1_g6c_homologation_20261024",
"receipt": "l1-g6c-delivery-20261024.json"
}
}
@@ -0,0 +1,230 @@
{
"key": "iva_l1_g6d_P048_import_customs_QA_demonstrated_20261024",
"status": "delivered_with_QA_proofs_preserved",
"candidate": "0eb37ef59b9b65837e6791518b378fe4e64ca112",
"base": "2ed62165",
"homologation": "d46b794a/2ed62165",
"group": "G6D",
"branches": {
"AUD-SIM-L1-P048": [
"customs_transit_import",
"customs_temporary_import",
"customs_drawback_import"
]
},
"branch_count": 1,
"treatment_count": 3,
"source": {
"reference": "CIVA12(1)(c),Lei13/2016PDF11/p1426(269),full-page visual proof G6A reused;2022PDF2/p2252(26) and2025PDF13/p2180(13) retain c by reference;no new expanded wording used",
"acceptance": "Tempo08/10/2026;no generic authenticity/legal revalidation",
"archive": [
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-16-I-Serie-2008-04-16.pdf",
"sha256": "fc373ff5637edf75ec6a9595dec8763a8503d4ee786e3b7d8f1c742eae9d80ee",
"pages": 28
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-248-I-Suplemento-1-2025.pdf",
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
"pages": 21
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-89-I-Serie-2017-06-08.pdf",
"sha256": "11f0cab15eb6e51010952203ffa24fdc533a24fd642e19525fe4f46b17a1f5e5",
"pages": 16
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\BR-95-I-Suplemento-2025-05-21.pdf",
"sha256": "e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358",
"pages": 2
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-13-2016-CIVA-BR-156-10-suplemento.pdf",
"sha256": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
"pages": 32
},
{
"file": "docs\\investmoz\\simulations\\source-archive\\Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf",
"sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
"pages": 18
}
],
"existing_corpus_references": [
"docs/investmoz/document-corpus-inventory-2026-10-06.csv",
"docs/investmoz/fiscal-source-references-2026-10-06.csv"
],
"scope_lookup_2020": {
"URL": "https://www.inm.gov.mz/pt-br/content/assembleia-da-rep%C3%BAblica-suplemento-n%C2%BA-1-de-231220-pag-2414-1-20-br-n%C2%BA-246-boletim-da",
"scope": "Official INM index identifies Lei16/2020 as altering9(13),not12(1)(c)",
"retrieval": "Index search text read;direct page timeout and two official PDF download attempts failed;no fullPDF obtained or claimed",
"use": "scope lookup for an existing reference;not a second authenticity approval and not the operative text of12(1)(c)"
}
},
"preservation": {
"base": "2ed62165b7a5b7e0a836db350fb39ace6453fed5",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"accepted_active_receipt": "l1-g6c-delivery-20261024.json;d46b794a/2ed62165;174tables/369files/29published/28relations/408geometries;no schema/content/permissions changes",
"frozen_fixture_sha256": "ac5f1b23de6b3e13c9b0e116b435c389d8147d5f4145b19dc234bf79596c5db6",
"sales_books": 20,
"purchase_books": 1,
"import_books": 3,
"import_histories": {
"opportunity:330": 3,
"opportunity:331": 4,
"opportunity:332": 4
},
"preserved_open": [
"P080",
"P084",
"P085"
],
"counts": {
"delivered": 72,
"QA": 0,
"functional_pending": 60,
"documentary": 1,
"total": 133
}
},
"tests": {
"frontend_new": 4,
"existing_import_suites": 13,
"frontend_total": 17,
"API_tests": 1,
"API_assertions": 25,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin timing warnings",
"QA_build": "passed;existing chunk warning",
"QA_storage": "save/recover/reject and split-multibyte UTF8 boundary passed;inherited Buffer concatenation preserved",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18645/g6d.html",
"observed": [
"three treatments mapped to one ID",
"full customs duty exemption unknown ->indeterminate;negative ->nonapplication;affirmative with own regime ->exempt0.00",
"switch transit to temporary import ->own regime condition unknown,previous answers retained;return ->transit response restored",
"5000MZN/document/2026-12 conserved",
"save/recover/report ->P048/three treatments,Manica,opportunity333,source12(1)(c)",
"four previous new-book UI results;all24acceptedbooks identical"
],
"manual_Tempo_reply": null,
"screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6d-imports-20261024\\qa-recovered-report.png",
"screenshot_sha256": "fadcff5be7c2a7a768a87531fefab15d189f87c9181e60fc2c794b4a5a01ae8c"
},
"Word_PDF": "Existing exporter proofs reused;no new pagination claim"
},
"implementation": {
"existing_snapshot_key": "importExemptions",
"no_schema_change": true,
"scoped_version": "import-customs-regimes/1 only for selected customs import treatments;G6A/G6B/G6C keys/source remain unchanged",
"regime_confirmations": "transit/temporary/drawback have distinct keys;fullCustomsExemption differs from P049 customsExempt;partial relief or suspension cannot satisfy total exemption",
"legacy_books": "20sales,1purchase and3importbooks identical/current without recalculation",
"history": "explicit classification archives previous result;edits keep earlier version",
"not_applicable_UI": "only conditions for selected customs regime;hidden answers retained",
"field11": "no deduction or ModeloA totals populated by classification",
"rollback": "l1-g6d-readonly-rollback-20261024.patch checked,not applied;readers/history/reports retained"
},
"counts": {
"delivered": 72,
"QA": 1,
"functional_pending": 59,
"documentary": 1,
"total": 133
},
"G6": {
"delivered": 6,
"QA": 1,
"functional_pending": 8
},
"limits": "2026/MZN;P048/12(1)(c),trânsito/importação temporária/draubaque com isenção total de direitos,sem baseaduaneira,cálculo de direitosL13,saída de regime,dedução/campo11L2,taxa normal presumida,apuramento integral ou submissãoAT. Não confundir com vendas em regimeG5/P083. P080/P084/P085 explicitamente abertos;L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"qa_status_preserved": "demonstrated_QA_not_installed",
"delivery_followup": {
"served_commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"record": "iva_l1_P048_P080_joint_homologation_20261024",
"receipt": "l1-g6d-g5c-delivery-20261024.json",
"counts": {
"delivered": 74,
"QA": 0,
"functional_pending": 58,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,161 @@
{
"candidate": "1565aa4ffb13fae75e925ccdb2b7553a9b111dd5",
"status": "delivered_with_QA_proofs_preserved",
"coverage": {
"AUD-SIM-L1-P052": [
"ship_provisions_import",
"ship_fuel_import",
"ship_technical_products_import",
"ship_cargo_accessories_import",
"aircraft_provisions_import",
"aircraft_fuel_import",
"aircraft_technical_products_import",
"aircraft_cargo_accessories_import"
]
},
"branch_count": 1,
"treatment_count": 8,
"source": "Lei13/2016,CIVA12(1)(g),12(3)(a)(i–iv)/(b),PDF11–12/p1426(269–270),13(3);2022PDF2/2025PDF13g/3 maintainedbyreference",
"source_scope": "Ship maritime/fluvial/lacustrine international navigation;aircraft international navigation,not requirement of principallyinternationalcompany fromP054. Provisions,fuel,technicalproducts,cargoaccessories;ownexclusions only. No deduction/field11,customsduties/base ornormalVAT assumed.",
"new_checks": {
"frontend": {
"passed": 3,
"failed": 0,
"record": "node:test outputthissession,no savedstdoutclaimed;acceptedoldproofs reused,not rerun"
},
"API": {
"tests": 2,
"assertions": 32,
"target": "simulator_fiscal_delta_20261021_test:55441",
"rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6e-supplies-20261024\\api-tests.xml"
},
"types": "passed",
"production_build": "passed;existingplugin/chunkwarnings",
"QA_storage": "1testpassed,save/recover/reject,multibyteUTF8bufferboundary",
"UI": "CodexEdgeCUArealcomponent:coastalfishingexclusion unknown/nonapplication/exempt states,fueltanksconditiononlyfuel,save/recover/report8rows,5historyversions;notmanualTempoacceptance"
},
"technical_obstacle_resolved": {
"origin": "Implementationchoice,notTempobusinessrule",
"old_limit_characters": 1000000,
"observed_preserved_draft_characters": 1040665,
"new_limit_characters": 4000000,
"why": "Do not discardacceptedbooks/explicit history tofitnewbranch;allowcurrentdraftwithboundedJSONstringvalidation",
"evidence": "InitialAPI422 recorded intooloutput;afterfix exactprivate recoveryand4millionboundnegative testpassed;no activechange"
},
"preservation": {
"base": "4e4bf6b8595f1b92d5a9de1b90be8d639f34feb5",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"accepted_delivery": "P048/P0802d889a21/e3269079;174tables/369files/29published/28relations/408geometries,postgres equivalent;reuse accepted code/schema/data/config/permission delta proof",
"frozen_fixture": "tests\\frontend\\fixtures\\iva-offers-inputs.json",
"sha256": "98e7e77d3ed4bd0151b8192f190b3ed1eba4e2174385c8d0aa613be04331023e",
"preserved": "26fiscalbooks+1offerpreparationbook(2rows,histories,deliberatepurposeedit);no recalculation",
"counts_before": {
"delivered": 74,
"QA": 0,
"functional_pending": 58,
"P001": 1,
"total": 133
},
"active_changes": 0
},
"counts": {
"delivered": 74,
"QA": 1,
"functional_pending": 57,
"documentary": 1,
"total": 133
},
"active": "2d889a21/e3269079unchanged;no push/install/migration",
"P084_P085": "ModelI.1diploma checked jointly;Despacho06/01/2010->Decreto56/2009art2->CBFLei4/2009;no direct14(3)correspondence found inreadRegulation1–16;scenario mapping recorded separately;drafts5ec2f198preservedexactly",
"limits": "L1open;P001only05/06;beveragesL2/L3;Statistics/AIdeferred;closingL1doesnotrequireL2/L3/alltaxes",
"qa_status_preserved": "P052 demonstratedQA;notinstalled;P084/P085 drafts preserved,benefits pending",
"delivery_followup": {
"served_commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"receipt": "l1-g6e-delivery-20261024.json",
"record": "iva_l1_g6e_P052_homologation_20261024",
"counts": {
"delivered": 75,
"QA": 0,
"functional_pending": 57,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,159 @@
{
"candidate": "29e708ba2dca2450eaff8eff6f5e19079ffc7f8e",
"implementation_commit": "f9fb04f9",
"status": "delivered_with_QA_proofs_preserved",
"coverage": {
"AUD-SIM-L1-P050": [
"service_in_customs_value",
"accessory_service_first_destination"
]
},
"branch_count": 1,
"treatment_count": 2,
"source": "CIVA12(1)(e),Lei13/2016PDF11/p1426(269);16(1)/16(1)(b)/16(2),PDF14/p1426(272);2022PDF1–2/2025PDF12–13maintain12e byreference,notchange16;2020/2025May9(13)scopes reused",
"meaning": "Servicefullvalueincluded in importtaxbase,eitheralreadyincustomsvalue oraddedaccessorycharge untilfirstdestination;destinationfromtransportdocument or,initsabsence,firstbreakbulk inland. Two technicalprofiles,notnewbusinessconditions.",
"tax_separation": "serviceVat0.00 onlywhenownconditions;importVat remainsnull forP050,no customsbase/duties/importedgoodstaxcalculation,normalratepresumption,invoicecorrection orfield11deduction",
"new_inputs": "OptionalserviceImportRef,serviceBaseRef,serviceFirstDestination(onlyaccessoryprofile),serviceProvider. Servicevalue/reference/context requiredforclassification;not newmandatoryfields onoldgoods. HidegoodsCode/originCountry forservices;preserve hiddenanswers across profilechange.",
"reference_reuse": "P050services filteredout from importedgoods references ofP084/P085;no newtaxbenefit or goodsconversion",
"verification": {
"frontend": {
"new_tests": 4,
"passed": 4,
"failed": 0,
"scope": "allownconditions,missing/failednotzero,ownfirstdestination,switchpreservation,service/importVATseparation,27priorfiscalbooks+946fc089drafts exact,currentoldkeys,report,malformedservicewriteguard,no service-as-goods reuse",
"record": "latestnode:test outputthissession;acceptedoldproofs reused,not rerun"
},
"privateAPI": {
"tests": 1,
"assertions": 30,
"target": "simulator_fiscal_delta_20261021_test:55441",
"rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6f-services-20261024\\api-tests.xml"
},
"types_final": "passed",
"production_build_final": "passed,existingplugin/chunkwarnings",
"synthetic_QA_storage": "1passed includingmultibyteUTF8bufferboundary",
"UI": "CodexEdgeCUArealcomponent:inclusionunknown->indeterminate,no->nonapplication,yes->serviceexemption;servicefieldsownrefs;goodsfields hidden,firstdestination onlyaccessory;save/recover/report2rows/opportunity336/Manica/2026-12/document14Nov2026/5historyversions;notmanualTempoacceptance"
},
"integrity_fix": "Newmalformedoptionalreference test initially detected savepath lacked validating newencodedbook;now validatesbefore returning/onChange,no original overwritten;validoldbooks/keys preserved",
"preservation": {
"base": "77d1290258a925a104b616dc4648db33d43064ea",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P052",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"preservation": "Reuse acceptedG6Ec1314cdf/536559d6:174tables/369files/29published/28relations/408geometries;code/schema/data/config/permissions delta accepted;no active query/write in this QA task",
"frozen": "tests\\frontend\\fixtures\\iva-offer-paths-inputs.json",
"sha256": "78125d82172cda05c16b10e74ac2fdfd4eaaa25bd99cd3bde33281c2bfdd01e6",
"books": "27fiscalbooks+offerbook;requeststates/scopes/normal-conditionalscenarios/history946fc089preservedexactly",
"counts_before": {
"delivered": 75,
"QA": 0,
"functional_pending": 57,
"P001": 1,
"total": 133
}
},
"counts": {
"delivered": 75,
"QA": 1,
"functional_pending": 56,
"documentary": 1,
"total": 133
},
"active": "Unchangedc1314cdf/536559d6;no push/install/activequeries/schema/data/config/permissionchange",
"P084_P085": {
"authorized_partial_candidate": "946fc089",
"next_delivery_scope": "Preparation/requeststates/scopeddecisions/humanitarianpurpose/normalandconditionalhypotheticalscenarios,notconfirmedbenefit/notclosing2branches",
"documentary_scope": "IdentifyexpressapplicableCIVA14(3)procedure/link and amendments;distinguishP084internal/import andP085acquisition. ModelI.1/Despacho/CBFcotejo reused,not repeated;do notinventcertificates/approvers orclaimregulation nonexistent",
"preserved": "Allrows,scopeversions,deliberateedits,normal/conditionalinputs andhistory exactlyequalfrozenfixture"
},
"limits": "L1open;P001only05/06;beveragesL2/L3;classificationseparatefromfield11;Statistics/AIdeferred;L1closuredoesnotrequireL2/L3/alltaxes",
"qa_status_preserved": "P050 demonstratedQA,notinstalled;P084/P085 partialpreparation/scenarios includedinancestry andauthorizedfornextdelivery,notbenefitclosure",
"delivery_followup": {
"served_commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"receipt": "l1-g6f-delivery-20261024.json",
"record": "iva_l1_g6f_P050_with_partial_P084_P085_homologation_20261024",
"counts": {
"delivered": 76,
"QA": 0,
"functional_pending": 56,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,161 @@
{
"implementation_commit": "9783c54b2c70b2d91fefd08a394a21b0690af5ba",
"status": "delivered_with_QA_proofs_preserved",
"coverage": {
"AUD-SIM-L1-P056": [
"authorized_investment_equipment"
]
},
"branch_count": 1,
"treatment_count": 1,
"condition_count": 4,
"source": "CIVA12(1)(k),Lei13/2016PDF11/p1426(269);Lei22/2022PDF2/p2252(26),Lei10/2025PDF13/p2180(13)maintain k by remissão;2017rectificationPDF1 concerns6/14/annexes,not12k",
"meaning": "Imported equipment classified K,destined to investment in undertaking authorized under InvestmentLaw/regulation;authorization reference and applicable scope,not authorization request or automatic class lookup",
"source_links": [
"https://www.inm.gov.mz/pt-br/content/suplemento-n%C2%BA-10-de-301216-pag-1426-259-290-br-n%C2%BA-156-boletim-da-rep%C3%BAblica-i-serie",
"https://pt.apiex.gov.mz/investir/"
],
"technical_choices": "Dedicated optional reference/scope fields required only for newP056 classification;traceability of statutory conditions,not additional certificate/approver or official-source revalidation;reuse importer,documents,value,period,evidence and opportunity",
"scope": "2026/MZN,classification of import VAT only;no customsbase/duties,automatic authorization or goodsclassification,domestic purchaseexemption,deduction/field11/ModeloA totals",
"result": "0.00 only ownconditions yes+reference/scope;projected assumption expressly labelled;missing=indeterminate;no=notapplicable and no presumed ordinaryrate",
"verification": {
"frontend": {
"tests": 3,
"passed": 3,
"failed": 0,
"scope": "own conditions,mistyped writes,switch retention,context invalidation,all delivered books unchanged,serviceVAT separate,partial offers unchanged,history,report"
},
"privateAPI": {
"tests": 1,
"assertions": 25,
"target": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6g-investment-20261024\\api-tests.xml"
},
"types": "passed",
"build": "passed,existing plugin timing warnings",
"UI": "Real component in Edge/CUA:unknown/no/yes authorization triad,own fields,save/recover/report one row,5 prior versions;synthetic only,not manual Tempo acceptance",
"UI_screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6g-investment-20261024\\qa-recovered-report.png"
},
"preservation": {
"base": "0f9f7e3409bdea1d4d6c351a572e7c37b3a09b4e",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P050",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P052",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"accepted_delivery": "78c9f4a3/0f9f7e34;174 tables/369 files;29 published fiches/28 relations/408 geometries;code/schema/data/config/permissions compared at delivery",
"frozen": "tests\\frontend\\fixtures\\iva-g6g-preserved-inputs.json",
"sha256": "43b5060803730e940bc1afa5e75dac16e634da2cf3ea80ce71cab9ef6185e51d",
"counts_before": {
"delivered": 76,
"QA": 0,
"functional_pending": 56,
"P001": 1,
"total": 133
},
"scope": "P056 only; preserve P050 service VAT separately and P084/P085 preparation/conditional simulation without closing benefits; no active query/write"
},
"runtime_delta": {
"resources/js/lib/iva-import-exemptions.ts": "1b4fda4e7e363e68f951eca14a415a93d08b06aaa49b41e639b44fc5c9cee488",
"resources/js/components/simulation-import-exemptions.tsx": "c6f36defc756eac0bb21f17e7165bb84efbbbfd120ea3be83787ffe368b7f1b1"
},
"counts_current": {
"delivered": 76,
"QA": 1,
"functional_pending": 55,
"P001": 1,
"total": 133
},
"homologation_unchanged": "78c9f4a3",
"remaining": "Integrate/deliver by existingGit process with manifest,fresh backup/isolatedrestore and installeddelta;no push in this QA task",
"limits": "P084/P085 partial only,pending;P00105/06;L1open;beveragesL2/L3;Stats/AIdeferred",
"sources_inventory": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6g-investment-20261024\\source-archive-inventory.json",
"qa_status_preserved": "QA_complete_not_delivered",
"delivery_followup": {
"served_commit": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"receipt": "l1-g6g-delivery-20261024.json",
"record": "iva_l1_g6g_P056_homologation_20261024",
"counts": {
"delivered": 77,
"QA": 0,
"functional_pending": 55,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,164 @@
{
"implementation_commit": "69b6c49a600c02352fdb9d10b0f756dca6c500a5",
"status": "delivered_with_QA_proofs_preserved",
"coverage": {
"AUD-SIM-L1-P060": [
"un_development_exemption",
"un_development_reduction"
]
},
"branch_count": 1,
"treatment_count": 2,
"conditions": "Seven common statutory conditions and one own customs-relief condition per treatment;not16 treatments",
"source": "CIVA12(2)(c),Lei13/2016PDF11/p1426(269),12(4)PDF12/p1426(270);Lei22/2022PDF2–3 andLei10/2025PDF13 maintain2/4 by remissão;2017rectification does notchange12(2)c/4",
"source_links": [
"https://www.parlamento.mz/?post_documents=boletim-da-republica-i-serie-nr-250-quarta-feira-28-de-dezembro-de-2022",
"https://www.inm.gov.mz/pt-br/content/suplemento-n%C2%BA-10-de-301216-pag-1426-259-290-br-n%C2%BA-156-boletim-da-rep%C3%BAblica-i-serie"
],
"meaning": "Materials/equipment for development projects funded by UN agencies/specialized institutions accredited with MozambiqueGovernment;exclusive project implementation;favourableFinanceMinisterdecision following priorrequest/list/importplan and customsconformity with approvedlist/plan;request is not grant",
"technical_choices": "Dedicated optional document references shown/required only for P060 classification;reuse importer,goods,document,date,period,evidence,opportunity;keep all answers across treatment switches. Reference fields trace statutory conditions,not newcertificate/approver or revalidation of officialsources. Exact decimal arithmetic via integers with up to6inputfractiondigits/14outputfractiondigits,no assumed fiscalrounding;negative/malformed/unknown inputs not zero. Newversion only books containingP060,oldkeys exactlycurrent.",
"scope": "2026/MZN,classification of own import VAT and application of expressly supplied rights-relief proportion to expressly supplied normalVAT. No customsbase/duties/normalVAT-rate calculation;no deduction/field11/ModeloA totals/serviceVAT alteration. Not automatically extend decisions/list/plan scope.",
"formula": "normalVAT × (100 − rightsReductionPercent)/100;partial percentage strictly between0and100;100requires ownfull-exemptiontreatment;0notapplicable;explicitnormalVAT0 distinctfrommissing",
"result": "Full customs exemption plus ownconditions -> importVat0.00;partial reduction -> statusreduced and exactresult;missing=indeterminate,no=notapplicable,no presumedordinarytax. Effective-declared versus projected-assumptions explicit.",
"verification": {
"frontend": {
"tests": 4,
"passed": 4,
"failed": 0,
"scope": "Every owncondition missing/no;references and full/partial boundaries;exact fractions/large numbers/zero;malformedwriteguard;switch/context/referenceinvalidation;history;priorbooks/partialoffers exactlypreserved;report"
},
"privateAPI": {
"tests": 1,
"assertions": 34,
"target": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6h-development-20261024\\api-tests.xml"
},
"types": "passed",
"build": "passed,existing plugin timing warnings",
"UI": "Realcomponent Edge/CUA:decision unknown/no/assumed;normalVATmissing indeterminate;800with25%=600,50%=400;full0.00;save/recover/report2rows and5priorversions;scope/list/plan/decision/references retained. Synthetic only,not manualTempoacceptance.",
"UI_screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6h-development-20261024\\qa-recovered-report.png"
},
"preservation": {
"base": "163e090ea547d0c046bddecc0b4f5db150910d7d",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P050",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P052",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P056",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"accepted_delivery": "9b26217d/163e090e;174tables/369files;29published/28relations/408geometries;code/schema/data/config/permissions verified at delivery",
"frozen": "tests\\frontend\\fixtures\\iva-g6h-preserved-inputs.json",
"sha256": "0eec529d197507a74d63a046761604fa31d10d8908d4d27b79719a1d116524d8",
"counts_before": {
"delivered": 77,
"QA": 0,
"functional_pending": 55,
"P001": 1,
"total": 133
},
"scope": "P060 only;preserve P056 authorization scope,P050 serviceVAT,and partial P084/P085;no active query/write"
},
"runtime_delta": {
"resources/js/lib/iva-import-exemptions.ts": "799e9a0020e805af9f67387bfa36608c4973f15c4427d1b82c3f6b6398aed129",
"resources/js/components/simulation-import-exemptions.tsx": "89ab431fa6810c1f56897f203a817a41722c4a9df0cb075561dee6208e8730d1"
},
"counts_current": {
"delivered": 77,
"QA": 1,
"functional_pending": 54,
"P001": 1,
"total": 133
},
"homologation_unchanged": "9b26217d",
"remaining": "Integrate/deliver by existingGit with manifest,freshbackup/realisolatedrestore and installeddelta;no push in QA task",
"limits": "P084/P085 partial,pending;P00105/06;L1open;beveragesL2/L3;Stats/AI deferred",
"sources_inventory": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6h-development-20261024\\source-archive-inventory.json",
"qa_status_preserved": "QA_complete_not_delivered",
"delivery_followup": {
"served_commit": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"receipt": "l1-g6h-delivery-20261024.json",
"record": "iva_l1_g6h_P060_homologation_20261024",
"counts": {
"delivered": 78,
"QA": 0,
"functional_pending": 54,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,165 @@
{
"implementation_commit": "1dda6ea25858f9fd35304458b09b8e6ab899ebb8",
"status": "delivered_with_QA_proofs_preserved",
"coverage": {
"AUD-SIM-L1-P090": [
"public_authority_indemnity",
"public_authority_compensation"
]
},
"branch_count": 1,
"treatment_count": 2,
"source": "CIVA15(2)(d),Lei13/2016PDF13/p1426(271);15(3)/(4)/(5)/(6),PDF14/p1426(272);Lei22/2022PDF3maintains2d/3–6,Lei10/2025doesnotamend15. Statutory public-act compensation distinct from judicial contract-breach indemnity15(6)(a).",
"source_links": [
"https://www.inm.gov.mz/pt-br/content/suplemento-n%C2%BA-10-de-301216-pag-1426-259-290-br-n%C2%BA-156-boletim-da-rep%C3%BAblica-i-serie",
"https://www.parlamento.mz/?post_documents=boletim-da-republica-i-serie-nr-250-quarta-feira-28-de-dezembro-de-2022"
],
"meaning": "Determine the tax base for an identified taxable domestic supply of goods/services resulting from a public-authority act,using indemnity or other compensation;do not infer taxability from compensation/publicentity alone. Judicial contract-breach indemnity is not included by analogy.",
"technical_choices": "New opportunity-scoped publicAuthorityBases book inside existing modelo_a_snapshot;no schema/API/permissions change. Existing dossier/report and monthlyIVA components extended incrementally. Cash/nonmonetary/mixed form hides irrelevant fields but retains edits. Exact decimal sums with integers,up to6fractiondigits per input;no fiscalrounding assumption. Normalvalue explicitly supplied with valuationreference,not appraised by portal. References/conditions trace source,not newcertificate/approver or revalidation of officialsource.",
"scope": "2026/MZN;P090baseonly. BaseAmount independent from vat/rate,which alwaysremainnull. No determination of incidence,rate,exemption,tax,customsbase,deduction/field11/ModeloA totals orautomaticposting toother fiscalbooks. Components supplied netofIVA with applicable15(5)/(6)composition identified.",
"formula": "base = applicable net monetary component + applicable net nonmonetary normalvalue;form explicitly selects applicablecomponents;missing/invalid applicableamount orvaluationref staysnull,explicitzero is allowed;hiddenvalues not erased.",
"verification": {
"frontend": {
"tests": 4,
"passed": 4,
"failed": 0,
"scope": "Ownconditions unknown/no;judicialexclusion;money/in-kind/mixed;exactlarge/fractionalamounts/zero;missingrefs;context/version/history;malformedwriteguard;allpriorbooks unchanged;report"
},
"privateAPI": {
"tests": 1,
"assertions": 29,
"target": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7a-public-base-20261024\\api-tests.xml"
},
"types": "passed",
"build": "passed,existing plugin timing warnings;final build after Portuguese report-label adjustment",
"UI": "Realcomponent Edge/CUA:unknownact/missingvaluation indeterminate;judicialcontractbreach notapplicable;switchmoney->mixed retains250.20and1500.25,base1750.45;finalbases1500.25/1250.30withVATnull;save/recover/report2rows+5priorversions;documents/act/value/compositionrefs retained. Synthetic only,not manualTempoacceptance.",
"UI_screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7a-public-base-20261024\\qa-recovered-report.png"
},
"preservation": {
"base": "0a80f1c457cd5670110d153e90962671c73535f4",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P050",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P052",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P056",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P060",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086"
],
"confirmed_losses": [],
"accepted_delivery": "eb9294ef/0a80f1c4;174tables/369files;29published/28relations/408geometries;code/schema/data/config/permissions checked at delivery",
"frozen": "tests\\frontend\\fixtures\\iva-g7a-preserved-inputs.json",
"sha256": "418c1825be1cb6e0851d3bc9b8a6c03335349645bda5e73792fc3ff2c3bf28da",
"counts_before": {
"delivered": 78,
"QA": 0,
"functional_pending": 54,
"P001": 1,
"total": 133
},
"scope": "P090 only;preserve P060decision/list/plan/scope and proportional results,P056authorization/P050serviceVAT/partialP084P085;no active query/write"
},
"runtime_delta": {
"resources/js/lib/iva-public-authority-base.ts": "667704ba8c2d26421993f5e7e2c6599afb2912e052b27a96e423cb8d01a21d85",
"resources/js/components/simulation-public-authority-base.tsx": "7aa05785fdb6fcb7de4c0345e9c09073ebdbb3a8b39f1bd2610da08abc8c8a89",
"resources/js/components/simulation-monthly-iva.tsx": "db5b4431351766f8f86b4e60195381dab17c077ca3db72de48f2fb7e0f2a320b",
"resources/js/lib/project-dossier.ts": "60a9dd9f4eed5884b16c7097906bc438958b3b1407976e10f4699d35c1c68b19"
},
"counts_current": {
"delivered": 78,
"QA": 1,
"functional_pending": 53,
"P001": 1,
"total": 133
},
"homologation_unchanged": "eb9294ef",
"remaining": "Integrate/deliver by existingGit with manifest,freshbackup/realisolatedrestore and installeddelta;no push in QA task",
"limits": "P084/P085partial,pending;P00105/06;L1open;beveragesL2/L3;Stats/AIdeferred",
"sources_inventory": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7a-public-base-20261024\\source-archive-inventory.json",
"qa_status_preserved": "QA_complete_not_delivered",
"delivery_followup": {
"served_commit": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"receipt": "l1-g7a-delivery-20261024.json",
"record": "iva_l1_g7a_P090_homologation_20261024",
"counts": {
"delivered": 79,
"QA": 0,
"functional_pending": 53,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,169 @@
{
"implementation_commit": "948621a65caf1395230bfed3ddfab59e94cddda0",
"status": "delivered_with_QA_proofs_preserved",
"coverage": {
"AUD-SIM-L1-P091": [
"commission_sale_transfer",
"commission_purchase_transfer"
]
},
"branch_count": 1,
"treatment_count": 2,
"source": "CIVA15(2)(e),Lei13/2016PDF13/p1426(271);3(3)(c)PDF6/p1426(264);15(5)/(6)PDF14/p1426(272);Lei22/2022PDF3maintains15e,Lei10/2025PDF12maintains3c byremissão anddoesnotamend15;2017rectification doesnotamendthoseprovisions. Specialauction15(2)(g)notreplaced.",
"source_links": [
"https://www.inm.gov.mz/pt-br/content/suplemento-n%C2%BA-10-de-301216-pag-1426-259-290-br-n%C2%BA-156-boletim-da-rep%C3%BAblica-i-serie",
"https://www.parlamento.mz/?post_documents=boletim-da-republica-i-serie-nr-250-quarta-feira-28-de-dezembro-de-2022"
],
"meaning": "Goods transferred under commissioncontract,includingconsignment whereapplicable;principal-to-agent sale commission usesagentagreed saleprice minuscommission;agent-to-principal purchase commission usesagentagreed purchaseprice pluscommission. Notanycommissionpayment orautonomousbrokerageservice.",
"technical_choices": "Newopportunity-scoped commissionBases bookinside existingmodelo_a_snapshot;incrementalexistingmonthlyIVA/dossier/report/API integration,no schema/permissionschange. Price/commission/compositionreferences netofIVA,beforeoneadjustment. Exactdecimalintegerarithmetic,upto6inputfractiondigits,noassumedfiscalrounding. Directionchange retainsallvalues/parties/documents but clearsdirectionconfirmation asintegritychoice,notneworganizationalrule. Negativedifference isdisplayed arithmetically with fiscalbaseindeterminate inthisrecorte,nozero-floor/absolutevalue,newtaxrate orapprover. Unknownamount/commissionpercentage notdefaultzero.",
"scope": "2026/MZN;P091baseonly. BaseAmount separatefromvat/rate(alwaysnull);no incidence,rate,tax,commissionserviceVAT,exemption,deduction/field11/ModeloAtotals orautomaticposting intootherfiscalbooks. Statutorycondition references notnewcertificates/approvers orrevalidationofacceptedofficialsources.",
"formula": {
"commission_sale_transfer": "agent agreed sale price − commission",
"commission_purchase_transfer": "agent agreed purchase price + commission"
},
"verification": {
"frontend": {
"tests": 4,
"passed": 4,
"failed": 0,
"scope": "Everyowncondition missing/no;references;subtract/addonce;fractional/large/zero/negativearithmetic;directionchangeconfirmation;missingamount;context/version/history;malformedwriteguard;allpriorbooks/currentkeys preserved;report"
},
"privateAPI": {
"tests": 1,
"assertions": 29,
"target": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7b-commissions-20261024\\api-tests.xml"
},
"types": "passed",
"build": "passed,existingplugin timingwarnings",
"UI": "Realcomponent Edge/CUA:unknowncontract/missingcommission indeterminate;directionswitchchangesprice label/clearsconfirmation while retaining1000.25/100.10androles/references;specialauctionnotapplicable;finalsale900.15/purchase1100.35,VATnull;save/recover/report2rows+5priorversions. Syntheticonly,notmanualTempoacceptance.",
"UI_screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7b-commissions-20261024\\qa-recovered-report.png"
},
"preservation": {
"base": "50463ca716b74a669f8e1e72354ac0dfdc80d030",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P050",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P052",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P056",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P060",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086",
"AUD-SIM-L1-P090"
],
"confirmed_losses": [],
"accepted_delivery": "4193056b/50463ca7;174tables/369files;29published/28relations/408geometries;code/schema/data/config/permissions checked at delivery",
"frozen": "tests\\frontend\\fixtures\\iva-g7b-preserved-inputs.json",
"sha256": "2f8e5c92cc3ce422af09631e717eaaee31b8427ada60493f0f18aeda97596a78",
"counts_before": {
"delivered": 79,
"QA": 0,
"functional_pending": 53,
"P001": 1,
"total": 133
},
"scope": "P091only;preserve P090base/VATseparation/history,P060decision/list/plan/scope/proportion,P056authorization/P050serviceVAT/partialP084P085;no active query/write"
},
"runtime_delta": {
"resources/js/lib/iva-commission-base.ts": "3be1331f4da40e6292fa7f5dcfba28355af6d931a7d24f44eb081c6f16c8efb2",
"resources/js/components/simulation-commission-base.tsx": "5bfbb95d2dd22106d7d416fd3af0f7ae0778f22ae9d23da15ba9dd45882cfc94",
"resources/js/components/simulation-monthly-iva.tsx": "16c95f5eaf5d5a308c93b30523292e52ccafed9d4e7f897f8559459116fbf4ae",
"resources/js/lib/project-dossier.ts": "945a9e2a4a9aa6a26f7108f95d4fd237c0551dbf884cec41bcaa3eba592acc4a"
},
"counts_current": {
"delivered": 79,
"QA": 1,
"functional_pending": 52,
"P001": 1,
"total": 133
},
"homologation_unchanged": "4193056b",
"remaining": "Integrate/deliver by existingGit withmanifest,freshbackup/realisolatedrestore andinstalleddelta;no pushinQAtask",
"limits": "P084/P085partial,pending;P00105/06;L1open;beveragesL2/L3;Statistics/AIdeferred",
"sources_inventory": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7b-commissions-20261024\\source-archive-inventory.json",
"qa_status_preserved": "QA_complete_not_delivered",
"delivery_followup": {
"served_commit": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"receipt": "l1-g7b-delivery-20261024.json",
"record": "iva_l1_g7b_P091_homologation_20261024",
"counts": {
"delivered": 80,
"QA": 0,
"functional_pending": 52,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,162 @@
{
"implementation_commit": "4672789f2bf1fcce0726936e9e5bec05fb18c448",
"status": "delivered_with_QA_proofs_preserved",
"coverage": {
"AUD-SIM-L1-P094": [
"act_sale_amount",
"act_normal_value"
]
},
"branch_count": 1,
"treatment_count": 2,
"source": "CIVA15(2)(h),Lei13/2016PDF13/p1426(271);15(4)/(5)/(6)PDF14/p1426(272). Lei22/2022PDF3maintains15h/4–6 by remissão;Lei10/2025doesnotamend15. Rectificação2017doesnotamend15h.",
"meaning": "Goods transferred as result of auction,judicial/administrative sale,conciliation or settlement;value at which auction/sale effected or,where applicable,normal value. Five act kinds are contexts,not five branches. No automatic lower value or normal-value fallback.",
"technical_choices": "New opportunity-scoped actSaleBases book in existing modelo_a_snapshot/API/dossier;no schema/permissions change. Chosen net value and composition references,up to6fractiondigits exactly preserved,no assumed fiscal rounding. Changing act/valuation retains both values/documents and clears corresponding applicability confirmation as integrity choice,not new organizational requirement. Reuse existing documents or explicit projection assumptions;no invented certificate,appraiser or approver.",
"scope": "2026/MZN,P094baseonly;normal value supplied with identified basis/scope,not appraised automatically. No incidence,rate,VAT,deduction/field11/ModeloAtotals or substitution of special auctioncommission15g. Unknown values remain indeterminate,explicit zero distinguished.",
"verification": {
"frontend": {
"tests": 4,
"passed": 4,
"failed": 0,
"scope": "All5actkinds and2valuations;ownconditions missing/no;references/date/currency;no minimum/fallback;exactdecimal/zero;switch retention/cleared confirmation;context/history;corruptwriteguard;old books/currentkeys preserved;report"
},
"privateAPI": {
"tests": 1,
"assertions": 28,
"target": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7c-act-bases-20261024\\api-tests.xml"
},
"types": "passed",
"build": "passed,existing plugin timing warnings",
"UI": "Realcomponent Edge/CUA:missing applicability and valuation reference yield indeterminate;switch to normal retains2200.50;confirming yields2200.50 instead of1500.25;specialauction condition no yields notapplicable/noIVAzero;finalact1500.25/normal2200.50,VATnull;save/recover/report2rows+5priorversions. Synthetic QA,not manual Tempo acceptance.",
"UI_screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7c-act-bases-20261024\\qa-recovered-report.png"
},
"preservation": {
"base": "15894f4b0493423fda5edde7d016a270fd137a30",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P050",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P052",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P056",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P060",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086",
"AUD-SIM-L1-P090",
"AUD-SIM-L1-P091"
],
"confirmed_losses": [],
"accepted_delivery": "e62b7dfd/15894f4b;174tables/369files;29published/28relations/408geometries;code/schema/data/config/permissions checked at delivery",
"frozen": "tests\\frontend\\fixtures\\iva-g7c-preserved-inputs.json",
"sha256": "2ffcdb0f42ac1011aa29fde5b72532c99a3c75210e754442e38af587489d542c",
"counts_before": {
"delivered": 80,
"QA": 0,
"functional_pending": 52,
"P001": 1,
"total": 133
},
"scope": "P094only;preserve P091directions/references/baseVAT,P090,P060scope,P056,P050,partialP084P085;no active query/write"
},
"runtime_delta": {
"resources/js/lib/iva-act-sale-base.ts": "ed555c826427a0964995144c59d4e801bfeebce5219a63a612f31bb977788d00",
"resources/js/components/simulation-act-sale-base.tsx": "384e17aa18ed5ed9a8c6c47773577e87f211c2bccb3acbe3943269a08de1485a",
"resources/js/components/simulation-monthly-iva.tsx": "3b2a24fde6db625c350f7366ec789b5aa7e86aa08645409203b5e96d02dc1ff3",
"resources/js/lib/project-dossier.ts": "852ceaf59b95d92ff57d3b711dc2bc13eb4b547e7d9f1516eb543ece83247c09"
},
"counts_current": {
"delivered": 80,
"QA": 1,
"functional_pending": 51,
"P001": 1,
"total": 133
},
"homologation_unchanged": "e62b7dfd",
"remaining": "Integrate/deliver through existingGit withmanifest,freshbackup/real isolatedrestore and installeddelta;no push in QA task",
"limits": "P084/P085partial,pending;P00105/06;L1open;beveragesL2/L3;Statistics/AIdeferred",
"sources_inventory": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7c-act-bases-20261024\\source-archive-inventory.json",
"qa_status_preserved": "QA_complete_not_delivered",
"delivery_followup": {
"served_commit": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"receipt": "l1-g7c-delivery-20261024.json",
"record": "iva_l1_g7c_P094_homologation_20261024",
"counts": {
"delivered": 81,
"QA": 0,
"functional_pending": 51,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,154 @@
{
"implementation_commit": "3bcd98e78ee42c3034cee452b8570a72cd89020e",
"status": "QA_complete_not_delivered",
"coverage": {
"AUD-SIM-L1-P095": [
"fuel_tax_included",
"fuel_tax_excluded"
]
},
"branch_count": 1,
"treatment_count": 2,
"source": "CIVA15(2)(i),Lei13/2016PDF13/p1426(271);15(1)/(5)/(6),PDF13–14/p1426(271–272);Lei22/2022PDF3maintains15i/1/5/6 by remissão;Lei10/2025doesnotamend15;2017rectificationdoesnotamend15i.",
"meaning": "Transmissions of fuel with price fixed by public authority,effected by resellers;consideration under15(1)/(5) excludes FuelTax(TC). Two input-composition treatments in one branch,not two legal benefits.",
"formula": {
"fuel_tax_included": "consideration net of own VAT but including TC minus exact TC amount",
"fuel_tax_excluded": "consideration already net of own VAT and TC,unchanged;no second subtraction"
},
"technical_choices": "New regulatedFuelBases opportunity-scoped book in existingmodelo_a_snapshot/API/dossier;no schema/permissions change. Exactdecimal up to6fractiondigits,no assumed fiscalrounding. Explicit reference/scope/interval of price with operation date/month checked;end optional if no fixedterm and temporal correspondence confirmed,not invented mandatory expiry. Source/projection assumptions reused;no certification/approver. Treatment change retains amounts/documents but clears composition confirmation as integrity choice.",
"scope": "2026/MZN,P095baseonly;no automatic price,TC rate/amount,IVA/incidence/rate/deduction/field11/ModeloAtotals. Not general fuel purchases/services or unregulated price. Unknown TC/price parameters indeterminate;zero only explicit. TC exceeding consideration remains indeterminate,not negative/flooredzero.",
"verification": {
"frontend": {
"tests": 4,
"passed": 4,
"failed": 0,
"scope": "Ownconditions missing/no;price/reference/scope/date interval including openend/boundaries;exactdecimal subtractonce/zero/excess;switch retention/clearedconfirmation;corruptwriteguard;oldbooks/currentkeys/history/report"
},
"privateAPI": {
"tests": 1,
"assertions": 30,
"target": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7d-fuel-base-20261024\\api-tests.xml"
},
"types": "passed",
"build": "passed,existing plugin timing warnings",
"UI": "Realcomponent Edge/CUA:TCunknown and operation afterpriceinterval indeterminate;composition switch hidesTC/clearsconfirmation,retains100.10;alreadyexcluded preserves1500.25;pricefixed no yields notapplicable/noIVAzero;finalincluded1400.15/excluded1500.25,VATnull. Save/recover/report2rows+6priorversions. SyntheticQA,not manualTempoacceptance.",
"UI_screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7d-fuel-base-20261024\\qa-recovered-report.png"
},
"preservation": {
"base": "960088016944bbdd24e7479a7c08499809cb42fe",
"delivered_ids": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P050",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P052",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P056",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P060",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P086",
"AUD-SIM-L1-P090",
"AUD-SIM-L1-P091",
"AUD-SIM-L1-P094"
],
"confirmed_losses": [],
"accepted_delivery": "df7cb7fa/96008801;174tables/369files;29published/28relations/408geometries;code/schema/data/config/permissions compared at delivery",
"frozen": "tests\\frontend\\fixtures\\iva-g7d-preserved-inputs.json",
"sha256": "eafc5db6d2b8c0c50f29564eefd2af15fcc77b93d030adae2feb2e75e7a86894",
"counts_before": {
"delivered": 81,
"QA": 0,
"functional_pending": 51,
"P001": 1,
"total": 133
},
"scope": "P095 only;all previousbooks immutable including P094/91/90/P060/P050 and partialP084P085;no active query/write"
},
"runtime_delta": {
"resources/js/lib/iva-fuel-base.ts": "3e00b285b2bfd4e0cdd7106be5f8ebd86dbc17b4dd83e36ccba844b6d6a7a9d2",
"resources/js/components/simulation-fuel-base.tsx": "d55f8ede39ed42114c9eed473684cf1a764420e63cdb0faf2af4906773b8cfd9",
"resources/js/components/simulation-monthly-iva.tsx": "11988f00f562c8d86db442cd7996a6640e8916feea11230f6105521985d83720",
"resources/js/lib/project-dossier.ts": "85ca23ac160e7e06c0e605bfc0dc1a4ed2678df94136eaaa21ccfcba883a7e7c"
},
"counts_current": {
"delivered": 81,
"QA": 1,
"functional_pending": 50,
"P001": 1,
"total": 133
},
"homologation_unchanged": "df7cb7fa",
"remaining": "Integrate/deliver through existingGit withmanifest,freshbackup/real isolatedrestore and installeddelta;no push in QA task",
"limits": "P084/P085partial,pending;P00105/06;L1open;beveragesL2/L3;Statistics/AIdeferred",
"sources_inventory": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7d-fuel-base-20261024\\source-archive-inventory.json"
}
@@ -0,0 +1,86 @@
{
"candidate": "946fc089066fa7c7b71648da0de4035f3b8b592f",
"status": "partial_preparation_and_conditional_simulation_delivered_benefits_pending",
"authorization": "ExplicitTempo:distinctP085emergency/humanitarianpurpose andP084requeststates;presentingdoesnotgrant;decisionspreservegoods/operation/period/conditions;normalandconditionalhypotheticalscenarios;documentaryconference stillrequired",
"P084": {
"states": [
"preparation",
"presented",
"granted",
"denied"
],
"scope": "Immutable explicitrequestRecords retain state,goods,operation,period,conditions,decisionreference/date;allrecordedscopes showninUI/report;edits/currentrequest donot replace prior decisions or extend them toother goods/operations/periods/opportunities",
"precision": "Months,exact calendardates,or literaloperation/temporalscope including untilrevocation/withoutend;no artificialenddate orsingleoperation restriction when thedocumentstatesotherwise",
"incomplete": "Draft can save incomplete;recording scopeddecision requires fouruserrequested scopeelements,not a new certificate/approver;document/date optional ifnotavailable",
"not_submission": "No request sent to authority;declaredrecordstate isnot a grant bysimulator"
},
"P085": {
"fields": "Emergency/disaster,nature,humanitarianpurpose,goods,recipient,availabledocuments,mitigation",
"procedure": "Only applyemergency/donation procedurewhen correspondence demonstrated;not appliednow;P085acquisition scope retained,no automaticimport extension orP084status requirement"
},
"scenarios": {
"normal": "User-indicated VAT with documentorprojectionpremise;missing/invalidamountororigin remainsindeterminate,no inferrednormalrate/base",
"conditional": "Explicit hypotheticalassumption+materialconditions/context required;unknown/contradictedconditions giveindeterminate;0.00 onlylabelledhypotheticalconditionalexemption,notgrantedorapplied",
"application": "Never modifies VATresults,field11,ModeloAtotals orrequeststatus;evenrecordeddeferido doesnotautoapply"
},
"reuse": "Existingper-opportunity reference reuse fills emptyfields only;optional availabledocuments canappend primaryreference without overwriting otherdocuments;all27priorfiscalbooks andoldofferhistory/deliberatepurpose preservedexactly",
"verification": {
"frontend": {
"passed": 4,
"failed": 0,
"scope": "requestnotgrant,scopeddecisionhistory includingexact/literalperiods,P085ownpurpose,scenariopremises,save/recover/reportpreservation",
"record": "latestnode:test outputthissession;acceptedoldproofs not rerun"
},
"privateAPI": {
"tests": 1,
"assertions": 31,
"target": "simulator_fiscal_delta_20261021_test:55441",
"rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-offer-paths-20261024\\api-tests.xml"
},
"types_final": "passed",
"production_build_final": "passed;existingplugin/chunkwarnings",
"UI": "CodexEdgeCUA:presentedstate,priorpartialgrantNovemberonly,normal800/conditional0hypothesis;withdrawassumption->indeterminate;incompletescopecannotreplacepriorrecord;P085humanitarianpurpose/normal160;version/save/recover/reportwithallrecords,4historicalversions. Exact/literalperiodvariants coveredbyunit tests,not separateUIclaim;notmanualTempoacceptance"
},
"regulatory_correspondence": {
"status": "Still not demonstrated;not closed or declarednonexistent",
"established_chain": "ModelI.1/Despacho06Jan2010->Decreto56/2009art2->CBFLei4/2009;not demonstrated implementinglinkCIVA14(3)",
"this_session": "Jointtargetedqueries foundno newlyestablishedprimarylink;directATfiscal listing returnedno readabletoolcontent,whichisnot evidenceofabsence;no unreadsources adopted",
"next": "Locate/read specific14(3) implementinglink or expressly applicable procedure,withinternalacquisition/import scope and amendments;onlythenapplyrespectivebenefit",
"no_invented_requirements": "No certificate,taxclearance,projectapproval,newauthorityorapprover created;Tempo productclarification isnotdocumentaryproof"
},
"counts": {
"delivered": 75,
"QA_complete_branches": 0,
"functional_pending": 57,
"P001": 1,
"total": 133
},
"installed": "G6E/P052c1314cdf,receipt536559d6;thisclarification946fc089QAonly,nopush/install",
"preservation_before_tests": {
"frozen": "tests\\frontend\\fixtures\\iva-g6e-inputs.json",
"sha256": "f1ac7bd08994dfcf34f8567dffca98acf945f722093791ce8bbe94d679ac3af5",
"accepted_delivered_before_install": 74,
"accepted_QA": [
"P052"
],
"preserved": "27fiscalbooks+offerbook(2rows,deliberateedits,histories)",
"confirmed_losses": [],
"scope": "Tempo explicitP084requeststates/scopeddecision,P085emergency/humanitarianpurpose,normal/conditionalhypotheticalscenarios;no automaticbenefit/activechange",
"installation_in_progress": "c1314cdf;separateverifiedreceipt"
},
"limits": "L1open;P001only05/06;beveragesL2/L3;Statistics/AIdeferred;classificationdistinctfromdeduction/field11;L1closuredoesnotrequireL2/L3/alltaxes",
"qa_status_preserved": "partial offer-path clarification demonstratedQA,not installed;P084/P085benefits remainpending",
"delivery_followup": {
"served_commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"receipt": "l1-g6f-delivery-20261024.json",
"record": "iva_l1_g6f_P050_with_partial_P084_P085_homologation_20261024",
"counts": {
"delivered": 76,
"QA": 0,
"functional_pending": 56,
"documentary": 1,
"total": 133
}
}
}
@@ -0,0 +1,68 @@
{
"candidate": "5ec2f198a35fd09e1e027f1db6fdf0b6d960114a",
"status": "draft_preparation_only_demonstrated_QA;P084/P085 benefits and complete branches remain pending;not installed",
"authorization": "ExplicitTempo24/10 joint documentary research,distinctconditions,fields/reuse/draftpreparation while research proceeds",
"scope": {
"P084": "Acquisition/import,beneficiary,purpose,national/public-social institution,goods suitability,public-interest use",
"P085": "Acquisition only,goods,recipient/purpose,disaster/nature and mitigation;no import extension"
},
"reuse": "Only selected opportunity,explicitreference,fill empty fields only;preserve deliberate edits,originalbooks,provenance;no currencyconversion",
"persistence": "Existing private API opaque modelo_a_snapshot.offerPreparations per opportunity;incomplete drafts accepted;explicit saved versions/history",
"no_benefit_application": "No VAT calculation,exemption,result,zero,field11 or ModeloA totals;otherbranches unaffected",
"documentary_research": {
"document": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g5d-offer-drafts-20261024\\BR-11-I-2010-03-17-despacho-modelos.pdf",
"sha256": "384fb46354e1888df43f72288dfed7933e30c7534211e0dcb6994f43b10e0059",
"source_url": "https://www.cipmoz.org/wp-content/uploads/2023/parcerias-publico-privadas/9PP%29%20Despacho_Mecanismos%20Implementacao%20do%20Regulamento%20do%20Codigo%20dos%20Beneficios%20Fiscais.pdf",
"identity": "BR11/I Série17/03/2010;DespachoMinistroFinanças06/01/2010;art1/2 modelos de implementaçãoRCBFDecreto56/2009",
"pages": 17,
"read_scope": "PDF1-5;ModelI.1/I.1A/I.2,includingI.1verso PDF3",
"findings": [
"ModelI.1verso lists emergency request viaINGC and other requests with legal provision/import invoices/donation certificate",
"This is customs application documentation,not demonstrated to be the complete application regulation for CIVA14(2)(a/b) under14(3)",
"Do not infer these instructions apply to domestic purchases,P085 imports,or all beneficiaries;do not turn oldINGC name/form or timelines into current portal mandatory requirements without applicable scope/amendments",
"Source officialBR accepted;host is a mirror,not a second provenance approval"
],
"next": "Locate specific CIVA14(3) implementing provisions and later customs/INGD changes;compare domestic acquisition vs import applicability;draft preparation can proceed independently",
"no_rule_activation": true
},
"remaining": "Locate and read applicable implementation of CIVA14(3),including domestic acquisition vs import scope and later customs/INGD changes;then complete respective benefit application and verify;do not infer that regulation doesnotexist",
"estimate": "10–18h was conditional forP084/P085 only,notallL1;preliminary before draftpreparation,no new measured remaining estimate or documentary deadline claimed",
"verification": {
"frontend": {
"new_tests": 4,
"passed": 4,
"failed": 0,
"evidence": "node:test output this session;no saved stdout claimed"
},
"privateAPI": {
"tests": 1,
"assertions": 23,
"target": "simulator_fiscal_delta_20261021_test:55441",
"rollback": true,
"xml": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g5d-offer-drafts-20261024\\api-tests.xml"
},
"types": "passed",
"production_build": "passed,existing plugin/chunk warnings",
"UI": "Codex Edge/CUA realcomponent;distinctconditions,explicitreuse preserved deliberately editedpurpose,saveversion/save/recover/report,unknown amounts preserved;notmanualTempo acceptance",
"QA_harness_correction": "Syntheticprefix mismatch rejected firstlocal save;fixed helper toaccept inheritedSYNTHETICQAG5Cseed;afterViterestart browserlocaledits andtwohistoricalversions preserved;successful save/recover/report verified"
},
"preservation": {
"prior_books": 26,
"prior_snapshot_keys_values": "exactlyequal,frozenG5Cinputs",
"active": "unchanged installed2d889a21;receipt e3269079;no push/install of draft code"
},
"counts": {
"delivered": 74,
"QA_complete_branches": 0,
"functional_pending": 58,
"P001": 1,
"total": 133
},
"limits": "L1open;P001only05/06;beveragesL2/L3;Statistics/AIdeferred;classification separatefromfield11;L1closure doesnotdepend onL2/L3/alltaxes",
"draft_delivery_followup": {
"served_commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"receipt": "l1-g6e-delivery-20261024.json",
"status": "Originaldraftpreparationavailable;notfullbenefitclosure",
"new_request_states_scenarios": "Not included;separateQAafterthisrelease"
}
}
@@ -0,0 +1,32 @@
{
"status": "diploma and formal basis of model identified;not demonstrated CIVA14(3) implementing correspondence",
"chain": [
"DespachoMF06/01/2010,BR11/I17/03/2010,art1(a)/art2 approvesModelI.1 and publishes attachedforms",
"Express empowerment:art2Decreto56/2009",
"Decreto56/2009,preamble/art1,implementsCBFLei4/2009;Regulationart1sameobject;art3investmentbeneficiaries;art6importrecognition,art7ruralinvestments,art8internaltaxes",
"No expressCIVA14(3) or its gift conditions located in the readDecreto/Regulationarts1–16;do not treat form as sufficient correspondence"
],
"exact_citations": "BR40/I07/10/2009:PDF2/p303 decree1/2 and regulation1;PDF3/p304 regulation3/5/6/7/8;PDF4/p305 remaining9–16. MIREMEcompilationPDF86–92 contextualread,not new approval",
"scenario_mapping": {
"P084_internal_acquisition": "ModelI.1 titled/customs import instructions;doesnotdemonstrate domestic purchase procedure. Regulation8 concerns internal taxes underCBFobject,not automatically gifts14(2)(a).",
"P084_import": "ModelI.1 may document customs exemption request only with identified legalbasis;othercases instruction asks provision/importinvoice/donationcertificate. Itdoesnotitself establish14(2)(a) entitlement or impose allCBFconditions on gifts.",
"P085_internal_acquisition": "CIVA14(2)(b) acquisition;customs emergency instruction doesnot establish internal acquisition procedure.",
"P085_import": "Not automatically covered by14(2)(b). Emergency request viaINGC appears inI.1verso,but requires own applicable legalbasis;no branchscope extension or mandatorycurrentINGCworkflow inferred."
},
"remaining": "Locate CIVA14(3) specific implementing link or expressly applicable procedure and later amendments/INGD/customs scope;preserve existing drafts and continue independent branches",
"no_new_restrictions": "No mandatoryprojectapproval,NUIT/accounting,taxclearance,certificate or five/thirtyday deadlines added to P084/P085 by this cotejo;officialsources accepted,not reauthenticated",
"sources": [
{
"file": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6e-supplies-20261024\\Decreto56-2009-BR40.pdf",
"url": "https://fracessoriasa.co.mz/wp-content/uploads/2021/03/10-Decreto-n_56.2009-REGULAMENTO-DOS-BENEFICIOS-FISCAIS.pdf",
"sha256": "6ea1b8d93daed48c6d590481d874010fa1708211d8f27c319dc9a31328456017",
"pages": 5
},
{
"file": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6e-supplies-20261024\\MIREME-legislacao-investimentos.pdf",
"url": "https://mireme.gov.mz/wp-content/uploads/2022/03/Lei-e-Regualamento-das-zonas-francas-industriais-investimentos.pdf",
"sha256": "df50f6a489ffb35a4252fddec0ffa1f9c58d7b8cb4e54c9f25b7904bd39218b7",
"pages": 136
}
]
}
@@ -0,0 +1,258 @@
{
"status": "installed_delta_verified_partial_L1",
"base_remote_main": "490527b92cf1ca18122679440ff3a38933b7e0c2",
"candidate": "c28e290b42a2a96c68b16dab59871581633a471e",
"compatibility": "fresh fetch;origin/main ancestor of candidate;no concurrent change;local stale main not used",
"coverage": {
"G2C": {
"P013": [
"cultural_visits_public",
"cultural_visits_nonprofit"
],
"P014": [
"religious_personnel_public",
"religious_personnel_nonprofit"
],
"P015": [
"statutory_membership"
]
},
"G2D": {
"P024": [
"author_rights"
],
"P025": [
"cultural_publications"
]
},
"new_branches": 5,
"new_treatments": 7,
"conditional_treatments_total": 32
},
"counts_before": {
"delivered": 12,
"QA": 5,
"functional_pending": 115,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 17,
"QA": 0,
"functional_pending": 115,
"documentary": 1,
"total": 133
},
"runtime_delta": [
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "577a029e24580d9c4dba0e4c19ce57da6273fe6f44185b3a32bd02fd7573578c"
}
],
"activation": "Existing Git FF/webhook installer;catalogue available in existing L1 component;no migration/import/server fiscal rule activation/permissions changes",
"preservation": "12delivered+G2C/G2Dproofs reused;four frozen books unchanged/current without recalculation;newrules scoped keys only",
"rollback": "Existing compatible readonly containment patch apply-check passed;keep catalogue/readers/snapshots/reports;prior release and fresh verified backup required;no active rollback executed",
"QA": "G2C2frontend+API1/14;G2D2frontend+API1/11;UI?API?report;types/build passed;acceptedWord/PDFunchanged",
"P001_blocks_independent": false,
"L1_complete": false,
"statistics_AI": "deferred",
"authenticated_preflight": "confirmed490527b9;installed/current/revisionagree;serviceinactive;pipelinehashunchanged",
"backup_restore": {
"verified": true,
"tables": 174,
"files": 369,
"dump_sha256": "c11ba51e60cb3ac1cad5411c2aeefcb0adaeadd6fd2c16cd42fd6b63b1449fff",
"backup": "/var/backups/investmoz-l1-g2cd-delivery-20261024/backup",
"restore": "l1_g2cd_restore_20261024:55441;networknone;174checksumsagree;containerremoved;zeroactiveDBwrites"
},
"installed_delta": "verified",
"served_commit": "3b788ec0098d84dcc154239651a35c685dfc2ebd",
"installation": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2cd-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "c11ba51e60cb3ac1cad5411c2aeefcb0adaeadd6fd2c16cd42fd6b63b1449fff",
"files_sha256": "21fc80e45eaa289b67e2d2ce6bcc538b51330a3fa7cfb7e9cd64367201389b5e",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2cd_restore_20261024",
"port": 55441,
"source_dump_sha256": "c11ba51e60cb3ac1cad5411c2aeefcb0adaeadd6fd2c16cd42fd6b63b1449fff",
"active_database_writes": 0
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "3b788ec0098d84dcc154239651a35c685dfc2ebd",
"release": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"previous_release": "/var/www/investmoz-homologacao/releases/490527b92cf1ca18122679440ff3a38933b7e0c2-d41ae12f",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "3b788ec0098d84dcc154239651a35c685dfc2ebd",
"release": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"previous_release": "/var/www/investmoz-homologacao/releases/490527b92cf1ca18122679440ff3a38933b7e0c2-d41ae12f",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"3b788ec0098d84dcc154239651a35c685dfc2ebd"
],
"finished_at": "2026-10-24T12:48:10.504292+00:00"
},
"log_file": "1792846007466003663.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 23.88s",
"OK (59 tests, 317 assertions)",
"# tests 251",
"# pass 251",
"# fail 0"
],
"log_bytes": 101223
},
"protected_preservation": {
"installed": {
"status": "installed",
"commit": "3b788ec0098d84dcc154239651a35c685dfc2ebd",
"release": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"previous_release": "/var/www/investmoz-homologacao/releases/490527b92cf1ca18122679440ff3a38933b7e0c2-d41ae12f",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 1,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"audit_events": {
"before": {
"rows": 645,
"checksum": "88c2047620eb3fad4d2a2837ed3daef5"
},
"after": {
"rows": 646,
"checksum": "cf24e81547ee23d812ccaadaccc387b6"
}
},
"cache": {
"before": {
"rows": 105,
"checksum": "ef2967a3b3174300a6509d3013c1823d"
},
"after": {
"rows": 105,
"checksum": "6dfe16f04a406749beaf0a189897106b"
}
},
"sessions": {
"before": {
"rows": 5,
"checksum": "2a932f661c46631221bec768a4a23574"
},
"after": {
"rows": 8,
"checksum": "6d7f01315a1de04eadaddc0b90e0526c"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"audit_delta": {
"historical_audit_unchanged": true,
"historical_rows": 645,
"new_events": 1,
"new_event_metadata": {
"source_system": "virtual-desk",
"entity_type": "desk_cases",
"action": "consulted",
"created_at": "2026-10-24T12:47:35.31492+00:00"
},
"verification_writes": 0
},
"public_delta": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "3b788ec0098d84dcc154239651a35c685dfc2ebd",
"branch": "main",
"built_at": "2026-10-24T12:48:08.073225+00:00",
"manifest_sha256": "b00f59904a5709fbcd8eaa6b51ac8dc421ddfc8dfd2e0ce18d133240150c8810"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"cultural_visits_": [
"assets/project-dossier-BDWSVUNs.js"
],
"religious_personnel_": [
"assets/project-dossier-BDWSVUNs.js"
],
"statutory_membership": [
"assets/project-dossier-BDWSVUNs.js"
],
"author_rights": [
"assets/project-dossier-BDWSVUNs.js"
],
"cultural_publications": [
"assets/project-dossier-BDWSVUNs.js"
],
"iva-operations-l1/2": [
"assets/project-dossier-BDWSVUNs.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-document-BVqhDRN3.js",
"status": 200,
"sha256": "56076c99222527ecc453bd245e21830618d07d26a874eede4f07cd597587922a"
},
{
"file": "assets/project-dossier-BDWSVUNs.js",
"status": 200,
"sha256": "574235d0a55380d1a0a4044b46bed1c9f47aca0ec4f61b1356ac7216b8fcc85d"
},
{
"file": "assets/services-CJfVMeO3.js",
"status": 200,
"sha256": "ae0b9fda96068b6179b16d0b7d121d4d840ba82d6763253821bb6b9ac03a3686"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-B0KlTmxs.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"Git": "freshfetch;branchpush;mainfastforward;noforce;existingwebhook",
"rollback_executed": false
}
}
@@ -0,0 +1,289 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "9b0f4370737f340b7fca606728f5ca281f6b5dfd",
"base_remote_main": "3b788ec0098d84dcc154239651a35c685dfc2ebd",
"fresh_fetch": "confirmed main3b788ec0;ancestor;no concurrent changes detected;localmainnotused",
"coverage": {
"G2E": {
"P033": "industrial_feed",
"P034": "industrial_feed_inputs",
"P036": "veterinary_goods",
"P044": "agricultural_services"
},
"G2F": {
"P023": "special_tax_games",
"P028": "stamped_values",
"P037": "public_passenger_transport"
},
"new_branches": 7,
"new_treatments": 7,
"conditional_treatments_total": 39
},
"counts_before": {
"delivered": 17,
"QA": 7,
"functional_pending": 108,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 24,
"QA": 0,
"functional_pending": 108,
"documentary": 1,
"total": 133
},
"runtime_delta": [
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "dcb141a4d0a1edb0d2b2c8f63a20a076b8362c02d652baad673e652c133c64ce"
}
],
"activation": "ExistingGitFF/webhook/installer;catalogueexistingcomponent;no migrations/imports/server fiscal rule activation/permissions changes",
"preservation": "17delivered closed;G2E/G2FacceptedQAproofsreused;sixfrozenbookscurrentwithoutrecalculation",
"rollback": "Keepcataloguereaderssnapshotsresultsreports;existingreadonlycontainmentpatchapplycheckrequired;backuprestorebeforepush;no rollback executed",
"P001": "Stilldocumentary05/06;05/07doesnotresolveit;doesnotblockindependent",
"QA": "G2E2frontend+API1/14;G2F2frontend+API1/13;UItoAPIreport;types/buildpassed;WordPDFunchanged",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "3b788ec0098d84dcc154239651a35c685dfc2ebd",
"release": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"previous_release": "/var/www/investmoz-homologacao/releases/490527b92cf1ca18122679440ff3a38933b7e0c2-d41ae12f",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"release_revision": {
"commit": "3b788ec0098d84dcc154239651a35c685dfc2ebd",
"branch": "main",
"built_at": "2026-10-24T12:48:08.073225+00:00",
"manifest_sha256": "b00f59904a5709fbcd8eaa6b51ac8dc421ddfc8dfd2e0ce18d133240150c8810"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2ef-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "e23ea1909ede1cb3be7a5e5751f5580e8b8c0b2452c53772c8e28d06ec999b20",
"files_sha256": "c56f7ac804b0d4f0c69a2f53a23b00cc34fa067888e62e13444192b3d41c52cf",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2ef_restore_20261024",
"port": 55441,
"source_dump_sha256": "e23ea1909ede1cb3be7a5e5751f5580e8b8c0b2452c53772c8e28d06ec999b20",
"active_database_writes": 0
}
},
"installed_delta": "verified",
"L1_complete": false,
"statistics_AI": "deferred",
"rollback_compatibility": "gitapplycheckpassed;notapplied;keepcatalogueandreaders;previousreleaseandverifiedbackupavailable",
"served_commit": "9a56d982423d0c244850f8638290a1ce8a968619",
"installation": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2ef-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "e23ea1909ede1cb3be7a5e5751f5580e8b8c0b2452c53772c8e28d06ec999b20",
"files_sha256": "c56f7ac804b0d4f0c69a2f53a23b00cc34fa067888e62e13444192b3d41c52cf",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2ef_restore_20261024",
"port": 55441,
"source_dump_sha256": "e23ea1909ede1cb3be7a5e5751f5580e8b8c0b2452c53772c8e28d06ec999b20",
"active_database_writes": 0
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "9a56d982423d0c244850f8638290a1ce8a968619",
"release": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"previous_release": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "9a56d982423d0c244850f8638290a1ce8a968619",
"release": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"previous_release": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"9a56d982423d0c244850f8638290a1ce8a968619"
],
"finished_at": "2026-10-24T13:01:02.426859+00:00"
},
"log_file": "1792846776358374658.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.68s",
"OK (59 tests, 317 assertions)",
"# tests 255",
"# pass 255",
"# fail 0"
],
"log_bytes": 102308
},
"protected_preservation": {
"installed": {
"status": "installed",
"commit": "9a56d982423d0c244850f8638290a1ce8a968619",
"release": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"previous_release": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 1,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "17b5d816f82ab932dca814a8e76c1211"
},
"after": {
"rows": 105,
"checksum": "316356979dc340fc5f141679bdee5c0d"
}
},
"sessions": {
"before": {
"rows": 8,
"checksum": "d1df0268b1343c91b756052e39ca7930"
},
"after": {
"rows": 11,
"checksum": "787de58f2b0436566c2ad27161a8a759"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public_delta": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "9a56d982423d0c244850f8638290a1ce8a968619",
"branch": "main",
"built_at": "2026-10-24T13:00:59.831259+00:00",
"manifest_sha256": "b92bc7b64176675274dd934bb683f09c4a4ca3c4fe690dfce06425e89a7f3e04"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"industrial_feed": [
"assets/project-dossier-DSFHX342.js"
],
"industrial_feed_inputs": [
"assets/project-dossier-DSFHX342.js"
],
"veterinary_goods": [
"assets/project-dossier-DSFHX342.js"
],
"agricultural_services": [
"assets/project-dossier-DSFHX342.js"
],
"special_tax_games": [
"assets/project-dossier-DSFHX342.js"
],
"stamped_values": [
"assets/project-dossier-DSFHX342.js"
],
"public_passenger_transport": [
"assets/project-dossier-DSFHX342.js"
],
"iva-operations-l1/2": [
"assets/project-dossier-DSFHX342.js"
]
},
"assets": [
{
"file": "assets/project-dossier-DSFHX342.js",
"status": 200,
"sha256": "9083729b212d85c15164545718f7813f1a843627eb7dffbfa398bd8ce4a35afb"
},
{
"file": "assets/services-CfCgVoiZ.js",
"status": 200,
"sha256": "4e3c1d5d90b642e4face01d05ab47f73cc9e3e7c4286fb7b638319d8d71dc96a"
},
{
"file": "assets/project-dossier-document-7BExzGRH.js",
"status": 200,
"sha256": "3e925451351648c1dd2f7323c15e1881ba09dd3f0f27092a153958537476583f"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-CHL9O0-A.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"Git": "freshfetch;branchpush;mainfastforward;noforce;existingwebhook",
"rollback_executed": false
}
}
@@ -0,0 +1,371 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "b297058d11aee206530492a65f86e3d58eb5ba15",
"base_remote_main": "9a56d982423d0c244850f8638290a1ce8a968619",
"fresh_fetch": "main9a56d982;ancestor;no concurrent advance detected",
"coverage": {
"G2G": {
"P010": [
"public_security"
],
"P027": [
"official_military_supplies"
],
"P031": [
"sisa_subject_operation"
],
"P032": [
"exempt_activity_asset_sale",
"no_deduction_right_asset_sale",
"excluded_deduction_asset_sale"
]
},
"G2H": {
"P026": [
"listed_maize",
"listed_maize_flour",
"listed_rice",
"listed_bread",
"listed_iodised_salt",
"listed_infant_powdered_milk",
"listed_wheat",
"listed_wheat_flour",
"listed_fresh_chilled_tomato",
"listed_potato",
"listed_onion",
"listed_frozen_horse_mackerel",
"listed_lighting_kerosene",
"listed_domestic_lpg",
"listed_jet_fuel",
"listed_eligible_bicycles",
"listed_condoms",
"listed_insecticides"
]
},
"new_branches": 5,
"new_treatments": 24,
"conditional_treatments_total": 63
},
"counts_before": {
"delivered": 24,
"QA": 5,
"functional_pending": 103,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 29,
"QA": 0,
"functional_pending": 103,
"documentary": 1,
"total": 133
},
"runtime_delta": [
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "f18941067a82d18f43af4252c11b7ff26e001212e1e6cb5bff62c9b4ba48f855"
}
],
"activation": "ExistingGitFF/webhook/installer;catalogueexistingcomponent;no migrations/imports/server rule activation/permissions/other tax calculations",
"QA": "G2G2frontend+API1/16;G2H2frontend+API1/28;UItoAPIreport;types/buildpassed;acceptedWordPDFreused",
"preservation": "24delivered andeightfrozencontextscurrentwithoutrecalculation;G2G/G2Hproofsreused;G2Ftraceabilityclarifiedwithoutretests",
"rollback": "Keepcataloguereaderssnapshotsresultsreports;compatibleexistingreadonlypatch;priorreleaseandfreshbackuprestorebeforepush;no rollback executed",
"P001": "Documentary05/06stillopen;05/07doesnotresolveit;noindependentblock",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "9a56d982423d0c244850f8638290a1ce8a968619",
"release": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"previous_release": "/var/www/investmoz-homologacao/releases/3b788ec0098d84dcc154239651a35c685dfc2ebd-56825c6e",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"release_revision": {
"commit": "9a56d982423d0c244850f8638290a1ce8a968619",
"branch": "main",
"built_at": "2026-10-24T13:00:59.831259+00:00",
"manifest_sha256": "b92bc7b64176675274dd934bb683f09c4a4ca3c4fe690dfce06425e89a7f3e04"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2gh-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "ffe24d9e324cc1ad2354e8feec088e072db437eb54d1f5b6dfd3830865940b40",
"files_sha256": "57bcb40faf4cb5e14b0aa13eb8b274f222e51bc3cd5fd17e07d70e87165e2b94",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2gh_restore_20261024",
"port": 55441,
"source_dump_sha256": "ffe24d9e324cc1ad2354e8feec088e072db437eb54d1f5b6dfd3830865940b40",
"active_database_writes": 0
}
},
"installed_delta": "verified",
"L1_complete": false,
"statistics_AI": "deferred",
"rollback_compatibility": "gitapplycheckpassed;notapplied;keepcatalogueandreaders;previousreleaseandverifiedbackupavailable",
"served_commit": "d4eae917ee9c9d37f0339905a96c1e35480f324e",
"installation": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2gh-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "ffe24d9e324cc1ad2354e8feec088e072db437eb54d1f5b6dfd3830865940b40",
"files_sha256": "57bcb40faf4cb5e14b0aa13eb8b274f222e51bc3cd5fd17e07d70e87165e2b94",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2gh_restore_20261024",
"port": 55441,
"source_dump_sha256": "ffe24d9e324cc1ad2354e8feec088e072db437eb54d1f5b6dfd3830865940b40",
"active_database_writes": 0
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "d4eae917ee9c9d37f0339905a96c1e35480f324e",
"release": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"previous_release": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "d4eae917ee9c9d37f0339905a96c1e35480f324e",
"release": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"previous_release": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"d4eae917ee9c9d37f0339905a96c1e35480f324e"
],
"finished_at": "2026-10-24T13:15:14.273272+00:00"
},
"log_file": "1792847626452821855.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 26.20s",
"OK (59 tests, 317 assertions)",
"# tests 259",
"# pass 259",
"# fail 0"
],
"log_bytes": 103542
},
"protected_preservation": {
"installed": {
"status": "installed",
"commit": "d4eae917ee9c9d37f0339905a96c1e35480f324e",
"release": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"previous_release": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 1,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "316356979dc340fc5f141679bdee5c0d"
},
"after": {
"rows": 105,
"checksum": "39b6357efbe3142e8d0e55b5fac6a935"
}
},
"sessions": {
"before": {
"rows": 11,
"checksum": "787de58f2b0436566c2ad27161a8a759"
},
"after": {
"rows": 14,
"checksum": "ba1aa4ceaf894c62a66a4186ae4e9ddc"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public_delta": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "d4eae917ee9c9d37f0339905a96c1e35480f324e",
"branch": "main",
"built_at": "2026-10-24T13:15:11.725340+00:00",
"manifest_sha256": "4018026aac013855f2c9baf9258ed96e1b1bf808d996e8fa8eec9458ea6b35c7"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"public_security": [
"assets/project-dossier-PaHmg6s9.js"
],
"official_military_supplies": [
"assets/project-dossier-PaHmg6s9.js"
],
"sisa_subject_operation": [
"assets/project-dossier-PaHmg6s9.js"
],
"exempt_activity_asset_sale": [
"assets/project-dossier-PaHmg6s9.js"
],
"no_deduction_right_asset_sale": [
"assets/project-dossier-PaHmg6s9.js"
],
"excluded_deduction_asset_sale": [
"assets/project-dossier-PaHmg6s9.js"
],
"maize": [
"assets/project-dossier-PaHmg6s9.js"
],
"maize_flour": [
"assets/project-dossier-PaHmg6s9.js"
],
"rice": [
"assets/services-CVvFKfag.js",
"assets/project-dossier-PaHmg6s9.js"
],
"bread": [
"assets/project-dossier-PaHmg6s9.js"
],
"iodised_salt": [
"assets/project-dossier-PaHmg6s9.js"
],
"infant_powdered_milk": [
"assets/project-dossier-PaHmg6s9.js"
],
"wheat": [
"assets/project-dossier-PaHmg6s9.js"
],
"wheat_flour": [
"assets/project-dossier-PaHmg6s9.js"
],
"fresh_chilled_tomato": [
"assets/project-dossier-PaHmg6s9.js"
],
"potato": [
"assets/project-dossier-PaHmg6s9.js"
],
"onion": [
"assets/project-dossier-PaHmg6s9.js"
],
"frozen_horse_mackerel": [
"assets/project-dossier-PaHmg6s9.js"
],
"lighting_kerosene": [
"assets/project-dossier-PaHmg6s9.js"
],
"domestic_lpg": [
"assets/project-dossier-PaHmg6s9.js"
],
"jet_fuel": [
"assets/project-dossier-PaHmg6s9.js"
],
"eligible_bicycles": [
"assets/project-dossier-PaHmg6s9.js"
],
"condoms": [
"assets/project-dossier-PaHmg6s9.js"
],
"insecticides": [
"assets/project-dossier-PaHmg6s9.js"
],
"listed_": [
"assets/project-dossier-PaHmg6s9.js"
],
"iva-operations-l1/2": [
"assets/project-dossier-PaHmg6s9.js"
]
},
"assets": [
{
"file": "assets/services-CVvFKfag.js",
"status": 200,
"sha256": "3ce2515eb4d53e8c2da3f10fdca2bfea208d801616813e6dcd18331b7d25c048"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-PaHmg6s9.js",
"status": 200,
"sha256": "9fce800b1b9805b436a1d3801f8a596ad8c879604ac193d2af6cfb546d15c7e8"
},
{
"file": "assets/project-dossier-document-CNebL8r6.js",
"status": 200,
"sha256": "242eebf5c9d9dac52eb0b53009013705058cfd62aeb0c576e4cdb6cad7619c5f"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-gy0vGuME.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"Git": "freshfetch;branchpush;mainfastforward;noforce;existingwebhook",
"rollback_executed": false
}
}
@@ -0,0 +1,319 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "72f4187d3bc0727ae0c5162500d5d6f26b7eed49",
"base_remote_main": "d4eae917ee9c9d37f0339905a96c1e35480f324e",
"fresh_fetch": "main d4eae917; ancestral; no concurrent advance detected; fetch again immediately before push",
"coverage": {
"G2I": {
"P019": [
"production_agriculture"
],
"P020": [
"production_forestry",
"production_forestry_opted"
],
"P021": [
"production_livestock",
"production_livestock_opted"
],
"P022": [
"production_fishing",
"production_fishing_opted"
]
},
"G2J": {
"P016": [
"fundraising_public",
"fundraising_nonprofit"
]
},
"new_branches": 5,
"new_treatments": 9,
"conditional_treatments_total": 72,
"calendar_resolution": "Civil279(c)/296 plus CIVA11(3), production-option/2; no additional branch"
},
"counts_before": {
"delivered": 29,
"QA": 5,
"functional_pending": 98,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 34,
"QA": 0,
"functional_pending": 98,
"documentary": 1,
"total": 133
},
"runtime_delta": [
{
"path": "resources/js/components/simulation-operations.tsx",
"sha256_LF": "94e7419ee3338c9eda6418e741d72f08334dbb3f6507dd78d2bd6690d4be6b5b"
},
{
"path": "resources/js/lib/iva-fundraising.ts",
"sha256_LF": "b58fc5733eb9f7facfe00a5f4cf0acdc98ad1e4191dbfdd1189fdf379e25e227"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "844d9b634afcb6a72237ca87626e5e1bcba8df3744b35063c1657a590d17b957"
},
{
"path": "resources/js/lib/iva-production-option.ts",
"sha256_LF": "2bdbb6ed52086c2c47d9f615b2cbe1c8f1370b8fdcefaa40c07b6cda8cc47526"
}
],
"activation": "Existing Git FF/webhook/installer and existing enabled simulator panel; no migrations/imports/server-rule activation/permissions/other taxes",
"QA": "G2I fe69a16e/a5ac8ca1 reused except changed calendar; calendar2frontend+API1/10;G2J2frontend+API1/10;UI/API/report;types/buildpassed;acceptedWordPDFreused",
"preservation": "29 delivered branches and previous receipts/data retained; only changed G2I opted-rule results marked historical, never rewritten",
"rollback": "Keep catalogue/readers/snapshots/results/reports; verified compatible l1-joint-readonly-rollback-20261024.patch suspends edits/calculations only; not applied. Prior release and verified fresh backup retained; no broad rollback or DB restoration executed.",
"rollback_compatibility": "git apply --check passed; not applied",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "d4eae917ee9c9d37f0339905a96c1e35480f324e",
"release": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"previous_release": "/var/www/investmoz-homologacao/releases/9a56d982423d0c244850f8638290a1ce8a968619-19d0ea6c",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"release_revision": {
"commit": "d4eae917ee9c9d37f0339905a96c1e35480f324e",
"branch": "main",
"built_at": "2026-10-24T13:15:11.725340+00:00",
"manifest_sha256": "4018026aac013855f2c9baf9258ed96e1b1bf808d996e8fa8eec9458ea6b35c7"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2ij-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "a75cb8751146ad0a59ecd62fa13e4d9ede3fd98ad2f4ebda092b48f7c2526c32",
"files_sha256": "889fe89ec3acccfc17ace98dec9e6fb8675bfb75f69efb1ae9ce7585c50ef873",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2ij_restore_20261024",
"port": 55441,
"source_dump_sha256": "a75cb8751146ad0a59ecd62fa13e4d9ede3fd98ad2f4ebda092b48f7c2526c32",
"active_database_writes": 0
}
},
"P001": "Documentary05/06only;independentoperationsnotblocked",
"L1_complete": false,
"statistics_AI": "deferred",
"served_commit": "e45a1394fa2ca8631593549b3af62093f25d9c13",
"installed_delta": "verified",
"installation": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2ij-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "a75cb8751146ad0a59ecd62fa13e4d9ede3fd98ad2f4ebda092b48f7c2526c32",
"files_sha256": "889fe89ec3acccfc17ace98dec9e6fb8675bfb75f69efb1ae9ce7585c50ef873",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2ij_restore_20261024",
"port": 55441,
"source_dump_sha256": "a75cb8751146ad0a59ecd62fa13e4d9ede3fd98ad2f4ebda092b48f7c2526c32",
"active_database_writes": 0
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "e45a1394fa2ca8631593549b3af62093f25d9c13",
"release": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"previous_release": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "e45a1394fa2ca8631593549b3af62093f25d9c13",
"release": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"previous_release": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"e45a1394fa2ca8631593549b3af62093f25d9c13"
],
"finished_at": "2026-10-24T13:51:04.874534+00:00"
},
"log_file": "1792849778512278349.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.05s",
"OK (59 tests, 317 assertions)",
"# tests 265",
"# pass 265",
"# fail 0"
],
"log_bytes": 105228
},
"protected_preservation": {
"installed": {
"status": "installed",
"commit": "e45a1394fa2ca8631593549b3af62093f25d9c13",
"release": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"previous_release": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 4,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "39b6357efbe3142e8d0e55b5fac6a935"
},
"after": {
"rows": 105,
"checksum": "de9f82d4485c5358f6677efbc61c53a0"
}
},
"sessions": {
"before": {
"rows": 14,
"checksum": "ba1aa4ceaf894c62a66a4186ae4e9ddc"
},
"after": {
"rows": 15,
"checksum": "c6e69ce7f5936cefebf8b1d7b9295a15"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public_delta": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "e45a1394fa2ca8631593549b3af62093f25d9c13",
"branch": "main",
"built_at": "2026-10-24T13:51:02.487098+00:00",
"manifest_sha256": "2f3fd204e659ac71f0e35b59365b7342d79f1460119ef34a4daa217e4b21c0af"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"production_": [
"assets/project-dossier-CP3iqTD7.js",
"assets/services-D8gl05j7.js"
],
"agriculture": [
"assets/project-dossier-CP3iqTD7.js"
],
"forestry": [
"assets/project-dossier-CP3iqTD7.js"
],
"livestock": [
"assets/project-dossier-CP3iqTD7.js"
],
"fishing": [
"assets/project-dossier-CP3iqTD7.js"
],
"fundraising_public": [
"assets/project-dossier-CP3iqTD7.js"
],
"fundraising_nonprofit": [
"assets/project-dossier-CP3iqTD7.js",
"assets/services-D8gl05j7.js"
],
"production-option/2": [
"assets/project-dossier-CP3iqTD7.js"
],
"fundraising/1": [
"assets/project-dossier-CP3iqTD7.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-document-RxKyJJE-.js",
"status": 200,
"sha256": "f1580c32f9b5590f65ef1caeb99bcb8838a7593837001e8f541815318bbffc65"
},
{
"file": "assets/project-dossier-CP3iqTD7.js",
"status": 200,
"sha256": "7317575f701ff3b68c5909f57bfa8b2d228fc30f3c0a8b852ebe2f98ad4431fc"
},
{
"file": "assets/services-D8gl05j7.js",
"status": 200,
"sha256": "018c16520dc0410f830de3963aa55bcf459297cd0bbebfa4562312cd2793c218"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-B5iYnxXw.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"Git": "fresh fetch; feature push; main fast-forward; no force; existing webhook",
"rollback_executed": false
}
}
@@ -0,0 +1,391 @@
{
"status": "installed_delta_verified_partial_L1",
"base_remote_main": "e45a1394fa2ca8631593549b3af62093f25d9c13",
"fresh_fetch": "origin/main e45a1394,ancestor;fetch again immediately before main push",
"coverage": {
"G2K": {
"P008": [
"pharma_manufacturing_inputs"
]
},
"G2L": {
"P035": [
"annexI_goods"
]
},
"new_branches": 2,
"new_treatments": 2,
"documentary_rows": {
"AnexoIII": 170,
"AnexoI": 172
},
"existing_treatments_reused": "Explicit identity-preserving continuations to9(10);no new branch IDs"
},
"counts_current": {
"delivered": 36,
"QA": 0,
"functional_pending": 96,
"documentary": 1,
"total": 133
},
"counts_after_QA_and_delivery_only": {
"delivered": 36,
"QA": 0,
"functional_pending": 96,
"documentary": 1,
"total": 133
},
"runtime_delta": [
{
"path": "resources/js/components/simulation-operations.tsx",
"sha256_LF": "6e6d7b5d7f47541683dd4f32e93805b0d3068283a8ff1b3446884f5e4c626039"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "02e411659c84c00182c6c46f3af499f04648a8cf84911ce11ed9a21f12d48d78"
},
{
"path": "resources/js/lib/iva-pharma-annex.ts",
"sha256_LF": "dd56382b6edcced208efb03ebfc412f75e03b7180d084021ecbde1bac713ce3f"
},
{
"path": "resources/js/lib/iva-annex-i.ts",
"sha256_LF": "6dda21a66dd9399b911bc9839163a5e20f10808ac1937d3b2ca70dff3109424d"
}
],
"QA": {
"G2K": "8882dc54/1fe74256;accepted proofs reused",
"G2L": "4frontend/types/build accepted; manual Tempo reading/viewing and reported save/recover/report passage; actual saved UI payload verified and private API1/29 passed;12previousbooks preserved without recalculation.",
"review_controls": "Same-origin synthetic file save/recover/report clarified; manual passage reported by Tempo and saved file found; no Codex browser observation claimed."
},
"visual_gate": {
"origin": "http://127.0.0.1:18639",
"user_authorized": true,
"user_requested_retry": true,
"current_tool_result": "A saved user permission setting blocks this action; saved permission or managed policy denies access",
"alternate_origin_or_browser_workaround_attempted": false
},
"before_delivery_required": [],
"activation": "Existing Git fast-forward/webhook/installer and existing simulator panel;no migrations/imports/server fiscal activation/permissions/other taxes",
"rollback": "Existing l1-joint-readonly-rollback-20261024.patch passed git apply --check;not applied;keeps catalogue/readers/history/API/reports. Retain prior release and verified fresh backup before deployment;no DBrestore executed.",
"backup_restore_new_delivery": "Verified fresh backup and real isolated restore;no active restore executed.",
"homologation_unchanged": false,
"P001": "05/06only;notextended",
"L1_complete": false,
"statistics_AI": "deferred",
"G2L_candidate": "744682835a91f08aece9258380466ae746bc7353",
"G2K_candidate": "8882dc54d0973bc058b04009bdbc36c9da2cc31b",
"G2L_record": "iva_l1_g2_annex_i_code_qa_visual_pending_20261024",
"visual_verification_routes": {
"authority": "Express Tempo instruction,24/10/2026",
"manual_Tempo": {
"accepted": true,
"status": "manual_passage_reported_and_saved_payload_technically_verified",
"observations": {
"source": "Tempo, conversation24/10/2026",
"earlier_statement": "No failure seen in what was read and observed; save/recovery buttons not identified.",
"latest_statement": "ja procedi com a tua instrução pode verificar",
"scope": "User reports following the save/recover/report instructions after controls were clarified.",
"Codex_visual_observation": false,
"additional_individual_observations_invented": false
}
},
"Codex_browser": {
"accepted_after_tool_permission_review": true,
"saved_permission_not_changed_by_conversation_authorization": true
},
"scope": [
"Search/select an AnnexI position",
"Conditions and missing information",
"Save/recover and match selected position in report;continuitywhereapplicable"
],
"automatic_tests": "Already accepted;do not repeat",
"tool_block_is_portal_failure_evidence": false,
"circumvention": false
},
"G2L_completion_record": "iva_l1_g2l_manual_completion_and_actual_UI_payload_20261024",
"candidate": "da798dd1d8a017cfb20764b566661807b2ef0ffc",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "e45a1394fa2ca8631593549b3af62093f25d9c13",
"release": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"previous_release": "/var/www/investmoz-homologacao/releases/d4eae917ee9c9d37f0339905a96c1e35480f324e-afcda0da",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"release_revision": {
"commit": "e45a1394fa2ca8631593549b3af62093f25d9c13",
"branch": "main",
"built_at": "2026-10-24T13:51:02.487098+00:00",
"manifest_sha256": "2f3fd204e659ac71f0e35b59365b7342d79f1460119ef34a4daa217e4b21c0af"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2kl-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "8c6d8f2745ebb3dc6883d67fb8d9810593d47ad44fb0e20859e3547044adee6c",
"files_sha256": "66d42c9053508681e8f7adfe20631396272f2fb934a69a6c79347a029fa11f78",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2kl_restore_20261024",
"port": 55441,
"source_dump_sha256": "8c6d8f2745ebb3dc6883d67fb8d9810593d47ad44fb0e20859e3547044adee6c",
"active_database_writes": 0
}
},
"rollback_compatibility": "git apply --check passed on current candidate;patch not applied;catalogue/readers/history retained",
"served_commit": "ccdecbd8d74596e729f03381d3b37ca22ce5800e",
"installed_delta": "verified",
"installation": {
"backup": {
"stage": "/var/backups/investmoz-l1-g2kl-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "8c6d8f2745ebb3dc6883d67fb8d9810593d47ad44fb0e20859e3547044adee6c",
"files_sha256": "66d42c9053508681e8f7adfe20631396272f2fb934a69a6c79347a029fa11f78",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g2kl_restore_20261024",
"port": 55441,
"source_dump_sha256": "8c6d8f2745ebb3dc6883d67fb8d9810593d47ad44fb0e20859e3547044adee6c",
"active_database_writes": 0
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "ccdecbd8d74596e729f03381d3b37ca22ce5800e",
"release": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"previous_release": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "ccdecbd8d74596e729f03381d3b37ca22ce5800e",
"release": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"previous_release": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"ccdecbd8d74596e729f03381d3b37ca22ce5800e"
],
"finished_at": "2026-10-24T14:40:58.261566+00:00"
},
"log_file": "1792852768694030688.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.35s",
"OK (59 tests, 317 assertions)",
"# tests 272",
"# pass 272",
"# fail 0"
],
"log_bytes": 107426
},
"protected_preservation": {
"installed": {
"status": "installed",
"commit": "ccdecbd8d74596e729f03381d3b37ca22ce5800e",
"release": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"previous_release": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 4,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "9d045636f1332b32bb65a20a35a0ffe1"
},
"after": {
"rows": 105,
"checksum": "f8fbf67b713b7dfdce6a3bacb6c46823"
}
},
"sessions": {
"before": {
"rows": 14,
"checksum": "fa2aec2278d6646c26970993447e306a"
},
"after": {
"rows": 15,
"checksum": "9c9c8b103d1429a690d8e140f1c19ad7"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public_delta": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "ccdecbd8d74596e729f03381d3b37ca22ce5800e",
"branch": "main",
"built_at": "2026-10-24T14:40:55.681401+00:00",
"manifest_sha256": "8ee52a7b3f7c4363f10d73382d85325bbfa331c2e6e44ccd08d92e578cdf2776"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"annexI_goods": [
"assets/project-dossier-DmOH9u9e.js",
"assets/services-zksozm3m.js"
],
"pharma_manufacturing_inputs": [
"assets/project-dossier-DmOH9u9e.js",
"assets/services-zksozm3m.js"
],
"annexI-lei22-2022/1": [
"assets/project-dossier-DmOH9u9e.js"
],
"annexIII-lei22-2022/1": [
"assets/project-dossier-DmOH9u9e.js"
],
"annexIItem": [
"assets/project-dossier-DmOH9u9e.js",
"assets/services-zksozm3m.js"
],
"pharmaAnnexItem": [
"assets/project-dossier-DmOH9u9e.js",
"assets/services-zksozm3m.js"
],
"2912.19.00": [
"assets/project-dossier-DmOH9u9e.js",
"assets/services-zksozm3m.js"
],
"8201.50.00": [
"assets/project-dossier-DmOH9u9e.js"
],
"8701.95.00": [
"assets/project-dossier-DmOH9u9e.js"
]
},
"assets": [
{
"file": "assets/project-dossier-DmOH9u9e.js",
"status": 200,
"sha256": "4cd3c0dbc4466661ce7e73dd4120fb956b9386c6e141b038e5a526cbf7424196"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/services-zksozm3m.js",
"status": 200,
"sha256": "5b771620208247a10da9d22e78be4fc772f8c1e02afcf38a7e6a47a5cdfefd5d"
},
{
"file": "assets/project-dossier-document-BGVr7IFw.js",
"status": 200,
"sha256": "fa7e832b28fbb762872dd5df448ef20c6f2ce5bafd5226b20c31376b566a25da"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-CQEv1lby.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"Git": "fresh fetch;feature push;main fast-forward;no force;existing webhook",
"rollback_executed": false
},
"G2L_visual_evidence": {
"method": "Verificação manual pela Tempo, autorizada expressamente na conversa;não foi observação de navegador peloCodex.",
"tool_block": "Permissão guardada/política gerida impediu o Codex de controlar a origemQA18639. Não foi alterada nem contornada.",
"manual_evidence": [
{
"statement": "conferi o SYNTHETIC QA — G2L / Anexo I",
"scope": "Abertura e leitura da páginaQA pelaTempo"
},
{
"statement": "pelo que li e observei não vi nenhuam falha mas tambem não vi nenhum botao gravação/recuperaça",
"scope": "Observação parcial semfalha noquefoivisto;gravação/recuperação ainda não conferidas"
},
{
"statement": "ja procedi com a tua instrução pode verificar",
"scope": "Confirmação pelaTempo da execução da instrução já apresentada:guardar exemploQA,recuperar gravaçãoQA eabrir relatório da gravação recuperada,após clarificação doscontrolos"
}
],
"limits": "Não se atribuem àTempo resultados individuais adicionais não descritos,nem se apresenta captura ou observação visual peloCodex. O ficheiro comprova gravação;isoladamente não comprova cliques de recuperação/abertura. Estes passos são sustentados pela comunicação daTempo.",
"technical_corroboration": {
"record": "iva_l1_g2l_manual_completion_and_actual_UI_payload_20261024",
"saved_at": "2026-10-24T14:32:44.805Z",
"saved_file_sha256": "bfa1b242671b57925d560d1b76a6065a52238f4cbd9f255b17e594384f5e0ef7",
"API_QA": "Ficheiro real→POST/GETprivado,1teste/29asserções;contexto/snapshot exactos;transacção revertida",
"report": "Mesmas funções daQA aplicadas ao snapshot real;contexto,fontes,identidades,versão evalores correspondentes"
},
"existing_references": [
"iva_l1_g2l_manual_verification_route_20261024",
"iva_l1_g2l_manual_partial_controls_20261024",
"iva_l1_g2l_manual_completion_and_actual_UI_payload_20261024",
"iva_l1_g2kl_homologation_20261024"
],
"installed_revision_check_is_visual_proof": false,
"accepted_proofs_repeated": false,
"delivery_closure_preserved": "ccdecbd8/643ba6ed"
}
}
@@ -0,0 +1,288 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "0dc2d64b20ae3d6879e0154f5507b3fdc6031733",
"base_remote_main": "ccdecbd8d74596e729f03381d3b37ca22ce5800e",
"coverage": {
"group": "G3",
"branches": [
"P038",
"P039",
"P040",
"P041",
"P042",
"P043",
"P045"
],
"scope": "cessation2026/MZN;explicit continuity;no historical exemption/imports"
},
"counts_before": {
"delivered": 36,
"QA": 7,
"functional_pending": 89,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 43,
"QA": 0,
"functional_pending": 89,
"documentary": 1,
"total": 133
},
"QA": "ac948bd8/bda6d1e3;manual Tempo visual confirmation0dc2d64b;3frontend+API1/36+types/build;13frozenbooks unchanged;accepted proofs reused",
"visual_provenance": "Manual Tempo;no Codex browser observation claimed. G2L clarification908c8afc is separate from G3 confirmation0dc2d64b.",
"runtime_delta": [
{
"path": "resources/js/components/simulation-operations.tsx",
"sha256_LF": "68e0a98d9b1a3190a96d16210e1bb331c23dbbf9aaa218f973ba05dc9c90df55"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "5155a96101393e0dca5f183577587b9b3a9c4e3b981e8491adc0d640301bdcb3"
},
{
"path": "resources/js/lib/iva-temporary-benefits.ts",
"sha256_LF": "99bf065703db32709806475f7e8bfdf0d086cce9b15ab30434f44d8df6ed9230"
}
],
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "ccdecbd8d74596e729f03381d3b37ca22ce5800e",
"release": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"previous_release": "/var/www/investmoz-homologacao/releases/e45a1394fa2ca8631593549b3af62093f25d9c13-f5f7e07d",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"release_revision": {
"commit": "ccdecbd8d74596e729f03381d3b37ca22ce5800e",
"branch": "main",
"built_at": "2026-10-24T14:40:55.681401+00:00",
"manifest_sha256": "8ee52a7b3f7c4363f10d73382d85325bbfa331c2e6e44ccd08d92e578cdf2776"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g3-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "0a9ebaa6f883abbea456f5971a35cb2081031735d56138f0d9354a9325591d7a",
"files_sha256": "ec19f952637953c1b286a5dfd5e8cef7861a0564c7d7c5a3187103fc0305a746",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g3_restore_20261024",
"port": 55441,
"source_dump_sha256": "0a9ebaa6f883abbea456f5971a35cb2081031735d56138f0d9354a9325591d7a",
"active_database_writes": 0
}
},
"activation": "Existing Git FF/webhook/installer;no migrations/imports/permissions/newserver fiscal rule",
"rollback": {
"patch": "docs/investmoz/simulations/l1-g3-readonly-rollback-20261024.patch",
"checked": true,
"applied": false,
"preserves": "catalogue/readers/history/reports;prior release and fresh backup retained",
"old_patch": "Earlier patch no longer applies after new helper;new compatible patch generated,old artifact preserved"
},
"L1_complete": false,
"P001": "05/06only",
"statistics_AI": "deferred",
"served_commit": "6eefe4b3322461b9a23166e2cd1235e3881765f4",
"counts_current": {
"delivered": 43,
"QA": 0,
"functional_pending": 89,
"documentary": 1,
"total": 133
},
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "6eefe4b3322461b9a23166e2cd1235e3881765f4",
"release": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"previous_release": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 3,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "7cb0825e41abb32c82bae73bb0a58da4"
},
"after": {
"rows": 105,
"checksum": "b6d05a7ee1683f104f7fceaee0a6f63f"
}
},
"sessions": {
"before": {
"rows": 17,
"checksum": "453fd7c711ddb39bfdd0105375f3df67"
},
"after": {
"rows": 18,
"checksum": "1920f0ee8d2ddf73ba225bad6a0645d3"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "6eefe4b3322461b9a23166e2cd1235e3881765f4",
"branch": "main",
"built_at": "2026-10-24T15:02:46.947668+00:00",
"manifest_sha256": "15837af27545a8691647459c00bec56b22d2e624ae9e20033d598d330d686d61"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"temporary-benefit-cessation/1": [
"assets/project-dossier-DT-hu-tU.js"
],
"temporary_sugar": [
"assets/project-dossier-DT-hu-tU.js",
"assets/services-C3-fU-ch.js"
],
"temporary_sugar_industry_goods": [
"assets/project-dossier-DT-hu-tU.js"
],
"temporary_oils_soap": [
"assets/project-dossier-DT-hu-tU.js"
],
"temporary_oils_soap_factory": [
"assets/project-dossier-DT-hu-tU.js"
],
"temporary_oils_soap_inputs": [
"assets/project-dossier-DT-hu-tU.js"
],
"temporary_sugar_cane": [
"assets/project-dossier-DT-hu-tU.js",
"assets/services-C3-fU-ch.js"
],
"temporary_solar_inputs": [
"assets/project-dossier-DT-hu-tU.js"
],
"temporaryBenefitOrigin": [
"assets/project-dossier-DT-hu-tU.js",
"assets/services-C3-fU-ch.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-document-CU96Nl_4.js",
"status": 200,
"sha256": "56bf3f423b6595b04c870aa8baa2118889152282d87da596f5a807bf5236cc04"
},
{
"file": "assets/project-dossier-DT-hu-tU.js",
"status": 200,
"sha256": "f8f618b305d8f76abfd193d9f73987514279e7c80160de3cfc79871bc02690f4"
},
{
"file": "assets/services-C3-fU-ch.js",
"status": 200,
"sha256": "75c042d62d3c8250b5334be1e38dd99fed88c85a04245a43a539a0c501bcbad0"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-D6KRT634.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "6eefe4b3322461b9a23166e2cd1235e3881765f4",
"release": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"previous_release": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "6eefe4b3322461b9a23166e2cd1235e3881765f4",
"release": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"previous_release": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"6eefe4b3322461b9a23166e2cd1235e3881765f4"
],
"finished_at": "2026-10-24T15:02:49.533733+00:00"
},
"log_file": "1792854081964720706.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.00s",
"OK (59 tests, 317 assertions)",
"# tests 275",
"# pass 275",
"# fail 0"
],
"log_bytes": 108361
},
"rollback_executed": false
}
}
@@ -0,0 +1,19 @@
--- a/resources/js/components/simulation-operations.tsx
+++ b/resources/js/components/simulation-operations.tsx
@@ -17,6 +17,8 @@
const change=(id:string,patch:Partial<SalesOperation>)=>run(()=>save({...book,rows:book.rows.map(r=>r.id===id?{...r,...patch}:r)}));
const continueTemporary=(id:string,target:string)=>run(()=>save({...book,rows:book.rows.map(row=>row.id===id?continueTemporaryOperation(row,target):row)}));
return <section aria-label="Operações IVA por oportunidade" className="space-y-3 rounded border p-3">
+ <p role="status">Novos cálculos temporariamente suspensos; resultados guardados e relatórios disponíveis.</p>
+ <fieldset disabled>
<h4 className="font-semibold">Operações de IVA — enquadramento das vendas</h4>
<p>Oportunidade {String(draft.context_opportunity||'entrada geral')}; moeda original {book.currency||'por indicar'}. Cobertura2026/MZN. Reutilize as vendas e complete apenas o enquadramento. Este bloco classifica as operações; não substitui nem soma novamente a execução mensal geral acima.</p>
<p>Uma empresa pode ter operações com tratamentos diferentes. Os valores são projecções sob pressupostos declarados, sem certificar facturas, reconhecer créditos ou submeter uma declaração à AT.</p>
@@ -82,6 +84,7 @@
{book.periods.map(p=><label className="block" key={p.period}><input type="checkbox" checked={p.complete} onChange={e=>run(()=>save({...book,periods:book.periods.map(v=>v.period===p.period?{...v,complete:e.target.checked}:v)}))}/> {p.period}: incluí todas as operações deste período; lista vazia significa ausência expressamente confirmada.</label>)}
<p>Limites: outras isenções/bases especiais e correspondência do campo06 permanecem por delimitar. IVA incluído a5% conserva a fracção exacta e apresenta um decimal a6casas; a aproximação de apresentação não constitui regra declarativa. O desconhecido nunca é assumido como zero.</p>
<button type="button" disabled={!book.periods.length} className="rounded bg-emerald-800 p-2 text-white disabled:opacity-50" onClick={()=>run(()=>save(recordSales(draft,book)))}>Calcular e guardar operações IVA</button>
+ </fieldset>
{book.result&&<><p role="status">{salesCurrent(draft,book)?'Resultado correspondente às entradas.':'Resultado histórico conservado; reveja as alterações antes de recalcular.'}</p><dl>{salesReportRows(draft).map(([,label,value,origin],index)=><div className="break-inside-avoid border-t py-2" key={index}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</section>;
}
@@ -0,0 +1,270 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "7b54efb0fca9aae0adf174169711cd1f452fe1fb",
"base_remote_main": "6eefe4b3322461b9a23166e2cd1235e3881765f4",
"coverage": {
"group": "G4A",
"branches": {
"P074": "export_railway_cfm",
"P075": "export_international_passengers",
"P076": "export_work_on_movables",
"P077": "export_gold_bom",
"P079": "export_packaging"
},
"scope": "2026/MZN/05;statutory conditions and explicit evidence/projection assumptions;no automatic input deduction/ATsubmission"
},
"counts_before": {
"delivered": 43,
"QA": 5,
"functional_pending": 84,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 48,
"QA": 0,
"functional_pending": 84,
"documentary": 1,
"total": 133
},
"QA": "0f0d2e56/7a58fa24;manual Tempo visual confirmation7b54efb0;3frontend+API1/36+types/build;14frozenbooks unchanged;accepted proofs reused",
"visual_provenance": "Manual Tempo;no Codex browser observation;last saved price-basis edit preserved,prior result historical;no automatic recalculation.",
"runtime_delta": [
{
"path": "resources/js/lib/iva-export-operations.ts",
"sha256_LF": "3e9927aa637db678a558beb80bf7a326afd6b010e7ab5117aacd7e82a2c52600"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "e3ae2cbecd823fc03cd019cfe721cb20ba03ed51c7d0ec2680b55570b0bc7f10"
}
],
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "6eefe4b3322461b9a23166e2cd1235e3881765f4",
"release": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"previous_release": "/var/www/investmoz-homologacao/releases/ccdecbd8d74596e729f03381d3b37ca22ce5800e-0967d766",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"release_revision": {
"commit": "6eefe4b3322461b9a23166e2cd1235e3881765f4",
"branch": "main",
"built_at": "2026-10-24T15:02:46.947668+00:00",
"manifest_sha256": "15837af27545a8691647459c00bec56b22d2e624ae9e20033d598d330d686d61"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g4a-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "a8ada17d7faf38a81ef324064ba3f64d4a65e6040a3381b81cd2109d8d7664b9",
"files_sha256": "e32d2ad5d5fc9a8a65d4010ec9d658f71d120409b5eaf31e0f2de4d4c9d5405f",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g4a_restore_20261024",
"port": 55441,
"source_dump_sha256": "a8ada17d7faf38a81ef324064ba3f64d4a65e6040a3381b81cd2109d8d7664b9",
"active_database_writes": 0
}
},
"activation": "Existing Git FF/webhook/installer;no migrations/imports/permissions/newserver fiscal rule",
"rollback": {
"patch": "docs/investmoz/simulations/l1-g3-readonly-rollback-20261024.patch",
"checked": true,
"applied": false,
"preserves": "catalogue/readers/history/reports;prior release and fresh backup retained"
},
"regulatory_followup": "Official announcement30/09/2026 inventoried separately;not treated as published decree or rule activation;documentary comparison remains specific future work",
"L1_complete": false,
"P001": "05/06only",
"statistics_AI": "deferred",
"served_commit": "b898955603eb7698ab10f4c4ab4115bffd80b7b2",
"counts_current": {
"delivered": 48,
"QA": 0,
"functional_pending": 84,
"documentary": 1,
"total": 133
},
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "b898955603eb7698ab10f4c4ab4115bffd80b7b2",
"release": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"previous_release": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 2,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "e2ee1520f58e0600f3f2ae64dee97baa"
},
"after": {
"rows": 105,
"checksum": "9f7ac1ea1ff1adf7db54e32f15d8a4f8"
}
},
"sessions": {
"before": {
"rows": 20,
"checksum": "28b47ffbc97aa8265bdf40d6658deaa0"
},
"after": {
"rows": 21,
"checksum": "b08ed52e696c3a91c4e1b889efad552a"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "b898955603eb7698ab10f4c4ab4115bffd80b7b2",
"branch": "main",
"built_at": "2026-10-24T15:20:59.537796+00:00",
"manifest_sha256": "846e0a05a6ed579d7f9978dc8db94e2e047fecc1c2dc489e55c0716eb75156a5"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"export-direct-operations/1": [
"assets/project-dossier-Rt7qSc3z.js"
],
"export_railway_cfm": [
"assets/project-dossier-Rt7qSc3z.js"
],
"export_international_passengers": [
"assets/project-dossier-Rt7qSc3z.js"
],
"export_work_on_movables": [
"assets/project-dossier-Rt7qSc3z.js"
],
"export_gold_bom": [
"assets/project-dossier-Rt7qSc3z.js"
],
"export_packaging": [
"assets/project-dossier-Rt7qSc3z.js"
]
},
"assets": [
{
"file": "assets/services-eQvgi8ww.js",
"status": 200,
"sha256": "1d94e9315eab7d2e2e00c29bf9ae3bef1eadc86faaff73c163daea40709576c0"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-document-BeYOfJX9.js",
"status": 200,
"sha256": "1f68d9c7de6aff36a051177bf11744a75411560cfe5e8af2d18e52bb4d226d70"
},
{
"file": "assets/project-dossier-Rt7qSc3z.js",
"status": 200,
"sha256": "3ad22a0458da55242ff4d3e88cc22461e5ec6c0f0aadd452936d50a999558a68"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-BEf0yjMF.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "b898955603eb7698ab10f4c4ab4115bffd80b7b2",
"release": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"previous_release": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "b898955603eb7698ab10f4c4ab4115bffd80b7b2",
"release": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"previous_release": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"b898955603eb7698ab10f4c4ab4115bffd80b7b2"
],
"finished_at": "2026-10-24T15:21:02.478696+00:00"
},
"log_file": "1792855174037587994.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.42s",
"OK (59 tests, 317 assertions)",
"# tests 278",
"# pass 278",
"# fail 0"
],
"log_bytes": 109100
},
"rollback_executed": false
}
}
@@ -0,0 +1,266 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "f946364b",
"QA_record": "0b0e002d",
"Git_preparation_head": "0b0e002d1573c3da838a8a4ea296c7a9094acef6",
"fresh_remote_main": "b898955603eb7698ab10f4c4ab4115bffd80b7b2",
"ancestry": "ancestor;normal nonforce push only after authenticated preflight and fresh backup/restore",
"coverage": {
"group": "G4B",
"branches": {
"P065": [
"international_ship_operations"
],
"P066": [
"international_aircraft_operations"
],
"P068": [
"international_ship_direct_services",
"international_aircraft_direct_services"
]
},
"branch_count": 3,
"treatment_count": 4,
"scope": "2026/MZN/05;eligible vessel/aircraft operations and direct needs services;no supplies/input deduction/ATsubmission"
},
"runtime_delta": [
{
"path": "resources/js/lib/iva-international-assets.ts",
"sha256_LF": "fa99cf40622d8a6aaea4e3078d6c9e41d26a4a2bda5898f5bd114aa4221eaa1c"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "795e07a1a9b81372c3124b037d6df9626501aafcd7224290bbac2b8ec44f6d9b"
}
],
"counts_current": {
"delivered": 51,
"QA": 0,
"functional_pending": 81,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 51,
"QA": 0,
"functional_pending": 81,
"documentary": 1,
"total": 133
},
"proofs": "3frontend/APIQA1/35/types/build;15previousbooks unchanged;manual Tempo visual0b0e002d;accepted proofs reused,no new browser verification required",
"rollback": "l1-g3-readonly-rollback-20261024.patch checked on current candidate,not applied;preserves catalogue/readers/history/reports;retain prior release and verified new backup",
"activation": "Existing Git FF/webhook/installer;no migrations/imports/permission changes/server fiscal activation",
"authenticated_destination": "Fresh read confirmed b8989556;installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore,no active restore performed",
"served_revision_and_delta": "verified",
"P001": "05/06only",
"L1_complete": false,
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "b898955603eb7698ab10f4c4ab4115bffd80b7b2",
"release": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"previous_release": "/var/www/investmoz-homologacao/releases/6eefe4b3322461b9a23166e2cd1235e3881765f4-e17c49ea",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"release_revision": {
"commit": "b898955603eb7698ab10f4c4ab4115bffd80b7b2",
"branch": "main",
"built_at": "2026-10-24T15:20:59.537796+00:00",
"manifest_sha256": "846e0a05a6ed579d7f9978dc8db94e2e047fecc1c2dc489e55c0716eb75156a5"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g4b-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "946e9ebc067932184a8db32e1d469edada1c0fd52eec5cabd97958b528bee060",
"files_sha256": "37d5efc4d7b4db3f2bb34bd69ddb8377c26e15fb35f1d95eb512e4ae7aa14962",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g4b_restore_20261024",
"port": 55441,
"source_dump_sha256": "946e9ebc067932184a8db32e1d469edada1c0fd52eec5cabd97958b528bee060",
"active_database_writes": 0
}
},
"served_commit": "a153d0782f0f1f5a553a2c6d7106bc35059a170b",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "a153d0782f0f1f5a553a2c6d7106bc35059a170b",
"release": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"previous_release": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 2,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "1d9a40d14abc8a507b9f21c53214cab3"
},
"after": {
"rows": 105,
"checksum": "4ac1b3b4c92159a6c6d5b2001b33c281"
}
},
"sessions": {
"before": {
"rows": 23,
"checksum": "3416544d03e316d171c3c5b4ef17f76d"
},
"after": {
"rows": 24,
"checksum": "5c130a5a49411a488f3dd2e04a3ebf30"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "a153d0782f0f1f5a553a2c6d7106bc35059a170b",
"branch": "main",
"built_at": "2026-10-24T15:42:16.426339+00:00",
"manifest_sha256": "ae95aa3000f8861d3a092026b04fd18dff05c7e1955f99f7660e18b945e32f15"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"international-assets/1": [
"assets/project-dossier-DTxHeV9m.js"
],
"international_ship_operations": [
"assets/project-dossier-DTxHeV9m.js"
],
"international_aircraft_operations": [
"assets/project-dossier-DTxHeV9m.js"
],
"international_ship_direct_services": [
"assets/project-dossier-DTxHeV9m.js"
],
"international_aircraft_direct_services": [
"assets/project-dossier-DTxHeV9m.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-DTxHeV9m.js",
"status": 200,
"sha256": "d1db999b1c04537d77ba5613230a9fb0e4cbc6ce06bc5346371bfbb65b98339f"
},
{
"file": "assets/services-Dy0KLLRZ.js",
"status": 200,
"sha256": "e942686d95f79fb4a5b00f670db08f3b70078aa5de1b46eb01c66e3de93149b5"
},
{
"file": "assets/project-dossier-document-DtAisp01.js",
"status": 200,
"sha256": "804ac2e496efeb7c4fc8150295ca8df2c736ec8f38469382ca658f65835fff5c"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-qEH7_IO_.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "a153d0782f0f1f5a553a2c6d7106bc35059a170b",
"release": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"previous_release": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "a153d0782f0f1f5a553a2c6d7106bc35059a170b",
"release": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"previous_release": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"a153d0782f0f1f5a553a2c6d7106bc35059a170b"
],
"finished_at": "2026-10-24T15:42:18.840229+00:00"
},
"log_file": "1792856451333116729.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.53s",
"OK (59 tests, 317 assertions)",
"# tests 281",
"# pass 281",
"# fail 0"
],
"log_bytes": 110076
},
"rollback_executed": false
}
}
@@ -0,0 +1,263 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "b1c8e0e3",
"QA_record": "2fccbc8ee8d0ff687c9d49a54cf2972546182f3a",
"fresh_remote_main": "a153d0782f0f1f5a553a2c6d7106bc35059a170b",
"coverage": {
"group": "G4C",
"branches": {
"P072": "export_customs_related_services",
"P073": "export_dispatch_services",
"P078": "export_disclosed_intermediation"
},
"branch_count": 3,
"treatment_count": 3,
"scope": "2026/MZN/05; direct customs-related services, dispatch abroad, disclosed intermediation; own service territoriality identified"
},
"runtime_delta": [
{
"path": "resources/js/components/simulation-operations.tsx",
"sha256_LF": "284cb1bac2a2c5646d9f05c0503a57c568079f75081b6cf0cff98747d8564581"
},
{
"path": "resources/js/lib/iva-export-services.ts",
"sha256_LF": "090de228fc5563de98e0c4c3e1646804b05d71a84603d6d42e63b7cebfa32301"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "8c934a9c3126fc8e6cac005bae00e081fcf8a6d184cf9370757e3aab73995ee3"
}
],
"counts_current": {
"delivered": 54,
"QA": 0,
"functional_pending": 78,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 54,
"QA": 0,
"functional_pending": 78,
"documentary": 1,
"total": 133
},
"proofs": "4frontend;APIQA1/39;16priorbooks intact/current;types/build;Tempo manual visual reply verificada;no accepted proof repeated",
"rollback": "l1-g3-readonly-rollback-20261024.patch checked on G4C candidate, not applied; retains readers/history/reports; previous release and fresh verified backup retained",
"activation": "Existing Git normal FF/webhook/installer; no migrations/imports/permission changes or formal fiscal activation",
"authenticated_preflight_file": "outputs/iva-l1-g4-services-20261024/destination-preflight.txt",
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g4c-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "41dd7cb9e858e4398e23950e9e34289014912f67ad55b9f7ae9f14f94b03584b",
"files_sha256": "58d984f98e2da29ee269a9da91085680c9e8e7e557c65fe4e963d1f871a63a54",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g4c_restore_20261024",
"port": 55441,
"source_dump_sha256": "41dd7cb9e858e4398e23950e9e34289014912f67ad55b9f7ae9f14f94b03584b",
"active_database_writes": 0
}
},
"served_revision_and_delta": "verified",
"P001": "05/06 only",
"L1_complete": false,
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "a153d0782f0f1f5a553a2c6d7106bc35059a170b",
"release": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"previous_release": "/var/www/investmoz-homologacao/releases/b898955603eb7698ab10f4c4ab4115bffd80b7b2-55ab681a",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"release_revision": {
"commit": "a153d0782f0f1f5a553a2c6d7106bc35059a170b",
"branch": "main",
"built_at": "2026-10-24T15:42:16.426339+00:00",
"manifest_sha256": "ae95aa3000f8861d3a092026b04fd18dff05c7e1955f99f7660e18b945e32f15"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"authenticated_destination": "Fresh read confirmed a153d078; installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore, no active restore performed",
"served_commit": "679203d4b13cd5b88ab05a0da539c359c37cc426",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "679203d4b13cd5b88ab05a0da539c359c37cc426",
"release": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"previous_release": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 3,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "0fb368359b09686e698bb76c130bec32"
},
"after": {
"rows": 105,
"checksum": "a1a597d8371e7a308d133b1374ddc3fa"
}
},
"sessions": {
"before": {
"rows": 26,
"checksum": "e335b7f5c76ce5d198e96a1d0736ee13"
},
"after": {
"rows": 15,
"checksum": "d8d7871c3369ade4d97c078a5d67899f"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "679203d4b13cd5b88ab05a0da539c359c37cc426",
"branch": "main",
"built_at": "2026-10-24T15:58:35.074611+00:00",
"manifest_sha256": "7b37d131d7b9564d901d8fc21407a759fcded9ba734c3757ce0fda5c00cc5c56"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"export-linked-services/1": [
"assets/project-dossier-B13GvS2h.js"
],
"export_customs_related_services": [
"assets/project-dossier-B13GvS2h.js"
],
"export_dispatch_services": [
"assets/project-dossier-B13GvS2h.js"
],
"export_disclosed_intermediation": [
"assets/project-dossier-B13GvS2h.js"
],
"relatedExport": [
"assets/project-dossier-B13GvS2h.js",
"assets/services-T9xhkEbY.js"
]
},
"assets": [
{
"file": "assets/project-dossier-document-D3wD6GVC.js",
"status": 200,
"sha256": "f785b98c98fa31f087cfe4de205ff24d888b15c0d9aa7e76a1a03c8faa1afb83"
},
{
"file": "assets/project-dossier-B13GvS2h.js",
"status": 200,
"sha256": "1746a5eed08eb3cc85c98324ae5c60cea44ef9878e9e3aa495eb2d642fe0f0fa"
},
{
"file": "assets/services-T9xhkEbY.js",
"status": 200,
"sha256": "c6ffdcf297a76cf91dda66c5ca3ec338d36d638ddf59992c0e1d245f12551286"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-CKbcQpAl.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "679203d4b13cd5b88ab05a0da539c359c37cc426",
"release": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"previous_release": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "679203d4b13cd5b88ab05a0da539c359c37cc426",
"release": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"previous_release": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"679203d4b13cd5b88ab05a0da539c359c37cc426"
],
"finished_at": "2026-10-24T15:58:37.723730+00:00"
},
"log_file": "1792857429090761953.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 24.89s",
"OK (59 tests, 317 assertions)",
"# tests 285",
"# pass 285",
"# fail 0"
],
"log_bytes": 111289
},
"rollback_executed": false
}
}
@@ -0,0 +1,273 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "8df721ac",
"QA_record": "40a4ddcb",
"fresh_remote_main": "679203d4b13cd5b88ab05a0da539c359c37cc426",
"coverage": {
"group": "G4D",
"branches": {
"P062": "onboard_seagoing_ship",
"P063": "onboard_rescue_coastal_ship",
"P064": "onboard_departing_warship",
"P067": "onboard_international_aircraft"
},
"branch_count": 4,
"treatment_count": 4,
"scope": "2026/MZN/05; direct exemption under identified conditions; explicit13(2–3) categories/exclusions; no automatic beverage liquidation/deduction/refund"
},
"runtime_delta": [
{
"path": "resources/js/components/simulation-operations.tsx",
"sha256_LF": "a67899e90f72d0b26d93b4f4c666f3f1fd0ed9bd1e47970d1a570b2fe132650c"
},
{
"path": "resources/js/lib/iva-onboard-supplies.ts",
"sha256_LF": "2ae4378998ca4d7f4759155f589b5b7c4f25090512b016211976c9a7c700bde9"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "eec82e67b2025a1d1738b9d2a41ef3ea7e1a2a17f12b145f02eebef62e4f6b26"
}
],
"counts_current": {
"delivered": 58,
"QA": 0,
"functional_pending": 74,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 58,
"QA": 0,
"functional_pending": 74,
"documentary": 1,
"total": 133
},
"proofs": "4frontend;APIQA1/38;17priorbooks intact/current;types/build;Tempo manual visual reply ja efectuada;no accepted proof repeated",
"rollback": "l1-g3-readonly-rollback-20261024.patch checked on G4D candidate, not applied; retain readers/history/reports; previous release and verified fresh backup",
"activation": "Existing Git normal FF/webhook/installer; no migrations/imports/permission changes or formal fiscal activation",
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g4d-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "f45926e56c1d9544f6ee0e50d690cfed984101307224e8282f93b9f0ec91f705",
"files_sha256": "7ed455443737ca9ef2636a58e84a1b8b9c92cb12fc964c8addf07a5cced0c5f6",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g4d_restore_20261024",
"port": 55441,
"source_dump_sha256": "f45926e56c1d9544f6ee0e50d690cfed984101307224e8282f93b9f0ec91f705",
"active_database_writes": 0
}
},
"served_revision_and_delta": "verified",
"limits": "Beverages c/h follow13(2),amounts/credit/refund not calculated;provisions excluded d;13(2)not extended e. Alternative treatment outside exemption not silently assumed. This increment does not close the complete IVA apuramento.",
"P001": "05/06 only",
"L1_complete": false,
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "679203d4b13cd5b88ab05a0da539c359c37cc426",
"release": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"previous_release": "/var/www/investmoz-homologacao/releases/a153d0782f0f1f5a553a2c6d7106bc35059a170b-789a22ef",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"release_revision": {
"commit": "679203d4b13cd5b88ab05a0da539c359c37cc426",
"branch": "main",
"built_at": "2026-10-24T15:58:35.074611+00:00",
"manifest_sha256": "7b37d131d7b9564d901d8fc21407a759fcded9ba734c3757ce0fda5c00cc5c56"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"authenticated_destination": "Fresh read confirmed679203d4;installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore;no active restore performed",
"beverages_followup": {
"source": "CIVA13(2),20(1)(d)",
"L2": "Dedução do IVA da via13(2),com montante/documento/condições próprios",
"L3": "Restituição da via13(2),conforme procedimento aplicável;pedido não equivale a deferimento",
"closed_by_G4D": false
},
"served_commit": "686328a0853a1165872b5eb8163f7223600033ea",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "686328a0853a1165872b5eb8163f7223600033ea",
"release": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"previous_release": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 3,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "de9a629fcda8ca89c2e1a4110abd00bb"
},
"after": {
"rows": 105,
"checksum": "84c52bab36d0972dfa8ef321f459c97f"
}
},
"sessions": {
"before": {
"rows": 17,
"checksum": "beb831efe057fd44c63bd504eb5d735f"
},
"after": {
"rows": 18,
"checksum": "388df19f76a7047a5d994b07b8e48c88"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "686328a0853a1165872b5eb8163f7223600033ea",
"branch": "main",
"built_at": "2026-10-24T16:09:18.914806+00:00",
"manifest_sha256": "c8a33831cec8c9c6cb0dea4a54083f2a86c1395879c4378470d2da61e4a97a60"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"onboard-supplies/1": [
"assets/project-dossier-Dr4Yp1R0.js"
],
"onboard_seagoing_ship": [
"assets/project-dossier-Dr4Yp1R0.js"
],
"onboard_rescue_coastal_ship": [
"assets/project-dossier-Dr4Yp1R0.js"
],
"onboard_departing_warship": [
"assets/project-dossier-Dr4Yp1R0.js"
],
"onboard_international_aircraft": [
"assets/project-dossier-Dr4Yp1R0.js"
],
"supplyCategory": [
"assets/project-dossier-Dr4Yp1R0.js",
"assets/services-Cckqil_k.js"
]
},
"assets": [
{
"file": "assets/project-dossier-Dr4Yp1R0.js",
"status": 200,
"sha256": "51098ef65c988ab0452035a92f9ab0a51907ef28fe94bc837dfe2409d3240052"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/services-Cckqil_k.js",
"status": 200,
"sha256": "7f51adf59981b7f7b5c393dd44d68bfcdbd22814031fb079c2626c17eb4ac834"
},
{
"file": "assets/project-dossier-document-eCa4uUtB.js",
"status": 200,
"sha256": "1cb1f92e49041f4d5a27bc82a64dc5c5d7c6e7ba8fdfc0b80f0b49d8f60be66e"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-CxtsWs-S.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "686328a0853a1165872b5eb8163f7223600033ea",
"release": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"previous_release": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "686328a0853a1165872b5eb8163f7223600033ea",
"release": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"previous_release": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"686328a0853a1165872b5eb8163f7223600033ea"
],
"finished_at": "2026-10-24T16:09:21.362571+00:00"
},
"log_file": "1792858071888964336.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 24.76s",
"OK (59 tests, 317 assertions)",
"# tests 289",
"# pass 289",
"# fail 0"
],
"log_bytes": 112499
},
"rollback_executed": false
}
}
@@ -0,0 +1,267 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "38faeac6",
"QA_record": "fae8162c",
"fresh_remote_main": "686328a0853a1165872b5eb8163f7223600033ea",
"coverage": {
"group": "G4E",
"branches": {
"P061": "export_nonresident_buyer",
"P069": "export_diplomatic_mission",
"P070": "export_international_organisation",
"P071": "export_humanitarian_organisation"
},
"branch_count": 4,
"treatment_count": 4,
"scope": "2026/MZN/05; identified export/private-use exclusions/regulation/agreement/recognition conditions or explicit projection assumptions"
},
"runtime_delta": [
{
"path": "resources/js/lib/iva-export-beneficiaries.ts",
"sha256_LF": "5eb2e1dce0257a261da0b751372865812020c0dc671324992b4e932322f72259"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "1b074ef324c9d3dba82d20cbb3860acee2cd3f7db906017f930133e6892defad"
}
],
"counts_current": {
"delivered": 62,
"QA": 0,
"functional_pending": 70,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 62,
"QA": 0,
"functional_pending": 70,
"documentary": 1,
"total": 133
},
"proofs": "3newfrontend/7withG4D;APIQA1/39;18priorbooks intact/current;types/build;Tempo manual reply ja efectuado;no accepted proof repeated",
"rollback": "l1-g3-readonly-rollback-20261024.patch checked on G4E candidate, not applied; retain readers/history/reports; previous release and fresh verified backup required",
"activation": "Existing Git normal FF/webhook/installer; no migrations/imports/permission changes or formal fiscal activation",
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g4e-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "e3383fdae174a5157063d5b94412ac93069088822891b07ebbb2ba640fe72f55",
"files_sha256": "f4c67fad0981f50424a772f8133368af0d652bccaa4fc3ca7524abda70fb94c5",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g4e_restore_20261024",
"port": 55441,
"source_dump_sha256": "e3383fdae174a5157063d5b94412ac93069088822891b07ebbb2ba640fe72f55",
"active_database_writes": 0
}
},
"served_revision_and_delta": "verified",
"limits": "No blanket exemption by recipient; no certification of agreement,recognition or export. Missing condition remains indeterminate; preserve price/currency/period/history. Beverages deduction/refund remainsL2/L3,not closed.",
"P001": "05/06 only",
"L1_complete": false,
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "686328a0853a1165872b5eb8163f7223600033ea",
"release": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"previous_release": "/var/www/investmoz-homologacao/releases/679203d4b13cd5b88ab05a0da539c359c37cc426-6ad3a32e",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"release_revision": {
"commit": "686328a0853a1165872b5eb8163f7223600033ea",
"branch": "main",
"built_at": "2026-10-24T16:09:18.914806+00:00",
"manifest_sha256": "c8a33831cec8c9c6cb0dea4a54083f2a86c1395879c4378470d2da61e4a97a60"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"authenticated_destination": "Fresh read confirmed686328a0;installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore;no active restore performed",
"beverages_followup": {
"source": "CIVA13(2),20(1)(d)",
"L2": "Dedução do IVA da via13(2),com montante/documento/condições próprios",
"L3": "Restituição da via13(2),conforme procedimento aplicável;pedido não equivale a deferimento",
"closed_by_G4E": false
},
"served_commit": "2e21ca45002b76adcef0347135783c706d37dd42",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "2e21ca45002b76adcef0347135783c706d37dd42",
"release": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"previous_release": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 2,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "33780b9b4fbaaf7e714478b72e2c30bb"
},
"after": {
"rows": 105,
"checksum": "59a75fda1325bd5a60ce3b26253a2a38"
}
},
"sessions": {
"before": {
"rows": 20,
"checksum": "c48fe23dffea4c1539854f351436ee68"
},
"after": {
"rows": 21,
"checksum": "b009a6a82a84f902064f25f5a6604253"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "2e21ca45002b76adcef0347135783c706d37dd42",
"branch": "main",
"built_at": "2026-10-24T16:27:47.396813+00:00",
"manifest_sha256": "9b28c92c584ad406e17d01ffc3fa982b9299195b371e1c5311626b9025a22615"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"export-beneficiaries/1": [
"assets/project-dossier-C3cf2J1H.js"
],
"export_nonresident_buyer": [
"assets/project-dossier-C3cf2J1H.js"
],
"export_diplomatic_mission": [
"assets/project-dossier-C3cf2J1H.js"
],
"export_international_organisation": [
"assets/project-dossier-C3cf2J1H.js"
],
"export_humanitarian_organisation": [
"assets/project-dossier-C3cf2J1H.js"
]
},
"assets": [
{
"file": "assets/project-dossier-document-CtNVSk-9.js",
"status": 200,
"sha256": "124730663c671afeeab8007eff2148d17702bf80b8fd0a7c962806878a8fafce"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/services-DK55Gu8i.js",
"status": 200,
"sha256": "d96320fdc19fec053fe17efc2eb19e055463c5e5727a9c9b2dafabcd8f106519"
},
{
"file": "assets/project-dossier-C3cf2J1H.js",
"status": 200,
"sha256": "c88e6e9641f9c8eeacece38fbeffd547f86fb603b60899db915576b5faaa74ed"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-Bb2v1uvn.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "2e21ca45002b76adcef0347135783c706d37dd42",
"release": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"previous_release": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "2e21ca45002b76adcef0347135783c706d37dd42",
"release": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"previous_release": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"2e21ca45002b76adcef0347135783c706d37dd42"
],
"finished_at": "2026-10-24T16:27:50.225953+00:00"
},
"log_file": "1792859179948208531.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 24.64s",
"OK (59 tests, 317 assertions)",
"# tests 292",
"# pass 292",
"# fail 0"
],
"log_bytes": 113481
},
"rollback_executed": false
},
"authentication_previous_session": "Previous session state stale: no session process or established SSH connection; preflight request not consumed; fresh authentication required",
"authentication": "Fresh authenticated preflight and verified backup/restore completed before Git fast-forward"
}
@@ -0,0 +1,333 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "1f7fc13872bd706f583a6f4d29024cd3c22ec265",
"base": "0eb2c485",
"last_known_remote_main": "2e21ca45002b76adcef0347135783c706d37dd42",
"fresh_destination_preflight": "Verified authenticated installed/current-link/build revision2e21ca45;installer inactive;existing authenticated session reused",
"coverage": {
"group": "G5A",
"branches": {
"AUD-SIM-L1-P081": [
"regime_dispatch_goods",
"regime_dispatch_transport"
],
"AUD-SIM-L1-P082": [
"regime_internal_goods",
"regime_internal_services"
],
"AUD-SIM-L1-P083": [
"regime_transit_goods",
"regime_transit_transport"
]
},
"branch_count": 3,
"treatment_count": 6,
"scope": "2026/MZN;CIVA14(1)(b/c/d),19(1)(b)(iv)"
},
"runtime_delta": [
{
"path": "resources/js/components/simulation-operations.tsx",
"sha256_LF": "ef1019201ef546aee7dbd312741ec9653afdd3bb9c94777ea4735682506b6633"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "e9d2b0d7ed97ef9034f151b88e819e895666048f1d362a81d88855bad8e44f82"
},
{
"path": "resources/js/lib/iva-special-regimes.ts",
"sha256_LF": "76098c658dcaf7bb09c68664001fdd5a2a6e9e2c401d0dd0d1cdca8ae710f4ab"
}
],
"counts_current": {
"delivered": 65,
"QA": 0,
"functional_pending": 67,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 65,
"QA": 0,
"functional_pending": 67,
"documentary": 1,
"total": 133
},
"proofs_reused": {
"frontend_new": 4,
"API_tests": 1,
"API_assertions": 44,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed; existing plugin timing warnings",
"QA_build": "passed; existing future config/chunk size warnings",
"QA_storage": "save/recover/reject passed in temporary directory",
"UI": {
"actor": "Codex",
"method": "Edge extension/CUA observed actions",
"URL": "http://127.0.0.1:18640/g5a.html",
"observed": [
"six distinct treatments initially visible",
"no-final-use condition unchecked -> indeterminate; price100MZN retained",
"unknown regime -> indeterminate; price/currency/period retained",
"restore regime and explicitly recheck conditions ->600MZN/05",
"Guardar -> Recuperar -> Relatório with context/regime/source and totals",
"three previous results in history;19priorbooks unchanged"
],
"manual_Tempo_reply": null,
"screenshot": "outputs/iva-l1-g5-regimes-20261024/qa-recovered-report.png",
"screenshot_sha256": "ec68a1287ade198f34544fed0e5b1f49a6c15c2e6855fcaf13dc34ceb45c8772"
},
"Word_PDF": "accepted exporter/numeric proofs reused; no new pagination claim"
},
"rollback": "l1-g3-readonly-rollback-20261024.patch checked on G5A candidate,not applied;readers/history/reports retained;fresh backup and previous release must be preserved",
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g5a-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "4568a12444365980c0265429521f7e13df67a03c116103ec18163f8c2feaa9de",
"files_sha256": "2016c081b509c976eda3d809b4481147501468295bcb51f586ea989560ba7c59",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g5a_restore_20261024",
"port": 55441,
"source_dump_sha256": "4568a12444365980c0265429521f7e13df67a03c116103ec18163f8c2feaa9de",
"active_database_writes": 0
}
},
"activation": "Existing Git FF/webhook/installer when delivery is undertaken; no migrations/imports/permission changes or synthetic active tests",
"served_revision_and_delta": "verified",
"limits": "2026/MZN; condição inicial14(1),regime/destino/permanência e ligação directa próprios; preço distinto dos bens/serviços. Sem isenção pelo mapa, certificação de regime, cálculo da própria importação/saída, aquisições14(2),dedução automática ou submissãoAT. P080/P084/P085/P086 continuam pendentes. L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"L1_complete": false,
"P001": "05/06 only",
"beverages": "L2/L3;not closed",
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "2e21ca45002b76adcef0347135783c706d37dd42",
"release": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"previous_release": "/var/www/investmoz-homologacao/releases/686328a0853a1165872b5eb8163f7223600033ea-81b13983",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"release_revision": {
"commit": "2e21ca45002b76adcef0347135783c706d37dd42",
"branch": "main",
"built_at": "2026-10-24T16:27:47.396813+00:00",
"manifest_sha256": "9b28c92c584ad406e17d01ffc3fa982b9299195b371e1c5311626b9025a22615"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"authenticated_destination": "Fresh read confirmed2e21ca45;installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore;no active restore performed",
"user_instruction": {
"QA_acceptance": "G5A concluído em QA segundo o relatório4e97cd05;seis tratamentos correspondem aos três ramosP081–P083",
"delivery": "Integrar e disponibilizar pelo processoGit existente,preservando alterações concorrentes e conferindo apenas o delta instalado",
"proofs": "Accepted QA proofs reused;no new functional/manual proof requested",
"constraints": "L1open;P00105/06;beveragesL2/L3;StatisticsAIdeferred"
},
"concurrency": {
"fresh_origin_main": "2e21ca45002b76adcef0347135783c706d37dd42",
"fresh_authenticated_destination": "2e21ca45002b76adcef0347135783c706d37dd42",
"incoming_changes_since_G4E": [],
"preserved_local_commits": [
"0eb2c485cc13e0ecbc6fa448c95425a8ab8f05b4",
"1f7fc13872bd706f583a6f4d29024cd3c22ec265",
"4e97cd05ea09e5dd2e74ec3264928a2f1f61858c"
],
"integration": "Normal Git fast-forward,without force;fetch/ancestor guard repeated immediately before push"
},
"beverages_followup": {
"source": "CIVA13(2),20(1)(d)",
"L2": "Dedução do IVA da via13(2),com montante/documento/condições próprios",
"L3": "Restituição da via13(2),conforme procedimento aplicável;pedido não equivale a deferimento",
"closed_by_G5A": false
},
"served_commit": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"release": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"previous_release": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 3,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "b321ab0f6a8b1ad7ee62098fe598b883"
},
"after": {
"rows": 105,
"checksum": "07a8420630022d972c4c19da59066638"
}
},
"sessions": {
"before": {
"rows": 23,
"checksum": "9573b216049fc4693f4412b041d19015"
},
"after": {
"rows": 24,
"checksum": "9c73aba197fb8ed0448008979941a338"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"branch": "main",
"built_at": "2026-10-24T16:48:42.080060+00:00",
"manifest_sha256": "84ea021139c585e0c7e7f8ab6933cd1775cd08173d3d0cdfeffad0b5bef46801"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"special-regimes/1": [
"assets/project-dossier-D8_51R3_.js"
],
"regime_dispatch_goods": [
"assets/project-dossier-D8_51R3_.js"
],
"regime_dispatch_transport": [
"assets/project-dossier-D8_51R3_.js"
],
"regime_internal_goods": [
"assets/project-dossier-D8_51R3_.js"
],
"regime_internal_services": [
"assets/project-dossier-D8_51R3_.js"
],
"regime_transit_goods": [
"assets/project-dossier-D8_51R3_.js"
],
"regime_transit_transport": [
"assets/project-dossier-D8_51R3_.js"
],
"specialRegime": [
"assets/project-dossier-D8_51R3_.js",
"assets/services-BJM_v6Xn.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-D8_51R3_.js",
"status": 200,
"sha256": "71399dba8be4dc38ca0c4fd25742f4ef9281567e1c04f9883a0adb139dbade4c"
},
{
"file": "assets/services-BJM_v6Xn.js",
"status": 200,
"sha256": "6f728b31519a274de615675ae7197d1feb81c5a3e25f75668a2b2aabaf003edd"
},
{
"file": "assets/project-dossier-document-CNrdEqtj.js",
"status": 200,
"sha256": "26ea47eda13fc768227a6221afa225c2d8cc714f8cc769cfd5e430d37faa6274"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-zFlqblFZ.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"release": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"previous_release": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"release": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"previous_release": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75"
],
"finished_at": "2026-10-24T16:48:44.469191+00:00"
},
"log_file": "1792860435237937385.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.27s",
"OK (59 tests, 317 assertions)",
"# tests 296",
"# pass 296",
"# fail 0"
],
"log_bytes": 114589
},
"rollback_executed": false
}
}
@@ -0,0 +1,302 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "689a4c93c33cd737c6fc90823533b34b5219b5d3",
"base": "d3e9f373",
"last_known_remote_main": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"fresh_destination_preflight": "completed authenticated69f2e365 before installation;see authenticated_preflight",
"coverage": {
"group": "G5B",
"branches": {
"AUD-SIM-L1-P086": "former_exploration_exemption -> explicit normal acquisition continuation"
},
"branch_count": 1,
"scope": "2026/MZN;nonapplication of eliminated14(2)(c) and explicit normal-acquisition continuity;not an active exemption"
},
"runtime_delta": [
{
"path": "resources/js/components/simulation-acquisitions.tsx",
"sha256_LF": "7c4e0a960c361c1fe67e9cb05e249f07ee5710d2dfefa69859e163a9f23118c6"
},
{
"path": "resources/js/lib/iva-acquisition-continuity.ts",
"sha256_LF": "2c40643c8f5ceb79b01fb4cb56d1955beb8bbd1c8a2a0cd080647bbc3db24e74"
},
{
"path": "resources/js/lib/iva-acquisitions.ts",
"sha256_LF": "364661218cdf7769a57b030006818c506a7296057e87333f2d7a1f673ac1a91c"
}
],
"counts_current": {
"delivered": 66,
"QA": 0,
"functional_pending": 66,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 66,
"QA": 0,
"functional_pending": 66,
"documentary": 1,
"total": 133
},
"proofs_reused": {
"frontend_new": 4,
"existing_changed_acquisition_suite": 8,
"frontend_total": 12,
"latest_delta": 4,
"API_tests": 1,
"API_assertions": 45,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin timing warnings",
"QA_build": "passed;existing config/chunk warnings",
"QA_storage": "save/recover/reject passed in temporary directory",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18641/g5b.html",
"observed": [
"former14(2)(c) selected -> eliminated notice;deduction indeterminate,100/16/116MZN retained",
"normal deduction controls hidden while nonapplicable",
"explicit continue ->normal controls/facts restored;calculate ->16MZN field10 under normal declared conditions",
"Guardar -> Recuperar -> Relatório with document,source,period/context;17/18 remain indeterminate",
"three results in history and20salesbooks unchanged in saved file"
],
"manual_Tempo_reply": null,
"screenshot": "outputs/iva-l1-g5b-acquisitions-20261024/qa-recovered-report.png",
"screenshot_sha256": "e29df1a8daf66f43ab7aaab9f78f472cf331272860aaac0edcde6ff40fd3a9d5"
},
"Word_PDF": "Existing exporter/numeric proofs reused;no new pagination claim"
},
"rollback": "l1-g3-readonly-rollback-20261024.patch checked on G5B candidate,not applied;readers/history/reports retained;fresh backup and previous release must be preserved",
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g5b-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "d6c09b69fc18aba716554ca4aedded870c861c01c4997a4d29bc5e0f0b5380fe",
"files_sha256": "bd05d701fce9f8c150315791d196289db6036352cfd79341766c7fab031a7501",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g5b_restore_20261024",
"port": 55441,
"source_dump_sha256": "d6c09b69fc18aba716554ca4aedded870c861c01c4997a4d29bc5e0f0b5380fe",
"active_database_writes": 0
}
},
"activation": "Git FF/webhook/installer completed;zero migrations/imports",
"served_revision_and_delta": "verified",
"limits": "2026/MZN;P086 é não aplicação da antiga14(2)(c),eliminada pelo Aviso2017,e continuidade deliberada na aquisição normal; não é isenção nova/activa nem cálculo retroactivo. Sem taxa presumida,dedução automática,importação,apuramento integral ou submissãoAT. P080/P084/P085 pendentes. L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"L1_complete": false,
"P001": "05/06 only",
"beverages": "L2/L3;not closed",
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"release": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"previous_release": "/var/www/investmoz-homologacao/releases/2e21ca45002b76adcef0347135783c706d37dd42-a5faea22",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"release_revision": {
"commit": "69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75",
"branch": "main",
"built_at": "2026-10-24T16:48:42.080060+00:00",
"manifest_sha256": "84ea021139c585e0c7e7f8ab6933cd1775cd08173d3d0cdfeffad0b5bef46801"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"authenticated_destination": "Fresh read confirmed69f2e365;installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore;no active restore performed",
"beverages_followup": {
"source": "CIVA13(2),20(1)(d)",
"L2": "Dedução do IVA da via13(2),com montante/documento/condições próprios",
"L3": "Restituição da via13(2),conforme procedimento aplicável;pedido não equivale a deferimento",
"closed_by_G5B": false
},
"treatment": "Disposição eliminada e encaminhamento para o regime aplicável; não é isenção disponível",
"rectification_reference": "Aviso da Assembleia da República, BR n.º89, I Série,08/06/2017,PDF1/p.569: c) eliminado",
"served_commit": "6f056359df4231f9e1802922782b21263a8dae0b",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "6f056359df4231f9e1802922782b21263a8dae0b",
"release": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"previous_release": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 3,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "674479c6ce0897731d51e4ad2409f060"
},
"after": {
"rows": 105,
"checksum": "e278d0e2e0e8561bb0b474d138226a35"
}
},
"sessions": {
"before": {
"rows": 26,
"checksum": "c7dfaaba275b5b5758caa2aad1136c72"
},
"after": {
"rows": 27,
"checksum": "d0f71dec810ed1bb8a7112773d53bf34"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "6f056359df4231f9e1802922782b21263a8dae0b",
"branch": "main",
"built_at": "2026-10-24T17:10:20.021314+00:00",
"manifest_sha256": "0e2ee85ab107f34efcc9c589328a0635d2d6021ba28ee387e02b0654aeab85db"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"acquisition-continuity/1": [
"assets/project-dossier-weQkfpPV.js"
],
"former_exploration_exemption": [
"assets/services-DjZF4TLj.js",
"assets/project-dossier-weQkfpPV.js"
],
"acquisitionTreatment": [
"assets/services-DjZF4TLj.js",
"assets/project-dossier-weQkfpPV.js"
],
"acquisitionTreatmentOrigin": [
"assets/services-DjZF4TLj.js",
"assets/project-dossier-weQkfpPV.js"
],
"c) eliminado": [
"assets/services-DjZF4TLj.js",
"assets/project-dossier-weQkfpPV.js"
]
},
"assets": [
{
"file": "assets/project-dossier-document-DjMS3OYA.js",
"status": 200,
"sha256": "b50a5e08e323454b8c651baba303a86634620580bc103952d27ea21ff651d431"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/services-DjZF4TLj.js",
"status": 200,
"sha256": "f45efdeb6764272a00ec2ead6f1052ab77b199f3af2d6ade54c6dbeea413fc35"
},
{
"file": "assets/project-dossier-weQkfpPV.js",
"status": 200,
"sha256": "8ded1cc5a561a72cb1003097ece6edfe28760b9677eec09bb461390334260b31"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-DABOgBTI.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "6f056359df4231f9e1802922782b21263a8dae0b",
"release": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"previous_release": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "6f056359df4231f9e1802922782b21263a8dae0b",
"release": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"previous_release": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"6f056359df4231f9e1802922782b21263a8dae0b"
],
"finished_at": "2026-10-24T17:10:22.445560+00:00"
},
"log_file": "1792861731226475463.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.29s",
"OK (59 tests, 317 assertions)",
"# tests 300",
"# pass 300",
"# fail 0"
],
"log_bytes": 115761
},
"rollback_executed": false
}
}
@@ -0,0 +1,297 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "965da2642627ad1e484d52587e07b4a60cae6af2",
"base": "e99ea1d0",
"last_known_remote_main": "6f056359",
"coverage": {
"AUD-SIM-L1-P049": "reimport_same_state",
"AUD-SIM-L1-P051": "central_bank_gold"
},
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "43d823a594c5ea98801b69597fbd660effd90596709dec3a84787b7b11eef1c8"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "20f35daf9573e9ff0813ee7b0e3f4ad19eb0d47eabb0d661af845a915e76340e"
},
{
"path": "resources/js/components/simulation-monthly-iva.tsx",
"sha256_LF": "a41275ce37268345d137745572c858ff3c989e392af337235f6b8b5e7dc38b86"
},
{
"path": "resources/js/lib/project-dossier.ts",
"sha256_LF": "ac75a0e24fdf31d17a90b3c9ecec338d6f0e309bd302d1254da04c2eacc493b3"
}
],
"counts_current": {
"delivered": 68,
"QA": 0,
"functional_pending": 64,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 68,
"QA": 0,
"functional_pending": 64,
"documentary": 1,
"total": 133
},
"proofs_reused": {
"frontend_new": 5,
"affected_report_tests": 14,
"frontend_total": 19,
"API_tests": 1,
"API_assertions": 20,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin warnings",
"QA_build": "passed;existing chunk warning",
"QA_storage": "save/recover/reject passed,temporary file only",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18642/g6a.html",
"observed": [
"unknown condition ->indeterminate",
"failed condition ->nonapplication,normal tax unknown",
"affirmative conditions ->exempt import VAT0.00",
"switch treatment ->only applicable questions;answers,document,1000MZN retained",
"save/recover/report ->P049/P051,Manica,2026-12,documents,sources",
"three previous UI results;20salesbooks and1purchasebook identical"
],
"manual_Tempo_reply": null,
"screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6a-imports-20261024\\qa-recovered-report.png",
"screenshot_sha256": "e6914778f6513e2ea22850d1b30a79ff3592e0c8085cb09c38f1ffb23541cf9c"
},
"Word_PDF": "Existing exporter proofs reused;no new pagination claim"
},
"rollback": "l1-g6a-readonly-rollback-20261024.patch checked;not applied",
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g6a-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "93d9e16845af367cab80ee4d646cc679b9668495c822d26ed6157caeb74da3fb",
"files_sha256": "928f06a3795206702dbdc3ebd3ef76f9e345a199c1ec81f5abfa97a40154ba58",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g6a_restore_20261024",
"port": 55441,
"source_dump_sha256": "93d9e16845af367cab80ee4d646cc679b9668495c822d26ed6157caeb74da3fb",
"active_database_writes": 0
}
},
"activation": "Git FF/webhook/installer completed;zero migrations/imports",
"served_revision_and_delta": "verified",
"limits": "2026/MZN;classificação L1 de12(1)(d/f),sem direitosaduaneirosL13,dedução/campo11L2,baseaduaneira,taxa normal presumida,apuramento integral ou submissãoAT. P080/P084/P085 explicitamente abertos;L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"L1_complete": false,
"P001": "05/06 only",
"beverages": "L2/L3;not closed",
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "6f056359df4231f9e1802922782b21263a8dae0b",
"release": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"previous_release": "/var/www/investmoz-homologacao/releases/69f2e365bf4ebd509ec2e080dd0bf1b7717d7a75-ac55d458",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"release_revision": {
"commit": "6f056359df4231f9e1802922782b21263a8dae0b",
"branch": "main",
"built_at": "2026-10-24T17:10:20.021314+00:00",
"manifest_sha256": "0e2ee85ab107f34efcc9c589328a0635d2d6021ba28ee387e02b0654aeab85db"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"authenticated_destination": "Fresh read confirmed6f056359;installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore;no active restore performed",
"beverages_followup": {
"source": "CIVA13(2),20(1)(d)",
"L2": "Dedução do IVA da via13(2),com montante/documento/condições próprios",
"L3": "Restituição da via13(2),conforme procedimento aplicável;pedido não equivale a deferimento",
"closed_by_G6A": false
},
"fresh_destination_preflight": "completed authenticated6f056359 before installation;see authenticated_preflight",
"treatment": "P049/reimport_same_state,12(1)(d);P051/central_bank_gold,12(1)(f);classificação IVA na importação,sem direitosaduaneiros nem dedução/campo11",
"served_commit": "e3601c124d50fa2b52ea9d9fb86fbddf1d224d51",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "e3601c124d50fa2b52ea9d9fb86fbddf1d224d51",
"release": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"previous_release": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 4,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "3cef2e5d47d357e3a831ee9fc1f332d0"
},
"after": {
"rows": 105,
"checksum": "fa38aab45da6527192848bea480f8014"
}
},
"sessions": {
"before": {
"rows": 29,
"checksum": "f7d4d8e560b9e7fcf35d15bbf457f195"
},
"after": {
"rows": 30,
"checksum": "162782d2ac82e4deaacf4d79561ea513"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "e3601c124d50fa2b52ea9d9fb86fbddf1d224d51",
"branch": "main",
"built_at": "2026-10-24T17:23:49.644454+00:00",
"manifest_sha256": "4972fe7be0ab6293c73e2d731084a6986079044fea4548e07d9537d4d3ca20f7"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"import-exemptions/1": [
"assets/project-dossier-JEkKEtTe.js"
],
"reimport_same_state": [
"assets/project-dossier-JEkKEtTe.js"
],
"central_bank_gold": [
"assets/project-dossier-JEkKEtTe.js"
],
"importExemptions": [
"assets/project-dossier-JEkKEtTe.js"
],
"12(1)(d/f)": [
"assets/project-dossier-JEkKEtTe.js"
]
},
"assets": [
{
"file": "assets/services-BXU5lh3t.js",
"status": 200,
"sha256": "e0cf2f3f2f1c1c6d440729cfd6cd7a4bb830b20ed1121860d67862436765d2fd"
},
{
"file": "assets/project-dossier-JEkKEtTe.js",
"status": 200,
"sha256": "adf02748a797af916d4fa0c9c1f60b8710a90550937f541785b98fe33d1fff6c"
},
{
"file": "assets/project-dossier-document-3_HjfTXa.js",
"status": 200,
"sha256": "21a61a7ac141d65b7f3f74fd515371a3f1f25d76c896901f52ecb1f9a820555e"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-qm4e17dP.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "e3601c124d50fa2b52ea9d9fb86fbddf1d224d51",
"release": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"previous_release": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "e3601c124d50fa2b52ea9d9fb86fbddf1d224d51",
"release": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"previous_release": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"e3601c124d50fa2b52ea9d9fb86fbddf1d224d51"
],
"finished_at": "2026-10-24T17:23:52.274448+00:00"
},
"log_file": "1792862542167178181.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 24.86s",
"OK (59 tests, 317 assertions)",
"# tests 305",
"# pass 305",
"# fail 0"
],
"log_bytes": 117310
},
"rollback_executed": false
}
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -48,6 +48,7 @@
function key(draft:Record<string,unknown>,book:ImportExemptionBook):string {return JSON.stringify({version:importExemptionVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ throw new Error('Novas classificacoes de importacao temporariamente suspensas; resultados guardados e relatorios disponiveis.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:importExemptionSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,292 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "f75f36f0e36a5d9981f631b6e22f3c9e723ee454",
"base": "a23f1dcb",
"last_known_remote_main": "e3601c12",
"coverage": {
"AUD-SIM-L1-P055": "author_art_import",
"AUD-SIM-L1-P057": "fire_brigade_vehicle"
},
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "af818d49abb78aaa5f271c686c74c5394472317c7a3ab5c23e9ea64b1b7d440c"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "c78e55c1ca71d9d17bea0992d627264f4b96d5526e8db20339e6fa3419712eeb"
}
],
"counts_current": {
"delivered": 70,
"QA": 0,
"functional_pending": 62,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 70,
"QA": 0,
"functional_pending": 62,
"documentary": 1,
"total": 133
},
"proofs_reused": {
"frontend_new": 4,
"existing_import_suite": 5,
"frontend_total": 9,
"API_tests": 1,
"API_assertions": 23,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin warnings",
"QA_build": "passed;existing chunk warning",
"QA_storage": "save/recover/reject and UTF8 split-multibyte boundary passed;Buffer concatenation before decoding;temporary file only",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18643/g6b.html",
"observed": [
"unknown condition ->indeterminate",
"failed condition ->nonapplication,normal tax unknown",
"affirmative conditions ->exempt import VAT0.00",
"switch treatment ->only applicable questions;answers,document,2500MZN retained",
"save/recover/report ->P055/P057,Manica,2026-12,documents,sources",
"four previous UI results;20salesbooks,1purchase and1importbook identical"
],
"manual_Tempo_reply": null,
"screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6b-imports-20261024\\qa-recovered-report.png",
"screenshot_sha256": "7f6ef7c5a3ee5aca026ad29279510b2ab9fa63d76d13b878007a5c58f4163a7e"
},
"Word_PDF": "Existing exporter proofs reused;no new pagination claim"
},
"rollback": "l1-g6b-readonly-rollback-20261024.patch checked;not applied",
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g6b-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "acfe60e926890eb240e3233cee37653bd207148ac7f554458a5845c690287897",
"files_sha256": "9b10a08af9f91965166c311b331a3c068af4fc737088ab529846f0a00a3231fb",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g6b_restore_20261024",
"port": 55441,
"source_dump_sha256": "acfe60e926890eb240e3233cee37653bd207148ac7f554458a5845c690287897",
"active_database_writes": 0
}
},
"activation": "Git FF/webhook/installer completed;zero migrations/imports",
"served_revision_and_delta": "verified",
"limits": "2026/MZN;classificação L1 de12(1)(j/l),sem direitosaduaneirosL13,dedução/campo11L2,baseaduaneira,taxa normal presumida,apuramento integral ou submissãoAT. P080/P084/P085 explicitamente abertos;L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"L1_complete": false,
"P001": "05/06 only",
"beverages": "L2/L3;not closed",
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "e3601c124d50fa2b52ea9d9fb86fbddf1d224d51",
"release": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"previous_release": "/var/www/investmoz-homologacao/releases/6f056359df4231f9e1802922782b21263a8dae0b-5bf30d7b",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"release_revision": {
"commit": "e3601c124d50fa2b52ea9d9fb86fbddf1d224d51",
"branch": "main",
"built_at": "2026-10-24T17:23:49.644454+00:00",
"manifest_sha256": "4972fe7be0ab6293c73e2d731084a6986079044fea4548e07d9537d4d3ca20f7"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"authenticated_destination": "Fresh read confirmede3601c12;installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore;no active restore performed",
"beverages_followup": {
"source": "CIVA13(2),20(1)(d)",
"L2": "Dedução do IVA da via13(2),com montante/documento/condições próprios",
"L3": "Restituição da via13(2),conforme procedimento aplicável;pedido não equivale a deferimento",
"closed_by_G6B": false
},
"fresh_destination_preflight": "completed authenticatede3601c12 before installation;see authenticated_preflight",
"treatment": "P055/author_art_import,12(1)(j);P057/fire_brigade_vehicle,12(1)(l);classificação IVA na importação,sem direitosaduaneiros nem dedução/campo11",
"served_commit": "4cebd617651ca877bd4715c661973873e69f05e1",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "4cebd617651ca877bd4715c661973873e69f05e1",
"release": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"previous_release": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 2,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "f2fce5ce32819b6c221a5104ee3f5608"
},
"after": {
"rows": 105,
"checksum": "26f89504af67b9996eef7792a6ccb0a3"
}
},
"sessions": {
"before": {
"rows": 32,
"checksum": "54b7fbc8bc6f9c17aff50ad13a817c34"
},
"after": {
"rows": 33,
"checksum": "0280882f0accf2401359095570a1e734"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "4cebd617651ca877bd4715c661973873e69f05e1",
"branch": "main",
"built_at": "2026-10-24T17:36:44.073710+00:00",
"manifest_sha256": "820184910bf076609ce3c05dcc4995d0543ff5cbc672ca2fc3c73e856fdc1c97"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"import-beneficiaries/1": [
"assets/project-dossier-tRE-vqtC.js"
],
"author_art_import": [
"assets/project-dossier-tRE-vqtC.js"
],
"fire_brigade_vehicle": [
"assets/project-dossier-tRE-vqtC.js"
],
"eligibleArtImporter": [
"assets/project-dossier-tRE-vqtC.js"
],
"exclusiveOwnUse": [
"assets/project-dossier-tRE-vqtC.js"
],
"12(1)(j/l)": [
"assets/project-dossier-tRE-vqtC.js"
]
},
"assets": [
{
"file": "assets/project-dossier-tRE-vqtC.js",
"status": 200,
"sha256": "1b2cc3687cb342676eb3e8bfa940863b3a2173dac95b8df47653f1b17d171a5c"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-document-CSZUuL22.js",
"status": 200,
"sha256": "ab39b32a9ef8cb4f8af02490ede1c1cab3c119d11fe699ad2f3fe4ccd0d5b54d"
},
{
"file": "assets/services-D5YnZvXr.js",
"status": 200,
"sha256": "a2257e2880d5e380e04bdfe1fd59bcb0e0a86946380340f898ed87e5840e35b0"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-6hf5mUzo.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "4cebd617651ca877bd4715c661973873e69f05e1",
"release": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"previous_release": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "4cebd617651ca877bd4715c661973873e69f05e1",
"release": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"previous_release": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"4cebd617651ca877bd4715c661973873e69f05e1"
],
"finished_at": "2026-10-24T17:36:46.889389+00:00"
},
"log_file": "1792863315560969954.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 24.99s",
"OK (59 tests, 317 assertions)",
"# tests 309",
"# pass 309",
"# fail 0"
],
"log_bytes": 118487
},
"rollback_executed": false
}
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -57,6 +57,7 @@
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ throw new Error('Novas classificacoes de importacao temporariamente suspensas; resultados guardados e relatorios disponiveis.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,310 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "8e5565d5e0501ecd2a40ae684f4948b867308c54",
"base": "72e56f7a",
"last_known_remote_main": "4cebd617",
"coverage": {
"AUD-SIM-L1-P053": [
"eligible_ship_import",
"ship_operation_object_import"
],
"AUD-SIM-L1-P054": [
"eligible_aircraft_import",
"aircraft_operation_object_import"
]
},
"branch_count": 2,
"treatment_count": 4,
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "6f35a4ee2e8a6a53e0d8313913914903ae48a5c685412a6df4aa44fe2d3ed2a6"
},
{
"path": "resources/js/lib/iva-international-assets.ts",
"sha256_LF": "b434f014e9165c44d4d1498f804f85dd5eaa7fc31409faebefd2267ba7a1a371"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "d53931a3e30551ddac31f81de78220de2a5e269c71c213ca43d375e8e7fc3551"
}
],
"counts_current": {
"delivered": 72,
"QA": 0,
"functional_pending": 60,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 72,
"QA": 0,
"functional_pending": 60,
"documentary": 1,
"total": 133
},
"proofs_reused": {
"frontend_new": 4,
"existing_import_suites": 9,
"frontend_total": 13,
"API_tests": 1,
"API_assertions": 24,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin timing warnings",
"QA_build": "passed;existing chunk warning",
"QA_storage": "save/recover/reject and split-multibyte UTF8 boundary passed;inherited Buffer concatenation preserved",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18644/g6c.html",
"observed": [
"four treatments mapped to two IDs",
"object link unknown ->indeterminate;negative ->nonapplication;affirmative ->exempt0.00",
"switch object to principal aircraft ->own condition unknown,object response retained;return ->response restored",
"4000MZN/document/2026-12 conserved",
"save/recover/report ->P053/P054/four treatments,Manica,opportunity332,source12h/i and13f/g",
"four previous new-book UI results;all23acceptedbooks identical"
],
"manual_Tempo_reply": null,
"screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6c-imports-20261024\\qa-recovered-report.png",
"screenshot_sha256": "d09a98c6a6c73a526c8803358eef6448cdc634a8a430c6ab8fe691ecdbd32bf4"
},
"Word_PDF": "Existing exporter proofs reused;no new pagination claim"
},
"rollback": "l1-g6c-readonly-rollback-20261024.patch checked;not applied",
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g6c-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "c036d0f4c188fcd1392c1ee0140fd1d41239151bab116647e3ed71e2ba6a50ea",
"files_sha256": "3d13cca301ab91abf29848b522a19316dea284bc5d9e41ae8b88971866401ac7",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g6c_restore_20261024",
"port": 55441,
"source_dump_sha256": "c036d0f4c188fcd1392c1ee0140fd1d41239151bab116647e3ed71e2ba6a50ea",
"active_database_writes": 0
}
},
"activation": "Git FF/webhook/installer completed;zero migrations/imports",
"served_revision_and_delta": "verified",
"limits": "2026/MZN;classificação12(1)(h/i),bem principal ou objecto da exploração identificado,sem baseaduaneira,direitosL13,dedução/campo11L2,taxa normal presumida,apuramento integral ou submissãoAT. Não encerraP052/abastecimentos. P080/P084/P085 explicitamente abertos;L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"L1_complete": false,
"P001": "05/06 only",
"beverages": "L2/L3;not closed",
"statistics_AI": "deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "4cebd617651ca877bd4715c661973873e69f05e1",
"release": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"previous_release": "/var/www/investmoz-homologacao/releases/e3601c124d50fa2b52ea9d9fb86fbddf1d224d51-b40b5ef1",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"release_revision": {
"commit": "4cebd617651ca877bd4715c661973873e69f05e1",
"branch": "main",
"built_at": "2026-10-24T17:36:44.073710+00:00",
"manifest_sha256": "820184910bf076609ce3c05dcc4995d0543ff5cbc672ca2fc3c73e856fdc1c97"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"authenticated_destination": "Fresh read confirmed4cebd617;installer inactive",
"new_backup_restore": "Verified fresh backup and real isolated restore;no active restore performed",
"beverages_followup": {
"source": "CIVA13(2),20(1)(d)",
"L2": "Dedução do IVA da via13(2),com montante/documento/condições próprios",
"L3": "Restituição da via13(2),conforme procedimento aplicável;pedido não equivale a deferimento",
"closed_by_G6C": false
},
"fresh_destination_preflight": "completed authenticated4cebd617 before installation;see authenticated_preflight",
"treatment": "P053/eligible_ship_import+ship_operation_object_import,12(1)(h);P054/eligible_aircraft_import+aircraft_operation_object_import,12(1)(i);dois ramos/quatro tratamentos;classificação IVA na importação,sem direitosaduaneiros nem dedução/campo11",
"served_commit": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"release": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"previous_release": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 3,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "830e47887a2f6c9ebb85f9a169142993"
},
"after": {
"rows": 105,
"checksum": "31f225d60f40c7ed4362914d54f9c874"
}
},
"sessions": {
"before": {
"rows": 35,
"checksum": "36a81e8a5ac8860d048eed3b3fce1407"
},
"after": {
"rows": 36,
"checksum": "788ac4e8051f39a1ccbe33bc7c6a6798"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"branch": "main",
"built_at": "2026-10-24T17:47:40.841865+00:00",
"manifest_sha256": "4e33ef8b77192cc28929f1ce8768c8df3d5e4b4d92ad912cf09d75077a9af40c"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"import-assets/1": [
"assets/project-dossier-4TZPGVhV.js"
],
"eligible_ship_import": [
"assets/project-dossier-4TZPGVhV.js"
],
"ship_operation_object_import": [
"assets/project-dossier-4TZPGVhV.js"
],
"eligible_aircraft_import": [
"assets/project-dossier-4TZPGVhV.js"
],
"aircraft_operation_object_import": [
"assets/project-dossier-4TZPGVhV.js"
],
"shipObjectLink": [
"assets/project-dossier-4TZPGVhV.js"
],
"aircraftObjectLink": [
"assets/project-dossier-4TZPGVhV.js"
],
"12(1)(h/i)": [
"assets/project-dossier-4TZPGVhV.js"
]
},
"assets": [
{
"file": "assets/services-BixUbmml.js",
"status": 200,
"sha256": "076c7185606a045bc80dc0a27391f950ea821b90e4884ca7d550e76d847fffab"
},
{
"file": "assets/project-dossier-document-CYJCi592.js",
"status": 200,
"sha256": "955e11af7bf648dc849b4c676d71b82719e7446d95d38427d6fe69f9935d3f85"
},
{
"file": "assets/project-dossier-4TZPGVhV.js",
"status": 200,
"sha256": "94585fefba949fc3a2e44ac951f59c61ff28c2fd68e1f6b64d8d33234b6cfef3"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-DdgboHYu.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"release": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"previous_release": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"release": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"previous_release": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"d46b794ab2c6113738f76c69097ae3dcddcf56dd"
],
"finished_at": "2026-10-24T17:47:43.681452+00:00"
},
"log_file": "1792863971064151912.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.75s",
"OK (59 tests, 317 assertions)",
"# tests 313",
"# pass 313",
"# fail 0"
],
"log_bytes": 119668
},
"rollback_executed": false
}
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -65,6 +65,7 @@
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ throw new Error('Novas classificacoes de importacao temporariamente suspensas; resultados guardados e relatorios disponiveis.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,83 @@
{
"status": "delivered_jointly_with_P080",
"candidate": "0eb37ef59b9b65837e6791518b378fe4e64ca112",
"base": "2ed62165",
"last_known_remote_main": "d46b794a",
"coverage": {
"AUD-SIM-L1-P048": [
"customs_transit_import",
"customs_temporary_import",
"customs_drawback_import"
]
},
"branch_count": 1,
"treatment_count": 3,
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "cb44f9b7199e6b29cba251d387ef0d626f063c49480cd2b03dd9a7334e4862b2"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "c4fb7c421e0f33e8d76997be966689a3f58cc66d21abb65663a58a2704607f18"
}
],
"counts_current": {
"delivered": 72,
"QA": 1,
"functional_pending": 59,
"documentary": 1,
"total": 133
},
"counts_after_delivery_only": {
"delivered": 73,
"QA": 0,
"functional_pending": 59,
"documentary": 1,
"total": 133
},
"proofs_reused": {
"frontend_new": 4,
"existing_import_suites": 13,
"frontend_total": 17,
"API_tests": 1,
"API_assertions": 25,
"QA_database": "simulator_fiscal_delta_20261021_test:55441",
"transaction_rollback": true,
"types": "passed",
"production_build": "passed;existing plugin timing warnings",
"QA_build": "passed;existing chunk warning",
"QA_storage": "save/recover/reject and split-multibyte UTF8 boundary passed;inherited Buffer concatenation preserved",
"UI": {
"actor": "Codex",
"method": "Edge/CUA observed",
"URL": "http://127.0.0.1:18645/g6d.html",
"observed": [
"three treatments mapped to one ID",
"full customs duty exemption unknown ->indeterminate;negative ->nonapplication;affirmative with own regime ->exempt0.00",
"switch transit to temporary import ->own regime condition unknown,previous answers retained;return ->transit response restored",
"5000MZN/document/2026-12 conserved",
"save/recover/report ->P048/three treatments,Manica,opportunity333,source12(1)(c)",
"four previous new-book UI results;all24acceptedbooks identical"
],
"manual_Tempo_reply": null,
"screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g6d-imports-20261024\\qa-recovered-report.png",
"screenshot_sha256": "fadcff5be7c2a7a768a87531fefab15d189f87c9181e60fc2c794b4a5a01ae8c"
},
"Word_PDF": "Existing exporter proofs reused;no new pagination claim"
},
"rollback": "l1-g6d-readonly-rollback-20261024.patch checked;not applied",
"backup_restore": "Fresh authenticated destination/main read,backup and real isolated restore required before installation;accepted G6C receipt is preservation context only",
"activation": "Existing normal Git FF/webhook/installer;no push or installation in QA passage",
"served_revision_and_delta": "pending delivery;homologation remainsd46b794a",
"limits": "2026/MZN;P048/12(1)(c),trânsito/importação temporária/draubaque com isenção total de direitos,sem baseaduaneira,cálculo de direitosL13,saída de regime,dedução/campo11L2,taxa normal presumida,apuramento integral ou submissãoAT. Não confundir com vendas em regimeG5/P083. P080/P084/P085 explicitamente abertos;L1aberto;P001só05/06;bebidasL2/L3;Estatísticas/IAadiadas.",
"L1_complete": false,
"P001": "05/06 only",
"beverages": "L2/L3;not closed",
"statistics_AI": "deferred",
"superseded_preparation_status": "QA_demonstrated_delivery_prepared_not_installed",
"delivery_followup": {
"served_commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"receipt": "l1-g6d-g5c-delivery-20261024.json"
}
}
@@ -0,0 +1,296 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "50fdd97916ef910a61bff0bebbcdc835206e3786",
"base_installed": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"coverage": {
"AUD-SIM-L1-P048": [
"customs_transit_import",
"customs_temporary_import",
"customs_drawback_import"
],
"AUD-SIM-L1-P080": [
"special_economic_zone_import",
"free_zone_import",
"free_warehouse_import",
"general_free_warehouse_import",
"customs_warehouse_import",
"duty_free_shop_import"
]
},
"branch_count": 2,
"treatment_count": 9,
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "01698a4dfe4dd7bd39af44593a8b0909665c1066d4faa1f32c1315fec5b623eb"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "94276b469e172bf1ed0b763a6cd9215837da6bfa4e6b2637a41915d105690511"
}
],
"counts_before": {
"delivered": 72,
"QA": 2,
"functional_pending": 58,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 74,
"QA": 0,
"functional_pending": 58,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": [
"iva-l1-g6d-qa-20261024.json",
"iva-l1-g5c-qa-20261024.json"
],
"authorization": "Tempo24/10 explicit immediate delivery of P048/P080 jointly;preserve closures/concurrent changes;installed delta only",
"P084_P085": "Not delivered;documentary research joint,conditions distinct;draft preparation authorized without automatic benefit",
"limits": "L1open;P001only05/06;import classification separate from deduction/field11;beveragesL2/L3;Statistics/AIdeferred",
"rollback": "Keep previous release/backup;prepared readonly containment disables only new recording,keeps readers/history;not applied",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"release": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"previous_release": "/var/www/investmoz-homologacao/releases/4cebd617651ca877bd4715c661973873e69f05e1-f916c854",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"release_revision": {
"commit": "d46b794ab2c6113738f76c69097ae3dcddcf56dd",
"branch": "main",
"built_at": "2026-10-24T17:47:40.841865+00:00",
"manifest_sha256": "4e33ef8b77192cc28929f1ce8768c8df3d5e4b4d92ad912cf09d75077a9af40c"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g6d-g5c-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "9c03002c45875ffec171a96f40d75532fd2ea6efe7dd89120e527f73d48c0cce",
"files_sha256": "24b8607c3e31787487daabe18903f021a916a794b6a17cdee2350b4ac807d81e",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g6d_g5c_restore_20261024",
"port": 55441,
"source_dump_sha256": "9c03002c45875ffec171a96f40d75532fd2ea6efe7dd89120e527f73d48c0cce",
"active_database_writes": 0
}
},
"served_commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"counts_current": {
"delivered": 74,
"QA": 0,
"functional_pending": 58,
"documentary": 1,
"total": 133
},
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"release": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"previous_release": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 2,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "6bae449491c743a037aa02734dcb1431"
},
"after": {
"rows": 105,
"checksum": "e81e15d761e31816b5ab2c449a09d4e3"
}
},
"sessions": {
"before": {
"rows": 38,
"checksum": "ae3b2e07bb1716ac0f2c754e8b5f60b5"
},
"after": {
"rows": 39,
"checksum": "8689cdace9da253cdf37e05bb865cf34"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"branch": "main",
"built_at": "2026-10-24T18:06:14.188038+00:00",
"manifest_sha256": "84df9b7bd7b9912749d43fc40855ea10cebc9f7bf92451e6eb9860771169840a"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"import-customs-regimes/1": [
"assets/project-dossier-BD5LnuON.js"
],
"customs_transit_import": [
"assets/project-dossier-BD5LnuON.js"
],
"customs_temporary_import": [
"assets/project-dossier-BD5LnuON.js"
],
"customs_drawback_import": [
"assets/project-dossier-BD5LnuON.js"
],
"fullCustomsExemption": [
"assets/project-dossier-BD5LnuON.js"
],
"import-special-regimes/1": [
"assets/project-dossier-BD5LnuON.js"
],
"special_economic_zone_import": [
"assets/project-dossier-BD5LnuON.js"
],
"free_zone_import": [
"assets/project-dossier-BD5LnuON.js"
],
"free_warehouse_import": [
"assets/project-dossier-BD5LnuON.js"
],
"general_free_warehouse_import": [
"assets/project-dossier-BD5LnuON.js"
],
"customs_warehouse_import": [
"assets/project-dossier-BD5LnuON.js"
],
"duty_free_shop_import": [
"assets/project-dossier-BD5LnuON.js"
],
"specialNoFinalUseConsumption": [
"assets/project-dossier-BD5LnuON.js"
],
"specialRegimePermanence": [
"assets/project-dossier-BD5LnuON.js"
]
},
"assets": [
{
"file": "assets/project-dossier-document-kEtxhcJm.js",
"status": 200,
"sha256": "00c75468a545c8f23097c4770ae3cddae38b74f3f6c4c2938d91c56a347d5ba4"
},
{
"file": "assets/services-DFRcrieB.js",
"status": 200,
"sha256": "acc2b8d2104eddd9dbadb7431e87df8c044ff460e4acbbe7b29cd7b6703fce0f"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-BD5LnuON.js",
"status": 200,
"sha256": "500f8e81cbd4cdbb0a4d9295ba5fb364d452cbd9b1409f9baf5151bd42f01037"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-DxCn5xSH.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"release": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"previous_release": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"release": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"previous_release": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"2d889a211ba303db31dcba815e439456dfba9f36"
],
"finished_at": "2026-10-24T18:06:17.151219+00:00"
},
"log_file": "1792865082332907236.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 26.01s",
"OK (59 tests, 317 assertions)",
"# tests 320",
"# pass 320",
"# fail 0"
],
"log_bytes": 121819
},
"rollback_executed": false
},
"activation": "Normal Git fast-forward/webhook/installer;zero migrations/imports"
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -81,6 +81,7 @@
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ throw new Error('Novas classificações de importação temporariamente suspensas; dados, histórico e relatórios preservados.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -71,6 +71,7 @@
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ throw new Error('Novas classificacoes de importacao temporariamente suspensas; resultados guardados e relatorios disponiveis.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,348 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "1565aa4ffb13fae75e925ccdb2b7553a9b111dd5",
"last_installed": "2d889a21",
"coverage": {
"AUD-SIM-L1-P052": [
"ship_provisions_import",
"ship_fuel_import",
"ship_technical_products_import",
"ship_cargo_accessories_import",
"aircraft_provisions_import",
"aircraft_fuel_import",
"aircraft_technical_products_import",
"aircraft_cargo_accessories_import"
]
},
"branch_count": 1,
"treatment_count": 8,
"runtime_delta_G6E": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "5a1359a75aa0403d9ccb2607e443dd15729d4c504a713b8710e655ac3e1a52f3"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "63e424a64933dca63761c2c55eb3fd3c3a50e22aa8aa3a919e959cb43218b6fd"
},
{
"path": "app/Http/Requests/StoreSimulationFormDraftRequest.php",
"sha256_LF": "5a966ef9d3a668d3785b073f8bae600f8ed18ccbd076fec3c62c64f020fca936"
}
],
"uninstalled_ancestral_draft_preparation_runtime": [
{
"path": "resources/js/lib/iva-offer-preparations.ts",
"sha256_LF": "c5262327d4f1a3fd062ce4febcb628af5ef97c9c77eac7ebc7af27a96e1842a2"
},
{
"path": "resources/js/components/simulation-offer-preparations.tsx",
"sha256_LF": "e8ae2e9138b244d6173ff92e0e75ea2143fbd86c20092e1fa2a5d732c547b031"
},
{
"path": "resources/js/components/simulation-monthly-iva.tsx",
"sha256_LF": "54278996c89d1508219dae83633a75261f3d36d60e7737d4a53d5d132febaf5e"
},
{
"path": "resources/js/lib/project-dossier.ts",
"sha256_LF": "ee742d34d31c06414efe39de2748b98dc9b981dbaf98a52f8ff02aab1b9198de"
}
],
"ancestry_scope_warning": "Candidate also contains uninstalledP084/P085draftpreparation5ec2f198,not benefits;future deliverymust identify totalinstalleddelta and preserve those drafts,not countP084/P085 asclosed",
"counts_current": {
"delivered": 75,
"QA": 0,
"functional_pending": 57,
"documentary": 1,
"total": 133
},
"counts_after_P052_delivery_only": {
"delivered": 75,
"QA": 0,
"functional_pending": 57,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": "iva-l1-g6e-qa-20261024.json;accepted74closures anddraftproofs not rerun",
"required_before_delivery": "Freshauthenticateddestination/main;backupandrealisolatedrestore;existingGitprocess;onlyinstalleddeltaverification",
"limits": "L1open;P001only05/06;beveragesL2/L3;Statistics/AIdeferred;closingL1doesnotrequireL2/L3/alltaxes",
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "5a1359a75aa0403d9ccb2607e443dd15729d4c504a713b8710e655ac3e1a52f3"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "63e424a64933dca63761c2c55eb3fd3c3a50e22aa8aa3a919e959cb43218b6fd"
},
{
"path": "app/Http/Requests/StoreSimulationFormDraftRequest.php",
"sha256_LF": "5a966ef9d3a668d3785b073f8bae600f8ed18ccbd076fec3c62c64f020fca936"
},
{
"path": "resources/js/lib/iva-offer-preparations.ts",
"sha256_LF": "c5262327d4f1a3fd062ce4febcb628af5ef97c9c77eac7ebc7af27a96e1842a2"
},
{
"path": "resources/js/components/simulation-offer-preparations.tsx",
"sha256_LF": "e8ae2e9138b244d6173ff92e0e75ea2143fbd86c20092e1fa2a5d732c547b031"
},
{
"path": "resources/js/components/simulation-monthly-iva.tsx",
"sha256_LF": "54278996c89d1508219dae83633a75261f3d36d60e7737d4a53d5d132febaf5e"
},
{
"path": "resources/js/lib/project-dossier.ts",
"sha256_LF": "ee742d34d31c06414efe39de2748b98dc9b981dbaf98a52f8ff02aab1b9198de"
}
],
"authorization": "Tempo24/10:G6E/P052 candidate1565aa4f integrate/deploy viaexistingGit,concurrentchangespreserved,installeddeltaonly;preserve P084/P085drafts and domestic/import distinction,noautobenefit",
"base_installed": "2d889a211ba303db31dcba815e439456dfba9f36",
"counts_before": {
"delivered": 74,
"QA": 1,
"functional_pending": 57,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 75,
"QA": 0,
"functional_pending": 57,
"documentary": 1,
"total": 133
},
"P084_P085": "Ancestordraftpreparation5ec2f198included as partialdraftavailability,not fullbenefitdelivery;P084/P085 remain57pending;newlyrequestedstatus/scenariosclarification willbeQAonlyafterthisrelease",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"release": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"previous_release": "/var/www/investmoz-homologacao/releases/d46b794ab2c6113738f76c69097ae3dcddcf56dd-e81e61d1",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"release_revision": {
"commit": "2d889a211ba303db31dcba815e439456dfba9f36",
"branch": "main",
"built_at": "2026-10-24T18:06:14.188038+00:00",
"manifest_sha256": "84df9b7bd7b9912749d43fc40855ea10cebc9f7bf92451e6eb9860771169840a"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g6e-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "e6b37683c01019b2fc361a3ff33f6be0f2ebf6f5a1a23c4a81dc95ea278dd9b9",
"files_sha256": "60c38657d68d0a98f5b287fb3c74062bacc283729ff8c3aa84c110408067d9bc",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g6e_restore_20261024",
"port": 55441,
"source_dump_sha256": "e6b37683c01019b2fc361a3ff33f6be0f2ebf6f5a1a23c4a81dc95ea278dd9b9",
"active_database_writes": 0
}
},
"served_commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"release": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"previous_release": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 7,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "2df1487be225c60843f9f0ef9f07ed71"
},
"after": {
"rows": 105,
"checksum": "286378eec2e9e387ecfbeb156f168fca"
}
},
"sessions": {
"before": {
"rows": 41,
"checksum": "0e709e11078a7c89e010c3f670d6f207"
},
"after": {
"rows": 42,
"checksum": "da381873ffd7fe5eaa5ab5996ca602ab"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"branch": "main",
"built_at": "2026-10-24T18:25:28.022659+00:00",
"manifest_sha256": "efd98a5b7940896109788186b7deedd09ce7dc44f391e3c618e7ec1ee82e6b7d"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"import-onboard-supplies/1": [
"assets/project-dossier-RK4qLB-o.js"
],
"ship_provisions_import": [
"assets/project-dossier-RK4qLB-o.js"
],
"ship_fuel_import": [
"assets/project-dossier-RK4qLB-o.js"
],
"ship_technical_products_import": [
"assets/project-dossier-RK4qLB-o.js"
],
"ship_cargo_accessories_import": [
"assets/project-dossier-RK4qLB-o.js"
],
"aircraft_provisions_import": [
"assets/project-dossier-RK4qLB-o.js"
],
"aircraft_fuel_import": [
"assets/project-dossier-RK4qLB-o.js"
],
"aircraft_technical_products_import": [
"assets/project-dossier-RK4qLB-o.js"
],
"aircraft_cargo_accessories_import": [
"assets/project-dossier-RK4qLB-o.js"
],
"supplyNoCoastalFishing": [
"assets/project-dossier-RK4qLB-o.js"
],
"supplyNormalTanks": [
"assets/project-dossier-RK4qLB-o.js"
],
"offerPreparations": [
"assets/project-dossier-RK4qLB-o.js"
],
"benefício não aplicado": [
"assets/project-dossier-RK4qLB-o.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-document-CIQlqNrD.js",
"status": 200,
"sha256": "081f2d08cfe70c8ca035c9da6022cfd88f1980ca8e5433eb3d16f96971e080eb"
},
{
"file": "assets/services-CqPgbMxW.js",
"status": 200,
"sha256": "ee59b7a86ed1cb4e6e171c3ef65e114f8f2fbe91d76aac4194b58706f49c50c1"
},
{
"file": "assets/project-dossier-RK4qLB-o.js",
"status": 200,
"sha256": "580dc668b93ff861cf4757a47de165c0575255ed77e19816a566b6efcf80d0c7"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-DdR4Impy.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"release": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"previous_release": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"release": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"previous_release": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"c1314cdf90c368b51489aaf04c2cdbe59cfb88e6"
],
"finished_at": "2026-10-24T18:25:30.464203+00:00"
},
"log_file": "1792866235841214128.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.41s",
"OK (59 tests, 317 assertions)",
"# tests 327",
"# pass 327",
"# fail 0"
],
"log_bytes": 123869
},
"rollback_executed": false
},
"activation": "NormalGitFF/webhook/installer;zero migrations/imports"
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -93,6 +93,7 @@
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ throw new Error('Novas classificações de importação temporariamente suspensas; dados, histórico e relatórios preservados.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,333 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "29e708ba2dca2450eaff8eff6f5e19079ffc7f8e",
"base_installed": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"coverage_complete_branches": {
"AUD-SIM-L1-P050": [
"service_in_customs_value",
"accessory_service_first_destination"
]
},
"branch_count_complete": 1,
"treatment_count_P050": 2,
"partial_coverage_P084_P085": {
"authorized_partial_candidate": "946fc089",
"next_delivery_scope": "Preparation/requeststates/scopeddecisions/humanitarianpurpose/normalandconditionalhypotheticalscenarios,notconfirmedbenefit/notclosing2branches",
"documentary_scope": "IdentifyexpressapplicableCIVA14(3)procedure/link and amendments;distinguishP084internal/import andP085acquisition. ModelI.1/Despacho/CBFcotejo reused,not repeated;do notinventcertificates/approvers orclaimregulation nonexistent",
"preserved": "Allrows,scopeversions,deliberateedits,normal/conditionalinputs andhistory exactlyequalfrozenfixture",
"delivered_scope": "Preparation/request states/scoped decisions/humanitarian purpose/normal and conditional hypothetical scenarios now available; benefits not confirmed; both branches remain pending"
},
"runtime_delta_total": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "1e6005f87eafa9db9cd032c8c3f01ae23f1755b33c20d0925538dd427ce25868"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "656945b77e1e9f8f059b184969de783a1e2c9a1252af0084cf53ebc2bf249cb8"
},
{
"path": "resources/js/lib/iva-offer-preparations.ts",
"sha256_LF": "23a84aa1e87d6a6defbca1e0c5eee96deb4619ffc1980881f2f69abfe54f81c1"
},
{
"path": "resources/js/components/simulation-offer-preparations.tsx",
"sha256_LF": "e8ad2edd142736269b5a119de5270e67086a79b26d476105dcd290393b6b94ed"
}
],
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "1e6005f87eafa9db9cd032c8c3f01ae23f1755b33c20d0925538dd427ce25868"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "656945b77e1e9f8f059b184969de783a1e2c9a1252af0084cf53ebc2bf249cb8"
},
{
"path": "resources/js/lib/iva-offer-preparations.ts",
"sha256_LF": "23a84aa1e87d6a6defbca1e0c5eee96deb4619ffc1980881f2f69abfe54f81c1"
},
{
"path": "resources/js/components/simulation-offer-preparations.tsx",
"sha256_LF": "e8ad2edd142736269b5a119de5270e67086a79b26d476105dcd290393b6b94ed"
}
],
"counts_current": {
"delivered": 76,
"QA": 0,
"functional_pending": 56,
"documentary": 1,
"total": 133
},
"counts_after_P050_delivery_only": {
"delivered": 76,
"QA": 0,
"functional_pending": 56,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": [
"iva-l1-g6f-qa-20261024.json",
"iva-l1-offer-paths-qa-20261024.json"
],
"authorization": "Tempo24/10 explicitly deploy29e708ba viaexistingGit,including946fc089onlypartialpreparation/conditionalsimulationP084/P085;preserveconcurrentchanges,installeddeltaonly",
"fresh_backup_restore": "Required freshauthenticateddestination/main,backup/realisolatedrestore beforeinstallation;accepted75closuresreused,installeddeltaonly",
"limits": "L1open;P001only05/06;beveragesL2/L3;classificationseparatefromfield11;Statistics/AIdeferred;L1closuredoesnotrequireL2/L3/alltaxes",
"counts_before": {
"delivered": 75,
"QA": 1,
"functional_pending": 56,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 76,
"QA": 0,
"functional_pending": 56,
"documentary": 1,
"total": 133
},
"scope": "P050onecompletebranch/twotreatments;P084/P085partialrequest/emergencydrafts/scenarios,notconfirmedbenefits/notclosing2branches",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"release": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"previous_release": "/var/www/investmoz-homologacao/releases/2d889a211ba303db31dcba815e439456dfba9f36-dac24b34",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"release_revision": {
"commit": "c1314cdf90c368b51489aaf04c2cdbe59cfb88e6",
"branch": "main",
"built_at": "2026-10-24T18:25:28.022659+00:00",
"manifest_sha256": "efd98a5b7940896109788186b7deedd09ce7dc44f391e3c618e7ec1ee82e6b7d"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g6f-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "91632c927b4a7de70ca06690c7dc50936b2975ee31c53d5781461583fdca9cda",
"files_sha256": "ebb421927381bb5c1cdb536eea61739fb4134b51faaf2f57b773222655b1c0b9",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g6f_restore_20261024",
"port": 55441,
"source_dump_sha256": "91632c927b4a7de70ca06690c7dc50936b2975ee31c53d5781461583fdca9cda",
"active_database_writes": 0
}
},
"served_commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"release": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"previous_release": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 4,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "f66b5e7174f6c71536ef479eb058cb42"
},
"after": {
"rows": 105,
"checksum": "c1104feaa87c6abe31c459db5c263c30"
}
},
"sessions": {
"before": {
"rows": 44,
"checksum": "2d76115dd940c820e3287a861527b6ee"
},
"after": {
"rows": 45,
"checksum": "5f632d423b866686ef1fb280fd2b2a20"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"branch": "main",
"built_at": "2026-10-24T18:47:27.964235+00:00",
"manifest_sha256": "a8c5303ce2443fefcf137681ead8f652e16963ae656612e80d1672da62e0a0a6"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"import-included-services/1": [
"assets/project-dossier-CxrsH1SU.js"
],
"service_in_customs_value": [
"assets/project-dossier-CxrsH1SU.js"
],
"accessory_service_first_destination": [
"assets/services-BLOH90IF.js",
"assets/project-dossier-CxrsH1SU.js"
],
"serviceVat": [
"assets/project-dossier-CxrsH1SU.js"
],
"serviceImportRef": [
"assets/services-BLOH90IF.js",
"assets/project-dossier-CxrsH1SU.js"
],
"serviceBaseRef": [
"assets/services-BLOH90IF.js",
"assets/project-dossier-CxrsH1SU.js"
],
"serviceFirstDestination": [
"assets/services-BLOH90IF.js",
"assets/project-dossier-CxrsH1SU.js"
],
"requestRecords": [
"assets/services-BLOH90IF.js",
"assets/project-dossier-CxrsH1SU.js"
],
"Estado declarado do pedido": [
"assets/services-BLOH90IF.js"
],
"Finalidade humanitária da resposta à emergência": [
"assets/services-BLOH90IF.js"
],
"Cenário condicionado à isenção": [
"assets/project-dossier-CxrsH1SU.js"
],
"Não é benefício concedido nem imposto aplicado": [
"assets/project-dossier-CxrsH1SU.js"
],
"benefício não aplicado": [
"assets/project-dossier-CxrsH1SU.js"
],
"periodScope": [
"assets/services-BLOH90IF.js",
"assets/project-dossier-CxrsH1SU.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-document-BoF97ys7.js",
"status": 200,
"sha256": "b6d5cc8bf80d7685e07a8f6e45a6be8fb807e1eab835a232ea81ed94d94dfe6b"
},
{
"file": "assets/services-BLOH90IF.js",
"status": 200,
"sha256": "7b7af53e69fe721c202fffea8d8f0d65208055c0feb12714176ac98e08856b22"
},
{
"file": "assets/project-dossier-CxrsH1SU.js",
"status": 200,
"sha256": "06c71040d59a29c756b9fc01af1f016fdd60809e1005b579f66b75f658f5d92c"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-DcIPS684.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"release": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"previous_release": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"release": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"previous_release": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"78c9f4a356d5eaf590d8d82168228a2f84b1f633"
],
"finished_at": "2026-10-24T18:47:30.671761+00:00"
},
"log_file": "1792867557366195987.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 24.88s",
"OK (59 tests, 317 assertions)",
"# tests 335",
"# pass 335",
"# fail 0"
],
"log_bytes": 126463
},
"rollback_executed": false
},
"activation": "Normal Git fast-forward/webhook/installer; zero migrations/imports"
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -102,6 +102,7 @@
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ throw new Error('Novas classificações de importação/serviços temporariamente suspensas; dados, histórico e relatórios preservados.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,291 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "ebf5e53c3ccb29279a4c8433182a5e74231f2dae",
"base_installed": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"coverage_complete_branches": {
"AUD-SIM-L1-P056": [
"authorized_investment_equipment"
]
},
"branch_count_complete": 1,
"treatment_count": 1,
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "1b4fda4e7e363e68f951eca14a415a93d08b06aaa49b41e639b44fc5c9cee488"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "c6f36defc756eac0bb21f17e7165bb84efbbbfd120ea3be83787ffe368b7f1b1"
}
],
"counts_before": {
"delivered": 76,
"QA": 1,
"functional_pending": 55,
"documentary": 1,
"total": 133
},
"counts_current": {
"delivered": 77,
"QA": 0,
"functional_pending": 55,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 77,
"QA": 0,
"functional_pending": 55,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": [
"iva-l1-g6g-qa-20261024.json"
],
"authorization": "Tempo explicitly deploy ebf5e53c through existing Git process,preserve concurrent changes and check installed delta only;retain explicit reference and scope of undertaking authorization",
"scope": "P056 only;authorized_investment_equipment;reference/scope retained;no automatic authorization/classification or extension to other goods/operations/periods",
"preservation": "76 prior closures and partial P084/P085 preserved;accepted QA proofs reused;fresh backup and real isolated restore before installation;installed delta only",
"partial_P084_P085": "Already available for preparation/conditional simulation only,benefits pending;no closure in this release",
"limits": "L1 open;P00105/06;beveragesL2/L3;import classification separate from serviceVAT/deduction/field11;Stats/AI deferred",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"release": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"previous_release": "/var/www/investmoz-homologacao/releases/c1314cdf90c368b51489aaf04c2cdbe59cfb88e6-d4800fe2",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"release_revision": {
"commit": "78c9f4a356d5eaf590d8d82168228a2f84b1f633",
"branch": "main",
"built_at": "2026-10-24T18:47:27.964235+00:00",
"manifest_sha256": "a8c5303ce2443fefcf137681ead8f652e16963ae656612e80d1672da62e0a0a6"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g6g-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "65ad784f31d74b6fd72b14ce3c0eed4a2c0fec8684a001f4b16a3a6df41a1553",
"files_sha256": "b9651ae1046ae678a4ee644fb9d2214d06786cf696f54514d181397cfba4c993",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g6g_restore_20261024",
"port": 55441,
"source_dump_sha256": "65ad784f31d74b6fd72b14ce3c0eed4a2c0fec8684a001f4b16a3a6df41a1553",
"active_database_writes": 0
}
},
"served_commit": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"release": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"previous_release": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 2,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "d11db709e3b3963031eb18b325b4af98"
},
"after": {
"rows": 105,
"checksum": "d0dc4caf464cee72f17f4f552d67a9db"
}
},
"sessions": {
"before": {
"rows": 47,
"checksum": "9c8594dfe46a3b39841e7a6ae59d8603"
},
"after": {
"rows": 48,
"checksum": "e8689c96e52f48b860b9691fca1e26bb"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"branch": "main",
"built_at": "2026-10-24T19:13:31.576700+00:00",
"manifest_sha256": "713be11fd1eee3f6ccc10f850260dbcc91e98577eb1e124b2fd0dacdaec9ecee"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"import-investment-equipment/1": [
"assets/project-dossier-mBN4fiPg.js"
],
"authorized_investment_equipment": [
"assets/project-dossier-mBN4fiPg.js",
"assets/services-BgX_qq86.js"
],
"investmentEquipment": [
"assets/project-dossier-mBN4fiPg.js"
],
"investmentClassK": [
"assets/project-dossier-mBN4fiPg.js"
],
"investmentAuthorized": [
"assets/project-dossier-mBN4fiPg.js"
],
"investmentDestination": [
"assets/project-dossier-mBN4fiPg.js"
],
"investmentAuthorizationRef": [
"assets/project-dossier-mBN4fiPg.js",
"assets/services-BgX_qq86.js"
],
"investmentScope": [
"assets/project-dossier-mBN4fiPg.js",
"assets/services-BgX_qq86.js"
],
"Autorização do empreendimento / pressuposto expresso": [
"assets/services-BgX_qq86.js"
],
"Âmbito aplicável: bens, operação, período e condições": [
"assets/services-BgX_qq86.js"
],
"import-included-services/1": [
"assets/project-dossier-mBN4fiPg.js"
],
"serviceVat": [
"assets/project-dossier-mBN4fiPg.js"
],
"requestRecords": [
"assets/project-dossier-mBN4fiPg.js",
"assets/services-BgX_qq86.js"
],
"periodScope": [
"assets/project-dossier-mBN4fiPg.js",
"assets/services-BgX_qq86.js"
]
},
"assets": [
{
"file": "assets/project-dossier-document-vnzkb3wv.js",
"status": 200,
"sha256": "498ecb917a8311c4fcf33d189da278c00c762c70d8c1af6be4b6efe790a74f9a"
},
{
"file": "assets/project-dossier-mBN4fiPg.js",
"status": 200,
"sha256": "d1894eefa0d2ba2aea4009cf23269c170f58cbe5f3777fe38c0322810ba2f760"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/services-BgX_qq86.js",
"status": 200,
"sha256": "39e509d2ff536533b7fefd2c8c72c8513ccf749d70c00a2a128946e7bf687e87"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-RSjKR5kY.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"release": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"previous_release": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"release": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"previous_release": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"9b26217dec945fe07b665c6ad7638a965bf104a9"
],
"finished_at": "2026-10-24T19:13:34.256444+00:00"
},
"log_file": "1792869119217338760.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 24.80s",
"OK (59 tests, 317 assertions)",
"# tests 338",
"# pass 338",
"# fail 0"
],
"log_bytes": 127481
},
"rollback_executed": false
},
"activation": "Normal Git fast-forward/webhook/installer;zero migrations/imports"
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -102,6 +102,7 @@
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ if(book.rows.some(row=>row.treatment==='authorized_investment_equipment'))throw new Error('Novas classificações P056 temporariamente suspensas; dados, histórico, relatórios e restantes ramos preservados.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,293 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "2359a88dba92147eb28769c7d9ae908cb2df7227",
"base_installed": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"coverage_complete_branches": {
"AUD-SIM-L1-P060": [
"un_development_exemption",
"un_development_reduction"
]
},
"branch_count_complete": 1,
"treatment_count": 2,
"runtime_delta": [
{
"path": "resources/js/lib/iva-import-exemptions.ts",
"sha256_LF": "799e9a0020e805af9f67387bfa36608c4973f15c4427d1b82c3f6b6398aed129"
},
{
"path": "resources/js/components/simulation-import-exemptions.tsx",
"sha256_LF": "89ab431fa6810c1f56897f203a817a41722c4a9df0cb075561dee6208e8730d1"
}
],
"counts_before": {
"delivered": 77,
"QA": 1,
"functional_pending": 54,
"documentary": 1,
"total": 133
},
"counts_current": {
"delivered": 78,
"QA": 0,
"functional_pending": 54,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 78,
"QA": 0,
"functional_pending": 54,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": [
"iva-l1-g6h-qa-20261024.json"
],
"authorization": "Tempo explicitly deploy2359a88d by existingGit,preserve concurrentchanges and check installeddelta only;keep decision/list/plan/scope associated with result",
"scope": "P060 only,two treatments un_development_exemption/un_development_reduction,samebranch;decision/list/plan/scope references in immutable calculation inputs/report;request not grant;no extension to other goods/operations/periods",
"preservation": "77priorclosures and partialP084/P085 preserved;accepted QA reused;freshbackup/realisolatedrestore beforeinstallation;installeddelta only",
"partial_P084_P085": "Already available for preparation/conditional simulation only,benefits pending;no closure in this release",
"limits": "L1open;P00105/06;beveragesL2/L3;importclassification separate fromserviceVAT/deduction/field11;Stats/AIdeferred",
"containment": "l1-g6h-readonly-rollback-20261024.patch,checked only,not applied;blocks newP060classification only,preserves readers/history and otherbranches",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"release": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"previous_release": "/var/www/investmoz-homologacao/releases/78c9f4a356d5eaf590d8d82168228a2f84b1f633-a865ec5f",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"release_revision": {
"commit": "9b26217dec945fe07b665c6ad7638a965bf104a9",
"branch": "main",
"built_at": "2026-10-24T19:13:31.576700+00:00",
"manifest_sha256": "713be11fd1eee3f6ccc10f850260dbcc91e98577eb1e124b2fd0dacdaec9ecee"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g6h-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "6f6e23986cf21dffca468eaa8ba8b1493150a8eec78a5de238a9fc25d028a5c6",
"files_sha256": "6d7a2cdeede7f11edcb5f9a94935a1d79a50ce8b6f5bf86ef279db5ef25d086a",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g6h_restore_20261024",
"port": 55441,
"source_dump_sha256": "6f6e23986cf21dffca468eaa8ba8b1493150a8eec78a5de238a9fc25d028a5c6",
"active_database_writes": 0
}
},
"served_commit": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"release": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"previous_release": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 2,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "38de6d88500d221365f198307f300e5d"
},
"after": {
"rows": 105,
"checksum": "4308332b7b4f3cfdbc90a7cf7bab2fc1"
}
},
"sessions": {
"before": {
"rows": 50,
"checksum": "14fad68aad0bd514ab29e6644c64945c"
},
"after": {
"rows": 51,
"checksum": "73a64a88a6f9f973258112f3ba0be512"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"branch": "main",
"built_at": "2026-10-24T19:38:38.127391+00:00",
"manifest_sha256": "b419662fb9f09f3f0b33902a8935a88a6b48399575219fe3d33cceb9153172ee"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"import-un-development/1": [
"assets/project-dossier-DkFpKnTK.js"
],
"un_development_exemption": [
"assets/project-dossier-DkFpKnTK.js"
],
"un_development_reduction": [
"assets/services-DVetpVxR.js",
"assets/project-dossier-DkFpKnTK.js"
],
"developmentProject": [
"assets/project-dossier-DkFpKnTK.js"
],
"developmentAgency": [
"assets/project-dossier-DkFpKnTK.js"
],
"developmentDecisionRef": [
"assets/project-dossier-DkFpKnTK.js"
],
"developmentListRef": [
"assets/project-dossier-DkFpKnTK.js"
],
"developmentPlanRef": [
"assets/project-dossier-DkFpKnTK.js"
],
"developmentScope": [
"assets/project-dossier-DkFpKnTK.js"
],
"developmentRightsRef": [
"assets/project-dossier-DkFpKnTK.js"
],
"developmentReductionPercent": [
"assets/services-DVetpVxR.js",
"assets/project-dossier-DkFpKnTK.js"
],
"developmentNormalVat": [
"assets/services-DVetpVxR.js",
"assets/project-dossier-DkFpKnTK.js"
],
"developmentNormalVatRef": [
"assets/services-DVetpVxR.js",
"assets/project-dossier-DkFpKnTK.js"
],
"Redução proporcional": [
"assets/project-dossier-DkFpKnTK.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/services-DVetpVxR.js",
"status": 200,
"sha256": "f7223ac486557504b96f3edec95c5a7f31d90e73c1f714108cf05177f0806eaf"
},
{
"file": "assets/project-dossier-DkFpKnTK.js",
"status": 200,
"sha256": "d362c8cb613b564d9597ac40ddc9883a1c97b08a11f15c9103a5fbe105cdeb00"
},
{
"file": "assets/project-dossier-document-DVHvkUfS.js",
"status": 200,
"sha256": "a77d217dd0e77b7193d9707f01aa9df31ce4dfe3a16d0e6cf644f8cc811dfef3"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-DD5AMs0u.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"release": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"previous_release": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"release": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"previous_release": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"eb9294ef42c2cfc97eb8c2553d545e3bff7c0add"
],
"finished_at": "2026-10-24T19:38:40.794974+00:00"
},
"log_file": "1792870624830982809.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 24.99s",
"OK (59 tests, 317 assertions)",
"# tests 342",
"# pass 342",
"# fail 0"
],
"log_bytes": 128657
},
"rollback_executed": false
},
"result_associations": "Decision,list,plan and scope remain in immutable result.inputs and report;accepted QA proof reused and exact installed runtime hashes/compiled fields checked;no synthetic write in active",
"activation": "Normal Git fast-forward/webhook/installer;zero migrations/imports"
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-import-exemptions.ts
+++ b/resources/js/lib/iva-import-exemptions.ts
@@ -102,6 +102,7 @@
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
+ if(book.rows.some(row=>isDevelopmentImport(row.treatment)))throw new Error('Novas classificações P060 temporariamente suspensas; dados, histórico, relatórios e restantes ramos preservados.');
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
@@ -0,0 +1,301 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "20bfeb4f71743fd7316b252c027a88d0c67d5eae",
"base_installed": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"coverage_complete_branches": {
"AUD-SIM-L1-P090": [
"public_authority_indemnity",
"public_authority_compensation"
]
},
"branch_count_complete": 1,
"treatment_count": 2,
"runtime_delta": [
{
"path": "resources/js/lib/iva-public-authority-base.ts",
"sha256_LF": "667704ba8c2d26421993f5e7e2c6599afb2912e052b27a96e423cb8d01a21d85"
},
{
"path": "resources/js/components/simulation-public-authority-base.tsx",
"sha256_LF": "7aa05785fdb6fcb7de4c0345e9c09073ebdbb3a8b39f1bd2610da08abc8c8a89"
},
{
"path": "resources/js/components/simulation-monthly-iva.tsx",
"sha256_LF": "db5b4431351766f8f86b4e60195381dab17c077ca3db72de48f2fb7e0f2a320b"
},
{
"path": "resources/js/lib/project-dossier.ts",
"sha256_LF": "60a9dd9f4eed5884b16c7097906bc438958b3b1407976e10f4699d35c1c68b19"
}
],
"counts_before": {
"delivered": 78,
"QA": 1,
"functional_pending": 53,
"documentary": 1,
"total": 133
},
"counts_current": {
"delivered": 79,
"QA": 0,
"functional_pending": 53,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 79,
"QA": 0,
"functional_pending": 53,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": [
"iva-l1-g7a-qa-20261024.json"
],
"authorization": "Tempo explicitly deploy20bfeb4f through existingGit,preserve concurrentchanges and check installeddelta only;two treatments sameP090branch,base remains separate fromVAT",
"scope": "P090only,public_authority_indemnity/public_authority_compensation;net monetary/nonmonetary normalvalue components,act/document/composition/valuationreferences in immutable result.inputs/report;vat/rate alwaysnull,no incidence/tax/deduction/field11/ModeloAtotals inferred",
"preservation": "78priorclosures and partialP084/P085 preserved;acceptedQA reused;freshbackup/realisolatedrestore beforeinstallation;installeddelta only;P060decision/list/plan/scope andproportionalresults,P056authorization,P050serviceVAT preserved",
"partial_P084_P085": "Already available for preparation/conditional simulation only,benefits pending;no closure in this release",
"limits": "L1open;P00105/06;beveragesL2/L3;Statistics/AIdeferred;L1closuredoesnotrequireL2/L3/alltaxes",
"containment": "l1-g7a-readonly-rollback-20261024.patch,checked only,not applied;blocks newP090calculations only,preserves readers/history andotherbranches",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"release": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"previous_release": "/var/www/investmoz-homologacao/releases/9b26217dec945fe07b665c6ad7638a965bf104a9-80907805",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"release_revision": {
"commit": "eb9294ef42c2cfc97eb8c2553d545e3bff7c0add",
"branch": "main",
"built_at": "2026-10-24T19:38:38.127391+00:00",
"manifest_sha256": "b419662fb9f09f3f0b33902a8935a88a6b48399575219fe3d33cceb9153172ee"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g7a-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "30a6764b68526e358a4f9bc64bb8dd65df25af1b379878e9619105d1d871e408",
"files_sha256": "67134f77514350569cd1a4a70357f73258b6fa65bb3f6fe7655ec5cd02939ef2",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g7a_restore_20261024",
"port": 55441,
"source_dump_sha256": "30a6764b68526e358a4f9bc64bb8dd65df25af1b379878e9619105d1d871e408",
"active_database_writes": 0
}
},
"served_commit": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"release": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"previous_release": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 4,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "40ba57126813e2e26a9537cdb5bb2b0f"
},
"after": {
"rows": 105,
"checksum": "485a22e1bc7e58bab4ed4ef208beeec1"
}
},
"sessions": {
"before": {
"rows": 53,
"checksum": "0fb62d0e0b2d9b74347692321c4bcde2"
},
"after": {
"rows": 54,
"checksum": "ffa2cba2908b07293dd03efab77ed755"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"branch": "main",
"built_at": "2026-10-24T19:52:03.661019+00:00",
"manifest_sha256": "7c9c5a728ad2afa1157a4a74a013dce1538a915f080d74790052655030582884"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"public-authority-base/1": [
"assets/project-dossier-r9kw2IAG.js"
],
"public_authority_indemnity": [
"assets/project-dossier-r9kw2IAG.js"
],
"public_authority_compensation": [
"assets/project-dossier-r9kw2IAG.js"
],
"publicAuthorityBases": [
"assets/project-dossier-r9kw2IAG.js"
],
"taxableDomesticSupply": [
"assets/project-dossier-r9kw2IAG.js"
],
"authorityAct": [
"assets/project-dossier-r9kw2IAG.js"
],
"notJudicialContractBreach": [
"assets/project-dossier-r9kw2IAG.js"
],
"netComposition": [
"assets/project-dossier-r9kw2IAG.js"
],
"moneyAmount": [
"assets/project-dossier-r9kw2IAG.js",
"assets/services-CKl5s1KP.js"
],
"nonMoneyValue": [
"assets/project-dossier-r9kw2IAG.js",
"assets/services-CKl5s1KP.js"
],
"valuationRef": [
"assets/project-dossier-r9kw2IAG.js",
"assets/services-CKl5s1KP.js"
],
"compositionRef": [
"assets/project-dossier-r9kw2IAG.js",
"assets/services-CKl5s1KP.js"
],
"Base tributável — actos de autoridades públicas": [
"assets/services-CKl5s1KP.js"
],
"IVA: Indeterminado": [
"assets/project-dossier-r9kw2IAG.js"
]
},
"assets": [
{
"file": "assets/project-dossier-r9kw2IAG.js",
"status": 200,
"sha256": "be5f9cf4bd33b0ea403aad708c597d2d4a2845c0c6c7f88912d01e9c47a64437"
},
{
"file": "assets/services-CKl5s1KP.js",
"status": 200,
"sha256": "1d2cf9df2ff58b80736ace80919fa6babfabd4c27b3682837efdc3f356806cc8"
},
{
"file": "assets/project-dossier-document-Bp8qUQYk.js",
"status": 200,
"sha256": "b1cb8610d59242f4ba93b2b8daee39117e84581b398eebb0f94f8ac816d54fa2"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-C6BeHYgp.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"release": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"previous_release": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"release": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"previous_release": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"4193056bdd69b48cf61c25a9a7404af4f0957f3c"
],
"finished_at": "2026-10-24T19:52:06.346782+00:00"
},
"log_file": "1792871430237468068.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.18s",
"OK (59 tests, 317 assertions)",
"# tests 346",
"# pass 346",
"# fail 0"
],
"log_bytes": 129865
},
"rollback_executed": false
},
"base_VAT_separation": "Accepted QA proofs reused:baseAmount independent from vat/rate(alwaysnull),references/inputs/version/history/report preserved. Exact four installed runtime hashes and compiled component/ledger/report markers checked;no synthetic write or repeated acceptance tests in active.",
"activation": "Normal Git fast-forward/webhook/installer;zero migrations/imports"
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-public-authority-base.ts
+++ b/resources/js/lib/iva-public-authority-base.ts
@@ -60,6 +60,7 @@
function formLabel(value:string):string{return value==='money'?'Em dinheiro':value==='non_money'?'Em espécie':value==='mixed'?'Mista — dinheiro e espécie':'Por indicar';}
export function publicBaseCurrent(draft:Record<string,unknown>,book:PublicBaseBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
export function recordPublicBases(draft:Record<string,unknown>,book:PublicBaseBook):PublicBaseBook{
+ throw new Error('Novas bases P090 temporariamente suspensas; dados, histórico, relatórios e restantes ramos preservados.');
if(!book.rows.length||new Set(book.rows.map(row=>row.id)).size!==book.rows.length)throw new Error('Indique operações com identificadores distintos; originais conservados.');
const result:PublicBaseCalculation={version:publicBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:publicBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluatePublicBase(row,draft.currency))};
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};savePublicBaseBook(draft,next);return next;
@@ -0,0 +1,302 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "9bd2e062f427155a9877abc14876183ff4b7d9e0",
"base_installed": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"coverage_complete_branches": {
"AUD-SIM-L1-P091": [
"commission_sale_transfer",
"commission_purchase_transfer"
]
},
"branch_count_complete": 1,
"treatment_count": 2,
"runtime_delta": [
{
"path": "resources/js/lib/iva-commission-base.ts",
"sha256_LF": "3be1331f4da40e6292fa7f5dcfba28355af6d931a7d24f44eb081c6f16c8efb2"
},
{
"path": "resources/js/components/simulation-commission-base.tsx",
"sha256_LF": "5bfbb95d2dd22106d7d416fd3af0f7ae0778f22ae9d23da15ba9dd45882cfc94"
},
{
"path": "resources/js/components/simulation-monthly-iva.tsx",
"sha256_LF": "16c95f5eaf5d5a308c93b30523292e52ccafed9d4e7f897f8559459116fbf4ae"
},
{
"path": "resources/js/lib/project-dossier.ts",
"sha256_LF": "945a9e2a4a9aa6a26f7108f95d4fd237c0551dbf884cec41bcaa3eba592acc4a"
}
],
"counts_before": {
"delivered": 79,
"QA": 1,
"functional_pending": 52,
"documentary": 1,
"total": 133
},
"counts_current": {
"delivered": 80,
"QA": 0,
"functional_pending": 52,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 80,
"QA": 0,
"functional_pending": 52,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": [
"iva-l1-g7b-qa-20261024.json"
],
"authorization": "Tempo explicitly deploy9bd2e062 through existingGit,preserve concurrentchanges and check installeddelta only;two treatments sameP091branch,base remains separate fromVAT",
"scope": "P091only,commission_sale_transfer/commission_purchase_transfer;saleprice-minuscommission/purchaseprice-pluscommission,principal/agent/contract/price/commission/compositionreferences in immutable result.inputs/report;vat/rate alwaysnull,no incidence/tax/deduction/field11/ModeloAtotals inferred",
"preservation": "79priorclosures and partialP084/P085 preserved;acceptedQA reused;freshbackup/realisolatedrestore beforeinstallation;installeddelta only;P060decision/list/plan/scope andproportionalresults,P056authorization,P050serviceVAT preserved",
"partial_P084_P085": "Already available for preparation/conditional simulation only,benefits pending;no closure in this release",
"limits": "L1open;P00105/06;beveragesL2/L3;Statistics/AIdeferred;L1closuredoesnotrequireL2/L3/alltaxes",
"containment": "l1-g7b-readonly-rollback-20261024.patch,checked only,not applied;blocks newP091calculations only,preserves readers/history andotherbranches",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"release": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"previous_release": "/var/www/investmoz-homologacao/releases/eb9294ef42c2cfc97eb8c2553d545e3bff7c0add-08cf86ab",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"release_revision": {
"commit": "4193056bdd69b48cf61c25a9a7404af4f0957f3c",
"branch": "main",
"built_at": "2026-10-24T19:52:03.661019+00:00",
"manifest_sha256": "7c9c5a728ad2afa1157a4a74a013dce1538a915f080d74790052655030582884"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g7b-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "14910f7a6372948985ca3e0d6deddca5e079e015c7554cdb46d4a150c4b0a204",
"files_sha256": "09e56a62d74f60773bb9da0da520ddafa790f39489a2f8335ebb9d949ae0445a",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g7b_restore_20261024",
"port": 55441,
"source_dump_sha256": "14910f7a6372948985ca3e0d6deddca5e079e015c7554cdb46d4a150c4b0a204",
"active_database_writes": 0
}
},
"served_commit": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"release": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"previous_release": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 4,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "828efdd2e464a169de683e0bc582767b"
},
"after": {
"rows": 105,
"checksum": "3d23e6ba4ed2476e65e0bf3687da774e"
}
},
"sessions": {
"before": {
"rows": 56,
"checksum": "28841e1b889560d2d78d41b0464e83e4"
},
"after": {
"rows": 57,
"checksum": "2a2fd7e26ccced1b89fdd0d497b3036b"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"branch": "main",
"built_at": "2026-10-24T20:15:27.726611+00:00",
"manifest_sha256": "dccf1e8a2fabf42a877cac166b5821548af5a6e6cfbf2c8578afebb70468c531"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"commission-goods-base/1": [
"assets/project-dossier-C03JDnMc.js"
],
"commission_sale_transfer": [
"assets/project-dossier-C03JDnMc.js"
],
"commission_purchase_transfer": [
"assets/project-dossier-C03JDnMc.js"
],
"commissionBases": [
"assets/project-dossier-C03JDnMc.js"
],
"taxableDomesticGoods": [
"assets/project-dossier-C03JDnMc.js"
],
"commissionContract": [
"assets/project-dossier-C03JDnMc.js"
],
"directionConfirmed": [
"assets/project-dossier-C03JDnMc.js"
],
"notSpecialAuction": [
"assets/project-dossier-C03JDnMc.js"
],
"agreedPrice": [
"assets/project-dossier-C03JDnMc.js",
"assets/services-BQD7ago3.js"
],
"commissionAmount": [
"assets/project-dossier-C03JDnMc.js",
"assets/services-BQD7ago3.js"
],
"agreementRef": [
"assets/project-dossier-C03JDnMc.js",
"assets/services-BQD7ago3.js"
],
"priceRef": [
"assets/project-dossier-C03JDnMc.js",
"assets/services-BQD7ago3.js"
],
"commissionRef": [
"assets/project-dossier-C03JDnMc.js",
"assets/services-BQD7ago3.js"
],
"IVA: Indeterminado": [
"assets/project-dossier-C03JDnMc.js"
]
},
"assets": [
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-C03JDnMc.js",
"status": 200,
"sha256": "6afe3105603d2d99eb6c1f10ac0478425ac7edbea306ead42900e8d7752526da"
},
{
"file": "assets/services-BQD7ago3.js",
"status": 200,
"sha256": "dba6c2c3a511902395f1798e5b03083e4413a5aaa530e3e408e716edd614af93"
},
{
"file": "assets/project-dossier-document-B6GsDYYK.js",
"status": 200,
"sha256": "083e27ff6b3262e988de1dfcf8ea7f90bf5ea5f06b9a36afeb1cde1bff36e4b8"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-BAqBGTCO.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"release": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"previous_release": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"release": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"previous_release": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"e62b7dfdc25f7c12425e89cea26f7ccf67b7d177"
],
"finished_at": "2026-10-24T20:15:30.463596+00:00"
},
"log_file": "1792872831592310207.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.87s",
"OK (59 tests, 317 assertions)",
"# tests 350",
"# pass 350",
"# fail 0"
],
"log_bytes": 131096
},
"rollback_executed": false
},
"base_VAT_separation": "Accepted QA reused:saleprice minuscommission/purchaseprice pluscommission,baseAmount independentfromvat/rate(alwaysnull),immutable references/inputs/version/history/report retained. Exact four installed runtime hashes and compiled ledger/component/report markers verified;no synthetic activewrite.",
"activation": "Normal Git fast-forward/webhook/installer;zero migrations/imports"
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-commission-base.ts
+++ b/resources/js/lib/iva-commission-base.ts
@@ -51,6 +51,7 @@
function key(draft:Record<string,unknown>,book:CommissionBaseBook):string{return JSON.stringify({version:commissionBaseVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
export function commissionBaseCurrent(draft:Record<string,unknown>,book:CommissionBaseBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
export function recordCommissionBases(draft:Record<string,unknown>,book:CommissionBaseBook):CommissionBaseBook{
+ throw new Error('Novas bases P091 temporariamente suspensas; dados, histórico, relatórios e restantes ramos preservados.');
if(!book.rows.length||new Set(book.rows.map(row=>row.id)).size!==book.rows.length)throw new Error('Indique operações com identificadores distintos;originais conservados.');
const result:CommissionBaseCalculation={version:commissionBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:commissionBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateCommissionBase(row,draft.currency))};
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};saveCommissionBaseBook(draft,next);return next;
@@ -0,0 +1,304 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "287f2f8321038dc72ff8f0746526df0761a871d6",
"base_installed": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"coverage_complete_branches": {
"AUD-SIM-L1-P094": [
"act_sale_amount",
"act_normal_value"
]
},
"branch_count_complete": 1,
"treatment_count": 2,
"runtime_delta": [
{
"path": "resources/js/lib/iva-act-sale-base.ts",
"sha256_LF": "ed555c826427a0964995144c59d4e801bfeebce5219a63a612f31bb977788d00"
},
{
"path": "resources/js/components/simulation-act-sale-base.tsx",
"sha256_LF": "384e17aa18ed5ed9a8c6c47773577e87f211c2bccb3acbe3943269a08de1485a"
},
{
"path": "resources/js/components/simulation-monthly-iva.tsx",
"sha256_LF": "3b2a24fde6db625c350f7366ec789b5aa7e86aa08645409203b5e96d02dc1ff3"
},
{
"path": "resources/js/lib/project-dossier.ts",
"sha256_LF": "852ceaf59b95d92ff57d3b711dc2bc13eb4b547e7d9f1516eb543ece83247c09"
}
],
"counts_before": {
"delivered": 80,
"QA": 1,
"functional_pending": 51,
"documentary": 1,
"total": 133
},
"counts_current": {
"delivered": 81,
"QA": 0,
"functional_pending": 51,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 81,
"QA": 0,
"functional_pending": 51,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": [
"iva-l1-g7c-qa-20261024.json"
],
"authorization": "Tempo explicitly deploy287f2f83 through existingGit,preserve concurrentchanges and check installeddelta only;two treatments sameP094branch",
"scope": "2026/MZN,P094baseonly;normal value supplied with identified basis/scope,not appraised automatically. No incidence,rate,VAT,deduction/field11/ModeloAtotals or substitution of special auctioncommission15g. Unknown values remain indeterminate,explicit zero distinguished.",
"meaning": "Goods transferred as result of auction,judicial/administrative sale,conciliation or settlement;value at which auction/sale effected or,where applicable,normal value. Five act kinds are contexts,not five branches. No automatic lower value or normal-value fallback.",
"preservation": "80priorclosures and partialP084/P085 preserved;acceptedQA reused;freshbackup/realisolatedrestore beforeinstallation;installeddelta only",
"partial_P084_P085": "Preparation/conditional simulation only,benefits pending;no closure",
"limits": "P084/P085partial,pending;P00105/06;L1open;beveragesL2/L3;Statistics/AIdeferred",
"containment": "l1-g7c-readonly-rollback-20261024.patch,checked only,not applied;blocks newP094calculations only,preserves readers/history/otherbranches",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"release": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"previous_release": "/var/www/investmoz-homologacao/releases/4193056bdd69b48cf61c25a9a7404af4f0957f3c-c2452b39",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"release_revision": {
"commit": "e62b7dfdc25f7c12425e89cea26f7ccf67b7d177",
"branch": "main",
"built_at": "2026-10-24T20:15:27.726611+00:00",
"manifest_sha256": "dccf1e8a2fabf42a877cac166b5821548af5a6e6cfbf2c8578afebb70468c531"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g7c-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "15851ca2ed235382c8acb325b154470e191d95c10d5c2dac8fa9be287132d024",
"files_sha256": "af9076b5993550acd8aa55ac85a1112822f6db26f744247cfcc76d6f03ee7925",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g7c_restore_20261024",
"port": 55441,
"source_dump_sha256": "15851ca2ed235382c8acb325b154470e191d95c10d5c2dac8fa9be287132d024",
"active_database_writes": 0
}
},
"served_commit": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"installation": {
"protected": {
"installed": {
"status": "installed",
"commit": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"release": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
"previous_release": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 4,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 105,
"checksum": "4d4e4736806e5d22cd9d595e33c7007b"
},
"after": {
"rows": 105,
"checksum": "d651a6b29d74efd7336b21519b0dfbfa"
}
},
"sessions": {
"before": {
"rows": 59,
"checksum": "05c7fab88f6e1b760d58c9133e156fc0"
},
"after": {
"rows": 60,
"checksum": "f67f94f21e3abaee1b40b2b2fde2f303"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"branch": "main",
"built_at": "2026-10-24T20:28:33.858560+00:00",
"manifest_sha256": "01f5a06e9be1e2a758de06c51a1c145ab96d83c838b899806f442eec70158e72"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"act-goods-base/1": [
"assets/project-dossier-DYUXbyuH.js"
],
"act_sale_amount": [
"assets/services-BaH3LfAj.js",
"assets/project-dossier-DYUXbyuH.js"
],
"act_normal_value": [
"assets/project-dossier-DYUXbyuH.js"
],
"actSaleBases": [
"assets/project-dossier-DYUXbyuH.js"
],
"taxableDomesticGoods": [
"assets/project-dossier-DYUXbyuH.js"
],
"goodsByAct": [
"assets/project-dossier-DYUXbyuH.js"
],
"valuationApplies": [
"assets/project-dossier-DYUXbyuH.js"
],
"notAuctionCommissionRegime": [
"assets/project-dossier-DYUXbyuH.js"
],
"actValue": [
"assets/services-BaH3LfAj.js",
"assets/project-dossier-DYUXbyuH.js"
],
"normalValue": [
"assets/services-BaH3LfAj.js",
"assets/project-dossier-DYUXbyuH.js"
],
"actRef": [
"assets/services-BaH3LfAj.js",
"assets/project-dossier-DYUXbyuH.js"
],
"valuationRef": [
"assets/services-BaH3LfAj.js",
"assets/project-dossier-DYUXbyuH.js"
],
"valuationScope": [
"assets/services-BaH3LfAj.js",
"assets/project-dossier-DYUXbyuH.js"
],
"IVA: Indeterminado": [
"assets/project-dossier-DYUXbyuH.js"
]
},
"assets": [
{
"file": "assets/project-dossier-document-B8tRTV0Q.js",
"status": 200,
"sha256": "526b505a0ad7aea611751cadec6efaf47686d9936755698ef6842e62a243fa6e"
},
{
"file": "assets/services-BaH3LfAj.js",
"status": 200,
"sha256": "bb614c00b830d9a4d9b5db82976f341617a23810577ab8f32fe1b674f3ca8dba"
},
{
"file": "assets/project-dossier-DYUXbyuH.js",
"status": 200,
"sha256": "2f41f74e6dc395fd85b2e56d60e6325691478ad89dab9c2f4de4c503da0c7700"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-ClRJoV6g.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"release": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
"previous_release": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"release": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
"previous_release": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"df7cb7fa47f50ae23f52c1bdf7e48e38489cffef"
],
"finished_at": "2026-10-24T20:28:36.398859+00:00"
},
"log_file": "1792873616425230362.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 25.93s",
"OK (59 tests, 317 assertions)",
"# tests 354",
"# pass 354",
"# fail 0"
],
"log_bytes": 132224
},
"rollback_executed": false
},
"base_VAT_separation": "Accepted QA reused:act-sale amount or normal value where applicable,identified act/valuation basis/scope/composition retained with immutable inputs/history/report;no automatic minimum/fallback. Base independent of VAT/rate(alwaysnull). Four installed runtime hashes and14compiled markers verified;no synthetic activewrite.",
"activation": "Normal Git fast-forward/webhook/installer;zero migrations/imports"
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-act-sale-base.ts
+++ b/resources/js/lib/iva-act-sale-base.ts
@@ -47,6 +47,7 @@
function key(draft:Record<string,unknown>,book:ActSaleBook):string{return JSON.stringify({version:actSaleBaseVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
export function actSaleCurrent(draft:Record<string,unknown>,book:ActSaleBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
export function recordActSaleBases(draft:Record<string,unknown>,book:ActSaleBook):ActSaleBook{
+ throw new Error('Novas bases P094 temporariamente suspensas; dados, histórico, relatórios e restantes ramos preservados.');
if(!book.rows.length||new Set(book.rows.map(row=>row.id)).size!==book.rows.length)throw new Error('Indique operações com identificadores distintos;originais conservados.');
const result:ActSaleCalculation={version:actSaleBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:actSaleBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateActSale(row,draft.currency))};
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};saveActSaleBook(draft,next);return next;
@@ -0,0 +1,131 @@
{
"status": "ready_after_fresh_authenticated_preflight_and_verified_backup_restore",
"candidate": "76be72c38c459c09345b57a4d27ccc01edc7052b",
"base_installed": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"coverage_complete_branches": {
"AUD-SIM-L1-P095": [
"fuel_tax_included",
"fuel_tax_excluded"
]
},
"branch_count_complete": 1,
"treatment_count": 2,
"runtime_delta": [
{
"path": "resources/js/lib/iva-fuel-base.ts",
"sha256_LF": "3e00b285b2bfd4e0cdd7106be5f8ebd86dbc17b4dd83e36ccba844b6d6a7a9d2"
},
{
"path": "resources/js/components/simulation-fuel-base.tsx",
"sha256_LF": "d55f8ede39ed42114c9eed473684cf1a764420e63cdb0faf2af4906773b8cfd9"
},
{
"path": "resources/js/components/simulation-monthly-iva.tsx",
"sha256_LF": "11988f00f562c8d86db442cd7996a6640e8916feea11230f6105521985d83720"
},
{
"path": "resources/js/lib/project-dossier.ts",
"sha256_LF": "85ca23ac160e7e06c0e605bfc0dc1a4ed2678df94136eaaa21ccfcba883a7e7c"
}
],
"counts_before": {
"delivered": 81,
"QA": 1,
"functional_pending": 50,
"documentary": 1,
"total": 133
},
"counts_current": {
"delivered": 81,
"QA": 1,
"functional_pending": 50,
"documentary": 1,
"total": 133
},
"counts_after_delivery": {
"delivered": 82,
"QA": 0,
"functional_pending": 50,
"documentary": 1,
"total": 133
},
"QA_proofs_reused": [
"iva-l1-g7d-qa-20261024.json"
],
"authorization": "Tempo explicitly deploy76be72c3 through existingGit,preserve concurrentchanges and check installeddelta only;two input-composition treatments sameP095branch;no double TC subtraction",
"scope": "2026/MZN,P095baseonly;no automatic price,TC rate/amount,IVA/incidence/rate/deduction/field11/ModeloAtotals. Not general fuel purchases/services or unregulated price. Unknown TC/price parameters indeterminate;zero only explicit. TC exceeding consideration remains indeterminate,not negative/flooredzero.",
"meaning": "Transmissions of fuel with price fixed by public authority,effected by resellers;consideration under15(1)/(5) excludes FuelTax(TC). Two input-composition treatments in one branch,not two legal benefits.",
"formula": {
"fuel_tax_included": "consideration net of own VAT but including TC minus exact TC amount",
"fuel_tax_excluded": "consideration already net of own VAT and TC,unchanged;no second subtraction"
},
"preservation": "81priorclosures and partialP084/P085 preserved;acceptedQA reused;freshbackup/realisolatedrestore beforeinstallation;installeddelta only",
"partial_P084_P085": "Preparation/conditional simulation only,benefits pending;no closure",
"limits": "P084/P085partial,pending;P00105/06;L1open;beveragesL2/L3;Statistics/AIdeferred",
"containment": "l1-g7d-readonly-rollback-20261024.patch,checked only,not applied;blocks newP095calculations only,preserves readers/history/otherbranches",
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"release": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
"previous_release": "/var/www/investmoz-homologacao/releases/e62b7dfdc25f7c12425e89cea26f7ccf67b7d177-c1e20222",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
"release_revision": {
"commit": "df7cb7fa47f50ae23f52c1bdf7e48e38489cffef",
"branch": "main",
"built_at": "2026-10-24T20:28:33.858560+00:00",
"manifest_sha256": "01f5a06e9be1e2a758de06c51a1c145ab96d83c838b899806f442eec70158e72"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup_restore": {
"backup": {
"stage": "/var/backups/investmoz-l1-g7d-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "ad8be21f2b91f0a61c14b3a1df82952710937b44d70bbc45c9add3a8ab215789",
"files_sha256": "63fbe8b63f34ce373eee096d1eba9d5461162c55a2d01bb351e3e68eb3034cae",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_g7d_restore_20261024",
"port": 55441,
"source_dump_sha256": "ad8be21f2b91f0a61c14b3a1df82952710937b44d70bbc45c9add3a8ab215789",
"active_database_writes": 0
}
}
}
@@ -0,0 +1,10 @@
--- a/resources/js/lib/iva-fuel-base.ts
+++ b/resources/js/lib/iva-fuel-base.ts
@@ -51,6 +51,7 @@
function key(draft:Record<string,unknown>,book:FuelBaseBook):string{return JSON.stringify({version:fuelBaseVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
export function fuelBaseCurrent(draft:Record<string,unknown>,book:FuelBaseBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
export function recordFuelBases(draft:Record<string,unknown>,book:FuelBaseBook):FuelBaseBook{
+ throw new Error('Novas bases P095 temporariamente suspensas; dados, histórico, relatórios e restantes ramos preservados.');
if(!book.rows.length||new Set(book.rows.map(row=>row.id)).size!==book.rows.length)throw new Error('Indique operações com identificadores distintos;originais conservados.');
const result:FuelBaseCalculation={version:fuelBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:fuelBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateFuelBase(row,draft.currency))};
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};saveFuelBaseBook(draft,next);return next;
@@ -0,0 +1,512 @@
{
"status": "installed_delta_verified_partial_L1",
"candidate": "4a35d63cd3535195e4e2a37740b2f52813ff1da9",
"base_remote_main": "1655f57e698fef4099c2886069a79cd1c920f792",
"fetch": "completed;noforce;localmainnotused",
"bundle": {
"path": "outputs\\iva-l1-g2-social-20261024\\l1-joint-4a35d63c.bundle",
"candidate": "4a35d63cd3535195e4e2a37740b2f52813ff1da9",
"base": "1655f57e698fef4099c2886069a79cd1c920f792",
"sha256": "7e23cabda77c8e7b117091a08613436f02c32a9d23d023d4d030c9041eb43146",
"bytes": 166937,
"verified": true,
"content": "FunctionalQAcommit4a35d63c+historyfromorigin/main;receiptmetadatafinalizedseparately;noactivepush"
},
"coverage": {
"initial_QA": "544068e8/d89912e5:10conditionaltreatments",
"rational_QA": "689e7cbe/8719e916;exactincluded5%andreaders",
"G1": "5030116e/89ab2883:4branches/4treatments",
"G2A": "675cf38f/0e644b55:5branches/5treatments",
"G2B": {
"AUD-SIM-L1-P009": [
"social_assistance_public",
"social_assistance_nonprofit"
],
"AUD-SIM-L1-P011": [
"social_care_public",
"social_care_nonprofit"
],
"AUD-SIM-L1-P012": [
"activity_facilities_public",
"activity_facilities_nonprofit"
]
},
"conditional_treatments_total": 25,
"indeterminate_options": 2,
"QA_covered_inventory_IDs": [
"AUD-SIM-L1-P003",
"AUD-SIM-L1-P004",
"AUD-SIM-L1-P005",
"AUD-SIM-L1-P006",
"AUD-SIM-L1-P007",
"AUD-SIM-L1-P009",
"AUD-SIM-L1-P011",
"AUD-SIM-L1-P012",
"AUD-SIM-L1-P017",
"AUD-SIM-L1-P018",
"AUD-SIM-L1-P029",
"AUD-SIM-L1-P030"
],
"pending_functional_IDs": [
"AUD-SIM-L1-P002",
"AUD-SIM-L1-P008",
"AUD-SIM-L1-P010",
"AUD-SIM-L1-P013",
"AUD-SIM-L1-P014",
"AUD-SIM-L1-P015",
"AUD-SIM-L1-P016",
"AUD-SIM-L1-P019",
"AUD-SIM-L1-P020",
"AUD-SIM-L1-P021",
"AUD-SIM-L1-P022",
"AUD-SIM-L1-P023",
"AUD-SIM-L1-P024",
"AUD-SIM-L1-P025",
"AUD-SIM-L1-P026",
"AUD-SIM-L1-P027",
"AUD-SIM-L1-P028",
"AUD-SIM-L1-P031",
"AUD-SIM-L1-P032",
"AUD-SIM-L1-P033",
"AUD-SIM-L1-P034",
"AUD-SIM-L1-P035",
"AUD-SIM-L1-P036",
"AUD-SIM-L1-P037",
"AUD-SIM-L1-P038",
"AUD-SIM-L1-P039",
"AUD-SIM-L1-P040",
"AUD-SIM-L1-P041",
"AUD-SIM-L1-P042",
"AUD-SIM-L1-P043",
"AUD-SIM-L1-P044",
"AUD-SIM-L1-P045",
"AUD-SIM-L1-P046",
"AUD-SIM-L1-P047",
"AUD-SIM-L1-P048",
"AUD-SIM-L1-P049",
"AUD-SIM-L1-P050",
"AUD-SIM-L1-P051",
"AUD-SIM-L1-P052",
"AUD-SIM-L1-P053",
"AUD-SIM-L1-P054",
"AUD-SIM-L1-P055",
"AUD-SIM-L1-P056",
"AUD-SIM-L1-P057",
"AUD-SIM-L1-P058",
"AUD-SIM-L1-P059",
"AUD-SIM-L1-P060",
"AUD-SIM-L1-P061",
"AUD-SIM-L1-P062",
"AUD-SIM-L1-P063",
"AUD-SIM-L1-P064",
"AUD-SIM-L1-P065",
"AUD-SIM-L1-P066",
"AUD-SIM-L1-P067",
"AUD-SIM-L1-P068",
"AUD-SIM-L1-P069",
"AUD-SIM-L1-P070",
"AUD-SIM-L1-P071",
"AUD-SIM-L1-P072",
"AUD-SIM-L1-P073",
"AUD-SIM-L1-P074",
"AUD-SIM-L1-P075",
"AUD-SIM-L1-P076",
"AUD-SIM-L1-P077",
"AUD-SIM-L1-P078",
"AUD-SIM-L1-P079",
"AUD-SIM-L1-P080",
"AUD-SIM-L1-P081",
"AUD-SIM-L1-P082",
"AUD-SIM-L1-P083",
"AUD-SIM-L1-P084",
"AUD-SIM-L1-P085",
"AUD-SIM-L1-P086",
"AUD-SIM-L1-P087",
"AUD-SIM-L1-P088",
"AUD-SIM-L1-P089",
"AUD-SIM-L1-P090",
"AUD-SIM-L1-P091",
"AUD-SIM-L1-P092",
"AUD-SIM-L1-P093",
"AUD-SIM-L1-P094",
"AUD-SIM-L1-P095",
"AUD-SIM-L1-P096",
"AUD-SIM-L1-P097",
"AUD-SIM-L1-P098",
"AUD-SIM-L1-P099",
"AUD-SIM-L1-P100",
"AUD-SIM-L1-P101",
"AUD-SIM-L1-P102",
"AUD-SIM-L1-P103",
"AUD-SIM-L1-P104",
"AUD-SIM-L1-P105",
"AUD-SIM-L1-P106",
"AUD-SIM-L1-P107",
"AUD-SIM-L1-P108",
"AUD-SIM-L1-P109",
"AUD-SIM-L1-P110",
"AUD-SIM-L1-P111",
"AUD-SIM-L1-P112",
"AUD-SIM-L1-P113",
"AUD-SIM-L1-P114",
"AUD-SIM-L1-P115",
"AUD-SIM-L1-P116",
"AUD-SIM-L1-P117",
"AUD-SIM-L1-P118",
"AUD-SIM-L1-P119",
"AUD-SIM-L1-P120",
"AUD-SIM-L1-P121",
"AUD-SIM-L1-P122",
"AUD-SIM-L1-P123",
"AUD-SIM-L1-P124",
"AUD-SIM-L1-P125",
"AUD-SIM-L1-P126",
"AUD-SIM-L1-P127",
"AUD-SIM-L1-P128",
"AUD-SIM-L1-P129",
"AUD-SIM-L1-P130",
"AUD-SIM-L1-P131",
"AUD-SIM-L1-P132",
"AUD-SIM-L1-P133"
],
"pending_documentary_IDs": [
"AUD-SIM-L1-P001"
]
},
"runtime_delta": [
{
"path": "resources/js/components/simulation-monthly-iva.tsx",
"sha256_LF": "27e9f7b0a6cd011d6278d5bf507c8df0a290432006d795e9f7bf03b05fc6b350"
},
{
"path": "resources/js/components/simulation-operations.tsx",
"sha256_LF": "ae8fafbff339c4b52bae11ad479caf0fb451e5543e59bfbf15becf9aab4c5d27"
},
{
"path": "resources/js/lib/fiscal-rational.ts",
"sha256_LF": "91234efa465a8660f71a56e48d280a602c56ecf2ccce9cf7a8d91db513a3ffd3"
},
{
"path": "resources/js/lib/iva-acquisitions.ts",
"sha256_LF": "846dbd2d2dbdd54ffcddae8623eeaa2ae4f7686c6e2db05590ffa893d3ffbfb0"
},
{
"path": "resources/js/lib/iva-operations.ts",
"sha256_LF": "fb41bf3d6cf14ee65bf242f5a2504f9d4758c8d87bb4c4e9eda4822f74aa4d7f"
},
{
"path": "resources/js/lib/project-dossier.ts",
"sha256_LF": "5a6ea8a8c7261fa1d24cca56e92617cd66f72bd027dbafec22d051e686e927d7"
}
],
"schema_routes_permissions_dependencies_changed": false,
"database_imports_migrations_seeds": [],
"server_fiscal_rule_activation": false,
"activation": {
"method": "ExistingGitFF/merge+build+webhook;no new mandatory flag",
"preflight": [
"Re-fetchorigin/main;reconcileconcurrentchangeswithoutforce",
"Confirmactualservedrevisionandvalidbackup/restoreresultthroughauthenticatedexistingprocess",
"Usecompiledassets;excludeoutputs/syntheticdata/publichot/secrets",
"No globalmigration,seed,taxpublication or datareplacement"
],
"installed_delta_only": [
"servedrevisionandmanifesthash",
"simulatorusesnewasset",
"newoptions/readerscontextvisible;existingdraftrecoverable",
"prioracceptedproofsreused;nosyntheticwritesinactive"
],
"completed": true,
"database_migrations": 0,
"content_imports": 0
},
"reversal": {
"preferred": "ForwardGitcompatibilitycontainmentcommitusingpreparedreadonlypatch,notDBrestore;revertcontainmentcommitafterfix",
"patch": {
"patch": "docs\\investmoz\\simulations\\l1-joint-readonly-rollback-20261024.patch",
"patch_sha256": "d25a81f025ffeeb5869161404eb23b9762d87e07b4a820c14b63d29359d0db0e",
"component_before_sha256": "37676ccb4302e5fdf5dceb58291809f120ea204c2a8c6a59ede9585f8753aa73",
"git_apply_check": true,
"live_component_changed": false,
"purpose": "Operational compatibility rollback: suspend edits/calculations in L1 panel only;keep catalogue,readers,history,API,otherforms and reports;no DBrestore or broad path disable"
},
"QA_UI": "L1inputs/calculationdisabled;details/result600MZN/revision3/readers/reportsremain;otherforms/APIpermissionsunchanged",
"limitations": "UIoperationalcontainment,notAPIauthorizationchange;fullrollbackto1655wouldhidenewL1readersandisnotpreferred"
},
"destination_precheck": {
"public_revision_url": "https://teste-investidor.tempo.co.mz/build/revision.json",
"result": "Authenticateddestinationverified;existingdeliveryHTTPclient200;defaulturllib403/Cloudflare1010",
"served_revision_verified_this_pass": true,
"protected_installer_or_current_backup_verified": true,
"historical_initial_result": "HTTP403 before client diagnostic",
"diagnostic": [
{
"request": "default",
"status": 403,
"headers": {
"Content-Type": "text/plain; charset=UTF-8",
"Server": "cloudflare",
"CF-RAY": "a4f8f78b4cb51d20-JNB"
},
"body_sha256": "2938e9f1284180959e33ab1718d0793a72ff6e4cdb8108c34dcd14e69446de5c",
"error_excerpt": "error code: 1010\n"
},
{
"request": "existing_delivery",
"status": 200,
"headers": {
"Content-Type": "application/json",
"Server": "cloudflare",
"CF-RAY": "a4f8f78bdf3c3575-JNB"
},
"body_sha256": "ad3f581baf0ef17706246b1f87c5fd0fd3659b14c6ed8f7661a19d68d838d40b",
"commit": "1655f57e698fef4099c2886069a79cd1c920f792"
}
],
"cloudflare_reference": "https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1010/",
"conclusion": "Cloudflare1010forurllibdefault;existingdeliveryclient200;specificCloudflarerulenotinspected;noapplicationpermissioncauseorconfigurationchangerequired"
},
"excluded": [
"P001mapping",
"120unimplementedbranches",
"newtaxes",
"IRPC/IRPS",
"statistics/AI",
"syntheticQArecordsandruntimefiles"
],
"delivery_performed": true,
"integration_preview": {
"remote": "1655f57e698fef4099c2886069a79cd1c920f792",
"merge_tree": "2284cf875e1b2ee6dd34ae5d182f57a3c194bf22",
"candidate_tree_equal": true,
"fast_forward_possible": true,
"conflicts": false,
"main_not_moved": true,
"scope": "Historicalpreparationpreview,beforeauthorizedmainfastforward"
},
"delivery_commit": "490527b92cf1ca18122679440ff3a38933b7e0c2",
"previous_main": "1655f57e698fef4099c2886069a79cd1c920f792",
"installation": {
"authenticated_preflight": {
"installed": {
"status": "installed",
"commit": "1655f57e698fef4099c2886069a79cd1c920f792",
"release": "/var/www/investmoz-homologacao/releases/1655f57e698fef4099c2886069a79cd1c920f792-fe9d3b11",
"previous_release": "/var/www/investmoz-homologacao/releases/cd10cccbf45f53836d8bf7b2bd90794d99602cb9-a38feaad",
"database_migrations": 0,
"content_imports": 0
},
"current_link": "/var/www/investmoz-homologacao/releases/1655f57e698fef4099c2886069a79cd1c920f792-fe9d3b11",
"release_revision": {
"commit": "1655f57e698fef4099c2886069a79cd1c920f792",
"branch": "main",
"built_at": "2026-10-24T10:18:11.360273+00:00",
"manifest_sha256": "dfb82481796aaf5826e8a5108575de3807ee787faffa92f38a56bb8d9caf5ce7"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"configuration_keys": [
"repository",
"branch",
"target_url",
"legacy_root",
"state_root",
"release_root",
"current_link",
"shared_assets",
"php",
"schema_contract",
"ci_environment",
"postgis_image",
"test_database",
"qa_port",
"retention",
"webhook_secret_file"
],
"safe_paths": {
"repository": "nala/Investidor-V2",
"release_root": "/var/www/investmoz-homologacao/releases",
"postgis_image": "postgis/postgis@sha256:01a6a70e41e6c4467c8f55f6063555ed72db2d6662cd0d571040d42eadaeb6f6"
},
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604"
},
"backup": {
"stage": "/var/backups/investmoz-l1-joint-delivery-20261024/backup",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "6e9a2b0b350b0effe0812e7e5faa5c9c1886611a50c1be5f8b00515d7ef0c5ea",
"files_sha256": "53c170aa33714e78d997790cb7c75d672e9680052f7b2ffa5bccf2b719ca248e",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "l1_joint_restore_20261024",
"port": 55441,
"source_dump_sha256": "6e9a2b0b350b0effe0812e7e5faa5c9c1886611a50c1be5f8b00515d7ef0c5ea",
"active_database_writes": 0
},
"installer": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "490527b92cf1ca18122679440ff3a38933b7e0c2",
"release": "/var/www/investmoz-homologacao/releases/490527b92cf1ca18122679440ff3a38933b7e0c2-d41ae12f",
"previous_release": "/var/www/investmoz-homologacao/releases/1655f57e698fef4099c2886069a79cd1c920f792-fe9d3b11",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "490527b92cf1ca18122679440ff3a38933b7e0c2",
"release": "/var/www/investmoz-homologacao/releases/490527b92cf1ca18122679440ff3a38933b7e0c2-d41ae12f",
"previous_release": "/var/www/investmoz-homologacao/releases/1655f57e698fef4099c2886069a79cd1c920f792-fe9d3b11",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"490527b92cf1ca18122679440ff3a38933b7e0c2"
],
"finished_at": "2026-10-24T12:30:02.029150+00:00"
},
"log_file": "1792844919670368682.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 23.74s",
"OK (59 tests, 317 assertions)",
"# tests 247",
"# pass 247",
"# fail 0"
],
"log_bytes": 100122
},
"protected_preservation": {
"installed": {
"status": "installed",
"commit": "490527b92cf1ca18122679440ff3a38933b7e0c2",
"release": "/var/www/investmoz-homologacao/releases/490527b92cf1ca18122679440ff3a38933b7e0c2-d41ae12f",
"previous_release": "/var/www/investmoz-homologacao/releases/1655f57e698fef4099c2886069a79cd1c920f792-fe9d3b11",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 6,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 104,
"checksum": "41ddf6abf1cc00b85fb98a5c22da0ee1"
},
"after": {
"rows": 105,
"checksum": "23e7205245a904489ac3c12248d6b1ac"
}
},
"sessions": {
"before": {
"rows": 17,
"checksum": "436718228e6cb875393809c4a84ebd43"
},
"after": {
"rows": 18,
"checksum": "becbef33ee3be158db37e1878aec832b"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"public_delta": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "490527b92cf1ca18122679440ff3a38933b7e0c2",
"branch": "main",
"built_at": "2026-10-24T12:29:59.442400+00:00",
"manifest_sha256": "b9f7c6d05c78754dd1f9efb71bf5ff59cdfaa1167e136a71138c0fd194b19a33"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"iva-operations-l1/2": [
"assets/project-dossier-Cqjhibc1.js"
],
"financial_stamp": [
"assets/project-dossier-Cqjhibc1.js"
],
"insurance_stamp": [
"assets/project-dossier-Cqjhibc1.js"
],
"health_assistive": [
"assets/project-dossier-Cqjhibc1.js"
],
"patient_transport": [
"assets/project-dossier-Cqjhibc1.js"
],
"social_assistance_": [
"assets/project-dossier-Cqjhibc1.js"
],
"social_care_": [
"assets/project-dossier-Cqjhibc1.js"
],
"activity_facilities_": [
"assets/project-dossier-Cqjhibc1.js"
],
"nonprofit": [
"assets/project-dossier-Cqjhibc1.js"
],
"exactFields": [
"assets/project-dossier-Cqjhibc1.js"
],
"20/21": [
"assets/project-dossier-Cqjhibc1.js"
]
},
"assets": [
{
"file": "assets/services-DUPANwbE.js",
"status": 200,
"sha256": "cfdd24a5527c693b0a227726babd1a054425c19cc4a0ebe5f215f582ba5bf302"
},
{
"file": "assets/simulation-form-CPZAFZU3.js",
"status": 200,
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
},
{
"file": "assets/project-dossier-Cqjhibc1.js",
"status": 200,
"sha256": "937fd99184c12b1321abf86bf67a196c6d74db5296304bc7a746536653560e64"
},
{
"file": "assets/project-dossier-document-91ZtwN0x.js",
"status": 200,
"sha256": "73cb4b1b4ea8928de313cfa858896bfc613dfd0adfb091744a78c81cf5f47764"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-DVti_AMl.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"git_method": "Freshfetch+ancestry/hashcheck+branchpush+fastforwardmain;noforce;normalwebhook",
"rollback_activated": false
}
}
@@ -0,0 +1,19 @@
--- a/resources/js/components/simulation-operations.tsx
+++ b/resources/js/components/simulation-operations.tsx
@@ -9,6 +9,8 @@
const save=(next:SalesBook)=>onChange('modelo_a_snapshot',saveSalesBook(draft,next));
const change=(id:string,patch:Partial<SalesOperation>)=>run(()=>save({...book,rows:book.rows.map(r=>r.id===id?{...r,...patch}:r)}));
return <section aria-label="Operações IVA por oportunidade" className="space-y-3 rounded border p-3">
+ <p role="status">Novos cálculos de operações IVA temporariamente suspensos. Resultados guardados e relatórios permanecem disponíveis.</p>
+ <fieldset disabled>
<h4 className="font-semibold">Operações de IVA — enquadramento das vendas</h4>
<p>Oportunidade {String(draft.context_opportunity||'entrada geral')}; moeda original {book.currency||'por indicar'}. Cobertura2026/MZN. Reutilize as vendas e complete apenas o enquadramento. Este bloco classifica as operações; não substitui nem soma novamente a execução mensal geral acima.</p>
<p>Uma empresa pode ter operações com tratamentos diferentes. Os valores são projecções sob pressupostos declarados, sem certificar facturas, reconhecer créditos ou submeter uma declaração à AT.</p>
@@ -36,6 +38,7 @@
{book.periods.map(p=><label className="block" key={p.period}><input type="checkbox" checked={p.complete} onChange={e=>run(()=>save({...book,periods:book.periods.map(v=>v.period===p.period?{...v,complete:e.target.checked}:v)}))}/> {p.period}: incluí todas as operações deste período; lista vazia significa ausência expressamente confirmada.</label>)}
<p>Limites: outras isenções/bases especiais e correspondência do campo06 permanecem por delimitar. IVA incluído a5% conserva a fracção exacta e apresenta um decimal a6casas; a aproximação de apresentação não constitui regra declarativa. O desconhecido nunca é assumido como zero.</p>
<button type="button" disabled={!book.periods.length} className="rounded bg-emerald-800 p-2 text-white disabled:opacity-50" onClick={()=>run(()=>save(recordSales(draft,book)))}>Calcular e guardar operações IVA</button>
+ </fieldset>
{book.result&&<><p role="status">{salesCurrent(draft,book)?'Resultado correspondente às entradas.':'Resultado histórico conservado; reveja as alterações antes de recalcular.'}</p><dl>{salesReportRows(draft).map(([,label,value,origin],index)=><div className="break-inside-avoid border-t py-2" key={index}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</section>;
}
@@ -1,5 +1,81 @@
# Reconciliação do IVA com o Novo Modelo A
## 24/10/2026 — lote08–10/14–18 entregue na homologação em1655f57e
**Estado actual: integrado, instalado e delta conferido; saldo deste lote: zero.** Candidata funcional `d18ff0f0`, registo QA `1655f57e`; revisão efectivamente servida `1655f57e698fef4099c2886069a79cd1c920f792`. Fetch anterior à integração encontrou `origin/main` em `cd10cccb`, antepassado da candidata; push por fast-forward, sem force ou alterações concorrentes a reconciliar. O webhook do processo existente instalou a revisão. Não se editou a pasta servida.
Conferência exclusivamente do delta instalado: `/build/revision.json` em1655f57e, branchmain; manifesto SHA256 `dfb82481796aaf5826e8a5108575de3807ee787faffa92f38a56bb8d9caf5ce7`, igual ao anunciado pela revisão; quatro assets HTTP200, com nove marcadores da nova funcionalidade e recuperação existente. `/simulador-fiscal` HTTP200 usa a entrada deste build; disponibilidade existente do IVA geral mantida. Conteúdo dos bundles verificado contra o próprio manifesto instalado, sem presumir nomes/bytes iguais entre Windows e Linux.
Fontes de moeda/tesouraria, recuperação mensal e motor fiscal publicado, schema, configuração, rotas e executor sem delta face a `cd10cccb`. Referência `276d833a` antepassada; PDF aceite S3 conserva SHA256 `7719a05136f6dba668b621f551626060d10db5fcbb84815cdad112a1eab9079b`, sem regeneração. As provas QA abaixo foram reutilizadas. Sem importações, migrações ou pedidos/cálculos sintéticos criados na homologação. Não se afirma nova auditoria autenticada à base; a prova desta entrega é revisão, manifesto, assets e entradas servidos. Evidência privada: `outputs/iva-acquisitions-delivery-20261024/installed-delta.json`.
Fecho limitado às aquisições08–10 e totais14–18 nas condições demonstradas. Não é apuramento integral do IVA. IRPC/IRPS permanecem inventariados para trabalho posterior; estatísticas/IA adiadas. Os estados QA/pendência de integração seguintes são histórico anterior a esta disponibilização, não o saldo actual.
## 24/10/2026 — aquisições08–10 e totais14–18 implementados e demonstrados em QA
**Estado actual: lote concluído em QA, candidata `d18ff0f0`, ramo `codex/modelo-a-aquisicoes-20261024`; ainda não integrado/disponibilizado na homologação.** S1–S3 continuam encerrados em `cd10cccb`, recibo `355656b5`; referência `276d833a` preservada. Esta secção sucede à proposta e ao cotejo parcial históricos abaixo. Sem IRPC/IRPS, publicação de regras, migração, mudança de permissões ou escrita em dados activos.
### Cotejo concluído antes da codificação
`VAT Return.pdf`: 285479bytes, SHA256 `9c0b99a810c7db53eb75d63c22ee22fb86a50ba57bd5509041ed80ee10f75741`, duas páginas lidas e renderizadas. Comparação com a imagem dos dois DOCX sobre fundo branco e instruções já reconciliadas. Originais intactos. O PDF não fornece critérios adicionais de elegibilidade por aquisição, nem prova nova edição/vigência pela sua existência.
| Campo/instrução | PDF versus DOCX | Tratamento executável |
|---|---|---|
|08–10|Mesma numeração: imobilizado, existências, outros bens/serviços; coluna de imposto a favor do sujeito passivo|Somar apenas IVA elegível das linhas, não orçamento, custo ou valor bruto de compras|
|14|Mesma soma `01+03+05+06+07`|Determinar apenas com parcelas conhecidas|
|15|Mesma soma `08+09+10+11+12`|Aquisições08–10 completas e11/12 determinados; sem operações deve ser declaração expressa|
|16|Mesma soma `02+04+13`|Reutilizar02 da execução mensal actual;04/13 não são zero implícito|
|17/18|Mesmas diferenças `16−15` / `15−16`, conforme o sentido|Diferenças antes de créditos anteriores; não são pagamento ou reembolso reconhecido|
|Regularizações|Ambos dizem11/12 no texto, mas as caixas são12/13|Regularizações fora deste lote; divergência não bloqueia08–10 nem somas inequívocas|
|Créditos/reembolso|Mantêm-se as remissões18/19 versus19/20 e art.20 no rodapé|Afectam o futuro tratamento19–27; não são activadas por esta passagem|
|Preenchimentos/layout|PDF tem cabeçalho completo, duas páginas, inicial/dentro do prazo assinalados, UGC/Província/Localidade Maputo; DOCX tem caixas vazias e imagem do corpo, com fluxo de leitura diferente|Não herdar selecções, prazo ou Maputo para qualquer investimento; não corrigir ou substituir originais|
### Correspondência e percurso executáveis
Componente existente de IVA mensal conserva a execução01/02 no servidor. Novo bloco ligado ao mesmo formulário e relatório guarda `modelo_a_snapshot` no mecanismo privado/versionado existente, com livros separados pela oportunidade em tratamento. Sem escolha numa entrada com várias oportunidades, pede a escolha; nunca assume a primeira. A API conserva as permissões de proprietário e a concorrência por ETag.
Compras/encomendas são reutilizadas com valor/moeda/mês de origem, por classificar como líquido ou bruto. O mês de encomenda/orçamento é conservado separadamente do mês do documento e da dedução; adoptar uma origem actualizada não altera silenciosamente o período fiscal editado. Para08/10 é possível escolher explicitamente o orçamento de activos/despesas operacionais já existente como referência, sem o converter em factura. Só se pede a diferença fiscal/documental. Mudança da origem é sinalizada e exige adopção explícita; não substitui edições deliberadas. Moeda conhecida é conservada; moeda ausente exige confirmação expressa, sem conversão de montantes.
Por linha: líquido/IVA/bruto (dois valores permitem obter o terceiro por soma/diferença, sem taxa de compra inventada), documento/referência/linha/data, fornecedor/inscrição, posse/forma legal, período, natureza projectada ou efectiva declarada, aquisição interna, afectação e exclusões. O adquirente confirma regime normal de IVA. Documento repetido sem linha distinta é recusado. Uma compra só registada, orçamento, documento incompleto, uso misto/especial ou período divergente não gera dedução. IVA expressamente zero e despesas expressamente não elegíveis ficam distintos de informação em falta.
Fundamento dirigido: CIVA republicado pela Lei13/2016, PDF14–16, arts.18(1)(a),18(3–5),19(1)(a),20 e21(1–3); Lei22/2022, art.20 (exclusões/17-A/excepções); Lei10/2025, PDF13, arts.18(2)/(6) e19(2). Reutilização das fontes oficiais aceites, sem nova validação de credibilidade. Âmbito executado: interno geral, MZN, 2026, afectação exclusiva a operações tributadas, mesmo período de emissão/dedução, sem exclusões/especialidades/dedução parcial. É o recorte técnico solicitado, não prazo de vigência legal nem nova regra organizacional. Em projecções, as condições são pressupostos explícitos, sem certificação documental.
Por mês, confirmação expressa de lista completa08–10 e de inexistência de operações nos campos fora deste lote. Sem confirmação, as parcelas e totais dependentes permanecem indeterminados; declarações em conflito com importações/vendas de outros enquadramentos registadas são recusadas.14–18 usam aritmética decimal exacta. Resultados, condições e origem ficam congelados; alterações tornam a versão histórica visivelmente desactualizada. O relatório reutiliza o resultado guardado sem recalcular e identifica oportunidade, localização, período, moeda, fontes, versão e declarações de ausência. A nota da execução isolada01/02 remete agora para o bloco separado, evitando apresentar dois estados contraditórios.
### Provas dirigidas e saldo
- **11 testes frontend aprovados:** oito do novo lote e três da correspondência afectada. Condições incompletas, exclusões, uso misto, documento/fornecedor, data/moeda, duplicações, ausência versus zero, origem alterada, orçamentos reutilizados, fórmulas08–10/14–18, histórico e segunda oportunidade. Exemplo com08=32,09=16,10=8:15=56;16=160.0048;17=104.0048. Também diferença credora18 e vendas em falta.
- **API real QA: dois testes/19 asserções aprovados**, base isolada `simulator_fiscal_delta_20261021_test:55441`, guarda de identidade e transacções revertidas. Payload calculado na interface da segunda oportunidade exportado por acção própria de QA → gravação privada real → recuperação exacta → relatório. Outra conta recusada; primeira oportunidade preservada; fingerprint de todas as regras igual. Nenhuma regra criada/publicada/suspensa.
- **Visual Edge, componentes reais numa interface isolada:** compra sem condições fica indeterminada; edição/cálculo da segunda produz17=`128.0048`; actualizar a página conserva a segunda; regressar à primeira conserva17=`144.0048`. O armazenamento da interface visual é local ao browser; a persistência no servidor foi comprovada separadamente com o mesmo payload na API real de QA.
- **Relatório da segunda oportunidade recuperada pela API:** CSV, Word e PDF apresentam `128.0048`, `160.0048`, MZN, Manica, oportunidade310, período e versão correspondentes, sem valores do livro309. PDF final com seis páginas conferidas visualmente, sem cortes/sobreposição. Abril deliberadamente sem vendas mantém01/02/14/16/17/18 indeterminados; a projecção financeira incompleta é identificada, sem fabricar resultado. Nenhum PDF ou exportação aceite de S1–S3 foi substituído.
- **TypeScript e build aprovados.** Provas privadas em `outputs/iva-operations-qa-20261024`; relatório `acquisitions-final.pdf`, hashes no recibo integrado. A interface de ensaio não é incluída nos assets do portal.
Saldo deste recorte em QA: zero. Integração e disponibilização na homologação continuam por executar. Futuro fora deste recorte: activação de taxa reduzida/isenções, mistos/pro rata/excepções, importações, regularizações, créditos19–27, juros/pagamento/reembolso e submissão AT. IRPC/IRPS permanecem apenas inventariados. Estatísticas e IA adiadas. O histórico abaixo não reabre S1–S3 nem converte esta entrega QA em homologação.
## Actualização de 24/10/2026 — comparação e próximo lote proposto
S1–S3 permanecem encerrados na homologação em `cd10cccb`, recibo `355656b5`, saldo zero. Esta passagem é reconciliação documental/código e proposta; não altera regras, dados activos ou impostos. Reutiliza a leitura visual e as provas aceites de 21/10, sem repetir ensaios.
Os dois originais nas Notas foram relidos por bytes: tamanhos, SHA256 e imagem incorporada coincidem com os valores documentados abaixo. Inventário actual completo das duas pastas: nove documentos nas Notas e quatro em Modelos, além de seis ficheiros temporários/de bloqueio inventariados separadamente, registados com nome, tamanho e hash no recibo integrado, chave `modelo_a_next_scope_20261024`. Os quatro modelos são `VAT Return.pdf`, `IRPC_IRPS.xlsx`, `Cópia de IRPS-IMOP.xlsx` e `IRPC M-22- DECLARACAO DE RENDIMENTOS.pdf`. Os três de IRPC/IRPS entram apenas no inventário; conteúdo fiscal/fórmulas ainda não analisados. `VAT Return.pdf` é exemplar adicional inventariado, ainda por cotejar com os dois DOCX antes de afirmar equivalência ou diferença. Nenhum original alterado, importado ou publicado nesta passagem.
| Bloco | Já suportado / reutilizável | Falta concreta |
|---|---|---|
| Identificação e período, quadros 1–6 | Oportunidade escolhida, dossier, organização, contactos, meses, moeda e origem | Ligar os campos fiscais; confirmar apenas diferenças de NUIT/sucursal/área fiscal/CAE/domicílio fiscal. Sector e localização do projecto não provam CAE ou domicílio fiscal. Tipo de declaração não é versão de projecção. |
| Campos 01/02 | Vendas mensais líquidas e IVA calculado pela versão publicada, recuperação pelo ID, moeda original e exportações aceites | Sem lacuna neste âmbito aceite; continua componente de planeamento, não imposto final a pagar. |
| Campos 03–07 | Calendário de vendas como origem | Classificação por operação, bases separadas, âmbito temporal das categorias e regras correspondentes; mapeamento não é cálculo implementado. |
| Campos 08–11 | Compras/encomendas mensais e pressupostos do plano | Valores líquido/IVA/bruto discriminados, documentos, fornecedor, afectação, exclusões e elegibilidade. Compras e investimento global não são IVA dedutível. |
| Campos 12/13 | Correspondência documental | Regularizações individualizadas, motivo, documento e período; resolver a remissão interna divergente. |
| Campos 14–18 | Fórmulas impressas mapeadas | Consolidação: 14=01+03+05+06+07; 15=08+09+10+11+12; 16=02+04+13; diferenças devedora/credora 17/18. Actualmente indeterminadas: parcelas ausentes não são zero. |
| Campos 19–27 | Planeamento pode conservar estimativas separadas | Créditos efectivos/comunicados, substituição, juros, pagamento, reporte e pedido de reembolso. Não implementados como apuramento declarativo. |
| Quadros 7, 12 e 13 | Autenticação e histórico do portal | Inexistência de operações exige informação completa; assinatura/submissão fiscal e campos reservados à AT não decorrem do login ou da simulação. |
**Diferenças e instruções:** os DOCX diferem por bytes e segmentação textual, com a mesma imagem do formulário; não está demonstrada alteração fiscal entre eles. Mantêm-se as divergências já documentadas: regularizações 11/12 no texto versus caixas 12/13; créditos 18/19 versus caixas 19/20; remissão de reembolso art.20 versus alteração de 2025 no art.21; remissões ambíguas ao quadro8. A duplicação de25 era artefacto de extracção, já resolvido. A edição/período aplicável e os dispositivos pertinentes devem ser cotejados para cada regra nova, reutilizando as fontes oficiais aceites.
**Proposta de lote seguinte — IVA por operação, primeiro âmbito interno geral em MZN:** reutilizar vendas e aquisições do plano por oportunidade/período; guardar origem/versionamento, previsto ou efectivo e classificação explícita. Implementar a discriminação líquido/IVA/bruto e a elegibilidade documentada das aquisições internas de imobilizado, existências e outros bens/serviços (08–10), após cotejo dirigido das condições e exclusões nas fontes existentes. Manter 01/02 e o motor publicado. Ligar 14–18 apenas quando todas as parcelas necessárias estiverem conhecidas ou expressamente declaradas sem operações, sem permitir que essa declaração apague operações existentes. Mostrar a parcela em falta quando o total não puder ser determinado.
Ficam fora deste lote proposto: activação de taxa reduzida, isenções/mistas/pro rata, importações, regularizações, créditos anteriores, substituições, juros, pagamentos, reembolsos e submissão à AT. Podem ser identificados na classificação, mas mantêm resultado indeterminado e explicação quando aplicáveis. IRPC/IRPS permanecem inventário. A proposta estreita o lote histórico abaixo; a estimativa histórica de28–52h não é orçamento deste novo recorte.
Fecho dirigido do lote proposto: reutilização sem preenchimento repetido; aquisição elegível/excluída/sem documento; zero versus ausência; alteração da segunda oportunidade preservando a primeira; mudança de origem cria versão sem reescrever histórico; gravação/recuperação e ecrã/exportações com iguais montantes, moeda, período, oportunidade, fonte e regra. Consolidar apenas os dispositivos efectivamente usados, sem nova validação genérica das fontes. Nenhuma implementação iniciada nesta reconciliação.
21/10/2026. Referência AUD-SIM-INT02, sem nova matriz/backlog. Preparação progressiva em QA; não é apuramento completo, submissão ou aceitação pela AT. A componente16% existente continua independente das restantes componentes por cadastrar/desenvolver. A leitura e aceitação documental da Tempo não é apresentada como validação jurídica independente.
## Exemplar e preservação
File diff suppressed because it is too large Load Diff
@@ -1,4 +1,4 @@
Exemplar/caminho,Bytes,SHA256,Tipo,Nota de leitura,Disponibilidade,Uso em cálculo,Situação jurídica/documental,Edição/versão identificada,Disponibilidade conferida 12/10/2026,Caminho atual/alias,SHA256 atual,Correspondência binária,Observação da reconciliação
Exemplar/caminho,Bytes,SHA256,Tipo,Nota de leitura,Disponibilidade,Uso em cálculo,Situação jurídica/documental,Edição/versão identificada,Disponibilidade conferida 12/10/2026,Caminho atual/alias,SHA256 atual,Correspondência binária,Observação da reconciliação
C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\~WRL2550.tmp,451286,0ae1dc970cc219a57791483bf22f134b2fab1ff5a6d3cd98eba98a5737f23010,original,,Acervo inventariado; consulta/publicação individual não inferida,Nenhum cálculo ativado pela auditoria,Situação documental não determinada por inventário,,Exemplar acessível,C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\~WRL2550.tmp,0ae1dc970cc219a57791483bf22f134b2fab1ff5a6d3cd98eba98a5737f23010,Idêntico ao hash histórico,Hash original preservado; alteração de nome/caminho não cria outro documento/requisito.
C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\diagramas.docx,6005783,ece2c2edee8df625e712ff9f285df5c787378fa3477e466303b5a46ee0971c09,original,,Acervo inventariado; consulta/publicação individual não inferida,Nenhum cálculo ativado pela auditoria,Situação documental não determinada por inventário,,Exemplar acessível,C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\diagramas.docx,ece2c2edee8df625e712ff9f285df5c787378fa3477e466303b5a46ee0971c09,Idêntico ao hash histórico,Hash original preservado; alteração de nome/caminho não cria outro documento/requisito.
C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\diagramas.docx#word/media/image1.png,1208097,1495ef144a048018723db1c0e11217fa14b4d7b14d8e65e32a3adeea23d08c4c,anexo embebido,,Acervo inventariado; consulta/publicação individual não inferida,Nenhum cálculo ativado pela auditoria,Situação documental não determinada por inventário,,Anexo embebido inventariado,C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\diagramas.docx,,Não aplicável/sem bytes disponíveis,Hash original preservado; alteração de nome/caminho não cria outro documento/requisito.
@@ -606,3 +606,5 @@ C:\laragon\www\portal-investidor\docs\investmoz\v2\auditoria-portal\legado-sitem
\\mac\home\Documents\TEMPO\Portal Tempo\Servicos Tempo\Relatorios\novos\segmentar processos v1.docx,104147,bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5,.docx,Original integral907parágrafos/14tabelas; relações externas/notas/alterações verificadas; hash e cópia privada preservados. Identidade binária com v1(3).docx confirmada pelo responsável em 11/10/2026; v1.docx é o nome local do mesmo exemplar.,PrivadoQA/biblioteca recurso29,Nenhum cálculo ativado.,Documento de programação; não estender aceitação oficial. Original/histórico preservados.,"v1; propriedadeOOXMLrevision15; modificado11/10/2026 12:29UTC; mesmo exemplar de v1(3).docx, confirmado pelo responsável em 11/10/2026.",Exemplar acessível,\\mac\home\Documents\TEMPO\Portal Tempo\Servicos Tempo\Relatorios\novos\segmentar processos v1.docx,bf26caeee0437a8d292bf29be59247e2862c14e79b5ae465c00322747af72af5,Idêntico ao hash histórico,Hash original preservado; alteração de nome/caminho não cria outro documento/requisito.
\\mac\home\Documents\TEMPO\Portal Tempo\Servicos Tempo\Relatorios\novos\~$gmentar processos v1.docx,162,dd30703646feabe737708b9072861ce24e7ebd953e25847edcb23143383d5ae2,.docx,Inventariado integralmente no mesmo diretório antes da seleção; conteúdo não promovido a implementação. Not a valid DOCX ZIP; inventoried without discarding.,Origem acessível; divulgação não inferida.,Nenhum cálculo ativado.,Documento de programação; não estender aceitação oficial. Original/histórico preservados.,Nome/hash do exemplar; versão substantiva não inferida.,Original indisponível,\\mac\home\Documents\TEMPO\Portal Tempo\Servicos Tempo\Relatorios\novos\~$gmentar processos v1.docx,,Não aplicável/sem bytes disponíveis,"Ficheiro temporário Word indisponível; referência histórica preservada, não omitir do inventário."
\\mac\home\Documents\TEMPO\Portal Tempo\Servicos Tempo\Relatorios\novos\~WRL2698.tmp,20868,fb8a11801469536438e9e85cacc3468d33253d22e94bb366f249d109ba9ab827,.tmp,Inventariado integralmente no mesmo diretório antes da seleção; conteúdo não promovido a implementação. ,Origem acessível; divulgação não inferida.,Nenhum cálculo ativado.,Documento de programação; não estender aceitação oficial. Original/histórico preservados.,Nome/hash do exemplar; versão substantiva não inferida.,Original indisponível,\\mac\home\Documents\TEMPO\Portal Tempo\Servicos Tempo\Relatorios\novos\~WRL2698.tmp,,Não aplicável/sem bytes disponíveis,"Ficheiro temporário Word indisponível; referência histórica preservada, não omitir do inventário."
https://archive.gazettes.africa/archive/mz/2025/mz-government-gazette-series-i-supplement-dated-2025-05-21-no-95.pdf,329070,e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358,original oficial PDF,"BR95,I Série,Suplemento,21/05/2025;Lei3/2025 arts.1/2 eAnexoII;2páginas conferidas",Exemplar privado disponível para consulta;sem publicação automática,"Aplicado emG3cessação2026/P038–P043,emcódigoQA;semprorrogação presumida,benefíciohistórico ou activaçãoemservidor.",Origem oficial identificada;9(13) com termo31/12/2025;sem prorrogação presumida,Lei3/2025 de21/05/2025,Conferido em24/10/2026,C:\laragon\www\portal-investidor\docs\investmoz\simulations\source-archive\BR-95-I-Suplemento-2025-05-21.pdf,e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358,Original preservado porbytes/hash,G3 candidatoac948bd8b7ff34d661dd4cb7cbe88221093dfd83:termo31/12/2025 executável no percurso2026;P038–P043 comcode/APIaprovados evisualpendente. Original/proveniência/publicação preservados;zero importação/publicação embaseactiva. Histórico: Aquisição documental apenas;zero importação/publicação em base activa. Fonte aceite conforme decisãoTempo08/10;P038–P043 permanecem funcionais pendentes.
https://portaldogoverno.gov.mz/governo-introduz-alteracoes-nos-regulamentos-fiscais-para-reforcar-eficiencia-tributaria/,,,"Notícia oficial online,sem original porbytes preservado",Governo30/09/2026:aprovação dealterações regulamentaresIVA/IRPC/IRPS,Consulta online livre;sem importação/publicação peloportal,Não usada paraactivar cálculo;inventariada paracotejo dodiploma,"Comunicado não substitui decreto,publicação ou períodoaplicável","RegulamentoCIVA/Decreto7/2008:artigos mencionados3,7,8,15,16-A,18,21,23,28,36,37",Consultado24/10/2026,URLonline;semficheirooriginallocal,,Proveniência oficial dapágina;semafirmar vigência dodiploma,Cotejar publicação/texto/período eafectarapenas regrasdependentes;sem bloqueio genéricoG4A
1 Exemplar/caminho Bytes SHA256 Tipo Nota de leitura Disponibilidade Uso em cálculo Situação jurídica/documental Edição/versão identificada Disponibilidade conferida 12/10/2026 Caminho atual/alias SHA256 atual Correspondência binária Observação da reconciliação
2 C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\~WRL2550.tmp 451286 0ae1dc970cc219a57791483bf22f134b2fab1ff5a6d3cd98eba98a5737f23010 original Acervo inventariado; consulta/publicação individual não inferida Nenhum cálculo ativado pela auditoria Situação documental não determinada por inventário Exemplar acessível C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\~WRL2550.tmp 0ae1dc970cc219a57791483bf22f134b2fab1ff5a6d3cd98eba98a5737f23010 Idêntico ao hash histórico Hash original preservado; alteração de nome/caminho não cria outro documento/requisito.
3 C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\diagramas.docx 6005783 ece2c2edee8df625e712ff9f285df5c787378fa3477e466303b5a46ee0971c09 original Acervo inventariado; consulta/publicação individual não inferida Nenhum cálculo ativado pela auditoria Situação documental não determinada por inventário Exemplar acessível C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\diagramas.docx ece2c2edee8df625e712ff9f285df5c787378fa3477e466303b5a46ee0971c09 Idêntico ao hash histórico Hash original preservado; alteração de nome/caminho não cria outro documento/requisito.
4 C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\diagramas.docx#word/media/image1.png 1208097 1495ef144a048018723db1c0e11217fa14b4d7b14d8e65e32a3adeea23d08c4c anexo embebido Acervo inventariado; consulta/publicação individual não inferida Nenhum cálculo ativado pela auditoria Situação documental não determinada por inventário Anexo embebido inventariado C:\Mac\Home\Documents\TEMPO\Portal Tempo\Servicos Tempo\diagramas.docx Não aplicável/sem bytes disponíveis Hash original preservado; alteração de nome/caminho não cria outro documento/requisito.
606 https://archive.gazettes.africa/archive/mz/2025/mz-government-gazette-series-i-supplement-dated-2025-05-21-no-95.pdf 329070 e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358 original oficial PDF BR95,I Série,Suplemento,21/05/2025;Lei3/2025 arts.1/2 eAnexoII;2páginas conferidas Exemplar privado disponível para consulta;sem publicação automática Aplicado emG3cessação2026/P038–P043,emcódigoQA;semprorrogação presumida,benefíciohistórico ou activaçãoemservidor. Origem oficial identificada;9(13) com termo31/12/2025;sem prorrogação presumida Lei3/2025 de21/05/2025 Conferido em24/10/2026 C:\laragon\www\portal-investidor\docs\investmoz\simulations\source-archive\BR-95-I-Suplemento-2025-05-21.pdf e0e682e2c027c3cd9c1d46a73a3f48bc5f6bdbf05667fd97314d7a3f6a456358 Original preservado porbytes/hash G3 candidatoac948bd8b7ff34d661dd4cb7cbe88221093dfd83:termo31/12/2025 executável no percurso2026;P038–P043 comcode/APIaprovados evisualpendente. Original/proveniência/publicação preservados;zero importação/publicação embaseactiva. Histórico: Aquisição documental apenas;zero importação/publicação em base activa. Fonte aceite conforme decisãoTempo08/10;P038–P043 permanecem funcionais pendentes.
607 https://portaldogoverno.gov.mz/governo-introduz-alteracoes-nos-regulamentos-fiscais-para-reforcar-eficiencia-tributaria/ Notícia oficial online,sem original porbytes preservado Governo30/09/2026:aprovação dealterações regulamentaresIVA/IRPC/IRPS Consulta online livre;sem importação/publicação peloportal Não usada paraactivar cálculo;inventariada paracotejo dodiploma Comunicado não substitui decreto,publicação ou períodoaplicável RegulamentoCIVA/Decreto7/2008:artigos mencionados3,7,8,15,16-A,18,21,23,28,36,37 Consultado24/10/2026 URLonline;semficheirooriginallocal Proveniência oficial dapágina;semafirmar vigência dodiploma Cotejar publicação/texto/período eafectarapenas regrasdependentes;sem bloqueio genéricoG4A
608
609
610
File diff suppressed because one or more lines are too long
@@ -0,0 +1,77 @@
import { useState } from 'react';
import { acquisitionBook, acquisitionCurrent, acquisitionExcludedFields, acquisitionPlanReferences, acquisitionReportRows, recordAcquisitions, newAcquisition, reuseAcquisitions, saveAcquisitionBook, type Acquisition, type AcquisitionBook } from '@/lib/iva-acquisitions';
import { acquisitionTreatmentIssue, continueWithoutFormerExploration, formerExplorationSource, type AcquisitionTreatment } from '@/lib/iva-acquisition-continuity';
export function SimulationAcquisitions({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}) {
const [error,setError]=useState('');
const [manualPeriod,setManualPeriod]=useState('');
let book:AcquisitionBook;
try {book=acquisitionBook(draft);} catch(cause) {return <p role="alert">{String(cause)}</p>;}
const save=(next:AcquisitionBook)=>{try {onChange('modelo_a_snapshot',saveAcquisitionBook(draft,next));setError('');}catch(cause){setError(String(cause));}};
const change=(id:string,patch:Partial<Acquisition>)=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)});
const run=(action:()=>void)=>{try{action();setError('');}catch(cause){setError(cause instanceof Error?cause.message:String(cause));}};
let references:ReturnType<typeof acquisitionPlanReferences>=[];
try {references=acquisitionPlanReferences(draft);}catch { /* The action reports the concrete currency/source error without replacing saved values. */ }
const labels:Record<string,string>={'03':'Base à taxa reduzida','04':'IVA à taxa reduzida','05':'Isentas com direito à dedução','06':'Operações art.18(1)(b)','07':'Isentas sem direito','11':'Importações','12':'Regularizações a favor do sujeito passivo','13':'Regularizações a favor do Estado'};
const select=(row:Acquisition,key:keyof Acquisition,label:string,options:Array<[string,string]>)=><label className="block" key={key}>{label}<select className="block rounded border p-2" value={String(row[key]??'')} onChange={e=>change(row.id,{[key]:e.target.value})}><option value="">Por indicar</option>{options.map(([value,text])=><option key={value} value={value}>{text}</option>)}</select></label>;
const yesNo:Array<[string,string]>=[['yes','Sim'],['no','Não']];
return <section aria-label="Aquisições e apuramento parcial Modelo A" className="space-y-4 rounded border p-3">
<h4 className="font-semibold">Compras e apuramento parcial do Modelo A</h4>
<p>Oportunidade em tratamento: {String(draft.context_opportunity||'entrada geral')}. Moeda de origem: {book.currency||'por indicar'}. A compra registada não gera automaticamente IVA dedutível.</p>
{book.currency && draft.currency!==book.currency && <p role="alert">As compras conservam {book.currency}; o projecto está em {String(draft.currency||'moeda por indicar')}. Reveja a moeda no projecto. Os montantes e o resultado anterior não foram convertidos ou reinterpretados.</p>}
{!book.currency && !!draft.currency && <button type="button" className="underline" onClick={()=>save({...book,currency:String(draft.currency),rows:book.rows.map(row=>row.sourceCurrency?row:{...row,sourceCurrency:String(draft.currency)})})}>Confirmar explicitamente {String(draft.currency)} como moeda de origem dos valores sem moeda, conservando os montantes</button>}
<p>Primeiro âmbito: aquisições internas em MZN, afectação exclusiva a operações tributadas, sem exclusões ou dedução parcial, documento e dedução no mesmo período de 2026. Nas projecções, cada confirmação é um pressuposto, sem certificar documento ou declaração efectiva. Indique dois valores entre líquido, IVA e bruto; o terceiro é obtido por diferença ou soma, sem taxa de compra presumida.</p>
<label className="block">Adquirente sujeito passivo de IVA no regime normal (efectivo ou pressuposto da projecção)<select className="block rounded border p-2" value={book.taxpayerRegistered??''} onChange={e=>save({...book,taxpayerRegistered:e.target.value as AcquisitionBook['taxpayerRegistered']})}><option value="">Por confirmar</option><option value="yes">Sim</option><option value="no">Não / outro enquadramento — fora deste lote</option></select></label>
{error&&<p role="alert">{error}</p>}
<details className="rounded border p-2"><summary>Indicar mês da aquisição pelo documento ou pressuposto da projecção</summary>
<p>Para compras introduzidas directamente, indique o mês aplicável sem depender de ter vendas nesse mês. A reutilização de valores do orçamento mantém a conferência da origem.</p>
<label>Mês da aquisição<input type="month" min="2026-01" max="2026-12" value={manualPeriod} onChange={e=>setManualPeriod(e.target.value)}/></label>
<button type="button" onClick={()=>run(()=>{if(!/^2026-(0[1-9]|1[0-2])$/.test(manualPeriod))throw new Error('Indique um mês válido de2026.');if(book.periods.some(p=>p.period===manualPeriod))throw new Error('Esse mês já consta da cobertura; valores conservados.');save({...book,periods:[...book.periods,{period:manualPeriod,complete:false,absent:[]}]});})}>Acrescentar mês indicado</button>
</details>
<button type="button" className="underline" onClick={()=>run(()=>save(reuseAcquisitions(draft,book)))}>Reutilizar compras e períodos existentes</button>
<button type="button" className="ml-3 underline" disabled={!book.periods.length} onClick={()=>save({...book,rows:[...book.rows,newAcquisition(crypto.randomUUID(),book.periods[0]?.period??'',book.currency)]})}>Acrescentar aquisição em falta</button>
{book.rows.map(row=><details key={row.id} className="rounded border p-3"><summary>{row.description||'Aquisição adicional'} — {row.period} — campo{row.field}</summary>
<details className="rounded border p-2"><summary>Enquadramento especial da aquisição / referência anterior</summary>
<label>Tratamento da aquisição<select value={row.acquisitionTreatment??''} onChange={e=>row.acquisitionTreatment==='former_exploration_exemption'&&e.target.value!=='former_exploration_exemption'?run(()=>save({...book,rows:book.rows.map(item=>item.id===row.id?continueWithoutFormerExploration(item):item)})):change(row.id,{acquisitionTreatment:e.target.value as AcquisitionTreatment})}><option value="">Enquadramento normal; sem benefício especial indicado</option><option value="former_exploration_exemption">Antiga isenção de prospecção/pesquisa —14(2)(c),eliminada</option><option value="normal">Continuidade pelo enquadramento normal</option></select></label>
{acquisitionTreatmentIssue(row.acquisitionTreatment)&&<p role="status">{acquisitionTreatmentIssue(row.acquisitionTreatment)}</p>}
{row.acquisitionTreatment==='former_exploration_exemption'&&<><p>{formerExplorationSource}</p><p>A continuidade conserva montantes,moeda,mês,documento e respostas existentes. Não introduz taxa nem altera o IVA declarado; reveja as condições antes de calcular.</p><button type="button" onClick={()=>run(()=>save({...book,rows:book.rows.map(item=>item.id===row.id?continueWithoutFormerExploration(item):item)}))}>Continuar aquisição sem esta isenção e rever condições</button></>}
{row.acquisitionTreatmentOrigin&&<p>Origem conservada: antiga referência14(2)(c),eliminada. {row.acquisitionTreatment==='former_exploration_exemption'?'A continuidade normal foi escolhida numa versão anterior; a referência antiga está agora seleccionada para análise.':'Continuidade normal escolhida expressamente; não é nova concessão de isenção.'}</p>}
</details>
<p>Origem: {row.sourceMonth===null?'Introdução directa':`Plano, mês ${row.sourceMonth} (${row.sourcePeriod??'por indicar'}): ${row.sourceAmount??'sem informação'} ${row.sourceCurrency}`}. O mês da encomenda/orçamento não determina a data do documento ou a dedução. Alterações não substituem o resultado anterior.</p>
<div className="grid gap-3 md:grid-cols-2">
<label>Descrição<input className="block rounded border p-2" value={row.description} onChange={e=>change(row.id,{description:e.target.value})}/></label>
{row.sourceMonth===null && <label>Reutilizar valor existente, sem presumir que o orçamento é uma factura<select className="block rounded border p-2" value="" onChange={e=>run(()=>{const ref=references.find(r=>r.key===e.target.value);if(ref)change(row.id,{sourceMonth:ref.month,sourcePeriod:ref.period,sourceField:ref.kind,sourceAmount:ref.amount,sourceCurrency:ref.currency,...(ref.kind==='asset'?{}:{period:ref.period})});})}><option value="">Escolher apenas se corresponde a esta aquisição</option>{references.filter(ref=>ref.kind===(row.field==='08'?'asset':row.field==='10'?'operating':'inventory')).map(ref=><option key={ref.key} value={ref.key}>{ref.label}: {ref.amount??'sem informação'} {ref.currency}</option>)}</select></label>}
{select(row,'field','Categoria',[['08','08 — Imobilizado'],['09','09 — Existências'],['10','10 — Outros bens e serviços']])}
{select(row,'origin','Natureza dos dados',[['projected','Projectados / pressupostos'],['effective','Efectivos declarados']])}
<label>Período de dedução<input className="block rounded border p-2" type="month" value={row.period} onChange={e=>change(row.id,{period:e.target.value})}/></label>
{row.sourceMonth!==null && <label>O valor de origem corresponde a<select className="block rounded border p-2" value={row.sourceBasis} onChange={e=>{const basis=e.target.value as Acquisition['sourceBasis'];change(row.id,{sourceBasis:basis,...(basis==='net'&&!row.net?{net:row.sourceAmount??''}:basis==='gross'&&!row.gross?{gross:row.sourceAmount??''}:{})});}}><option value="">Por classificar</option><option value="net">Valor sem IVA</option><option value="gross">Valor com IVA</option></select></label>}
{(['net','vat','gross'] as const).map((field,index)=><label key={field}>{['Valor líquido','IVA indicado','Valor bruto'][index]} ({row.sourceCurrency})<input className="block rounded border p-2" inputMode="decimal" value={row[field]} onChange={e=>change(row.id,{[field]:e.target.value})}/></label>)}
{select(row,'documentType','Tipo de documento',[['invoice','Factura'],['equivalent','Documento equivalente']])}
<label>Referência do documento / previsão<input className="block rounded border p-2" value={row.documentRef} onChange={e=>change(row.id,{documentRef:e.target.value})}/></label>
<label>Linha do documento, se discriminado em várias aquisições<input className="block rounded border p-2" value={row.documentLine} onChange={e=>change(row.id,{documentLine:e.target.value})}/></label>
<label>Data do documento / prevista<input className="block rounded border p-2" type="date" value={row.documentDate} onChange={e=>change(row.id,{documentDate:e.target.value})}/></label>
<label>Fornecedor / previsto<input className="block rounded border p-2" value={row.supplier} onChange={e=>change(row.id,{supplier:e.target.value})}/></label>
{select(row,'domestic','Aquisição interna',yesNo)}
{row.acquisitionTreatment!=='former_exploration_exemption'&&<>
{select(row,'supplierRegistered','Fornecedor inscrito no IVA',yesNo)}
{select(row,'legalDocument','Documento emitido em forma legal',yesNo)}
{select(row,'held','Documento na posse do adquirente / previsto na projecção',yesNo)}
{select(row,'allocation','Afectação',[['taxable_only','Exclusiva a operações tributadas'],['mixed','Mista / parcial — fora deste lote'],['no_right','Operações sem direito à dedução']])}
{select(row,'exclusion','Exclusões de dedução',[['none','Sem exclusões ou casos especiais dos arts.18–20'],['excluded','Despesa excluída'],['special','Veículos, combustível, viagens, alojamento, comunicações, luxo ou outra situação especial — por enquadrar']])}
{select(row,'integrity','Operação real / pressuposto regular, sem simulação, margem de segunda mão ou impedimentos do art.18(3–5)',yesNo)}
</>}
</div>
<p>Fundamento: CIVA arts.18–21, fontes e versão no resultado. Não se calcula dedução parcial, excepção de despesa ou dedução posterior neste lote.</p>
{row.sourceMonth===null && <button type="button" className="mr-3 underline" onClick={()=>save({...book,rows:book.rows.filter(r=>r.id!==row.id)})}>Remover esta aquisição introduzida directamente</button>}
{row.sourceMonth!==null && <button type="button" className="underline" onClick={()=>run(()=>{const ref=acquisitionPlanReferences(draft).find(r=>r.month===row.sourceMonth && r.kind===(row.sourceField??'inventory'));if(!ref)throw new Error('Origem não disponível; conserve o registo e reveja o plano.');if(draft.currency!==row.sourceCurrency)throw new Error('Moeda divergente; não adoptar montantes de outra moeda.');change(row.id,{sourceAmount:ref.amount,sourcePeriod:ref.period,...(row.sourceBasis==='net'?{net:ref.amount??'',gross:''}:row.sourceBasis==='gross'?{gross:ref.amount??'',net:''}:{})});})}>Adoptar explicitamente o valor actual do plano (conserva histórico)</button>}
</details>)}
{book.periods.map(period=><details key={period.period} className="rounded border p-3"><summary>{period.period} — cobertura das parcelas — {period.complete && period.absent.length===acquisitionExcludedFields.length?'confirmada':'por completar'}</summary>
<label className="block"><input type="checkbox" checked={period.complete} onChange={e=>save({...book,periods:book.periods.map(p=>p.period===period.period?{...p,complete:e.target.checked}:p)})}/> Incluí todas as aquisições08–10 deste período, incluindo as sem direito à dedução; uma lista vazia significa que não houve essas aquisições.</label>
<p>Campos fora deste lote: assinale apenas quando não existiram as respectivas operações. Uma parcela não assinalada permanece indeterminada.</p>
{acquisitionExcludedFields.map(field=><label className="block" key={field}><input type="checkbox" checked={period.absent.includes(field)} onChange={e=>save({...book,periods:book.periods.map(p=>p.period===period.period?{...p,absent:e.target.checked?[...p.absent,field]:p.absent.filter(f=>f!==field)}:p)})}/> Sem operações no campo{field} — {labels[field]}</label>)}
</details>)}
<button type="button" disabled={!book.periods.length} className="rounded bg-emerald-800 p-2 text-white disabled:opacity-50" onClick={()=>run(()=>save(recordAcquisitions(draft,book)))}>Calcular e guardar versão do apuramento parcial</button>
<p>O preenchimento e o resultado seguem a gravação privada do simulador. Os campos19–27 e a submissão à AT permanecem fora deste lote; 17/18 são diferenças antes de créditos anteriores, sem ordem de pagamento ou promessa de reembolso.</p>
{book.result&&<><p role="status">{acquisitionCurrent(draft,book)?'Resultado correspondente às entradas guardadas.':'Entradas ou origem alteradas: resultado histórico preservado; actualizar o cálculo.'}</p><dl>{acquisitionReportRows(draft).map(([,label,value,origin],i)=><div key={i}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</section>;
}
@@ -0,0 +1,29 @@
import {useState} from 'react';
import {newActSaleBase,switchActValuation,switchActKind,actSaleBook,actSaleConditions,actSaleCurrent,actSaleReportRows,actSaleBaseSource,actSaleKinds,actSaleTreatments,recordActSaleBases,saveActSaleBook,type ActSaleBook,type ActSaleRow} from '@/lib/iva-act-sale-base';
export function SimulationActSaleBase({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}){
const[error,setError]=useState('');let book:ActSaleBook;
try{book=actSaleBook(draft);}catch(cause){return<p role="alert">{String(cause)}</p>;}
const save=(next:ActSaleBook)=>{try{onChange('modelo_a_snapshot',saveActSaleBook(draft,next));setError('');}catch(cause){setError(String(cause));}};
const change=(id:string,patch:Partial<ActSaleRow>)=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)});
return<details className="space-y-3 rounded border p-3">
<summary>Base tributável — arrematação e outros actos de transmissão</summary>
<p>Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Prepare apenas transmissões de bens resultantes dos actos abrangidos pelo artigo15(2)(h). Indique o valor por que a arrematação/venda foi efectuada ou,se for caso,o valor normal dos bens. O portal não escolhe o menor valor nem transforma um pagamento ou acordo genérico numa transmissão sujeita a IVA.</p>
<p>Na conciliação ou transacção,identifique a transmissão dos bens e o fundamento do valor aplicável; não basta o montante genérico do acordo. O valor normal exige fundamento e âmbito identificados,não um certificado ou avaliador criado pelo portal. Base e IVA são resultados distintos.</p>
<p>{actSaleBaseSource}</p>{error&&<p role="alert">{error}</p>}
<button type="button" className="underline" onClick={()=>save({...book,rows:[...book.rows,newActSaleBase(crypto.randomUUID(),String(draft.currency??''))]})}>Acrescentar transmissão por acto</button>
{book.rows.map(row=>{const rule=actSaleTreatments.find(item=>item.id===row.treatment);return<details key={row.id} className="rounded border p-3"><summary>{row.description||'Transmissão por identificar'} — {row.period||'mês por indicar'}</summary>
<div className="grid gap-3 md:grid-cols-2">
<label>Natureza do acto<select className="block rounded border p-2" value={row.actKind} onChange={e=>change(row.id,switchActKind(row,e.target.value))}><option value="">Por indicar</option>{actSaleKinds.map(item=><option key={item.id} value={item.id}>{item.label}</option>)}</select></label>
<label>Fundamento do valor aplicável<select className="block rounded border p-2" value={row.treatment} onChange={e=>change(row.id,switchActValuation(row,e.target.value))}><option value="">Por indicar</option>{actSaleTreatments.map(item=><option key={item.id} value={item.id}>{item.label}</option>)}</select></label>
<label>Natureza dos dados<select className="block rounded border p-2" value={row.origin} onChange={e=>change(row.id,{origin:e.target.value as ActSaleRow['origin']})}><option value="projected">Projectados / pressupostos</option><option value="effective">Efectivos declarados</option></select></label>
{([['description','Bens e transmissão identificados'],['actRef','Acto ou contrato / referência da previsão'],['documentRef','Documento da transmissão / referência da previsão'],['documentDate','Data do documento / prevista'],['period','Mês da transmissão'],['currency','Moeda de origem'],['valuationRef','Referência documental / pressuposto da valorização'],['valuationScope','Âmbito da valorização: bens, operação, período e condições'],['compositionRef','Referência da composição sem IVA — inclusões e exclusões aplicáveis'],['evidence','Fundamento factual / pressupostos']] as const).map(([field,label])=><label key={field}>{label}<input className="block rounded border p-2" type={field==='documentDate'?'date':field==='period'?'month':'text'} value={row[field]} onChange={e=>change(row.id,{[field]:e.target.value})}/></label>)}
{rule&&<label>{row.treatment==='act_sale_amount'?'Valor da arrematação ou venda efectuada,sem IVA (moeda indicada)':'Valor normal dos bens,sem IVA (moeda indicada)'}<input className="block rounded border p-2" value={row.treatment==='act_sale_amount'?row.actValue:row.normalValue} onChange={e=>change(row.id,{[row.treatment==='act_sale_amount'?'actValue':'normalValue']:e.target.value})}/></label>}
</div>
<p>Mudar de acto ou fundamento conserva os montantes e documentos,mas exige rever a correspondência dos bens e da valorização antes de determinar a base. As versões anteriores mantêm-se.</p>
{rule?<fieldset><legend>Condições próprias desta transmissão</legend>{actSaleConditions.map(([key,label])=><label className="block" key={key}>{label}<select className="block rounded border p-2" value={row.conditions[key]??''} onChange={e=>change(row.id,{conditions:{...row.conditions,[key]:e.target.value}})}><option value="">Por indicar</option><option value="yes">Sim</option><option value="no">Não</option></select></label>)}</fieldset>:<p>Escolha o fundamento para apresentar o montante aplicável;os valores anteriores conservam-se.</p>}
</details>;})}
{!!book.rows.length&&<button type="button" className="rounded bg-emerald-800 p-2 text-white" onClick={()=>{try{save(recordActSaleBases(draft,book));}catch(cause){setError(String(cause));}}}>Determinar bases de transmissão e guardar versão</button>}
{book.result&&<><p role="status">{actSaleCurrent(draft,book)?'Bases de transmissão correspondentes às entradas guardadas.':'Entradas alteradas;bases de transmissão históricas conservadas. Reveja e determine novamente.'} {book.history?.length??0} versões anteriores. IVA e campo11 não são preenchidos por estas bases.</p><dl>{actSaleReportRows(draft).map(([,label,value,origin],index)=><div key={index}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</details>;
}
@@ -5,6 +5,7 @@ import {
defaultCashflowDraftInputs,
restoreCashflowDraftSnapshot,
serializeCashflowDraftSnapshot,
cashflowCurrency,
type CashflowDraftSnapshot,
} from '@/lib/monthly-cashflow';
import {
@@ -24,6 +25,9 @@ export function SimulationCashflowPlanner({
onSnapshotChange?: (snapshot: string) => void;
}) {
const restored = restoreCashflowDraftSnapshot(snapshot);
const [confirmedCurrency, setConfirmedCurrency] = useState('');
const originCurrency = restored?.version === 2 ? restored.currency : null;
const calculationCurrency = snapshot ? originCurrency ?? '' : currency;
const [taxMode, setTaxMode] = useState<'fixed' | 'schedule'>(
restored?.taxMode ?? 'fixed',
);
@@ -41,7 +45,7 @@ export function SimulationCashflowPlanner({
) {
setInputs(next);
setTaxMode(mode);
onSnapshotChange?.(serializeCashflowDraftSnapshot(mode, next));
onSnapshotChange?.(serializeCashflowDraftSnapshot(mode, next, snapshot ? originCurrency ?? null : currency || null));
}
const set = (
key: Exclude<keyof typeof inputs, 'monthlyTaxSchedule'>,
@@ -63,7 +67,8 @@ export function SimulationCashflowPlanner({
throw new Error(
'Não foi possível recuperar os pressupostos guardados de tesouraria. Reveja os campos antes de voltar a guardar; nenhum resultado foi calculado com dados alternativos.',
);
projection = projectMonthlyCashflow({ ...cashflowInput, currency });
if (restored) cashflowCurrency(restored, currency);
projection = projectMonthlyCashflow({ ...cashflowInput, currency: calculationCurrency });
} catch (cause) {
error =
cause instanceof Error
@@ -76,7 +81,7 @@ export function SimulationCashflowPlanner({
aria-labelledby="cashflow-title"
>
<label className="block max-w-xs text-sm font-medium">
Moeda dos valores (código ISO)
Moeda do projecto (código ISO)
<input
list="cashflow-currency-options"
inputMode="text"
@@ -103,6 +108,16 @@ export function SimulationCashflowPlanner({
<h3 id="cashflow-title" className="text-lg font-semibold">
Projecção de tesouraria — 12 meses
</h3>
{restored && !originCurrency && <div className="space-y-2 rounded border border-amber-600 p-3">
<p>A moeda de origem dos montantes guardados não foi registada. Os valores foram conservados. Confirme apenas essa moeda; não é necessário preencher os montantes novamente.</p>
<label>Moeda de origem da tesouraria guardada<select className="ml-2 rounded border p-2" value={confirmedCurrency} onChange={event => setConfirmedCurrency(event.target.value)}><option value="">Por confirmar</option>{simulationCurrencyOptions.map(code => <option key={code} value={code}>{code}</option>)}</select></label>
<button type="button" className="block underline" disabled={!isSimulationCurrency(confirmedCurrency)} onClick={() => onSnapshotChange?.(serializeCashflowDraftSnapshot(taxMode, inputs, confirmedCurrency))}>Confirmar moeda de origem e conservar montantes</button>
</div>}
{originCurrency && originCurrency !== currency && <div role="alert" className="rounded border border-amber-600 p-3">
<p>{cashflowCurrency(restored!, currency).notice}</p>
<button type="button" className="underline" onClick={() => onCurrencyChange(originCurrency)}>Usar {originCurrency} no projecto e conservar montantes</button>
</div>}
{originCurrency && <p>Moeda de origem dos pressupostos: {originCurrency}.</p>}
<p className="text-sm text-slate-700">
Introduza pressupostos na mesma moeda. O imposto indicado é um
pressuposto do utilizador; esta ferramenta não calcula nem
@@ -257,12 +272,12 @@ export function SimulationCashflowPlanner({
{error}
</p>
)}
{projection && isSimulationCurrency(currency) && (
{projection && isSimulationCurrency(calculationCurrency) && (
<>
<p aria-live="polite" className="font-semibold">
{projection.endingCash === null
? `Caixa conhecida antes de imposto em falta, ao fim de 12 meses (${currency}):`
: `Saldo projectado ao fim de 12 meses (${currency}):`}{' '}
? `Caixa conhecida antes de imposto em falta, ao fim de 12 meses (${calculationCurrency}):`
: `Saldo projectado ao fim de 12 meses (${calculationCurrency}):`}{' '}
{projection.endingCash ??
projection.endingCashBeforeUnassessedTax}
</p>
@@ -274,7 +289,7 @@ export function SimulationCashflowPlanner({
[
exportMonthlyCashflowCsv({
...cashflowInput,
currency,
currency: calculationCurrency,
periods: 12,
}),
],
@@ -0,0 +1,28 @@
import {useState} from 'react';
import {newCommissionBase,switchCommissionDirection,commissionBaseBook,commissionBaseConditions,commissionBaseCurrent,commissionBaseReportRows,commissionBaseSource,commissionBaseTreatments,recordCommissionBases,saveCommissionBaseBook,type CommissionBaseBook,type CommissionBaseRow} from '@/lib/iva-commission-base';
export function SimulationCommissionBase({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}){
const[error,setError]=useState('');let book:CommissionBaseBook;
try{book=commissionBaseBook(draft);}catch(cause){return<p role="alert">{String(cause)}</p>;}
const save=(next:CommissionBaseBook)=>{try{onChange('modelo_a_snapshot',saveCommissionBaseBook(draft,next));setError('');}catch(cause){setError(String(cause));}};
const change=(id:string,patch:Partial<CommissionBaseRow>)=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)});
return<details className="space-y-3 rounded border p-3">
<summary>Base tributável — bens em comissão de venda ou compra</summary>
<p>Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Prepare apenas transferências de bens entre comitente e comissário em execução do contrato de comissão, incluindo consignação quando aplicável. Não é o IVA de um serviço autónomo de intermediação nem uma regra para qualquer pagamento de comissão.</p>
<p>Comissão de venda: preço de venda acordado pelo comissário menos comissão. Comissão de compra: preço de compra acordado pelo comissário mais comissão. Indique valores sem IVA, antes deste ajuste, e as referências da operação; montantes em falta não são zero. Base não determina incidência, taxa ou imposto.</p>
<p>{commissionBaseSource}</p>{error&&<p role="alert">{error}</p>}
<button type="button" className="underline" onClick={()=>save({...book,rows:[...book.rows,newCommissionBase(crypto.randomUUID(),String(draft.currency??''))]})}>Acrescentar transferência de bens em comissão</button>
{book.rows.map(row=>{const rule=commissionBaseTreatments.find(item=>item.id===row.treatment);return<details key={row.id} className="rounded border p-3"><summary>{row.description||'Transferência por identificar'} — {row.period||'mês por indicar'}</summary>
<div className="grid gap-3 md:grid-cols-2">
<label>Sentido da transferência<select className="block rounded border p-2" value={row.treatment} onChange={e=>change(row.id,switchCommissionDirection(row,e.target.value))}><option value="">Por indicar</option>{commissionBaseTreatments.map(item=><option key={item.id} value={item.id}>{item.label}</option>)}</select></label>
<label>Natureza dos dados<select className="block rounded border p-2" value={row.origin} onChange={e=>change(row.id,{origin:e.target.value as CommissionBaseRow['origin']})}><option value="projected">Projectados / pressupostos</option><option value="effective">Efectivos declarados</option></select></label>
{([['description','Bens e operação identificados'],['principal','Comitente'],['agent','Comissário'],['agreementRef','Contrato de comissão / referência da previsão'],['documentRef','Documento da operação / referência da previsão'],['documentDate','Data do documento / prevista'],['period','Mês da operação'],['currency','Moeda de origem'],['compositionRef','Referência da composição sem IVA — inclusões e exclusões aplicáveis'],['evidence','Fundamento factual / pressupostos']] as const).map(([field,label])=><label key={field}>{label}<input className="block rounded border p-2" type={field==='documentDate'?'date':field==='period'?'month':'text'} value={row[field]} onChange={e=>change(row.id,{[field]:e.target.value})}/></label>)}
{rule&&<><label>{rule.priceLabel}<input className="block rounded border p-2" value={row.agreedPrice} onChange={e=>change(row.id,{agreedPrice:e.target.value})}/></label><label>Referência documental / pressuposto do preço acordado<input className="block rounded border p-2" value={row.priceRef} onChange={e=>change(row.id,{priceRef:e.target.value})}/></label><label>Comissão desta operação, sem IVA (moeda indicada)<input className="block rounded border p-2" value={row.commissionAmount} onChange={e=>change(row.id,{commissionAmount:e.target.value})}/></label><label>Referência documental / pressuposto da comissão<input className="block rounded border p-2" value={row.commissionRef} onChange={e=>change(row.id,{commissionRef:e.target.value})}/></label></>}
</div>
<p>Mudar de sentido conserva os valores e referências, mas exige confirmar os papéis e o preço correspondente ao novo sentido antes de determinar a base. As versões anteriores mantêm-se.</p>
{rule?<fieldset><legend>Condições próprias da base de comissão</legend>{commissionBaseConditions.map(([key,label])=><label className="block" key={key}>{label}<select className="block rounded border p-2" value={row.conditions[key]??''} onChange={e=>change(row.id,{conditions:{...row.conditions,[key]:e.target.value}})}><option value="">Por indicar</option><option value="yes">Sim</option><option value="no">Não</option></select></label>)}</fieldset>:<p>Escolha o sentido para apresentar o preço e as condições aplicáveis;os valores anteriores conservam-se.</p>}
</details>;})}
{!!book.rows.length&&<button type="button" className="rounded bg-emerald-800 p-2 text-white" onClick={()=>{try{save(recordCommissionBases(draft,book));}catch(cause){setError(String(cause));}}}>Determinar bases de comissão e guardar versão</button>}
{book.result&&<><p role="status">{commissionBaseCurrent(draft,book)?'Bases de comissão correspondentes às entradas guardadas.':'Entradas alteradas;bases de comissão históricas conservadas. Reveja e determine novamente.'} {book.history?.length??0} versões anteriores. IVA e campo11 não são preenchidos por estas bases.</p><dl>{commissionBaseReportRows(draft).map(([,label,value,origin],index)=><div key={index}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</details>;
}
@@ -0,0 +1,29 @@
import {useState} from 'react';
import {newFuelBase,switchFuelTaxTreatment,fuelBaseBook,fuelBaseConditions,fuelBaseCurrent,fuelBaseReportRows,fuelBaseSource,fuelBaseTreatments,recordFuelBases,saveFuelBaseBook,type FuelBaseBook,type FuelBaseRow} from '@/lib/iva-fuel-base';
export function SimulationFuelBase({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}){
const[error,setError]=useState('');let book:FuelBaseBook;
try{book=fuelBaseBook(draft);}catch(cause){return<p role="alert">{String(cause)}</p>;}
const save=(next:FuelBaseBook)=>{try{onChange('modelo_a_snapshot',saveFuelBaseBook(draft,next));setError('');}catch(cause){setError(String(cause));}};
const change=(id:string,patch:Partial<FuelBaseRow>)=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)});
return<details className="space-y-3 rounded border p-3">
<summary>Base tributável — combustíveis com preço fixado</summary>
<p>Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Prepare transmissões por revendedores de combustíveis cujo preço é fixado pela Autoridade Pública. Identifique a referência e o âmbito temporal do preço aplicável;na projecção,pode declarar pressupostos expressos. Não se presume um preço actual para outro período.</p>
<p>A base exclui a Taxa sobre Combustíveis (TC). Se o montante já a exclui,não se subtrai novamente. Indique valores sem o próprio IVA e com a composição aplicável identificada. Base e IVA são resultados distintos.</p>
<p>{fuelBaseSource}</p>{error&&<p role="alert">{error}</p>}
<button type="button" className="underline" onClick={()=>save({...book,rows:[...book.rows,newFuelBase(crypto.randomUUID(),String(draft.currency??''))]})}>Acrescentar transmissão de combustível</button>
{book.rows.map(row=>{const rule=fuelBaseTreatments.find(item=>item.id===row.treatment);return<details key={row.id} className="rounded border p-3"><summary>{row.description||'Transmissão por identificar'} — {row.period||'mês por indicar'}</summary>
<div className="grid gap-3 md:grid-cols-2">
<label>Composição quanto à TC<select className="block rounded border p-2" value={row.treatment} onChange={e=>change(row.id,switchFuelTaxTreatment(row,e.target.value))}><option value="">Por indicar</option>{fuelBaseTreatments.map(item=><option key={item.id} value={item.id}>{item.label}</option>)}</select></label>
<label>Natureza dos dados<select className="block rounded border p-2" value={row.origin} onChange={e=>change(row.id,{origin:e.target.value as FuelBaseRow['origin']})}><option value="projected">Projectados / pressupostos</option><option value="effective">Efectivos declarados</option></select></label>
{([['description','Combustível e transmissão identificados'],['operationDate','Data da transmissão / prevista'],['period','Mês da transmissão'],['currency','Moeda de origem'],['priceRef','Referência do preço fixado / pressuposto'],['priceScope','Âmbito do preço: combustível, operação, local e condições'],['priceFrom','Preço aplicável desde / pressuposto'],['priceTo','Preço aplicável até / pressuposto (vazio se sem termo fixado)'],['documentRef','Documento da transmissão / referência da previsão'],['documentDate','Data do documento / prevista'],['compositionRef','Referência da composição sem IVA — inclusões e exclusões aplicáveis'],['evidence','Fundamento factual / pressupostos']] as const).map(([field,label])=><label key={field}>{label}<input className="block rounded border p-2" type={['operationDate','priceFrom','priceTo','documentDate'].includes(field)?'date':field==='period'?'month':'text'} value={row[field]} onChange={e=>change(row.id,{[field]:e.target.value})}/></label>)}
{rule&&<label>{row.treatment==='fuel_tax_included'?'Contraprestação sem IVA,com TC incluída (moeda indicada)':'Contraprestação sem IVA,já sem TC (moeda indicada)'}<input className="block rounded border p-2" value={row.consideration} onChange={e=>change(row.id,{consideration:e.target.value})}/></label>}
{row.treatment==='fuel_tax_included'&&<><label>TC incluída nesta contraprestação (moeda indicada)<input className="block rounded border p-2" value={row.fuelTax} onChange={e=>change(row.id,{fuelTax:e.target.value})}/></label><label>Referência da TC incluída / pressuposto<input className="block rounded border p-2" value={row.fuelTaxRef} onChange={e=>change(row.id,{fuelTaxRef:e.target.value})}/></label></>}
</div>
<p>Mudar o tratamento conserva os montantes e documentos,mas exige rever se a TC ainda está incluída. Os valores ocultos e as versões anteriores mantêm-se.</p>
{rule?<fieldset><legend>Condições próprias desta transmissão</legend>{fuelBaseConditions.map(([key,label])=><label className="block" key={key}>{label}<select className="block rounded border p-2" value={row.conditions[key]??''} onChange={e=>change(row.id,{conditions:{...row.conditions,[key]:e.target.value}})}><option value="">Por indicar</option><option value="yes">Sim</option><option value="no">Não</option></select></label>)}</fieldset>:<p>Escolha a composição para apresentar os montantes aplicáveis;os valores anteriores conservam-se.</p>}
</details>;})}
{!!book.rows.length&&<button type="button" className="rounded bg-emerald-800 p-2 text-white" onClick={()=>{try{save(recordFuelBases(draft,book));}catch(cause){setError(String(cause));}}}>Determinar bases de combustíveis e guardar versão</button>}
{book.result&&<><p role="status">{fuelBaseCurrent(draft,book)?'Bases de combustíveis correspondentes às entradas guardadas.':'Entradas alteradas;bases de combustíveis históricas conservadas. Reveja e determine novamente.'} {book.history?.length??0} versões anteriores. IVA e campo11 não são preenchidos por estas bases.</p><dl>{fuelBaseReportRows(draft).map(([,label,value,origin],index)=><div key={index}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</details>;
}
@@ -0,0 +1,50 @@
import { useState } from 'react';
import { importExemptionBook,importExemptionCurrent,importExemptionReportRows,importExemptionRules,importRuleSource,isImportService,isDevelopmentImport,importDevelopmentFields,newImportExemption,recordImportExemptions,saveImportExemptionBook,type ImportExemptionBook,type ImportExemptionRow } from '@/lib/iva-import-exemptions';
export function SimulationImportExemptions({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}) {
const [error,setError]=useState('');
let book:ImportExemptionBook;
try {book=importExemptionBook(draft);}catch(cause){return <p role="alert">{String(cause)}</p>;}
const save=(next:ImportExemptionBook)=>{try {onChange('modelo_a_snapshot',saveImportExemptionBook(draft,next));setError('');}catch(cause){setError(String(cause));}};
const change=(id:string,patch:Partial<ImportExemptionRow>)=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)});
return <details className="space-y-3 rounded border p-3">
<summary>IVA na importação e serviços associados — enquadramentos disponíveis</summary>
<p>Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Indique apenas importações relevantes: reimportação no mesmo estado, ouro pelo Banco de Moçambique, objectos de arte, veículo de combate a incêndios, embarcação/avião elegível ou objecto da sua exploração, bens em regime aduaneiro com isenção total de direitos, importação sob controlo alfandegário em zona/depósito/loja franca nas condições próprias, equipamento classe K para empreendimento autorizado, materiais/equipamentos para projecto de desenvolvimento ONU nas condições próprias, ou bens de abastecimento a bordo de embarcação/avião de navegação internacional. Escolha o ramo para apresentar as condições aplicáveis. Cobertura2026/MZN; as compras internas e os seus resultados conservam-se.</p>
<p>O valor declarado/previsional é conservado, sem o fixar como base aduaneira. A classificação não preenche o campo11 de dedução nem os totais do ModeloA. Uma condição não cumprida afasta só esta isenção; o imposto normal fica por enquadrar. Nas projecções, as respostas são pressupostos, sem certificação aduaneira.</p>
<p>Nos serviços associados, identifique a importação e a inclusão do valor na sua base, conforme o artigo16. O IVA do serviço é apresentado separadamente do IVA dos bens; o simulador não soma novamente esse valor à base.</p>
{error&&<p role="alert">{error}</p>}
<button type="button" className="underline" onClick={()=>save({...book,rows:[...book.rows,newImportExemption(crypto.randomUUID(),String(draft.currency??''))]})}>Acrescentar importação ou serviço relevante</button>
{book.rows.map(row=>{
const rule=importExemptionRules.find(item=>item.id===row.treatment);
return <details key={row.id} className="rounded border p-3"><summary>{row.description||'Importação por identificar'} — {row.period||'mês por indicar'}</summary>
<div className="grid gap-3 md:grid-cols-2">
<label>Ramo da importação<select className="block rounded border p-2" value={row.treatment} onChange={e=>change(row.id,{treatment:e.target.value})}><option value="">Por indicar</option>{importExemptionRules.map(item=><option key={item.id} value={item.id}>{item.label}</option>)}</select></label>
<label>Natureza dos dados<select className="block rounded border p-2" value={row.origin} onChange={e=>change(row.id,{origin:e.target.value as ImportExemptionRow['origin']})}><option value="projected">Projectados / pressupostos</option><option value="effective">Efectivos declarados</option></select></label>
{(['description','importer','declaredValue','goodsCode','originCountry','documentRef','documentDate','period','evidence'] as const).map((field,index)=>isImportService(row.treatment)&&['goodsCode','originCountry'].includes(field)?null:<label key={field}>{isImportService(row.treatment)&&field==='description'?'Serviço associado à importação':isImportService(row.treatment)&&field==='importer'?'Importador destinatário do serviço':isImportService(row.treatment)&&field==='declaredValue'?'Valor do serviço incluído na base (moeda indicada)':isImportService(row.treatment)&&field==='documentRef'?'Documento do serviço / referência da previsão':isImportService(row.treatment)&&field==='period'?'Mês do serviço':['Bens importados','Importador','Valor declarado / previsão (moeda indicada)','Código aduaneiro, se disponível','País de origem, se disponível','Documento aduaneiro / referência da previsão','Data do documento / prevista','Mês da importação','Fundamento factual das condições / pressupostos'][index]}<input className="block rounded border p-2" type={field==='documentDate'?'date':field==='period'?'month':'text'} value={row[field]} onChange={e=>change(row.id,{[field]:e.target.value})}/></label>)}
{isImportService(row.treatment)&&(['serviceImportRef','serviceBaseRef','serviceProvider'] as const).map((field,index)=><label key={field}>{['Importação de bens associada / documento ou previsão','Referência da base tributável que inclui o valor do serviço','Prestador do serviço, se disponível'][index]}<input className="block rounded border p-2" value={row[field]??''} onChange={e=>change(row.id,{[field]:e.target.value})}/></label>)}
{row.treatment==='accessory_service_first_destination'&&<label>Primeiro destino e documento de transporte ou primeira ruptura de carga<input className="block rounded border p-2" value={row.serviceFirstDestination??''} onChange={e=>change(row.id,{serviceFirstDestination:e.target.value})}/></label>}
{row.treatment==='authorized_investment_equipment'&&<>
<p className="md:col-span-2">A classe K e a autorização são condições distintas. O portal conserva a referência e o âmbito aplicável; apresentar um pedido não equivale a obter autorização. Numa projecção, identifique expressamente os pressupostos.</p>
<label>Autorização do empreendimento / pressuposto expresso<input className="block rounded border p-2" value={row.investmentAuthorizationRef??''} onChange={e=>change(row.id,{investmentAuthorizationRef:e.target.value})}/></label>
<label>Âmbito aplicável: bens, operação, período e condições<input className="block rounded border p-2" value={row.investmentScope??''} onChange={e=>change(row.id,{investmentScope:e.target.value})}/></label>
</>}
{isDevelopmentImport(row.treatment)&&<>
<p className="md:col-span-2">Pedido apresentado não equivale a despacho favorável nem a concessão aduaneira. Reutilize as referências dos documentos; numa projecção, identifique os pressupostos. O âmbito do despacho, lista e plano conserva-se nesta importação, sem o estender a outros bens ou operações.</p>
{importDevelopmentFields.map(([field,label])=><label key={field}>{label}<input className="block rounded border p-2" value={row[field]??''} onChange={e=>change(row.id,{[field]:e.target.value})}/></label>)}
{row.treatment==='un_development_reduction'&&<>
<p className="md:col-span-2">A redução de IVA acompanha a percentagem de redução de direitos, que não é a taxa aduaneira. Informe o IVA sem benefício já determinado ou expressamente assumido; o portal não presume taxa nem base aduaneira. Resultado decimal exacto, sem arredondamento fiscal presumido.</p>
<label>Redução dos direitos (% entre0e100, exclusiva)<input className="block rounded border p-2" value={row.developmentReductionPercent??''} onChange={e=>change(row.id,{developmentReductionPercent:e.target.value})}/></label>
<label>IVA desta importação sem benefício (moeda indicada)<input className="block rounded border p-2" value={row.developmentNormalVat??''} onChange={e=>change(row.id,{developmentNormalVat:e.target.value})}/></label>
<label>Referência documental / pressuposto do IVA sem benefício<input className="block rounded border p-2" value={row.developmentNormalVatRef??''} onChange={e=>change(row.id,{developmentNormalVatRef:e.target.value})}/></label>
</>}
</>}
<label>Moeda de origem<input className="block rounded border p-2" value={row.currency} onChange={e=>change(row.id,{currency:e.target.value})}/></label>
</div>
{rule?<><p>{importRuleSource(row.treatment)}</p><fieldset><legend>Condições de{rule.article}; respostas conservadas ao mudar de ramo</legend>{rule.conditions.map(([key,label])=><label className="block" key={key}>{label}<select className="block rounded border p-2" value={row.conditions[key]??''} onChange={e=>change(row.id,{conditions:{...row.conditions,[key]:e.target.value}})}><option value="">Por indicar</option><option value="yes">Sim</option><option value="no">Não</option></select></label>)}</fieldset></>:<p>Escolha o ramo para apresentar apenas as condições aplicáveis; as respostas anteriores mantêm-se.</p>}
<p>Editar não substitui o resultado anterior. Ao classificar novamente, a versão anterior passa ao histórico.</p>
</details>;
})}
{!!book.rows.length&&<button type="button" className="rounded bg-emerald-800 p-2 text-white" onClick={()=>{try {save(recordImportExemptions(draft,book));}catch(cause){setError(String(cause));}}}>{book.rows.some(row=>isImportService(row.treatment))?'Classificar importações e serviços e guardar versão':'Classificar importações e guardar versão'}</button>}
{book.result&&<><p role="status">{importExemptionCurrent(draft,book)?'Classificação correspondente às entradas guardadas.':'Entradas alteradas; classificação histórica preservada. Reveja e classifique novamente.'} {book.history?.length??0} versões anteriores.</p><dl>{importExemptionReportRows(draft).map(([,label,value,origin],index)=><div key={index}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</details>;
}
@@ -8,7 +8,7 @@ export function SimulationModeloA({draft}: {draft:Record<string,unknown>}) {
return <section aria-label="Correspondência com o Modelo A" className="space-y-3 rounded border p-3">
<h4 className="font-semibold">Modelo A — correspondência da simulação</h4>
<p>{modeloAReference.status}</p>
<p>Os campos 14–18 do apuramento permanecem indeterminados. O IVA das vendas não é imposto final a pagar. Os dados deste percurso são projecções, separados de facturas e declarações efectivas.</p>
<p>Esta correspondência descreve a componente de vendas01/02. Consulte o bloco de compras e apuramento parcial para os campos08–10 e14–18, que só são determinados com as parcelas necessárias completas. O IVA das vendas não é imposto final a pagar.</p>
<details><summary>Aquisições já projectadas — sem dedução presumida</summary>
<p>Reutilizam-se os valores das compras/encomendas para existências do plano. O mês da encomenda não prova a data da factura, recepção ou pagamento. Valores declarados ainda sem indicação de base líquida/IVA incluído não são tratados como base tributável. IVA suportado e IVA dedutível continuam por determinar; zero de compras não prova inexistência de outras aquisições.</p>
{error && <p role="alert">{error}</p>}
@@ -1,9 +1,17 @@
import { InvestmentContextAssessment } from './investment-context-assessment';
import { useEffect, useRef, useState } from 'react';
import { monthlyIvaInput, monthlyIvaKey, monthlySalesFromDraft, readMonthlyIvaRecord, readMonthlyIvaSettings, monthlyIvaCashTreatment, type MonthlyIvaInput, type MonthlyIvaSettings } from '@/lib/monthly-iva';
import { monthlyIvaInput, monthlyIvaKey, monthlySalesFromDraft, readMonthlyIvaRecord, readMonthlyIvaSettings, recoverMonthlyIvaRecord, monthlyIvaCashTreatment, type MonthlyIvaInput, type MonthlyIvaSettings } from '@/lib/monthly-iva';
import { fiscalQaRows } from '@/lib/fiscal-qa-preview';
import { isApiSimulationReadResponseV1, type ApiSimulationExecutionV1 } from '@/lib/simulation-contract';
import { type ApiSimulationExecutionV1 } from '@/lib/simulation-contract';
import { SimulationModeloA } from './simulation-modelo-a';
import { SimulationAcquisitions } from './simulation-acquisitions';
import { SimulationImportExemptions } from './simulation-import-exemptions';
import { SimulationPublicAuthorityBase } from './simulation-public-authority-base';
import { SimulationCommissionBase } from './simulation-commission-base';
import { SimulationActSaleBase } from './simulation-act-sale-base';
import { SimulationFuelBase } from './simulation-fuel-base';
import { SimulationOfferPreparations } from './simulation-offer-preparations';
import { SimulationOperations } from './simulation-operations';
export function SimulationMonthlyIva({draft, busy, onCalculate, onChange}: {
draft: Record<string, unknown>; busy: boolean;
@@ -16,6 +24,9 @@ export function SimulationMonthlyIva({draft, busy, onCalculate, onChange}: {
const [error, setError] = useState('');
const [available, setAvailable] = useState<boolean | null>(null);
const attempt = useRef('');
const mounted = useRef(true);
const latestSnapshot = useRef(draft.monthly_iva_snapshot); latestSnapshot.current = draft.monthly_iva_snapshot;
useEffect(() => { mounted.current = true; return () => { mounted.current = false; }; }, []);
const callbacks = useRef({onCalculate, onChange}); callbacks.current = {onCalculate, onChange};
let input: MonthlyIvaInput | null = null; let inputError = ''; let source = '';
try { source = monthlySalesFromDraft(draft).source; input = monthlyIvaInput(draft, settings); }
@@ -23,6 +34,8 @@ export function SimulationMonthlyIva({draft, busy, onCalculate, onChange}: {
const key = input ? monthlyIvaKey(input) : '';
const current = !!(input && record && monthlyIvaKey(record.input) === key);
const completed = current && record?.execution.status === 'completed';
const pendingRecord = record && ['queued','running'].includes(record.execution.status) ? record : null;
const actionKey = pendingRecord ? `recover:${pendingRecord.execution.id}` : key;
const saveSettings = (patch: Partial<MonthlyIvaSettings>) => onChange('monthly_iva_settings', JSON.stringify({...settings, ...patch}));
useEffect(() => {
let active = true;
@@ -32,27 +45,26 @@ export function SimulationMonthlyIva({draft, busy, onCalculate, onChange}: {
return () => { active = false; };
}, [retry]);
useEffect(() => {
if (!settings.auto || !input || input.currency !== 'MZN' || busy || !available || completed || attempt.current === key) return;
const request = input;
const pending = current && record && ['queued','running'].includes(record.execution.status) ? record.execution.id : null;
if (!settings.auto || busy || attempt.current === actionKey) return;
if (!pendingRecord && (!input || input.currency !== 'MZN' || !available || completed)) return;
const request = pendingRecord?.input ?? input!;
const savedSnapshot = draft.monthly_iva_snapshot;
const timer = window.setTimeout(() => {
attempt.current = key; setError('');
attempt.current = actionKey; setError('');
void (async () => {
try {
let execution;
if (pending) {
const response = await fetch(`/api/v1/simulations/${pending}`, {credentials:'same-origin', headers:{Accept:'application/json'}});
const value: unknown = await response.json();
if (!response.ok || !isApiSimulationReadResponseV1(value)) throw new Error('Não foi possível recuperar a execução mensal guardada. Não foi criada uma execução alternativa.');
execution = value.data;
if (pendingRecord) {
execution = (await recoverMonthlyIvaRecord(pendingRecord)).execution;
} else execution = await callbacks.current.onCalculate(request);
if (!execution) throw new Error('O cálculo mensal não foi concluído. As vendas e a versão anterior foram preservadas; tente novamente.');
if (!mounted.current || (pendingRecord && latestSnapshot.current !== savedSnapshot)) return;
callbacks.current.onChange('monthly_iva_snapshot', JSON.stringify({input:request, execution}));
} catch (cause) {setError(cause instanceof Error ? cause.message : 'Não foi possível calcular o IVA mensal.');}
} catch (cause) {if (mounted.current) setError(cause instanceof Error ? cause.message : 'Não foi possível calcular o IVA mensal.');}
})();
}, 700);
return () => window.clearTimeout(timer);
}, [key, settings.auto, busy, available, completed, retry]);
}, [actionKey, key, settings.auto, busy, available, completed, retry]);
const snapshot = record?.execution.result_snapshot;
const projection = snapshot?.monthly_projection as {rows?: Array<{date:string; sales_declared:string|null; net_sales:string|null; rate:string|null; vat:string|null; gross_sales:string|null; status:string}>} | undefined;
@@ -73,11 +85,20 @@ export function SimulationMonthlyIva({draft, busy, onCalculate, onChange}: {
{settings.auto && !completed && current && <p role="status">Execução mensal guardada: {record?.execution.status === 'queued' ? 'em fila' : record?.execution.status === 'running' ? 'em processamento' : 'não concluída'}. Pode voltar a consultar sem duplicar.</p>}
{busy && <p role="status">A actualizar os resultados dependentes das vendas…</p>}
{error && <p role="alert">{error}</p>}
<button type="button" disabled={busy || !available || !input || input.currency !== 'MZN'} onClick={() => {attempt.current=''; setRetry((value) => value+1); saveSettings({auto:true});}} className="rounded bg-emerald-800 p-2 text-white disabled:opacity-50">Calcular / actualizar IVA mensal e guardar versão</button>
<button type="button" disabled={busy || (!pendingRecord && (!available || !input || input.currency !== 'MZN'))} onClick={() => {attempt.current=''; setRetry((value) => value+1); saveSettings({auto:true});}} className="rounded bg-emerald-800 p-2 text-white disabled:opacity-50">{pendingRecord ? 'Recuperar execução mensal admitida pelo mesmo ID' : 'Calcular / actualizar IVA mensal e guardar versão'}</button>
{pendingRecord && <p>Consulta da execução {pendingRecord.execution.id}. A suspensão de novos cálculos não impede esta recuperação; não é criado outro pedido.</p>}
{settings.auto && <button type="button" className="ml-3 underline" onClick={() => saveSettings({auto:false})}>Pausar actualização automática</button>}
{input && <p className="text-sm">{input.monthly_sales.length} meses; moeda {input.currency || 'por indicar'}. Campo vazio significa informação em falta; zero declarado permanece zero. Depois da primeira execução, alterações das vendas actualizam o cálculo enquanto a actualização automática estiver ligada.</p>}
{projection?.rows && <div className="overflow-x-auto" tabIndex={0}><table className="min-w-full text-sm"><caption>IVA mensal — {current ? 'versão correspondente às entradas' : 'versão histórica'}</caption><thead><tr>{['Mês','Vendas declaradas','Vendas tributáveis sem IVA','Taxa aplicada (%)','IVA calculado','Total com IVA','Estado'].map((label) => <th key={label} className="p-2 text-left">{label}</th>)}</tr></thead><tbody>{projection.rows.map((row) => <tr key={row.date}><th scope="row" className="p-2">{row.date.slice(0,7)}</th><td>{row.sales_declared ?? 'Sem informação'}</td><td>{row.net_sales ?? 'Indeterminado'}</td><td>{row.rate ?? 'Indeterminada'}</td><td>{row.vat ?? 'Indeterminado'}</td><td>{row.gross_sales ?? 'Indeterminado'}</td><td>{{calculated:'Calculado',missing_sales:'Sem informação de vendas',unsupported_basis:'Base líquida não determinada',indeterminate:'Enquadramento ou regra indeterminados'}[row.status] ?? 'Indeterminado'}</td></tr>)}</tbody></table></div>}
{snapshot && <details><summary>Ver fundamento e relatório da versão guardada</summary><dl>{fiscalQaRows(snapshot).map(([label,value], index) => <div key={index}><dt className="font-semibold">{label}</dt><dd>{value}</dd></div>)}</dl></details>}
<SimulationOperations draft={draft} onChange={onChange} />
<SimulationAcquisitions draft={draft} onChange={onChange} />
<SimulationImportExemptions draft={draft} onChange={onChange} />
<SimulationPublicAuthorityBase draft={draft} onChange={onChange} />
<SimulationCommissionBase draft={draft} onChange={onChange} />
<SimulationActSaleBase draft={draft} onChange={onChange} />
<SimulationFuelBase draft={draft} onChange={onChange} />
<SimulationOfferPreparations draft={draft} onChange={onChange} />
<SimulationModeloA draft={draft} />
</section>;
}
@@ -0,0 +1,47 @@
import { useState } from 'react';
import { newOfferPreparation,offerPreparationBook,offerPreparationSource,offerReusableData,recordOfferPreparations,reuseOfferData,saveOfferPreparationBook,emptyOfferRequest,recordOfferRequest,offerRequestLabels,offerScenarios,type OfferRequest,type OfferPreparation,type OfferPreparationBook } from '@/lib/iva-offer-preparations';
export function SimulationOfferPreparations({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}) {
const [error,setError]=useState('');let book:OfferPreparationBook;let reusable:ReturnType<typeof offerReusableData>;
try{book=offerPreparationBook(draft);reusable=offerReusableData(draft);}catch(cause){return <p role="alert">{String(cause)}</p>;}
const run=(action:()=>void)=>{try{action();setError('');}catch(cause){setError(String(cause));}};
const save=(next:OfferPreparationBook)=>onChange('modelo_a_snapshot',saveOfferPreparationBook(draft,next));
const change=(id:string,patch:Partial<OfferPreparation>)=>run(()=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)}));
const question=(row:OfferPreparation,key:'nationalInstitution'|'publicSocialInstitution'|'goodsSuitable'|'publicInterestUse'|'mitigation',label:string)=><label className="block" key={key}>{label}<select className="block rounded border p-2" value={row[key]} onChange={e=>change(row.id,{[key]:e.target.value})}><option value="">Por indicar</option><option value="yes">Sim</option><option value="no">Não</option></select></label>;
return <details className="space-y-3 rounded border p-3"><summary>Ofertas a instituições e para calamidades — preparar rascunhos</summary>
<p>Prepare apenas as ofertas relevantes para a oportunidade {String(draft.context_opportunity||'entrada geral')}. Pode guardar dados incompletos e reutilizar referências existentes. A reutilização preenche apenas campos vazios; as suas edições mantêm-se.</p>
<p>O procedimento de aplicação do benefício está em pesquisa. Prepare o pedido e compare o cenário normal com uma hipótese condicionada à isenção. Apresentar o pedido não concede isenção. Estes cenários não alteram a dedução no campo11; os restantes enquadramentos continuam disponíveis.</p>
{error&&<p role="alert">{error}</p>}
<button type="button" className="underline" onClick={()=>run(()=>save({...book,rows:[...book.rows,newOfferPreparation(crypto.randomUUID(),'P084',String(draft.currency??''))]}))}>Preparar oferta a instituição</button>{' '}
<button type="button" className="underline" onClick={()=>run(()=>save({...book,rows:[...book.rows,newOfferPreparation(crypto.randomUUID(),'P085',String(draft.currency??''))]}))}>Preparar oferta para calamidade</button>
{book.rows.map(row=><details key={row.id} className="rounded border p-3"><summary>{row.branch} — {row.description||'Bens por identificar'}</summary>
<p>{row.branch==='P084'?'Artigo14(2)(a): aquisição ou importação de bens para ofertas a instituições nacionais de interesse público e relevantes fins sociais.':'Artigo14(2)(b): aquisição de bens para ofertas destinadas a atenuar efeitos de calamidades naturais.'} {offerPreparationSource}</p>
{row.branch==='P084'&&<label>Operação<select className="block rounded border p-2" value={row.operation} onChange={e=>change(row.id,{operation:e.target.value as OfferPreparation['operation']})}><option value="">Por indicar</option><option value="acquisition">Aquisição</option><option value="import">Importação</option></select></label>}
<label>Reutilizar dados desta oportunidade<select className="block rounded border p-2" value="" onChange={e=>run(()=>{const source=reusable.find(item=>item.key===e.target.value);if(source)save({...book,rows:book.rows.map(item=>item.id===row.id?reuseOfferData(item,source):item)});})}><option value="">Escolher referência existente</option>{reusable.filter(item=>(row.branch==='P084'||item.operation==='acquisition')&&(!row.operation||item.operation===row.operation)).map(item=><option key={item.key} value={item.key}>{item.label}</option>)}</select></label>
{row.reusedFrom&&<p>Referência reutilizada: {row.reusedFrom.key}. A origem foi conservada; a aquisição/importação original não foi alterada.</p>}
<div className="grid gap-3 md:grid-cols-2">{(['description','period','currency','amount','counterparty','documentRef','documentDate','beneficiary','purpose','evidence'] as const).map((key,index)=><label key={key}>{['Bens destinados à oferta','Período previsto / efectivo','Moeda','Valor de referência, sem cálculo fiscal','Fornecedor / importador','Documento / referência da previsão','Data do documento / prevista','Instituição / destinatário da oferta','Finalidade concreta da oferta','Fundamento factual / pressupostos'][index]}<input className="block rounded border p-2" type={key==='period'?'month':key==='documentDate'?'date':'text'} value={row[key]} onChange={e=>change(row.id,{[key]:e.target.value})}/></label>)}</div>
{row.branch==='P084'?<fieldset><legend>Condições próprias da oferta à instituição</legend>{question(row,'nationalInstitution','A instituição beneficiária é nacional')}{question(row,'publicSocialInstitution','A instituição tem interesse público e relevantes fins sociais')}{question(row,'goodsSuitable','Os bens são inteiramente adequados à natureza da instituição')}{question(row,'publicInterestUse','A instituição utilizará os bens em actividades de evidente interesse público')}</fieldset>:<fieldset><legend>Finalidade própria da oferta para calamidade</legend><label>Calamidade e contexto afectados<input className="block rounded border p-2" value={row.disaster} onChange={e=>change(row.id,{disaster:e.target.value})}/></label><label>Natureza da calamidade<input className="block rounded border p-2" value={row.disasterKind} placeholder="Cheias, tempestades, secas, ciclones, sismos ou outra de idêntica natureza" onChange={e=>change(row.id,{disasterKind:e.target.value})}/></label>{question(row,'mitigation','Os bens destinam-se a ofertas para atenuar os efeitos da calamidade identificada')}</fieldset>}
{row.branch==='P085'&&<label>Finalidade humanitária da resposta à emergência<textarea className="block w-full rounded border p-2" value={row.humanitarianPurpose??''} onChange={e=>change(row.id,{humanitarianPurpose:e.target.value})}/></label>}
<label>Documentos disponíveis e respectivas referências<textarea className="block w-full rounded border p-2" value={row.availableDocuments??''} onChange={e=>change(row.id,{availableDocuments:e.target.value})}/></label>
{!!row.documentRef&&<button type="button" className="underline" onClick={()=>{const reference=[row.documentRef,row.documentDate].filter(Boolean).join(', ');if(!(row.availableDocuments??'').includes(reference))change(row.id,{availableDocuments:[row.availableDocuments,reference].filter(Boolean).join('\n')});}}>Juntar referência do documento já indicado</button>}
{row.branch==='P084'&&(()=>{const request=row.request??emptyOfferRequest();const edit=(patch:Partial<OfferRequest>)=>change(row.id,{request:{...request,...patch}});return <fieldset className="rounded border p-3"><legend>Pedido e âmbito da decisão</legend>
<p>Registe o estado declarado e os elementos disponíveis. Este registo não apresenta um pedido à autoridade nem concede o benefício. Conserve o âmbito exacto de cada decisão, mesmo que cubra apenas parte dos bens ou períodos.</p>
<label>Estado declarado do pedido<select className="block rounded border p-2" value={request.state} onChange={e=>edit({state:e.target.value as OfferRequest['state']})}>{Object.entries(offerRequestLabels).map(([value,label])=><option key={value} value={value}>{label}</option>)}</select></label>
{(['reference','presentedOn','decisionRef','decisionOn','goods','periodFrom','periodTo','conditions'] as const).map((key,index)=><label className="block" key={key}>{['Referência do pedido','Data de apresentação, se disponível','Documento / referência da decisão, se disponível','Data da decisão, se disponível','Bens abrangidos pela decisão','Início do período abrangido','Fim do período abrangido','Condições, limites ou fundamento da decisão'][index]}<input className="block rounded border p-2" type={key==='presentedOn'||key==='decisionOn'?'date':'text'} placeholder={key==='periodFrom'||key==='periodTo'?'AAAA-MM ou AAAA-MM-DD, conforme a decisão':undefined} value={request[key]} onChange={e=>edit({[key]:e.target.value})}/></label>)}
<label>Operação abrangida pela decisão<select className="block rounded border p-2" value={request.operation} onChange={e=>edit({operation:e.target.value as OfferRequest['operation']})}><option value="">Por indicar</option><option value="acquisition">Aquisição</option><option value="import">Importação</option></select></label>
<label>Âmbito de operações literal, se a decisão abranger mais do que a opção indicada<input className="block rounded border p-2" value={request.operationScope??''} onChange={e=>edit({operationScope:e.target.value})}/></label>
<label>Âmbito temporal literal, se não estiver limitado pelas datas indicadas<input className="block rounded border p-2" placeholder="Conservar, por exemplo, a indicação sem termo ou até revogação do documento" value={request.periodScope??''} onChange={e=>edit({periodScope:e.target.value})}/></label>
<button type="button" className="underline" onClick={()=>edit({goods:request.goods||row.description,operation:request.operation||row.operation,periodFrom:request.periodFrom||row.period,periodTo:request.periodTo||row.period})}>Reutilizar contexto nos campos de âmbito vazios</button>{' '}
<button type="button" className="rounded border p-2" onClick={()=>run(()=>save({...book,rows:book.rows.map(item=>item.id===row.id?recordOfferRequest(item):item)}))}>Registar estado declarado e âmbito</button>
{(row.requestRecords??[]).map((record,index)=><p key={index}>{offerRequestLabels[record.request.state]} — {record.recordedAt}; bens: {record.request.goods||'por indicar'}; operação: {record.request.operationScope||record.request.operation||'por indicar'}; período: {record.request.periodScope||`${record.request.periodFrom||'por indicar'} a ${record.request.periodTo||'por indicar'}`}; condições: {record.request.conditions||'por indicar'}; decisão: {record.request.decisionRef||'por indicar'}. Este âmbito não se estende automaticamente à restante operação ou oportunidade.</p>)}
</fieldset>;})()}
<fieldset className="rounded border p-3"><legend>Cenário normal e cenário condicionado à isenção</legend>
<label>IVA no cenário normal, indicado em documento ou pressuposto<input className="block rounded border p-2" inputMode="decimal" value={row.normalVat??''} onChange={e=>change(row.id,{normalVat:e.target.value})}/></label>
<label>Documento ou pressuposto do IVA normal<input className="block rounded border p-2" value={row.normalVatSource??''} onChange={e=>change(row.id,{normalVatSource:e.target.value})}/></label>
<label>Assumir, apenas para comparar, a hipótese condicionada de isenção<select className="block rounded border p-2" value={row.conditionalAssumption??''} onChange={e=>change(row.id,{conditionalAssumption:e.target.value as ''|'yes'|'no'})}><option value="">Por indicar</option><option value="yes">Sim, como hipótese condicionada</option><option value="no">Não</option></select></label>
{(()=>{const scenarios=offerScenarios(row);return <><table><thead><tr><th>Cenário</th><th>IVA ({row.currency})</th></tr></thead><tbody><tr><td>Normal — valor indicado, sem taxa presumida</td><td>{scenarios.normalVat??'Indeterminado'}</td></tr><tr><td>Condicionado à isenção — hipótese, não concessão</td><td>{scenarios.conditionalVat??'Indeterminado'}</td></tr></tbody></table><p>{scenarios.conditionalReason}</p><p>O cenário condicionado não altera imposto, dedução, totais ou o estado do pedido. O procedimento só será aplicado quando a correspondência regulamentar estiver demonstrada.</p></>;})()}
</fieldset>
</details>)}
{!!book.rows.length&&<><button type="button" className="rounded border p-2" onClick={()=>run(()=>save(recordOfferPreparations(book)))}>Guardar versão dos rascunhos de ofertas</button><p role="status">{book.saved?'Versão de preparação conservada; alterações seguintes não substituem essa versão.':'Preparação em curso; pode guardar mesmo com informação em falta.'} Benefício não aplicado. {book.history?.length??0} versões anteriores.</p></>}
</details>;
}
@@ -0,0 +1,105 @@
import { useState } from 'react';
import { fundraisingActivities } from '@/lib/iva-fundraising';
import { pharmaAnnexEntries, pharmaAnnexEntry, pharmaAnnexReference } from '@/lib/iva-pharma-annex';
import { annexIEntries, annexIEntry, annexIReference } from '@/lib/iva-annex-i';
import { temporaryBenefit, temporaryBenefitNotice } from '@/lib/iva-temporary-benefits';
import { isExportService } from '@/lib/iva-export-services';
import { isSpecialRegime, specialRegimesFor, specialRegimeIssue, type SpecialRegime } from '@/lib/iva-special-regimes';
import { isOnboardSupply, supplyCategories, onboardSupplyIssue, type SupplyCategory } from '@/lib/iva-onboard-supplies';
import { emptyProductionTaxOption, type ProductionTaxOption } from '@/lib/iva-production-option';
import { referenceExportOperation, continueTemporaryOperation, continueAnnexIOperation, modeloA06Correspondence, newSalesOperation, operationTreatments, recordSales, reuseSales, salesBook, salesCurrent, salesReportRows, saveSalesBook, splitSales, type SalesBook, type SalesOperation } from '@/lib/iva-operations';
export function SimulationOperations({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}) {
const [error,setError]=useState('');
const [reuseOption,setReuseOption]=useState<{rowId:string;sourceId:string}|null>(null);
const [annexSearch,setAnnexSearch]=useState<Record<string,string>>({});
let book:SalesBook;
try{book=salesBook(draft);}catch(cause){return <p role="alert">{String(cause)}</p>;}
const run=(action:()=>void)=>{try{action();setError('');}catch(cause){setError(cause instanceof Error?cause.message:String(cause));}};
const save=(next:SalesBook)=>onChange('modelo_a_snapshot',saveSalesBook(draft,next));
const change=(id:string,patch:Partial<SalesOperation>)=>run(()=>save({...book,rows:book.rows.map(r=>r.id===id?{...r,...patch}:r)}));
const continueTemporary=(id:string,target:string)=>run(()=>save({...book,rows:book.rows.map(row=>row.id===id?continueTemporaryOperation(row,target):row)}));
return <section aria-label="Operações IVA por oportunidade" className="space-y-3 rounded border p-3">
<h4 className="font-semibold">Operações de IVA — enquadramento das vendas</h4>
<p>Oportunidade {String(draft.context_opportunity||'entrada geral')}; moeda original {book.currency||'por indicar'}. Cobertura2026/MZN. Reutilize as vendas e complete apenas o enquadramento. Este bloco classifica as operações; não substitui nem soma novamente a execução mensal geral acima.</p>
<p>Uma empresa pode ter operações com tratamentos diferentes. Os valores são projecções sob pressupostos declarados, sem certificar facturas, reconhecer créditos ou submeter uma declaração à AT.</p>
<details><summary>Correspondência do campo06 e limites do formulário</summary><p>{modeloA06Correspondence}</p></details>
{error&&<p role="alert">{error}</p>}
<button type="button" className="underline" onClick={()=>run(()=>save(reuseSales(draft,book)))}>Reutilizar vendas e períodos existentes</button>
<button type="button" className="ml-3 underline" disabled={!book.periods.length} onClick={()=>run(()=>save({...book,rows:[...book.rows,newSalesOperation(crypto.randomUUID(),book.periods[0].period,book.currency)]}))}>Acrescentar operação em falta</button>
{book.rows.map(row=>{const rule=operationTreatments.find(r=>r.id===row.treatment),annexI=annexIEntry(row.annexIItem);return <details className="rounded border p-3" key={row.id}><summary>{row.description||'Operação adicional'} — {row.period}</summary>
<p>Origem: {row.source}; {row.sourceAmount??'sem valor de origem'} {row.sourceCurrency}; {row.sourcePeriod}. O estabelecimento não é inferido da localização do projecto.</p>
<div className="grid gap-3 md:grid-cols-2">
<label>Descrição da operação<input className="block rounded border p-2" value={row.description} onChange={e=>change(row.id,{description:e.target.value})}/></label>
<label>Estabelecimento<input className="block rounded border p-2" value={row.establishment} onChange={e=>change(row.id,{establishment:e.target.value})}/></label>
<label>Período<input type="month" className="block rounded border p-2" min="2026-01" max="2026-12" value={row.period} onChange={e=>change(row.id,{period:e.target.value})}/></label>
<label>Valor declarado<input inputMode="decimal" className="block rounded border p-2" value={row.amount} onChange={e=>change(row.id,{amount:e.target.value})}/></label>
<label>Representação do preço<select className="block rounded border p-2" value={row.basis} onChange={e=>change(row.id,{basis:e.target.value as SalesOperation['basis']})}><option value="">Ainda desconhecida</option><option value="net">Sem IVA</option><option value="included">IVA incluído</option></select></label>
<label>Tratamento da operação<select className="block rounded border p-2" value={row.treatment} onChange={e=>temporaryBenefit(row.treatment)&&!temporaryBenefit(e.target.value)?continueTemporary(row.id,e.target.value):change(row.id,{treatment:e.target.value,confirmed:[]})}>{operationTreatments.map(t=><option value={t.id} key={t.id}>{t.label}</option>)}</select></label>
</div>
{isSpecialRegime(row.treatment)&&<fieldset className="space-y-2 rounded border p-2"><legend>Regime aduaneiro ou fiscal da operação</legend>
<label>Regime do artigo14(1)<select value={specialRegimesFor(row.treatment).some(([value])=>value===row.specialRegime)?row.specialRegime:''} onChange={e=>change(row.id,{specialRegime:e.target.value as SpecialRegime,confirmed:[]})}><option value="">Por identificar</option>{specialRegimesFor(row.treatment).map(([value,label])=><option value={value} key={value}>{label}</option>)}</select></label>
<p>Identifique no fundamento os bens, a operação e o documento ou pressuposto expresso do regime. A escolha conserva preço, moeda e período e pede a revisão das condições; não comprova o enquadramento por estar numa zona. Bens e serviço de transporte ou serviço conexo têm preços próprios, sem duplicar o valor.</p>
{specialRegimeIssue(row.treatment,row.specialRegime)&&<p role="status">{specialRegimeIssue(row.treatment,row.specialRegime)}</p>}
</fieldset>}
{isOnboardSupply(row.treatment)&&<fieldset className="space-y-2 rounded border p-2"><legend>Natureza do abastecimento a bordo</legend>
<label>Categoria do artigo13(3)<select value={row.supplyCategory??''} onChange={e=>change(row.id,{supplyCategory:e.target.value as SupplyCategory,confirmed:[]})}><option value="">Por identificar</option>{supplyCategories.map(([value,label])=><option key={value} value={value}>{label}</option>)}</select></label>
<p>A escolha conserva o preço, a moeda e o período; reveja as condições. Para fornecimento misto, discrimine as parcelas efectivas sem repetir o total em cada linha. Desconhecido não equivale a «sem bebidas».</p>
{onboardSupplyIssue(row.treatment,row.supplyCategory)&&<p role="status">{onboardSupplyIssue(row.treatment,row.supplyCategory)}</p>}
</fieldset>}
{isExportService(row.treatment)&&<fieldset className="space-y-2 rounded border p-2"><legend>Referência à operação relacionada</legend>
<p>Se a operação já consta desta oportunidade,pode referenciá-la sem preencher de novo a descrição. A escolha conserva o preço,moeda,período e fundamento deste serviço;limpa as confirmações para revisão. Não copia o valor dos bens para o preço do serviço nem comprova automaticamente a isenção. Para operação documentada fora deste livro,use o fundamento abaixo.</p>
<label>Operação já preenchida<select value={row.relatedExport?.id??''} onChange={e=>run(()=>{if(!e.target.value){save({...book,rows:book.rows.map(item=>item.id===row.id?{...item,relatedExport:undefined,confirmed:[]}:item)});return;}const related=book.rows.find(item=>item.id===e.target.value);if(!related)throw new Error('Operação relacionada já não disponível; dados conservados.');save({...book,rows:book.rows.map(item=>item.id===row.id?referenceExportOperation(item,related):item)});})}><option value="">Sem referência interna — identificar no fundamento</option>{book.rows.filter(item=>item.id!==row.id).map(item=><option key={item.id} value={item.id}>{item.description||item.id} — {item.period}</option>)}</select></label>
{row.relatedExport&&<><p>Referência guardada: {row.relatedExport.description}; ID {row.relatedExport.id}; {row.relatedExport.treatment}.</p>{book.rows.some(item=>item.id===row.relatedExport!.id)&&<button type="button" onClick={()=>run(()=>{const related=book.rows.find(item=>item.id===row.relatedExport!.id)!;save({...book,rows:book.rows.map(item=>item.id===row.id?referenceExportOperation(item,related):item)});})}>Actualizar referência escolhida e rever condições</button>}</>}
</fieldset>}
{temporaryBenefit(row.treatment)&&<fieldset className="space-y-2 rounded border p-2"><legend>Benefício temporário — prazo e continuidade</legend>
<p>{temporaryBenefitNotice(row.treatment,row.period)}</p>
<p>{temporaryBenefit(row.treatment)!.historicalScope}</p>
<p>Não precisa de preencher documentos de uma isenção já terminada para prosseguir em2026. Antes de escolher outro tratamento, confirme a natureza da operação: a escolha conserva valor,moeda,período,estabelecimento eorigem; limpa as confirmações para revisão e mantém o resultado anterior no histórico.</p>
<button type="button" onClick={()=>continueTemporary(row.id,'general')}>Escolher operação interna geral e rever condições</button>
{row.treatment==='temporary_sugar_cane'&&<button type="button" onClick={()=>continueTemporary(row.id,'production_agriculture')}>Analisar produção agrícola própria — artigo9(7)(a)</button>}
<p>Para outro enquadramento disponível,use a escolha «Tratamento da operação». Nenhum resultado é recalculado automaticamente.</p>
</fieldset>}
{temporaryBenefit(row.temporaryBenefitOrigin)&&!temporaryBenefit(row.treatment)&&<p>Origem conservada: {temporaryBenefit(row.temporaryBenefitOrigin)!.label},benefício com termo31/12/2025. Enquadramento actual escolhido expressamente;confirme as respectivas condições antes de calcular.</p>}
{row.treatment==='annexI_goods'&&<fieldset className="space-y-2 rounded border p-2"><legend>Bem do Anexo I — edição Lei22/2022</legend>
<p>Escolha código e designação e confira apenas os qualificadores dessa linha. A pesquisa conserva a escolha actual; mudar de posição exige rever as condições específicas. O anexo não dispensa o enquadramento de outras isenções aplicáveis ao mesmo bem.</p>
<label className="block">Pesquisar código ou designação no Anexo I<input value={annexSearch[`I:${row.id}`]??''} onChange={e=>setAnnexSearch({...annexSearch,[`I:${row.id}`]:e.target.value})}/></label>
<label className="block">Posição do Anexo I<select className="block max-w-full rounded border p-2" value={row.annexIItem??''} onChange={e=>change(row.id,{annexIItem:e.target.value,annexIOnly:undefined,confirmed:row.confirmed.filter(n=>n===0)})}><option value="">Ainda por determinar</option>{annexIEntries.filter(entry=>entry.id===row.annexIItem||`${entry.code} ${entry.context??''} ${entry.label}`.toLocaleLowerCase('pt').includes((annexSearch[`I:${row.id}`]??'').trim().toLocaleLowerCase('pt'))).map(entry=><option key={entry.id} value={entry.id}>{entry.code} — {entry.context?entry.context+' — ':''}{entry.label} (PDF{entry.pdfPage})</option>)}</select></label>
{row.annexIItem&&<p>{annexI?annexIReference(annexI):`Posição guardada não encontrada nesta edição: ${row.annexIItem}. Original conservado; escolha explicitamente a correspondência.`}</p>}
{!!annexI?.relatedTreatments?.length&&<div><p>Confira a natureza e o destino: há um tratamento existente que pode abranger este bem. Se for aplicável, use-o para conservar também o direito à dedução nas condições legais. Ao confirmar a passagem, conserva valores e origem e terá de rever as condições do tratamento escolhido; nenhum resultado anterior é substituído automaticamente.</p>
{annexI.relatedTreatments.map(id=>{const target=operationTreatments.find(t=>t.id===id);return target&&<button className="block underline" type="button" key={id} onClick={()=>run(()=>save({...book,rows:book.rows.map(r=>r.id===row.id?continueAnnexIOperation(r,id):r)}))}>Usar {target.label} e rever condições</button>;})}
{!annexI.relatedRequired&&<label className="block"><input type="checkbox" checked={row.annexIOnly===true} onChange={e=>change(row.id,{annexIOnly:e.target.checked})}/>Conferi a designação e o destino: esta operação não corresponde ao tratamento indicado acima; o fundamento explica a aplicação apenas do artigo9(12)(h).</label>}
</div>}
</fieldset>}
{row.treatment==='pharma_manufacturing_inputs'&&<fieldset className="space-y-2 rounded border p-2"><legend>Bem do Anexo III — edição Lei22/2022</legend>
<p>Escolha a linha pelo código e pela designação. O estabelecimento que transmite deve estar integrado no SNS; o destino hospitalar não substitui essa condição. A selecção não classifica automaticamente uma mercadoria nem confirma a sua utilização.</p>
<label className="block">Pesquisar código ou designação<input value={annexSearch[row.id]??''} onChange={e=>setAnnexSearch({...annexSearch,[row.id]:e.target.value})}/></label>
<label className="block">Linha do Anexo III<select className="block max-w-full rounded border p-2" value={row.pharmaAnnexItem??''} onChange={e=>change(row.id,{pharmaAnnexItem:e.target.value})}><option value="">Ainda por determinar</option>{pharmaAnnexEntries.filter(entry=>entry.id===row.pharmaAnnexItem||`${entry.code} ${entry.label}`.toLocaleLowerCase('pt').includes((annexSearch[row.id]??'').trim().toLocaleLowerCase('pt'))).map(entry=><option key={entry.id} value={entry.id}>{entry.code} — {entry.label} (PDF{entry.pdfPage})</option>)}</select></label>
{row.pharmaAnnexItem&&<p>{pharmaAnnexEntry(row.pharmaAnnexItem)?pharmaAnnexReference(pharmaAnnexEntry(row.pharmaAnnexItem)!):`Escolha guardada não encontrada nesta edição: ${row.pharmaAnnexItem}. Original conservado; seleccione explicitamente a correspondência.`}</p>}
<p>O exemplar repete2912.19.00 em duas linhas com designações diferentes e imprime2935. sem completar a posição. As linhas mantêm identidades próprias; não se inventam dígitos nem se estende a isenção apenas pelo código.</p>
</fieldset>}
{row.treatment.startsWith('fundraising_')&&<fieldset className="space-y-2 rounded border p-2"><legend>Manifestação ocasional — limite anual da entidade</legend><p>O total é declarado para a entidade em todo o ano, incluindo manifestações fora deste dossier. Várias vendas da mesma manifestação não são novas manifestações.</p>
{([['entityReference','Referência da entidade organizadora'],['annualEvents','Total anual de manifestações da entidade, incluindo esta'],['eventNumber','Número desta manifestação no ano']] as const).map(([field,label])=><label className="block" key={field}>{label}<input value={row.fundraiser?.[field]??''} onChange={e=>change(row.id,{fundraiser:{entityReference:'',annualEvents:'',eventNumber:'',activity:'',...row.fundraiser,[field]:e.target.value}})}/></label>)}
<label className="block">Actividade habitual isenta<select value={row.fundraiser?.activity??''} onChange={e=>change(row.id,{fundraiser:{entityReference:'',annualEvents:'',eventNumber:'',...row.fundraiser,activity:e.target.value}})}><option value="">Por identificar</option>{fundraisingActivities.filter(([id])=>row.treatment==='fundraising_nonprofit'?!id.endsWith('_public'):id!=='statutory_membership').map(([id,label])=><option key={id} value={id}>{label}</option>)}</select></label>
</fieldset>}
{row.treatment.startsWith('production_')&&row.treatment.endsWith('_opted')&&<fieldset className="space-y-2 rounded border p-2"><legend>Opção de tributação da produção — artigo11</legend>
<p>Complete apenas as datas em falta. A opção não cessa automaticamente ao fim de cinco anos. O prazo termina às 24 horas do dia correspondente; se faltar esse dia, no último dia do mesmo mês. O artigo11(3) exige declaração antes de expirar o prazo e fixa os efeitos em 1 de Janeiro seguinte, respeitando a permanência mínima.</p>
{book.rows.some(source=>source.id!==row.id&&source.taxOption)&&<label className="block">Reutilizar opção já preenchida neste dossier<select value={reuseOption?.rowId===row.id?reuseOption.sourceId:''} onChange={e=>setReuseOption(e.target.value?{rowId:row.id,sourceId:e.target.value}:null)}><option value="">Escolha a origem, se aplicável ao mesmo sujeito passivo</option>{book.rows.filter(source=>source.id!==row.id&&source.taxOption).map(source=><option key={source.id} value={source.id}>{source.description} — {source.establishment}</option>)}</select></label>}
{reuseOption?.rowId===row.id&&<div><p>Ao confirmar, substituirá o enquadramento e as datas da opção desta linha pelos da origem escolhida, conservando a data desta operação. Confirme que se aplicam ao mesmo sujeito passivo; o resultado anterior permanece no histórico.</p><button type="button" onClick={()=>run(()=>{const source=book.rows.find(r=>r.id===reuseOption.sourceId);if(!source?.taxOption)throw new Error('Origem da opção já não disponível; dados conservados.');change(row.id,{taxOption:{...structuredClone(source.taxOption),operationDate:row.taxOption?.operationDate??'',origin:{rowId:source.id,description:source.description,establishment:source.establishment}}});setReuseOption(null);})}>Confirmar reutilização da opção escolhida</button><button type="button" onClick={()=>setReuseOption(null)}>Conservar os dados desta linha</button></div>}
<label className="block">Tipo de declaração de opção<select value={row.taxOption?.mode??''} onChange={e=>change(row.id,{taxOption:{...emptyProductionTaxOption(),...row.taxOption,mode:e.target.value as ProductionTaxOption['mode']}})}><option value="">Por indicar</option><option value="annual">Opção com efeitos no ano seguinte</option><option value="startup">Opção na declaração de início da actividade</option></select></label>
<label className="block">Declaração de regresso à isenção<select value={row.taxOption?.returnStatus??''} onChange={e=>change(row.id,{taxOption:{...emptyProductionTaxOption(),...row.taxOption,returnStatus:e.target.value as ProductionTaxOption['returnStatus']}})}><option value="">Ainda desconhecido</option><option value="none">Não existe declaração de regresso</option><option value="declared">Existe declaração de regresso</option></select></label>
{([['declarationDate','Data da declaração de opção'],...(row.taxOption?.mode==='startup'?[['startupDate','Data de início da actividade']]:[]),['operationDate','Data da operação nesta linha'],...(row.taxOption?.returnStatus==='declared'||row.taxOption?.returnDeclarationDate?[['returnDeclarationDate','Data da declaração de regresso à isenção']]:[])] as Array<['declarationDate'|'startupDate'|'operationDate'|'returnDeclarationDate',string]>).map(([field,label])=><label className="block" key={field}>{label}<input type="date" value={row.taxOption?.[field]??''} onChange={e=>change(row.id,{taxOption:{...emptyProductionTaxOption(),...row.taxOption,[field]:e.target.value}})}/></label>)}
</fieldset>}
<p>{rule?.article}; {rule?.source}. Aplicação nesta versão: Janeiro–Dezembro2026, sujeita às condições seguintes.</p>
{rule?.conditions.map((condition,index)=><label className="block" key={index}><input type="checkbox" checked={row.confirmed.includes(index)} onChange={e=>change(row.id,{confirmed:e.target.checked?[...row.confirmed,index]:row.confirmed.filter(i=>i!==index)})}/> {condition}</label>)}
<label className="block">Documento ou pressuposto que sustenta estas condições<textarea className="block w-full rounded border p-2" value={row.evidence} onChange={e=>change(row.id,{evidence:e.target.value})}/></label>
<p>Se precisar de repartir uma venda agregada, conserve o valor de origem e prepare linhas discriminadas. Não altere silenciosamente a sua representação monetária.</p>
<button type="button" className="mr-3 underline" onClick={()=>run(()=>save(splitSales(book,row.id,crypto.randomUUID())))}>Repartir explicitamente esta venda, conservando o total de origem</button>
<button type="button" className="underline" onClick={()=>run(()=>save({...book,rows:book.rows.filter(r=>r.id!==row.id),periods:book.periods.map(p=>p.period===row.period?{...p,complete:false}:p)}))}>Remover esta linha do preenchimento (resultado anterior conservado)</button>
</details>;})}
{book.periods.map(p=><label className="block" key={p.period}><input type="checkbox" checked={p.complete} onChange={e=>run(()=>save({...book,periods:book.periods.map(v=>v.period===p.period?{...v,complete:e.target.checked}:v)}))}/> {p.period}: incluí todas as operações deste período; lista vazia significa ausência expressamente confirmada.</label>)}
<p>Limites: outras isenções/bases especiais e correspondência do campo06 permanecem por delimitar. IVA incluído a5% conserva a fracção exacta e apresenta um decimal a6casas; a aproximação de apresentação não constitui regra declarativa. O desconhecido nunca é assumido como zero.</p>
<button type="button" disabled={!book.periods.length} className="rounded bg-emerald-800 p-2 text-white disabled:opacity-50" onClick={()=>run(()=>save(recordSales(draft,book)))}>Calcular e guardar operações IVA</button>
{book.result&&<><p role="status">{salesCurrent(draft,book)?'Resultado correspondente às entradas.':'Resultado histórico conservado; reveja as alterações antes de recalcular.'}</p><dl>{salesReportRows(draft).map(([,label,value,origin],index)=><div className="break-inside-avoid border-t py-2" key={index}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</section>;
}
@@ -0,0 +1,32 @@
import {useState} from 'react';
import {newPublicBase,publicBaseBook,publicBaseConditions,publicBaseCurrent,publicBaseReportRows,publicBaseSource,publicBaseTreatments,recordPublicBases,savePublicBaseBook,type PublicBaseBook,type PublicBaseRow} from '@/lib/iva-public-authority-base';
export function SimulationPublicAuthorityBase({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}){
const[error,setError]=useState('');let book:PublicBaseBook;
try{book=publicBaseBook(draft);}catch(cause){return<p role="alert">{String(cause)}</p>;}
const save=(next:PublicBaseBook)=>{try{onChange('modelo_a_snapshot',savePublicBaseBook(draft,next));setError('');}catch(cause){setError(String(cause));}};
const change=(id:string,patch:Partial<PublicBaseRow>)=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)});
return<details className="space-y-3 rounded border p-3">
<summary>Base tributável — actos de autoridades públicas</summary>
<p>Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Prepare apenas as operações relevantes. A base do artigo15(2)(d) é a indemnização ou outra compensação ligada à transmissão de bens ou prestação de serviços resultante do acto público. Um pagamento ou a natureza pública da entidade não determinam incidência nem taxa de IVA.</p>
<p>A indemnização judicial por incumprimento de contrato tem exclusão própria no artigo15(6)(a); não é incluída por analogia. Indique as componentes sem IVA e o fundamento da composição. Na compensação em espécie ou mista, identifique o valor normal conforme15(3)/(4). Valores em falta permanecem indeterminados; não se convertem em zero.</p>
<p>{publicBaseSource}</p>
{error&&<p role="alert">{error}</p>}
<button type="button" className="underline" onClick={()=>save({...book,rows:[...book.rows,newPublicBase(crypto.randomUUID(),String(draft.currency??''))]})}>Acrescentar operação de acto público</button>
{book.rows.map(row=><details key={row.id} className="rounded border p-3"><summary>{row.description||'Operação por identificar'} — {row.period||'mês por indicar'}</summary>
<div className="grid gap-3 md:grid-cols-2">
<label>Tratamento da compensação<select className="block rounded border p-2" value={row.treatment} onChange={e=>change(row.id,{treatment:e.target.value})}><option value="">Por indicar</option>{publicBaseTreatments.map(item=><option key={item.id} value={item.id}>{item.label}</option>)}</select></label>
<label>Natureza da operação<select className="block rounded border p-2" value={row.operationNature} onChange={e=>change(row.id,{operationNature:e.target.value as PublicBaseRow['operationNature']})}><option value="">Por indicar</option><option value="goods">Transmissão de bens</option><option value="services">Prestação de serviços</option></select></label>
<label>Natureza dos dados<select className="block rounded border p-2" value={row.origin} onChange={e=>change(row.id,{origin:e.target.value as PublicBaseRow['origin']})}><option value="projected">Projectados / pressupostos</option><option value="effective">Efectivos declarados</option></select></label>
{([['description','Operação identificada'],['authority','Autoridade pública'],['actRef','Acto da autoridade / referência da previsão'],['documentRef','Documento da compensação / referência da previsão'],['documentDate','Data do documento / prevista'],['period','Mês da operação'],['currency','Moeda de origem'],['compositionRef','Referência da composição sem IVA — inclusões e exclusões aplicáveis'],['evidence','Fundamento factual / pressupostos']] as const).map(([field,label])=><label key={field}>{label}<input className="block rounded border p-2" type={field==='documentDate'?'date':field==='period'?'month':'text'} value={row[field]} onChange={e=>change(row.id,{[field]:e.target.value})}/></label>)}
<label>Forma da compensação<select className="block rounded border p-2" value={row.compensationForm} onChange={e=>change(row.id,{compensationForm:e.target.value as PublicBaseRow['compensationForm']})}><option value="">Por indicar</option><option value="money">Em dinheiro</option><option value="non_money">Em espécie</option><option value="mixed">Mista — dinheiro e espécie</option></select></label>
{['money','mixed'].includes(row.compensationForm)&&<label>Componente monetária sem IVA (moeda indicada)<input className="block rounded border p-2" value={row.moneyAmount} onChange={e=>change(row.id,{moneyAmount:e.target.value})}/></label>}
{['non_money','mixed'].includes(row.compensationForm)&&<><label>Valor normal não monetário sem IVA (moeda indicada)<input className="block rounded border p-2" value={row.nonMoneyValue} onChange={e=>change(row.id,{nonMoneyValue:e.target.value})}/></label><label>Referência da valorização / pressuposto do valor normal<input className="block rounded border p-2" value={row.valuationRef} onChange={e=>change(row.id,{valuationRef:e.target.value})}/></label></>}
</div>
<p>Ao mudar de tratamento ou forma, os valores e referências anteriores conservam-se; só entram no cálculo as componentes aplicáveis à forma escolhida.</p>
<fieldset><legend>Condições próprias desta base</legend>{publicBaseConditions.map(([key,label])=><label className="block" key={key}>{label}<select className="block rounded border p-2" value={row.conditions[key]??''} onChange={e=>change(row.id,{conditions:{...row.conditions,[key]:e.target.value}})}><option value="">Por indicar</option><option value="yes">Sim</option><option value="no">Não</option></select></label>)}</fieldset>
</details>)}
{!!book.rows.length&&<button type="button" className="rounded bg-emerald-800 p-2 text-white" onClick={()=>{try{save(recordPublicBases(draft,book));}catch(cause){setError(String(cause));}}}>Determinar bases e guardar versão</button>}
{book.result&&<><p role="status">{publicBaseCurrent(draft,book)?'Bases correspondentes às entradas guardadas.':'Entradas alteradas; bases históricas conservadas. Reveja e determine novamente.'} {book.history?.length??0} versões anteriores. IVA e campo11 não são preenchidos por estas bases.</p><dl>{publicBaseReportRows(draft).map(([,label,value,origin],index)=><div key={index}><dt className="font-semibold">{label}</dt><dd>{value}<small className="block">{origin}</small></dd></div>)}</dl></>}
</details>;
}
+22
View File
@@ -0,0 +1,22 @@
/** Exact amounts in currency units; decimal formatting is presentation, never a tax rule. */
export type FiscalFraction = { numerator:string; denominator:string };
function parts(value:FiscalFraction):[bigint,bigint] {
if(!/^-?\d{1,80}$/.test(value.numerator)||!/^\d{1,80}$/.test(value.denominator)||BigInt(value.denominator)===0n)throw new Error('Representação racional inválida; sem substituição por zero.');
return [BigInt(value.numerator),BigInt(value.denominator)];
}
export function fraction(n:bigint,d=1n):FiscalFraction {
if(d===0n)throw new Error('Denominador nulo.');if(d<0n){n=-n;d=-d;}
let a=n<0n?-n:n,b=d;while(b){const r=a%b;a=b;b=r;}return {numerator:String(n/(a||1n)),denominator:String(d/(a||1n))};
}
export function decimalFraction(raw:string):FiscalFraction {
if(!/^\d{1,18}(\.\d{1,6})?$/.test(raw))throw new Error('Montante decimal inválido.');const [a,b='']=raw.split('.');return fraction(BigInt(a+b),10n**BigInt(b.length));
}
export function addFractions(values:FiscalFraction[]):FiscalFraction {return values.reduce((a,b)=>{const [an,ad]=parts(a),[bn,bd]=parts(b);return fraction(an*bd+bn*ad,ad*bd);},fraction(0n));}
export function subtractFractions(a:FiscalFraction,b:FiscalFraction):FiscalFraction {const [an,ad]=parts(a),[bn,bd]=parts(b);return fraction(an*bd-bn*ad,ad*bd);}
export function positiveFraction(value:FiscalFraction):FiscalFraction {return parts(value)[0]>0n?value:fraction(0n);}
export function fractionPresentation(value:FiscalFraction):{decimal:string;approximate:boolean} {
const [raw,d]=parts(value),n=raw<0n?-raw:raw,scaled=n*1000000n;
const q=(scaled+d/2n)/d,dec=(q%1000000n).toString().padStart(6,'0').replace(/0+$/,'').padEnd(2,'0');
return {decimal:`${raw<0n?'-':''}${q/1000000n}.${dec}`,approximate:scaled%d!==0n};
}
export function fractionLabel(value:FiscalFraction):string {parts(value);return `${value.numerator}/${value.denominator}`;}
@@ -0,0 +1,14 @@
import type { Acquisition } from './iva-acquisitions.ts';
export type AcquisitionTreatment = '' | 'normal' | 'former_exploration_exemption';
export const acquisitionContinuityVersion='acquisition-continuity/1';
export const formerExplorationSource = 'Aviso da Assembleia da República,BR89/I Série,08/06/2017,PDF1/p.569:ordena eliminação de14(2)(c) e transcreve «c) eliminado». CIVA republicado Lei13/2016,PDF13/p.1426(271),continha aquisição de serviços de perfuração,pesquisa e construção de infra-estruturas na actividade mineira/petrolífera em fase de prospecção/pesquisa. Lei22/2022art.1 eLei10/2025art.1 não reintroduzem14(2)(c). Cobertura2026/MZN;sem cálculo retroactivo.';
export const formerExplorationNotice = 'A antiga isenção da aquisição de serviços de perfuração, pesquisa e infra-estruturas de prospecção mineira/petrolífera do artigo14(2)(c) foi eliminada pela rectificação publicada no BR89 de08/06/2017. Não se aplica nesta cobertura2026. Não indique IVA zero nem dedução por esta referência. Valores e documento conservados; escolha expressamente continuar a aquisição sem esta isenção e reveja o enquadramento normal. Outra eventual base legal deve ser identificada, não presumida.';
export function acquisitionTreatmentIssue(treatment:unknown):string|null {
if(treatment===undefined||treatment===''||treatment==='normal')return null;
return treatment==='former_exploration_exemption'?formerExplorationNotice:'Tratamento especial guardado desconhecido; dados conservados, sem isenção ou dedução presumidas. Identifique o enquadramento antes de continuar.';
}
export function continueWithoutFormerExploration(row:Acquisition):Acquisition {
if(row.acquisitionTreatment!=='former_exploration_exemption')throw new Error('A continuidade exige a antiga referência14(2)(c) seleccionada; aquisição conservada.');
return {...row,acquisitionTreatment:'normal',acquisitionTreatmentOrigin:{id:'former_exploration_exemption',source:formerExplorationSource}};
}
+219
View File
@@ -0,0 +1,219 @@
import { modeloAPurchaseReferences } from './iva-modelo-a.ts';
import { monthlyIvaInput, monthlyIvaKey, readMonthlyIvaRecord, readMonthlyIvaSettings } from './monthly-iva.ts';
import { restoreBusinessPlanSnapshot } from './business-financial-plan.ts';
import { salesBook, salesCurrent as salesOperationsCurrent } from './iva-operations.ts';
import { acquisitionTreatmentIssue, acquisitionContinuityVersion, formerExplorationSource, type AcquisitionTreatment } from './iva-acquisition-continuity.ts';
import { addFractions, decimalFraction, fractionLabel, fractionPresentation, positiveFraction, subtractFractions, type FiscalFraction } from './fiscal-rational.ts';
export const acquisitionVersion = 'modelo-a-internal-acquisitions/1';
export const acquisitionBasis = 'CIVA arts.18(1)(a),18(2) (Lei10/2025),18(3–5),19(1)(a),19(2),20 (Lei22/2022),21(1–3); âmbito interno, afectação exclusiva, mesmo período, sem exclusões ou dedução parcial.';
export const acquisitionSources = 'Modelo A DOCX 62c198e9 / v1 63d45fa8; VAT Return.pdf SHA256 9c0b99a810c7db53eb75d63c22ee22fb86a50ba57bd5509041ed80ee10f75741, p.1; CIVA republicado Lei13/2016, PDF14–16; Lei22/2022, art.20; Lei10/2025, arts.18/19, PDF13.';
type Choice = '' | 'yes' | 'no';
export type Acquisition = {
id: string; field: '08'|'09'|'10'; period: string; origin: 'projected'|'effective';
sourceMonth: number|null; sourcePeriod?:string; sourceField?:'inventory'|'asset'|'operating'; sourceAmount: string|null; sourceCurrency: string; sourceBasis: ''|'net'|'gross';
net: string; vat: string; gross: string; documentType: ''|'invoice'|'equivalent'; documentRef: string; documentDate: string; documentLine:string;
supplier: string; supplierRegistered: Choice; legalDocument: Choice; held: Choice; domestic: Choice;
allocation: ''|'taxable_only'|'mixed'|'no_right'; exclusion: ''|'none'|'excluded'|'special';
integrity: Choice; description: string;
acquisitionTreatment?: AcquisitionTreatment;
acquisitionTreatmentOrigin?: {id:'former_exploration_exemption';source:string};
};
export type AcquisitionResult = {id:string; net:string|null; vat:string|null; gross:string|null; deductible:string|null; reason:string};
type PeriodInput = {period:string; complete:boolean; absent:string[]};
export type AcquisitionBook = {currency:string; taxpayerRegistered?:Choice; rows:Acquisition[]; periods:PeriodInput[]; result?:AcquisitionCalculation;history?:AcquisitionCalculation[]};
export type AcquisitionCalculation = {version:string; revision:number; calculatedAt:string; opportunity:string; location:string; currency:string; sourceKey:string; basis:string; sources:string;
declarations?:{taxpayerRegistered:Choice;periods:PeriodInput[]}; rows:AcquisitionResult[]; inputs:Acquisition[]; periods:Array<{period:string; fields:Record<string,string|null>; exactFields?:Record<string,FiscalFraction|null>; reasons:string[]}>};
type Store = {version:1; books:Record<string,AcquisitionBook>};
const excluded = ['03','04','05','06','07','11','12','13'];
export const acquisitionExcludedFields = excluded;
export function acquisitionScope(draft:Record<string,unknown>):string {
if(!draft.context_opportunity) {
try {const context=JSON.parse(String(draft.context_applicability_snapshot??''));if(context.opportunity_choices?.length>1)throw new Error('Escolha a oportunidade em tratamento antes de preparar as compras.');}
catch(cause) {if(cause instanceof Error && cause.message.startsWith('Escolha'))throw cause;}
}
return String(draft.context_opportunity || 'general');
}
export function readAcquisitionStore(raw:unknown):Store {
if (!raw) return {version:1,books:{}};
const value=JSON.parse(String(raw));
if (value?.version!==1 || !value.books || typeof value.books!=='object' || Array.isArray(value.books)) throw new Error('Compras fiscais guardadas não recuperáveis; dados preservados.');
for(const book of Object.values(value.books) as AcquisitionBook[]) {
if(book?.history!==undefined&&!Array.isArray(book.history))throw new Error('Histórico de aquisições não recuperável; originais preservados, sem substituição.');
if(!book || !Array.isArray(book.rows) || !Array.isArray(book.periods) || typeof book.currency!=='string') throw new Error('Formato de compras não recuperável; sem substituição.');
const stringKeys=Object.keys(newAcquisition('','','')).filter(key=>!['sourceMonth','sourceAmount'].includes(key));
if(book.rows.some(row=>!row || stringKeys.some(key=>typeof row[key as keyof Acquisition]!=='string') || !(row.sourceMonth===null || Number.isInteger(row.sourceMonth)) || !(row.sourceAmount===null || typeof row.sourceAmount==='string')) || book.periods.some(p=>!p || typeof p.period!=='string' || typeof p.complete!=='boolean' || !Array.isArray(p.absent) || p.absent.some(f=>typeof f!=='string'))) throw new Error('Linhas ou períodos de compras não recuperáveis; os dados guardados foram preservados.');
}
return value;
}
export function acquisitionBook(draft:Record<string,unknown>):AcquisitionBook {
return readAcquisitionStore(draft.modelo_a_snapshot).books[acquisitionScope(draft)] ?? {currency:String(draft.currency ?? ''),rows:[],periods:[]};
}
export function saveAcquisitionBook(draft:Record<string,unknown>,book:AcquisitionBook):string {
const store=readAcquisitionStore(draft.modelo_a_snapshot);
return JSON.stringify({...store,books:{...store.books,[acquisitionScope(draft)]:book}});
}
export function newAcquisition(id:string,period:string,currency:string):Acquisition {
return {id,field:'09',period,origin:'projected',sourceMonth:null,sourceAmount:null,sourceCurrency:currency,sourceBasis:'',net:'',vat:'',gross:'',documentType:'',documentRef:'',documentDate:'',documentLine:'',supplier:'',supplierRegistered:'',legalDocument:'',held:'',domestic:'',allocation:'',exclusion:'',integrity:'',description:''};
}
function periods(draft:Record<string,unknown>):string[] {
try {return monthlyIvaInput(draft,readMonthlyIvaSettings(String(draft.monthly_iva_settings ?? ''))).monthly_sales.map(r=>r.date.slice(0,7));}
catch {return [];}
}
export function acquisitionPlanReferences(draft:Record<string,unknown>):Array<{key:string;kind:'inventory'|'asset'|'operating';month:number;period:string;amount:string|null;currency:string;label:string}> {
const dates=periods(draft),plan=restoreBusinessPlanSnapshot(String(draft.business_plan_snapshot??''));
if(!plan || !dates.length)return [];
if(plan.currency!==draft.currency)throw new Error('Moeda do plano divergente; não reutilizar como moeda do projecto.');
const inventory=modeloAPurchaseReferences(draft).map(r=>({key:`inventory:${r.month}`,kind:'inventory' as const,month:r.month,period:dates[r.month-1],amount:r.declared,currency:plan.currency,label:`Compras/encomendas — mês ${r.month}`}));
const asset={key:'asset:1',kind:'asset' as const,month:1,period:dates[0],amount:plan.assetInvestment?.trim()||null,currency:plan.currency,label:'Orçamento de investimento em activos — período a confirmar'};
const operating=dates.map((period,index)=>({key:`operating:${index+1}`,kind:'operating' as const,month:index+1,period,amount:(plan.monthlyOperatingExpensesByPeriod?plan.monthlyOperatingExpensesByPeriod[index]:plan.monthlyOperatingExpenses)?.trim()||null,currency:plan.currency,label:`Orçamento de despesas operacionais — mês ${index+1}`}));
return [...inventory,asset,...operating];
}
export function reuseAcquisitions(draft:Record<string,unknown>,book:AcquisitionBook):AcquisitionBook {
const dates=periods(draft); if(!dates.length) throw new Error('Defina o período mensal e resolva a moeda da projecção antes de reutilizar compras.');
const rows=[...book.rows];
for(const reference of modeloAPurchaseReferences(draft)) {
if(rows.some(r=>r.sourceMonth===reference.month)) continue;
rows.push({...newAcquisition(`plan-${reference.month}`,dates[reference.month-1],String(draft.currency ?? '')),sourceMonth:reference.month,sourcePeriod:dates[reference.month-1],sourceAmount:reference.declared,description:`Compras/encomendas do plano — mês ${reference.month}`});
}
return {...book,rows,periods:dates.map(period=>book.periods.find(p=>p.period===period) ?? {period,complete:false,absent:[]})};
}
// Decimal arithmetic for aggregation only. No binary rounding and no invented purchase tax rate.
function amount(raw:unknown):bigint|null {
if(typeof raw!=='string' || !/^\d{1,15}(\.\d{1,6})?$/.test(raw.trim())) return null;
const [a,b='']=raw.trim().split('.');return BigInt(a)*1000000n+BigInt(b.padEnd(6,'0'));
}
function money(value:bigint):string {const a=value/1000000n,b=(value%1000000n).toString().padStart(6,'0').replace(/0+$/,'').padEnd(2,'0');return `${a}.${b}`;}
function sum(values:Array<string|null>):string|null {const parsed=values.map(amount);return parsed.some(v=>v===null)?null:money((parsed as bigint[]).reduce((a,b)=>a+b,0n));}
function dateValid(raw:string):boolean {const date=new Date(`${raw}T00:00:00Z`);return /^\d{4}-\d{2}-\d{2}$/.test(raw) && Number.isFinite(date.getTime()) && date.toISOString().slice(0,10)===raw;}
export function evaluateAcquisition(row:Acquisition,currency:string,taxpayerRegistered:Choice=''):AcquisitionResult {
let n=amount(row.net),v=amount(row.vat),g=amount(row.gross);
if(n!==null && v!==null && g===null && !row.gross.trim()) g=n+v;
if(g!==null && v!==null && n===null && !row.net.trim() && g>=v) n=g-v;
if(n!==null && g!==null && v===null && !row.vat.trim() && g>=n) v=g-n;
const result:AcquisitionResult={id:row.id,net:n===null?null:money(n),vat:v===null?null:money(v),gross:g===null?null:money(g),deductible:null,reason:''};
const stop=(reason:string,deductible:string|null=null)=>({...result,reason,deductible});
if(currency!=='MZN' || row.sourceCurrency!==currency) return stop('Divergência ou moeda fora de MZN; sem conversão.');
if(!/^2026-(0[1-9]|1[0-2])$/.test(row.period)) return stop('Período fora do âmbito 2026 ou em falta.');
const treatmentIssue=acquisitionTreatmentIssue(row.acquisitionTreatment);
if(treatmentIssue)return stop(treatmentIssue);
if(n===null || v===null || g===null || n+v!==g) return stop('Indique dois valores válidos; líquido + IVA deve corresponder ao bruto.');
if(row.sourceMonth!==null && (!row.sourceBasis || amount(row.sourceAmount)!==(row.sourceBasis==='net'?n:g))) return stop('Classifique ou resolva a divergência do valor de origem; não foi reinterpretado.');
if(v===0n) return stop('IVA explicitamente indicado como zero; não existe imposto a deduzir nesta aquisição.','0.00');
if(taxpayerRegistered!=='yes') return stop('Confirme o enquadramento do adquirente como sujeito passivo de IVA no regime normal; não é inferido da organização.');
if(row.allocation==='no_right' || row.exclusion==='excluded' || row.supplierRegistered==='no' || row.legalDocument==='no' || row.integrity==='no') return stop('Sem dedução no âmbito declarado: afectação, exclusão, fornecedor ou documento não elegível.','0.00');
if(row.domestic!=='yes') return stop('Aquisição interna por confirmar; importações fora deste lote.');
if(row.allocation!=='taxable_only' || row.exclusion!=='none') return stop('Confirme afectação exclusiva a operações tributadas e ausência de exclusões; casos mistos/especiais não calculados.');
if(!['invoice','equivalent'].includes(row.documentType) || !row.documentRef.trim() || !row.supplier.trim() || row.supplierRegistered!=='yes' || row.legalDocument!=='yes' || row.held!=='yes' || row.integrity!=='yes') return stop('Documento, fornecedor inscrito, posse e condições de dedução ainda incompletos.');
if(!dateValid(row.documentDate) || row.documentDate.slice(0,7)!==row.period) return stop('Data do documento e período de dedução devem coincidir neste lote; dedução posterior não presumida.');
return stop(row.origin==='projected'?'Dedução projectada sob pressupostos explícitos; não certifica factura ou declaração.':'Dedução segundo dados e condições declarados; sem submissão ou certificação pela AT.',money(v));
}
function sourceKey(draft:Record<string,unknown>,book:AcquisitionBook):string {
const raw=JSON.stringify([acquisitionScope(draft),draft.currency??'',draft.province_id??'',draft.district_id??'',draft.business_plan_snapshot,draft.monthly_iva_settings,draft.monthly_iva_snapshot,book.currency,book.taxpayerRegistered,book.rows,book.periods]);
// Change detection only, never an authorization or authenticity token.
let hash=14695981039346656037n;for(let i=0;i<raw.length;i++)hash=BigInt.asUintN(64,(hash^BigInt(raw.charCodeAt(i)))*1099511628211n);
const operations=(readAcquisitionStore(draft.modelo_a_snapshot) as Store & {salesOperations?:Record<string,unknown>}).salesOperations?.[acquisitionScope(draft)];
return `${raw.length}:${hash.toString(16)}${operations?`:${JSON.stringify(operations)}`:''}${book.rows.some(r=>r.acquisitionTreatment||r.acquisitionTreatmentOrigin)?`:${acquisitionContinuityVersion}`:''}`;
}
function location(draft:Record<string,unknown>):string {
const labels=draft.selection_labels as Record<string,unknown>|undefined;
return ['province_id','district_id'].filter(key=>draft[key]).map(key=>String(draft[`${key}_label`]??labels?.[key]??draft[key])).join(' / ');
}
export function acquisitionCurrent(draft:Record<string,unknown>,book:AcquisitionBook):boolean {return !!book.result && book.result.version===acquisitionVersion && book.result.opportunity===acquisitionScope(draft) && book.result.sourceKey===sourceKey(draft,book);}
export function calculateAcquisitions(draft:Record<string,unknown>,book:AcquisitionBook,now=new Date().toISOString()):AcquisitionCalculation {
const scope=acquisitionScope(draft),dates=book.periods.map(p=>p.period);
if(book.currency!=='MZN' || draft.currency!==book.currency) throw new Error('Resolva a moeda de origem das compras; valores preservados sem conversão.');
if(!dates.length||dates.some(period=>!/^2026-(0[1-9]|1[0-2])$/.test(period))||new Set(dates).size!==dates.length) throw new Error('Indique os meses aplicáveis às aquisições em2026,sem períodos duplicados; não inferidos do orçamento ou das vendas.');
if(new Set(book.rows.map(r=>r.id)).size!==book.rows.length) throw new Error('Existem compras com identidade repetida.');
const documents=book.rows.filter(r=>r.documentRef.trim() && r.supplier.trim()).map(r=>JSON.stringify([r.origin,r.supplier.trim().toLowerCase(),r.documentRef.trim().toLowerCase(),r.documentDate,r.documentLine?.trim()??'']));
if(new Set(documents).size!==documents.length) throw new Error('Documento/linha repetido: discrimine linhas distintas ou remova a duplicação antes de deduzir.');
if(book.rows.some(r=>!['08','09','10'].includes(r.field) || !dates.includes(r.period))) throw new Error('Classifique cada aquisição num campo08–10 e num mês incluído na cobertura declarada das aquisições.');
const references=acquisitionPlanReferences(draft);
for(const row of book.rows.filter(r=>r.sourceMonth!==null)) {
const current=references.find(p=>p.month===row.sourceMonth && p.kind===(row.sourceField??'inventory'));
if(!current || current.amount!==row.sourceAmount || (current.kind!=='asset' && row.sourcePeriod && current.period!==row.sourcePeriod)) throw new Error('As compras ou orçamentos do plano mudaram. Resolva a divergência de origem antes de calcular; histórico preservado.');
}
const rows=book.rows.map(row=>evaluateAcquisition(row,book.currency,book.taxpayerRegistered));
const record=readMonthlyIvaRecord(String(draft.monthly_iva_snapshot ?? ''));
let salesCurrent=false;
try {salesCurrent=!!record && record.execution.status==='completed' && monthlyIvaKey(record.input)===monthlyIvaKey(monthlyIvaInput(draft,readMonthlyIvaSettings(String(draft.monthly_iva_settings ?? ''))));} catch { /* Preserve history, never fabricate 01/02. */ }
const projection=record?.execution.result_snapshot?.monthly_projection as {rows?:Array<{date:string;net_sales:string|null;vat:string|null}>}|undefined;
const calculated=dates.map(period=>{
const input=book.periods.find(p=>p.period===period), reasons:string[]=[], fields:Record<string,string|null>={};
const declaredAmount=(key:string)=>{const value=amount(String(draft[key]??''));return value!==null && value>0n;};
if(input?.absent.includes('11') && (declaredAmount('imports') || book.rows.some(r=>r.period===period && r.domestic==='no'))) throw new Error('Existem importações declaradas. Não confirme ausência no campo11; enquadramento fora deste lote.');
if(input?.absent.includes('07') && declaredAmount('sales_exempt')) throw new Error('Existem vendas isentas declaradas. Resolva o período e a classificação antes de confirmar ausência no campo07.');
if(input?.absent.includes('05') && (declaredAmount('exports')||declaredAmount('sales_zero_rate'))) throw new Error('Existem exportações ou vendas de outro enquadramento. Não confirme ausência no campo05 sem resolver a classificação.');
const sales=salesCurrent?projection?.rows?.find(r=>r.date.slice(0,7)===period):null;
fields['01']=sales?.net_sales??null;fields['02']=sales?.vat??null;
if(!sales || sales.net_sales===null || sales.vat===null) reasons.push('01/02: vendas ou IVA mensal em falta, execução incompleta ou desactualizada.');
for(const field of excluded) fields[field]=input?.absent.includes(field)?'0.00':null;
const operations=salesBook(draft);
if(operations.rows.length || operations.result) {
const classified=salesOperationsCurrent(draft,operations)?operations.result?.periods.find(p=>p.period===period):null;
for(const field of ['01','02','03','04','05','06','07'])fields[field]=classified?.fields[field]??null;
if(!classified)reasons.push('Operações L1 alteradas ou sem resultado correspondente: recalcule a classificação; não usar01/02 antigos nem ausência presumida.');
else reasons.push(...classified.reasons);
}
for(const field of ['08','09','10']) {
const matching=book.rows.filter(r=>r.period===period && r.field===field);
fields[field]=input?.complete ? sum(matching.map(r=>rows.find(x=>x.id===r.id)!.deductible)) : null;
if((operations.rows.length || operations.result) && operations.rows.some(r=>r.period===period && !['general','export_goods'].includes(r.treatment)) && matching.some(r=>rows.find(x=>x.id===r.id)!.deductible!=='0.00')) {
fields[field]=null;
reasons.push(`Campo${field}: operações reduzidas/isentas/outras exigem afectar cada aquisição; não reutilizar dedução exclusiva geral como se fosse universal (L2).`);
}
}
if(!input?.complete) reasons.push('Aquisições08–10: confirme que todas as compras do período foram incluídas, mesmo quando não existam.');
for(const row of book.rows.filter(r=>r.period===period)) {const r=rows.find(x=>x.id===row.id)!;if(r.deductible===null) reasons.push(`${row.description||row.id}: ${r.reason}`);}
for(const field of excluded) if(fields[field]===null) reasons.push(`Campo${field}: fora deste lote, sem declaração expressa de inexistência de operações.`);
fields['14']=sum(['01','03','05','06','07'].map(f=>fields[f]));
fields['15']=sum(['08','09','10','11','12'].map(f=>fields[f]));
fields['16']=sum(['02','04','13'].map(f=>fields[f]));
const state=amount(fields['16']),taxpayer=amount(fields['15']);
fields['17']=state===null||taxpayer===null?null:money(state>taxpayer?state-taxpayer:0n);
fields['18']=state===null||taxpayer===null?null:money(taxpayer>state?taxpayer-state:0n);
const classified=salesOperationsCurrent(draft,operations)?operations.result?.periods.find(p=>p.period===period):null;
if(classified?.exactFields) {
const exactFields:Record<string,FiscalFraction|null>={};
for(const f of ['01','02','03','04','05','06','07','08','09','10','11','12','13'])exactFields[f]=classified.exactFields[f]??(fields[f]===null?null:decimalFraction(fields[f]!));
for(const [f,parts] of [['14',['01','03','05','06','07']],['15',['08','09','10','11','12']],['16',['02','04','13']]] as const)exactFields[f]=parts.some(k=>exactFields[k]===null)?null:addFractions(parts.map(k=>exactFields[k]!));
exactFields['17']=exactFields['16']&&exactFields['15']?positiveFraction(subtractFractions(exactFields['16'],exactFields['15'])):null;
exactFields['18']=exactFields['16']&&exactFields['15']?positiveFraction(subtractFractions(exactFields['15'],exactFields['16'])):null;
for(const f of Object.keys(exactFields))fields[f]=exactFields[f]?fractionPresentation(exactFields[f]!).decimal:null;
reasons.push('Totais derivados das fracções exactas, sem somar aproximações das linhas; decimais a6casas são apresentação técnica, não arredondamento declarativo.');
return {period,fields,exactFields,reasons};
}
return {period,fields,reasons};
});
return {version:acquisitionVersion,revision:(book.result?.revision??0)+1,calculatedAt:now,opportunity:scope,location:location(draft),currency:book.currency,sourceKey:sourceKey(draft,book),basis:acquisitionBasis,sources:acquisitionSources+(book.rows.some(r=>r.acquisitionTreatment==='former_exploration_exemption'||r.acquisitionTreatmentOrigin)?`; ${formerExplorationSource}`:''),declarations:{taxpayerRegistered:book.taxpayerRegistered??'',periods:structuredClone(book.periods)},rows,inputs:structuredClone(book.rows),periods:calculated};
}
export function recordAcquisitions(draft:Record<string,unknown>,book:AcquisitionBook,now=new Date().toISOString()):AcquisitionBook {
const result=calculateAcquisitions(draft,book,now);
return {...book,...(book.result?{history:[...(book.history??[]),structuredClone(book.result)]}:{}),result};
}
export function acquisitionReportRows(draft:Record<string,unknown>):Array<[string,string,string,string]> {
if(!draft.modelo_a_snapshot) return [];
try {
const book=acquisitionBook(draft),result=book.result;
if(!result) return [['IVA mensal','Compras — Modelo A','Sem cálculo guardado para a oportunidade escolhida','Sem dedução presumida']];
const context=`${result.currency}; oportunidade ${result.opportunity}; localização ${result.location || 'não indicada'}; ${result.version}; revisão ${result.revision}; ${result.calculatedAt}`;
const out:Array<[string,string,string,string]>=[['IVA mensal','Apuramento parcial Modelo A',acquisitionCurrent(draft,book)?'Versão correspondente às entradas':'Histórico desactualizado; não aplicar à projecção actual',context],['IVA mensal','Fundamento das aquisições',result.basis,result.sources]];
for(const row of result.inputs) {
const r=result.rows.find(x=>x.id===row.id)!;
const source=row.sourceMonth===null?'Introduzido pelo utilizador':`Plano (${row.sourceField==='asset'?'orçamento de activos':row.sourceField==='operating'?'orçamento operacional':'compras/encomendas'}), mês ${row.sourceMonth}, ${row.sourcePeriod??'período de origem não indicado'}, ${row.sourceAmount??'valor em falta'} ${row.sourceCurrency}; ${row.sourceBasis==='net'?'sem IVA':row.sourceBasis==='gross'?'com IVA':'base por classificar'}`;
const allocation={taxable_only:'exclusiva a operações tributadas',mixed:'mista',no_right:'sem direito à dedução','':'por indicar'}[row.allocation];
out.push(['IVA mensal',`Aquisição ${row.id} — campo${row.field} — ${row.period}`,`${row.description}; líquido ${r.net??'Indeterminado'}; IVA ${r.vat??'Indeterminado'}; bruto ${r.gross??'Indeterminado'}; dedutível ${r.deductible??'Indeterminado'}`,`${context}; ${row.origin==='projected'?'Projecção':'Dados efectivos declarados'}; ${source}; ${row.documentType==='invoice'?'Factura':row.documentType==='equivalent'?'Documento equivalente':'Documento por indicar'} ${row.documentRef}, ${row.documentDate}, linha ${row.documentLine||'única'}; fornecedor ${row.supplier}; afectação ${allocation}; ${r.reason}`]);
if(row.acquisitionTreatment==='former_exploration_exemption'||row.acquisitionTreatmentOrigin)out.push(['IVA mensal',`Continuidade14(2)(c) — ${row.id}`,row.acquisitionTreatment==='former_exploration_exemption'?'Antiga isenção eliminada; dedução indeterminada por esta referência':'Continuidade normal expressamente escolhida; montantes e documento conservados; condições de dedução da aquisição, sem aplicar antiga isenção',`${context}; ${formerExplorationSource}; origem conservada ${row.acquisitionTreatmentOrigin?.id??'former_exploration_exemption'}`]);
}
for(const period of result.periods) {
const entries=Object.entries(period.fields).sort(([a],[b])=>Number(a)-Number(b));
const declaration=result.declarations?.periods.find(p=>p.period===period.period);
const declarationOrigin=declaration?`Aquisições08–10 ${declaration.complete?'declaradas completas':'por completar'}; ausência de operações expressamente declarada nos campos ${declaration.absent.join(', ')||'nenhum'}.`:'Declarações detalhadas não recuperáveis nesta versão histórica.';
out.push(['IVA mensal',`Modelo A — ${period.period} — parcelas01–13`,entries.filter(([field])=>Number(field)<=13).map(([field,value])=>`${field}: ${value??'Indeterminado'}`).join('; '),`${context}; ${declarationOrigin}`]);
out.push(['IVA mensal',`Modelo A — ${period.period} — totais14–18`,entries.filter(([field])=>Number(field)>=14).map(([field,value])=>`${field}: ${value??'Indeterminado'}`).join('; '),context]);
if(period.exactFields)out.push(['IVA mensal',`Modelo A — ${period.period} — precisão exacta`,Object.entries(period.exactFields).map(([f,v])=>`${f}: ${v?fractionLabel(v):'Indeterminado'}`).join('; '),'Fracções em MZN; apresentação decimal técnica, sem regra declarativa presumida.']);
if(period.reasons.length)out.push(['IVA mensal',`Modelo A — ${period.period} — pendências`,period.reasons.join(' '),result.sources]);
}
return out;
} catch {return [['IVA mensal','Compras — Modelo A','Não foi possível recuperar os dados guardados','Preservados, sem substituição por zero']];}
}
+57
View File
@@ -0,0 +1,57 @@
import {acquisitionScope,readAcquisitionStore} from './iva-acquisitions.ts';
export const actSaleBaseVersion='act-goods-base/1';
export const actSaleBaseSource='CIVA republicado Lei13/2016,15(2)(h),PDF13/p1426(271): nas transmissões de bens resultantes de actos de arrematação ou venda judicial ou administrativa,de conciliação ou contratos de transacção,a base é o valor por que as arrematações ou vendas foram efectuadas ou,se for caso,o valor normal dos bens. Art15(4)/(5)/(6),PDF14/p1426(272),valor normal,composição e exclusões,sem próprioIVA. Lei22/2022PDF3mantém15(2)(h)/(4–6)por remissão;Lei10/2025não altera15. Recorte2026/MZN;determinação da base,sem inferir incidência,taxa,IVA,dedução/campo11 ou totaisModeloA;sem substituir regime especial15(2)(g)de leilão em comissão.';
export const actSaleKinds=[{id:'auction',label:'Arrematação'},{id:'judicial_sale',label:'Venda judicial'},{id:'administrative_sale',label:'Venda administrativa'},{id:'conciliation',label:'Conciliação'},{id:'settlement',label:'Contrato de transacção'}] as const;
export const actSaleTreatments=[{id:'act_sale_amount',label:'Valor da arrematação ou venda efectuada'},{id:'act_normal_value',label:'Valor normal dos bens,quando aplicável'}] as const;
export const actSaleConditions=[
['taxableDomesticGoods','Está identificada uma transmissão de bens sujeita a IVA no território nacional; não é qualquer pagamento,indemnização ou prestação de serviços'],
['goodsByAct','Estes bens são transmitidos em resultado do acto de arrematação,venda judicial/administrativa,conciliação ou contrato de transacção identificado'],
['valuationApplies','O valor escolhido corresponde ao fundamento aplicável nesta transmissão:valor por que a arrematação/venda foi efectuada ou,se for caso,valor normal; não é uma opção automática pelo menor valor'],
['netComposition','O montante indicado exclui o próprio IVA e reflecte a composição aplicável do artigo15(5)/(6),identificada no fundamento,sem omissões ou duplicações'],
['notAuctionCommissionRegime','Esta transmissão corresponde ao artigo15(2)(h),não a uma venda abrangida pela regra especial do organizador de leilão em comissão do artigo15(2)(g)'],
] as const;
type Choice=''|'yes'|'no';type Condition=typeof actSaleConditions[number][0];
export type ActSaleRow={id:string;treatment:string;actKind:string;description:string;period:string;origin:'projected'|'effective';currency:string;actRef:string;documentRef:string;documentDate:string;actValue:string;normalValue:string;valuationRef:string;valuationScope:string;compositionRef:string;evidence:string;conditions:Partial<Record<Condition,Choice>>};
type LineResult={id:string;status:'determined'|'not_applicable'|'indeterminate';baseAmount:string|null;vat:null;rate:null;reason:string};
export type ActSaleCalculation={version:string;revision:number;calculatedAt:string;opportunity:string;location:string;sourceKey:string;source:string;inputs:ActSaleRow[];rows:LineResult[]};
export type ActSaleBook={rows:ActSaleRow[];result?:ActSaleCalculation;history?:ActSaleCalculation[]};
type Store=ReturnType<typeof readAcquisitionStore>&{actSaleBases?:Record<string,ActSaleBook>};
export function newActSaleBase(id:string,currency:string):ActSaleRow{return{id,treatment:'',actKind:'',description:'',period:'',origin:'projected',currency,actRef:'',documentRef:'',documentDate:'',actValue:'',normalValue:'',valuationRef:'',valuationScope:'',compositionRef:'',evidence:'',conditions:{}};}
export function switchActValuation(row:ActSaleRow,treatment:string):ActSaleRow{return{...row,treatment,conditions:{...row.conditions,valuationApplies:''}};}
export function switchActKind(row:ActSaleRow,actKind:string):ActSaleRow{return{...row,actKind,conditions:{...row.conditions,goodsByAct:'',valuationApplies:''}};}
function readStore(draft:Record<string,unknown>):Store{
const store=readAcquisitionStore(draft.modelo_a_snapshot) as Store;
if(store.actSaleBases!==undefined&&(!store.actSaleBases||typeof store.actSaleBases!=='object'||Array.isArray(store.actSaleBases)))throw new Error('Bases de transmissão por acto não recuperáveis;originais preservados.');
const fields=Object.keys(newActSaleBase('','')).filter(key=>key!=='conditions');
for(const book of Object.values(store.actSaleBases??{}))if(!book||!Array.isArray(book.rows)||(book.history!==undefined&&!Array.isArray(book.history))||book.rows.some(row=>!row||fields.some(key=>typeof row[key as keyof ActSaleRow]!=='string')||!row.conditions||typeof row.conditions!=='object'||Array.isArray(row.conditions)))throw new Error('Linhas de transmissão por acto não recuperáveis;originais preservados,sem substituição por lista vazia.');
return store;
}
export function actSaleBook(draft:Record<string,unknown>):ActSaleBook{return readStore(draft).actSaleBases?.[acquisitionScope(draft)]??{rows:[]};}
export function saveActSaleBook(draft:Record<string,unknown>,book:ActSaleBook):string{const current=readStore(draft),encoded=JSON.stringify({...current,actSaleBases:{...current.actSaleBases,[acquisitionScope(draft)]:book}});readStore({...draft,modelo_a_snapshot:encoded});return encoded;}
function decimal(raw:unknown):bigint|null{if(typeof raw!=='string'||!/^\d{1,15}(\.\d{1,6})?$/.test(raw.trim()))return null;const[whole,fraction='']=raw.trim().split('.');return BigInt(whole)*1000000n+BigInt(fraction.padEnd(6,'0'));}
function money(n:bigint):string{return`${n/1000000n}.${(n%1000000n).toString().padStart(6,'0').replace(/0+$/,'').padEnd(2,'0')}`;}
function validDate(value:string):boolean{const d=new Date(value+'T00:00:00Z');return /^\d{4}-\d{2}-\d{2}$/.test(value)&&Number.isFinite(d.getTime())&&d.toISOString().slice(0,10)===value;}
export function evaluateActSale(row:ActSaleRow,currency:unknown):LineResult{
const result:LineResult={id:row.id,status:'indeterminate',baseAmount:null,vat:null,rate:null,reason:''};const stop=(reason:string,status:LineResult['status']='indeterminate')=>({...result,status,reason});
const rule=actSaleTreatments.find(item=>item.id===row.treatment),kind=actSaleKinds.find(item=>item.id===row.actKind);
if(!rule||!kind)return stop('Identifique o acto e o fundamento do valor aplicável; acto ou valorização desconhecidos não determinam base.');
if(currency!=='MZN'||row.currency!==currency)return stop('Moeda fora do âmbito MZN ou divergente do projecto;sem conversão silenciosa.');
if(!/^2026-(0[1-9]|1[0-2])$/.test(row.period)||!['projected','effective'].includes(row.origin))return stop('Indique o período em2026 e dados efectivos declarados ou pressupostos de projecção; não se infere o período do orçamento.');
const failed=actSaleConditions.filter(([key])=>row.conditions[key]==='no');if(failed.length)return stop('Não se aplica esta base de transmissão por acto: '+failed.map(([,label])=>label).join('; ')+'. Não é isenção nem IVA zero.','not_applicable');
const missing=actSaleConditions.filter(([key])=>row.conditions[key]!=='yes');if(missing.length)return stop('Condições por indicar: '+missing.map(([,label])=>label).join('; ')+'. Desconhecido não significa não aplicável ou zero.');
if(!row.description.trim()||!row.actRef.trim()||!row.documentRef.trim()||!row.valuationRef.trim()||!row.valuationScope.trim()||!row.compositionRef.trim()||!row.evidence.trim()||!validDate(row.documentDate))return stop('Identifique bens,acto,documento/data,fundamento e âmbito do valor escolhido e composição,ou pressupostos expressos;reutilize referências existentes,sem novo certificado ou avaliador imposto pelo portal.');
const value=decimal(row.treatment==='act_sale_amount'?row.actValue:row.normalValue);if(value===null)return stop('Indique o montante sem IVA correspondente ao fundamento escolhido; valor desconhecido ou inválido não é zero. Não se escolhe automaticamente o menor valor.');
const base=money(value);return{...result,status:'determined',baseAmount:base,reason:`Base15(2)(h),${kind.label}: ${rule.label} = ${base}MZN,${row.origin==='projected'?'nas condições expressamente assumidas na projecção':'nos dados efectivos declarados'}. Valor sem IVA,com fundamento e âmbito identificados;valor normal não é avaliado automaticamente pelo portal. Base não é imposto;IVA/taxa,dedução/campo11 e totaisModeloA não são determinados por este cálculo.`};
}
function key(draft:Record<string,unknown>,book:ActSaleBook):string{return JSON.stringify({version:actSaleBaseVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
export function actSaleCurrent(draft:Record<string,unknown>,book:ActSaleBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
export function recordActSaleBases(draft:Record<string,unknown>,book:ActSaleBook):ActSaleBook{
if(!book.rows.length||new Set(book.rows.map(row=>row.id)).size!==book.rows.length)throw new Error('Indique operações com identificadores distintos;originais conservados.');
const result:ActSaleCalculation={version:actSaleBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:actSaleBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateActSale(row,draft.currency))};
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};saveActSaleBook(draft,next);return next;
}
export function actSaleReportRows(draft:Record<string,unknown>):Array<[string,string,string,string]>{
try{const book=actSaleBook(draft),result=book.result;if(!result)return[];return result.inputs.map((row,index)=>['IVA mensal',`Base P094 — ${row.period} — ${row.id}`,`${row.description};base tributável: ${result.rows[index].baseAmount??'Indeterminada'} ${row.currency};IVA: Indeterminado;${result.rows[index].reason}`,`${result.opportunity};${result.location};${actSaleCurrent(draft,book)?'Resultado actual':'Entradas alteradas;resultado histórico conservado'};versão${result.revision};${result.calculatedAt};${result.source};${row.origin==='projected'?'Projecção':'Dados efectivos declarados'};${actSaleKinds.find(item=>item.id===row.actKind)?.label??'Acto por indicar'};acto ${row.actRef};${actSaleTreatments.find(item=>item.id===row.treatment)?.label??'Valorização por indicar'};montante ${row.treatment==='act_sale_amount'?row.actValue:row.normalValue} ${row.currency};fundamento da valorização ${row.valuationRef};âmbito ${row.valuationScope};composição ${row.compositionRef};documento ${row.documentRef},${row.documentDate};condições ${actSaleConditions.map(([key,label])=>label+': '+(row.conditions[key]==='yes'?'Sim':row.conditions[key]==='no'?'Não':'Por indicar')).join('; ')};fundamento factual ${row.evidence};não preenche totaisModeloA ou campo11.`]);}
catch{return[['IVA mensal','Base de transmissão por acto','Dados não recuperáveis','Originais preservados;sem substituir por zero.']];}
}
+181
View File
@@ -0,0 +1,181 @@
// Accepted official exemplar: preserve qualifiers and uncoded group headings, not tariff inference.
export const annexIVersion='annexI-lei22-2022/1';
export const annexISource='Lei22/2022, art.3(1), AnexoI, PDF5–11, p.2252(29)–(35); efeitos01/01/2023';
export const annexIPdfSha256='ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53';
export type AnnexIEntry={id:string;code:string;label:string;pdfPage:number;lastPdfPage:number;context?:string;relatedTreatments?:string[];relatedRequired?:boolean};
export const annexIEntries:AnnexIEntry[]=[
{"id":"annexI-2022-001","code":"0102.21.00","label":"-Bovinos domésticos - Reprodutores de raça pura","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-002","code":"0102.31.00","label":"-Búfalos - Reprodutores de raça pura","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-003","code":"0103.10.00","label":"Animais vivos da espécie suína - Reprodutores de raça pura","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-004","code":"0104.10.10","label":"- Ovinos - Reprodutores de raça pura","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-005","code":"0104.20.10","label":"- Caprinos - Reprodutores de raça pura","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-006","code":"0105.11.10","label":"- Galos e galinhas (De peso não superior a 185g) - Reprodutores certificados","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-007","code":"0105.12.10","label":"- Peruas e perus (De peso não superior a 185g) -Reprodutores certificados","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-008","code":"0105.13.10","label":"- Patos - Reprodutores certificados","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-009","code":"0105.14.10","label":"-Gansos - Reprodutores certificados","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-010","code":"0105.94.10","label":"-Galos e galinhas - Reprodutores certificados e poedeiras","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-011","code":"0301.99.10","label":"- Peixes reprodutores","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-012","code":"0306.36.10","label":"- Camarões - Larvas de camarão com comprimento não superior a 1 mm","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-013","code":"0402.21.10","label":"- Leite em pó, grânulos ou outras formas sólidas, concentrados sem adição de açúcar ou de outros edulcorantes, com um teor, em peso, de matérias gordas, superior a 1,5%, para uso na indústria acondicionado em embalagens de capacidade igual ou superior a 25Kg","pdfPage":5,"lastPdfPage":5,"relatedTreatments":["listed_infant_powdered_milk"],"relatedRequired":false},
{"id":"annexI-2022-014","code":"0404.90.10","label":"-Soro de leite para aleitamento de crias de animais","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-015","code":"0407.11.00","label":"Ovos de aves, com casca, frescos, conservados ou cozidos. - Ovos para incubação certificados","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-016","code":"0511.10.00","label":"- Sémen de bovino","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-017","code":"0511.10.10","label":"- Sémen de outras espécies","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-018","code":"0511.99.10","label":"- Embriões de bovino","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-019","code":"0511.99.20","label":"- Embriões de outras espécies","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-020","code":"0602.90.20","label":"-Mudas de plantas florestais e de fruteiras","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-021","code":"0701.10.00","label":"- Batata-semente","pdfPage":5,"lastPdfPage":5,"relatedTreatments":["listed_potato"],"relatedRequired":false},
{"id":"annexI-2022-022","code":"0701.90.00","label":"-Outras","pdfPage":5,"lastPdfPage":5,"relatedTreatments":["listed_potato"],"relatedRequired":false},
{"id":"annexI-2022-023","code":"0702.00.00","label":"Tomate, frescos ou refrigerados","pdfPage":5,"lastPdfPage":5,"relatedTreatments":["listed_fresh_chilled_tomato"],"relatedRequired":true},
{"id":"annexI-2022-024","code":"0703.10.11","label":"- Cebolas -De semente","pdfPage":5,"lastPdfPage":5,"relatedTreatments":["listed_onion"],"relatedRequired":false},
{"id":"annexI-2022-025","code":"0703.10.19","label":"-Outras","pdfPage":5,"lastPdfPage":5,"relatedTreatments":["listed_onion"],"relatedRequired":false},
{"id":"annexI-2022-026","code":"0713.32.10","label":"- Feijão Adzuki destinado à sementeira","pdfPage":5,"lastPdfPage":5},
{"id":"annexI-2022-027","code":"0713.33.10","label":"- Feijão comum -destinado à sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-028","code":"0713.39.10","label":"- Outros feijões -destinados à sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-029","code":"0801.19.10","label":"- Semente de coco híbrido","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-030","code":"0801.19.20","label":"- Semente de coco não híbrido","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-031","code":"1001.11.00","label":"-Trigo duro - para sementeira","pdfPage":6,"lastPdfPage":6,"relatedTreatments":["listed_wheat"],"relatedRequired":false},
{"id":"annexI-2022-032","code":"1001.91.00","label":"-Outros -Para sementeira","pdfPage":6,"lastPdfPage":6,"relatedTreatments":["listed_wheat"],"relatedRequired":false},
{"id":"annexI-2022-033","code":"1002.10.00","label":"-Centeio -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-034","code":"1003.10.00","label":"-Cevada -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-035","code":"1004.10.00","label":"-Aveia -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-036","code":"1005.10.00","label":"- Milho - Para sementeira","pdfPage":6,"lastPdfPage":6,"relatedTreatments":["listed_maize"],"relatedRequired":false},
{"id":"annexI-2022-037","code":"1006.10.10","label":"- Arroz com casca -Destinado à sementeira","pdfPage":6,"lastPdfPage":6,"relatedTreatments":["listed_rice"],"relatedRequired":false},
{"id":"annexI-2022-038","code":"1007.10.00","label":"- Sorgo de grão -para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-039","code":"1008.21.00","label":"-Painço -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-040","code":"1008.90.21","label":"- Mexoeira -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-041","code":"1008.90.91","label":"-Outros cereais -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-042","code":"1101.00.00","label":"Farinhas de trigo ou mistura de trigo com centeio","pdfPage":6,"lastPdfPage":6,"relatedTreatments":["listed_wheat_flour"],"relatedRequired":false},
{"id":"annexI-2022-043","code":"1102.20.00","label":"- Farinha de milho","pdfPage":6,"lastPdfPage":6,"relatedTreatments":["listed_maize_flour"],"relatedRequired":true},
{"id":"annexI-2022-044","code":"1201.10.00","label":"Soja, mesmo triturada -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-045","code":"1202.30.00","label":"Amendoins. -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-046","code":"1204.00.10","label":"-Sementes de linho -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-047","code":"1206.00.10","label":"Sementes de girassol -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-048","code":"1207.21.00","label":"- Sementes de algodão -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-049","code":"1207.30.00","label":"- Sementes de rícino","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-050","code":"1207.40.10","label":"- Sementes de gergelim -Para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-051","code":"1207.50.00","label":"-Sementes de mostarda","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-052","code":"1207.60.00","label":"-Sementes de cártamo","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-053","code":"1207.70.00","label":"-Sementes de Melão","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-054","code":"1207.91.00","label":"-Sementes de dormideira ou papoula","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-055","code":"1207.99.10","label":"-Outras sementes para sementeira","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-056","code":"1209.10.00","label":"-Sementes de beterraba sacarina","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-057","code":"1209.21.00","label":"- Semente de alfafa (Luzerna)","pdfPage":6,"lastPdfPage":6},
{"id":"annexI-2022-058","code":"1209.22.00","label":"-Sementes de trevo (Tlurifolium spp)","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-059","code":"1209.23.00","label":"- Sementes de festuca","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-060","code":"1209.24.00","label":"- Sementes de pasto dos prados de Kentucky (Poa pratensis L.)","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-061","code":"1209.25.00","label":"-Sementes de azevém (Lolium multiflorum Lam, Lolium perente L.)","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-062","code":"1209.29.00","label":"-Outras (sementes)","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-063","code":"1209.30.00","label":"-Sementes de plantas herbáceas cultivadas especialmente pelas suas flores","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-064","code":"1209.91.00","label":"- Outras -Sementes de produtos hortícolas","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-065","code":"1209.99.00","label":"- Outras sementes","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-066","code":"1901.10.10","label":"- Preparações alimentícias à base de lacticínios, para lactentes e crianças de tenra idade, acondicionadas para venda à retalho","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-067","code":"1901.10.30","label":"- Preparações alimentares, terapêuticas à base de lacticínios ou de cereais","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-068","code":"2106.90.20","label":"- Produto composto para fortificação de alimentos destinados ao consumo humano, contendo alguns dos seguintes micronutrientes, vitaminas, iodo, zinco, ácido fólico e ferro (por exemplo, produtos denominados PREMIX)","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-069","code":"2309.90.10","label":"- Preparações, aditivos do tipo utilizado na aquacultura do camarão, na avicultura, na pecuária e pré-mistura de alta concentração.","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-070","code":"3101.00.00","label":"Adubos (fertilizantes) de origem animal ou vegetal, mesmo misturados entre si ou tratados quimicamente; adubos (fertilizantes) resultantes da mistura ou do tratamento químico de produtos de origem animal ou vegetal","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-071","code":"3102.10.00","label":"Adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados): - Ureia, mesmo em solução aquosa","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-072","code":"3102.21.00","label":"Adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados): - Sulfato de amónio","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-073","code":"3102.29.00","label":"-Outros adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados)","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-074","code":"3102.30.00","label":"Adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados): -Nitrato de amónio, mesmo em solução aquosa","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-075","code":"3102.40.00","label":"Adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados): - Misturas de nitrato de amónio com carbonato de cálcio ou com outras matérias inorgânicas desprovidas de poder fertilizante","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-076","code":"3102.50.00","label":"Adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados): - Nitrato de sódio","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-077","code":"3102.60.00","label":"Adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados): - Sais duplos e misturas de nitrato de cálcio e nitrato de amónio","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-078","code":"3102.80.00","label":"Adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados): - Misturas de ureia com nitrato de amónio em soluções aquosas ou amoniacais","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-079","code":"3102.90.00","label":"Adubos (fertilizantes) minerais ou químicos, azotados (nitrogenados): - Outros incluídas as misturas não mencionadas nas sub posições precedentes","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-080","code":"3103.11.00","label":"Adubos (fertilizantes) minerais ou químicos, fosfatados: - Superfosfatos Que contenham, em peso, 35% ou mais de pentóxido de difósforo","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-081","code":"3103.19.00","label":"Outros superfosfatos","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-082","code":"3103.90.00","label":"- Outros adubos (fertilizantes) minerais ou químicos, fosfatados","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-083","code":"3104.20.00","label":"Adubos (fertilizantes) minerais ou químicos, potássicos: - Cloreto de potássio","pdfPage":7,"lastPdfPage":7},
{"id":"annexI-2022-084","code":"3104.30.00","label":"Adubos (fertilizantes) minerais ou químicos, potássicos: - Sulfato de potássio","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-085","code":"3104.90.00","label":"- Outros adubos (fertilizantes) minerais ou químicos, potássicos","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-086","code":"3105.10.00","label":"Adubos (fertilizantes) minerais ou químicos, contendo dois ou três dos seguintes elementos fertilizantes: azoto (nitrogénio), fósforo e potássio; outros adubos (fertilizantes). -Produtos do presente capítulo apresentados em tabletes ou forma semelhantes, ou ainda em embalagens com peso bruto não superior a 10 kg","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-087","code":"3105.20.00","label":"- Adubos (fertilizantes) minerais ou químicos, contendo os três elementos fertilizantes: azoto (nitrogénio), fósforo e potássio","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-088","code":"3105.30.00","label":"- Adubos (fertilizantes) minerais ou químicos, Hidrogéno-ortofosfato de diamónio (fosfato diamónico ou dimoniacal)","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-089","code":"3105.40.00","label":"-Diidrogeno-ortofosfato de amónio (fosfato monoamónico ou monoamonical), mesmo misturado com hidrogeno-ortofosfato de diamónio (fosfato diamónico ou diamonical)","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-090","code":"3105.51.00","label":"- Outros adubos (fertilizantes) minerais ou químicos, contendo os dois elementos fertilizantes, azoto (nitrogénio) e fósforo: -que contenham nitratos e fosfatos","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-091","code":"3105.59.00","label":"- Outros adubos (fertilizantes) minerais ou químicos, contendo os dois elementos fertilizantes: azoto (nitrogénio) e fósforo","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-092","code":"3105.60.00","label":"- Adubos (fertilizantes) minerais ou químicos, contendo os dois elementos fertilizantes: fósforos e potássio","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-093","code":"3105.90.00","label":"- Outros adubos (fertilizantes) minerais ou químicos, contendo dois ou três dos seguintes elementos fertilizantes: azoto (nitrogénio), fósforo e potássio; outros adubos (fertilizantes), produtos do presente capítulo apresentados em tabletes ou forma semelhantes, ou ainda em embalagens com peso bruto não superior a 10 kg","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-094","code":"3808.91.00","label":"- Insecticidas","pdfPage":8,"lastPdfPage":8,"relatedTreatments":["listed_insecticides"],"relatedRequired":true},
{"id":"annexI-2022-095","code":"3808.92.00","label":"- Fungicidas","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-096","code":"3808.93.00","label":"- Herbicida, inibidores de germinação e reguladores de crescimento para plantas","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-097","code":"3808.94.00","label":"- Desinfectantes","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-098","code":"3808.99.00","label":"- Outros produtos semelhantes","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-099","code":"3821.00.00","label":"Meios de cultura preparados para o desenvolvimento de microrganismos e a manutenção de microrganismos (incluindo os vírus e os organismos similares) ou de células vegetais, humanas ou animais","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-100","code":"3822.00.00","label":"Reagentes de diagnóstico ou de laboratório em qualquer suporte e reagentes de diagnóstico ou de laboratório preparados, mesmos apresentados num suporte, excepto os das posições 30.02 ou 30.06; materiais de referência certificados","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-101","code":"3926.90.10","label":"- Flutuadores para a pesca","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-102","code":"3926.90.40","label":"- Brincos para identificação de animais","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-103","code":"5608.11.00","label":"-Redes confeccionadas para a pesca","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-104","code":"6304.20.00","label":"- Mosquiteiros para cama","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-105","code":"6305.10.00","label":"- Sacos de juta ou de outras fibras têxteis liberianas","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-106","code":"8201.10.00","label":"- Pás","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-107","code":"8201.30.00","label":"- Alviões, picaretas, enxadas, sachos, ancinhos e raspadeiras","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-108","code":"8201.40.00","label":"- Machados, padrões e ferramentas semelhantes de gume","pdfPage":8,"lastPdfPage":8},
{"id":"annexI-2022-109","code":"8201.50.00","label":"- Tesouras de podar (incluindo as tesouras para aves domésticas), manipuladas com uma das mãos","pdfPage":8,"lastPdfPage":9},
{"id":"annexI-2022-110","code":"8201.60.00","label":"- Tesouras para sebes, tesouras de podar e ferramentas semelhantes, manipuladas com as duas mãos","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-111","code":"8201.90.00","label":"- Outras ferramentas manuais para agricultura, horticultura e silvicultura","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-112","code":"8202.10.00","label":"- Serras manuais","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-113","code":"8202.20.00","label":"- Folhas para serras de fita","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-114","code":"8208.40.00","label":"- Correntes cortantes de serras","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-115","code":"8413.20.00","label":"Bombas para líquidos, mesmo com dispositivo medidor, elevadores de líquidos. -Bombas manuais, excepto das subposições 8413.11 e 8413.19","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-116","code":"8413.81.00","label":"- Outras Bombas","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-117","code":"8413.82.00","label":"- Elevadores de líquidos","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-118","code":"8419.31.00","label":"- Secadores - Para produtos agrícolas","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-119","code":"8421.11.00","label":"Centrifugadores, incluindo os secadores centrífugos; -Desnatadeiras","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-120","code":"8424.81.00","label":"- Aparelhos mecânicos (mesmo manuais) para projectar, dispersar ou pulverizar líquidos ou pós, para agricultura ou horticultura","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-121","code":"8424.90.00","label":"- Partes","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-122","code":"8425.31.00","label":"- Guinchos e cabrestantes de motor eléctrico","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-123","code":"8425.39.00","label":"- Outros guinchos e cabrestantes","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-124","code":"8432.10.00","label":"- Arados e charruas","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-125","code":"8432.21.00","label":"-Grades de discos","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-126","code":"8432.29.00","label":"- Outros: Grades, escarificadores, cultivadores, extirpadores, enxadas e sachadores","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-127","code":"8432.31.00","label":"- Semeadores, plantadores e transplantadores","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-128","code":"8432.41.00","label":"- Espalhadores de estrume e distribuidores de adubos (fertilizantes)","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-129","code":"8432.80.00","label":"- Outras máquinas e aparelhos de uso agrícola, hortícola ou florestal, para preparação ou trabalho do solo ou para cultura","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-130","code":"8432.90.00","label":"- Partes de máquinas e aparelhos de uso agrícola, hortícola ou florestal, para preparação ou trabalho do solo ou para cultura","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-131","code":"8433.11.00","label":"-Cortadores de relva motorizados, cujo dispositivo de corte gira num plano horizontal, para colheita ou debulha de produtos agrícolas","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-132","code":"8433.19.00","label":"-Outros cortadores de relva motorizados, para colheita ou debulha de produtos agrícolas","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-133","code":"8433.20.00","label":"- Ceifeiras, incluindo as barras de corte para montagem em tractores","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-134","code":"8433.30.00","label":"- Outras máquinas e aparelhos para colher e dispor o feno","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-135","code":"8433.40.00","label":"- Enfardadeiras de palha ou de forragem, incluindo as enfardadeiras- apanhadeiras","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-136","code":"8433.51.00","label":"-Ceifeiras-debulhadoras","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-137","code":"8433.52.00","label":"- Outras máquinas e aparelhos para debulha","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-138","code":"8433.53.00","label":"- Máquinas para colheita de raízes ou tubérculos","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-139","code":"8433.59.00","label":"- Outras máquinas e aparelhos para colheita e para debulha","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-140","code":"8433.60.00","label":"- Máquinas para limpar ou seleccionar ovos, frutas ou outros produtos agrícolas","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-141","code":"8433.90.00","label":"- Partes de máquina e aparelhos para colheita ou debulha de produtos agrícolas, incluindo as enfardadeiras de palha ou forragem; cortadores de relva e ceifeiras; máquinas para limpar e seleccionar ovos, frutas ou outros produtos agrícolas, excepto os da posição nº. 84.37.","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-142","code":"8434.10.00","label":"- Máquinas de ordenhar","pdfPage":9,"lastPdfPage":9},
{"id":"annexI-2022-143","code":"8434.20.00","label":"- Máquinas e aparelhos, para a indústria de lacticínios","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-144","code":"8434.90.00","label":"- Partes de máquinas e aparelhos de ordenhar e para a indústria de lacticínios","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-145","code":"8435.10.00","label":"Prensas, esmagadores, máquinas e aparelhos semelhantes, para fabricação de vinho, sidra, sumos de frutas ou bebidas semelhantes - Máquinas e aparelhos","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-146","code":"8435.90.00","label":"- Partes de prensas, esmagadores, máquinas e aparelhos semelhantes, para fabricação de vinho, sidra, sumos de frutas ou bebidas semelhantes","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-147","code":"8436.10.00","label":"- Máquinas e aparelhos, para preparação de alimentos e rações para animais","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-148","code":"8436.21.00","label":"- Chocadeiras e criadeiras para avicultura","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-149","code":"8436.29.00","label":"- Outras máquinas e aparelhos, para agricultura, horticultura, silvicultura, avicultura ou apicultura, incluindo os germinadores equipados com dispositivos mecânicos ou térmicos","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-150","code":"8436.80.00","label":"- Outras máquinas e aparelhos","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-151","code":"8436.91.00","label":"-Partes de máquinas e aparelhos, para agricultura, horticultura, silvicultura, avicultura ou apicultura, incluindo os germinadores equipados com dispositivos mecânicos ou térmicos e as chocadeiras e criadeiras para silvicultura","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-152","code":"8436.99.00","label":"- Partes de outras máquinas e aparelhos","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-153","code":"8437.10.00","label":"- Máquinas para limpeza, selecção ou peneiração de grão ou de produtos agrícolas secos","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-154","code":"8437.80.00","label":"- Outras máquinas e aparelhos para a indústria de moagem ou tratamento de cereais ou de produtos hortícolas secos, excepto dos tipos utilizados em fazendas","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-155","code":"8437.90.00","label":"- Partes de máquinas para limpeza, selecção ou peneiração de grãos ou de produtos hortícolas secos; máquinas e aparelhos para a indústria de moagem ou tratamento de cereais ou de produtos hortícolas secos, excepto dos tipos utilizados em fazendas","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-156","code":"8438.30.00","label":"Máquinas e aparelhos não especificados nem compreendidos noutras posições do presente capítulo… - Máquinas e aparelhos para indústria do açúcar","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-157","code":"8438.60.00","label":"- Máquinas e aparelhos para preparação de frutas ou de produtos hortícolas","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-158","code":"8501.61.00","label":"-Geradores de corrente alternada (alternadores) -De potência não superior a 75 KVA","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-159","code":"8502.11.00","label":"- Grupos electrogéneos de motor de pistão de ignição por compressão (motores diesel ou semi-diesel) -De potência não superior a 75 KVA","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-160","code":"8502.20.00","label":"- Grupos electrogéneos de motor de pistão de ignição por faísca (motor de explosão)","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-161","code":"8701.10.00","label":"- Tractores de um eixo","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-162","code":"8701.20.00","label":"- Tractores rodoviários para semi-reboques","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-163","code":"8701.30.00","label":"- Tractores de lagartas","pdfPage":10,"lastPdfPage":10},
{"id":"annexI-2022-164","code":"8701.91.00","label":"Nã superior a 18KW","pdfPage":10,"lastPdfPage":10,"context":"Outros tractores"},
{"id":"annexI-2022-165","code":"8701.92.00","label":"Superior a 18KW, mas não superior a 37KW","pdfPage":10,"lastPdfPage":10,"context":"Outros tractores"},
{"id":"annexI-2022-166","code":"8701.93.00","label":"Superior a 37KW, mas não superior a 75KW","pdfPage":10,"lastPdfPage":10,"context":"Outros tractores"},
{"id":"annexI-2022-167","code":"8701.94.00","label":"Superior a 75KW, mas não superior a 130KW","pdfPage":10,"lastPdfPage":10,"context":"Outros tractores"},
{"id":"annexI-2022-168","code":"8701.95.00","label":"Superior a 130KW","pdfPage":11,"lastPdfPage":11,"context":"Outros tractores"},
{"id":"annexI-2022-169","code":"8704.21.90","label":"- Outros veículos automóveis para transporte de mercadorias, com motor de pistão de ignição por compressão (diesel ou semi-diesel), de peso bruto não superior a 5 toneladas","pdfPage":11,"lastPdfPage":11},
{"id":"annexI-2022-170","code":"8716.80.00","label":"- Outros veículos não auto propulsionados (carroças de tracção animal)","pdfPage":11,"lastPdfPage":11},
{"id":"annexI-2022-171","code":"9507.20.00","label":"- Anzóis, mesmo montados em terminais (sedelas)","pdfPage":11,"lastPdfPage":11},
{"id":"annexI-2022-172","code":"9507.90.00","label":"- Outros artigos para a pesca à linha","pdfPage":11,"lastPdfPage":11}
];
export function annexIEntry(id:unknown):AnnexIEntry|undefined {return typeof id==='string'?annexIEntries.find(entry=>entry.id===id):undefined;}
export function annexIReference(entry:AnnexIEntry):string {return `AnexoI/2022: ${entry.id}; código ${entry.code}; ${entry.context?entry.context+' — ':''}${entry.label}; PDF${entry.pdfPage}${entry.lastPdfPage===entry.pdfPage?'':`–${entry.lastPdfPage}`}; ${annexIVersion}`;}
+61
View File
@@ -0,0 +1,61 @@
import {acquisitionScope,readAcquisitionStore} from './iva-acquisitions.ts';
export const commissionBaseVersion='commission-goods-base/1';
export const commissionBaseSource='CIVA republicado Lei13/2016,15(2)(e),PDF13/p1426(271): nas transmissões de bens entre comitente e comissário,preço de venda acordado pelo comissário diminuído da comissão;entre comissário e comitente,preço de compra acordado pelo comissário aumentado da comissão. Art3(3)(c),PDF6/p1426(264): transferências em execução de contrato de comissão,incluindo consignação;na comissão de venda considera-se comprador o comissário,na de compra o comitente. Art15(5)/(6),PDF14,p1426(272),composição/exclusões,sem próprioIVA;regra especial de leilão15(2)(g)não substituída. Lei22/2022PDF3mantém15(2)(e);Lei10/2025PDF12mantém3(3)(c)por remissão e não altera15. Recorte2026/MZN,base de bens;sem incidência,taxa,IVA,serviço autónomo,dedução/campo11 ou totaisModeloA presumidos.';
export const commissionBaseTreatments=[
{id:'commission_sale_transfer',label:'Comitente → comissário — comissão de venda',direction:'Comitente para comissário',priceLabel:'Preço de venda acordado pelo comissário,antes da dedução da comissão,sem IVA',operator:'−'},
{id:'commission_purchase_transfer',label:'Comissário → comitente — comissão de compra',direction:'Comissário para comitente',priceLabel:'Preço de compra acordado pelo comissário,antes do acréscimo da comissão,sem IVA',operator:'+'},
] as const;
export const commissionBaseConditions=[
['taxableDomesticGoods','Está identificada uma transmissão de bens sujeita a IVA no território nacional; não é um serviço autónomo de intermediação nem qualquer pagamento de comissão'],
['commissionContract','A transferência destes bens entre comitente e comissário executa o contrato de comissão identificado,conforme3(3)(c),incluindo consignação quando aplicável'],
['directionConfirmed','A operação e os papéis correspondem ao sentido escolhido:comissão de venda(comitente para comissário)ou de compra(comissário para comitente)'],
['netComposition','O preço acordado pelo comissário e a comissão desta operação estão identificados sem o próprio IVA,com composição15(5)/(6)aplicável; o preço ainda não sofreu o ajuste da comissão efectuado por esta fórmula'],
['notSpecialAuction','Esta operação não está abrangida pela regra especial das vendas em leilão do artigo15(2)(g); essa base não é substituída pela comissão genérica'],
] as const;
type Condition=typeof commissionBaseConditions[number][0];
type Choice=''|'yes'|'no';
export type CommissionBaseRow={id:string;treatment:string;description:string;period:string;origin:'projected'|'effective';currency:string;principal:string;agent:string;agreementRef:string;agreedPrice:string;priceRef:string;commissionAmount:string;commissionRef:string;compositionRef:string;documentRef:string;documentDate:string;evidence:string;conditions:Partial<Record<Condition,Choice>>};
type LineResult={id:string;status:'determined'|'not_applicable'|'indeterminate';baseAmount:string|null;vat:null;rate:null;reason:string};
export type CommissionBaseCalculation={version:string;revision:number;calculatedAt:string;opportunity:string;location:string;sourceKey:string;source:string;inputs:CommissionBaseRow[];rows:LineResult[]};
export type CommissionBaseBook={rows:CommissionBaseRow[];result?:CommissionBaseCalculation;history?:CommissionBaseCalculation[]};
type Store=ReturnType<typeof readAcquisitionStore>&{commissionBases?:Record<string,CommissionBaseBook>};
export function newCommissionBase(id:string,currency:string):CommissionBaseRow{return{id,treatment:'',description:'',period:'',origin:'projected',currency,principal:'',agent:'',agreementRef:'',agreedPrice:'',priceRef:'',commissionAmount:'',commissionRef:'',compositionRef:'',documentRef:'',documentDate:'',evidence:'',conditions:{}};}
export function switchCommissionDirection(row:CommissionBaseRow,treatment:string):CommissionBaseRow{return{...row,treatment,conditions:{...row.conditions,directionConfirmed:''}};}
function readStore(draft:Record<string,unknown>):Store{
const store=readAcquisitionStore(draft.modelo_a_snapshot) as Store;
if(store.commissionBases!==undefined&&(!store.commissionBases||typeof store.commissionBases!=='object'||Array.isArray(store.commissionBases)))throw new Error('Bases de comissão não recuperáveis;originais preservados.');
const fields=Object.keys(newCommissionBase('','')).filter(key=>key!=='conditions');
for(const book of Object.values(store.commissionBases??{}))if(!book||!Array.isArray(book.rows)||(book.history!==undefined&&!Array.isArray(book.history))||book.rows.some(row=>!row||fields.some(key=>typeof row[key as keyof CommissionBaseRow]!=='string')||!row.conditions||typeof row.conditions!=='object'||Array.isArray(row.conditions)))throw new Error('Linhas de comissão não recuperáveis;originais preservados,sem substituição por lista vazia.');
return store;
}
export function commissionBaseBook(draft:Record<string,unknown>):CommissionBaseBook{return readStore(draft).commissionBases?.[acquisitionScope(draft)]??{rows:[]};}
export function saveCommissionBaseBook(draft:Record<string,unknown>,book:CommissionBaseBook):string{const current=readStore(draft),encoded=JSON.stringify({...current,commissionBases:{...current.commissionBases,[acquisitionScope(draft)]:book}});readStore({...draft,modelo_a_snapshot:encoded});return encoded;}
function decimal(raw:unknown):bigint|null{if(typeof raw!=='string'||!/^\d{1,15}(\.\d{1,6})?$/.test(raw.trim()))return null;const[whole,fraction='']=raw.trim().split('.');return BigInt(whole)*1000000n+BigInt(fraction.padEnd(6,'0'));}
function money(n:bigint):string{return`${n/1000000n}.${(n%1000000n).toString().padStart(6,'0').replace(/0+$/,'').padEnd(2,'0')}`;}
function validDate(value:string):boolean{const d=new Date(value+'T00:00:00Z');return /^\d{4}-\d{2}-\d{2}$/.test(value)&&Number.isFinite(d.getTime())&&d.toISOString().slice(0,10)===value;}
export function evaluateCommissionBase(row:CommissionBaseRow,currency:unknown):LineResult{
const result:LineResult={id:row.id,status:'indeterminate',baseAmount:null,vat:null,rate:null,reason:''};const stop=(reason:string,status:LineResult['status']='indeterminate')=>({...result,status,reason});
const rule=commissionBaseTreatments.find(item=>item.id===row.treatment);
if(!rule)return stop('Escolha a transferência de bens em comissão de venda ou de compra; comissão desconhecida não determina uma base.');
if(currency!=='MZN'||row.currency!==currency)return stop('Moeda fora do âmbito MZN ou divergente do projecto;sem conversão silenciosa.');
if(!/^2026-(0[1-9]|1[0-2])$/.test(row.period)||!['projected','effective'].includes(row.origin))return stop('Indique o período em2026 e dados efectivos declarados ou pressupostos de projecção; não se infere o período do orçamento.');
const failed=commissionBaseConditions.filter(([key])=>row.conditions[key]==='no');if(failed.length)return stop('Não se aplica esta base de comissão: '+failed.map(([,label])=>label).join('; ')+'. Não é isenção nem IVA zero.','not_applicable');
const missing=commissionBaseConditions.filter(([key])=>row.conditions[key]!=='yes');if(missing.length)return stop('Condições por indicar: '+missing.map(([,label])=>label).join('; ')+'. Desconhecido não significa não aplicável ou zero.');
if(!row.description.trim()||!row.principal.trim()||!row.agent.trim()||!row.agreementRef.trim()||!row.priceRef.trim()||!row.commissionRef.trim()||!row.compositionRef.trim()||!row.documentRef.trim()||!row.evidence.trim()||!validDate(row.documentDate))return stop('Identifique bens,comitente,comissário,contrato,documento/data e referências do preço,comissão e composição,ou pressupostos expressos;reutilize referências existentes,sem novo certificado.');
const price=decimal(row.agreedPrice),commission=decimal(row.commissionAmount);if(price===null||commission===null)return stop('Indique preço acordado e comissão sem IVA;montante desconhecido ou inválido não é zero. Não se presume percentagem,base de percentagem ou valor da comissão.');
if(row.treatment==='commission_sale_transfer'&&commission>price)return stop(`Preço menos comissão produz diferença aritmética negativa de −${money(commission-price)}MZN. Valores conservados;este recorte não a apresenta como base fiscal determinada nem a substitui por zero ou valor absoluto.`);
const base=money(row.treatment==='commission_sale_transfer'?price-commission:price+commission);
return{...result,status:'determined',baseAmount:base,reason:`Base15(2)(e),${rule.direction}: preço ${money(price)} ${rule.operator} comissão ${money(commission)} = ${base}MZN,${row.origin==='projected'?'nas condições expressamente assumidas na projecção':'nos dados efectivos declarados'}. Valores sem IVA,ajuste efectuado uma única vez. Base não é imposto;IVA/taxa,dedução/campo11 e totaisModeloA não são determinados por este cálculo.`};
}
function key(draft:Record<string,unknown>,book:CommissionBaseBook):string{return JSON.stringify({version:commissionBaseVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
export function commissionBaseCurrent(draft:Record<string,unknown>,book:CommissionBaseBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
export function recordCommissionBases(draft:Record<string,unknown>,book:CommissionBaseBook):CommissionBaseBook{
if(!book.rows.length||new Set(book.rows.map(row=>row.id)).size!==book.rows.length)throw new Error('Indique operações com identificadores distintos;originais conservados.');
const result:CommissionBaseCalculation={version:commissionBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:commissionBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateCommissionBase(row,draft.currency))};
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};saveCommissionBaseBook(draft,next);return next;
}
export function commissionBaseReportRows(draft:Record<string,unknown>):Array<[string,string,string,string]>{
try{const book=commissionBaseBook(draft),result=book.result;if(!result)return[];return result.inputs.map((row,index)=>['IVA mensal',`Base P091 — ${row.period} — ${row.id}`,`${row.description};base tributável: ${result.rows[index].baseAmount??'Indeterminada'} ${row.currency};IVA: Indeterminado;${result.rows[index].reason}`,`${result.opportunity};${result.location};${commissionBaseCurrent(draft,book)?'Resultado actual':'Entradas alteradas;resultado histórico conservado'};versão${result.revision};${result.calculatedAt};${result.source};${row.origin==='projected'?'Projecção':'Dados efectivos declarados'};${commissionBaseTreatments.find(item=>item.id===row.treatment)?.label??row.treatment};comitente ${row.principal};comissário ${row.agent};contrato ${row.agreementRef};preço ${row.agreedPrice} ${row.currency},referência ${row.priceRef};comissão ${row.commissionAmount} ${row.currency},referência ${row.commissionRef};composição ${row.compositionRef};documento ${row.documentRef},${row.documentDate};condições ${commissionBaseConditions.map(([key,label])=>label+': '+(row.conditions[key]==='yes'?'Sim':row.conditions[key]==='no'?'Não':'Por indicar')).join('; ')};fundamento ${row.evidence};não preenche totaisModeloA ou campo11.`]);}
catch{return[['IVA mensal','Base de comissão','Dados não recuperáveis','Originais preservados;sem substituir por zero.']];}
}
@@ -0,0 +1,26 @@
import type { OperationTreatment } from './iva-operations.ts';
const source = 'CIVA republicado Lei13/2016, BR156/10.º suplemento,13(1)(b/j/k/l),PDF12/p.1426(270);19(1)(b)(i),PDF15/p.1426(273). Alterações Lei22/2022art.1 e Lei10/2025art.1 não alteram13 e mantêm19(1)(b)(i). Âmbito2026/MZN. Exige enquadramento/documento ou pressuposto expresso da projecção; não certifica reconhecimento, acordo, despacho ou exportação.';
const make = (id:string,label:string,letter:string,conditions:string[]):OperationTreatment => ({id,label,field:'05',rate:0,article:`CIVA arts.13(1)(${letter}),19(1)(b)(i)`,source,logicVersion:'export-beneficiaries/1',conditions:[
'Operação abrangida pelo CIVA em Moçambique, com territorialidade identificada; não importação nem operação localizada no estrangeiro',
...conditions,
]});
export const exportBeneficiaryTreatments:OperationTreatment[] = [
make('export_nonresident_buyer','Exportação por adquirente sem residência ou estabelecimento nacional','b',[
'Transmissão de bens expedidos ou transportados com destino ao estrangeiro pelo adquirente sem residência ou estabelecimento em território nacional, ou por terceiro por conta deste; adquirente, interveniente e saída identificados',
'Os bens não se destinam ao abastecimento de barcos desportivos ou de recreio, aviões de turismo ou qualquer outro meio de transporte de uso privado; destino concreto identificado, sem presumir pela nacionalidade do comprador',
'Enquadramento na regulamentação própria prevista em13(1)(b) identificado no fundamento/documento ou como pressuposto expresso da projecção; sem essa identificação não confirmar a condição nem presumir despacho ou isenção',
]),
make('export_diplomatic_mission','Fornecimentos a entidades diplomáticas ou consulares','j',[
'Transmissão de bens ou prestação de serviços destinada à entidade diplomática ou consular identificada; não basta destinatário estrangeiro',
'A isenção desta operação resulta de acordo ou convénio internacional celebrado por Moçambique, identificado com disposição, âmbito e período aplicáveis no fundamento; uma entidade diplomática por si não comprova a isenção',
]),
make('export_international_organisation','Fornecimentos a organismos internacionais ou seus membros elegíveis','k',[
'Transmissão de bens ou prestação de serviços destinada a organismo internacional reconhecido por Moçambique ou a membro desse organismo; organismo, reconhecimento e qualidade do destinatário identificados',
'A operação cumpre os limites e condições do acordo ou convénio internacional celebrado por Moçambique identificado no fundamento, incluindo disposição, âmbito e período; não presumir isenção geral de todas as compras ou de qualquer membro',
]),
make('export_humanitarian_organisation','Bens para exportação por organismo humanitário, caritativo ou educativo','l',[
'Transmissão de bens a organismo devidamente reconhecido, que os exporta para o estrangeiro no âmbito das suas actividades humanitárias, caritativas ou educativas; organismo, bens, saída e actividade identificados, não serviço nem simples intenção genérica de exportar',
'Prévio reconhecimento do direito à isenção para esta operação, na forma determinada em decreto regulamentar, identificado no fundamento/documento ou como pressuposto expresso da projecção; não confundir reconhecimento do organismo com reconhecimento do direito',
]),
];
+29
View File
@@ -0,0 +1,29 @@
import type { OperationTreatment } from './iva-operations.ts';
const source = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.13(1)(o/p/q/r/t), PDF12/p.1426(270); art.19(1)(b)(i), PDF15/p.1426(273). Lei22/2022 art.1, PDF3/p.2252(27), mantém19(1)(b)(i); Lei10/2025 art.1, PDF12–13/p.2180(12)–(13), não altera13 e mantém19(1)(b)(i). Âmbito técnico2026/MZN; classificação de vendas, sem dedução automática de compras ou declaraçãoAT.';
const scope = 'Operação abrangida pelo CIVA em Moçambique, com territorialidade identificada; não inferida apenas da residência do cliente ou do sector';
const make = (id:string,label:string,letter:string,conditions:string[]):OperationTreatment => ({id,label,field:'05',rate:0,article:`CIVA arts.13(1)(${letter}),19(1)(b)(i)`,source,logicVersion:'export-direct-operations/1',conditions:[scope,...conditions]});
export const directExportTreatments:OperationTreatment[] = [
make('export_railway_cfm','Operação ferroviária dos CFM com companhia estrangeira','o',[
'Transmissão de bens ou prestação de serviços efectuada pelos Caminhos de Ferro de Moçambique a companhia ferroviária estrangeira identificada; não basta ser qualquer operador ferroviário',
'Operação no quadro da exploração de ferrovias ou dos seus equipamentos, com ligação identificada; não isenção de qualquer venda a companhia estrangeira',
]),
make('export_international_passengers','Transporte de passageiros proveniente do ou com destino ao estrangeiro','p',[
'Serviço identificado como transporte de passageiros; não transporte de mercadorias nem serviço autónomo de alojamento ou agência',
'Percurso proveniente do estrangeiro ou com destino ao estrangeiro, com origem e destino identificados no documento ou pressuposto; nacionalidade do passageiro não comprova o percurso',
]),
make('export_work_on_movables','Trabalhos em bens móveis para reexpedição ao estrangeiro','q',[
'Prestação de serviços que consiste em trabalhos sobre bens móveis identificados, adquiridos ou importados para esses trabalhos em território nacional',
'Os bens trabalhados são expedidos ou transportados de seguida para o estrangeiro, com correspondência entre entrada, trabalhos e saída identificada',
'Expedição efectuada pelo prestador, pelo destinatário não estabelecido no território nacional ou por terceiro em nome e por conta de qualquer deles; interveniente e relação identificados',
]),
make('export_gold_bom','Ouro não trabalhado transmitido ao Banco de Moçambique','r',[
'Bem identificado como ouro em barra ou noutra forma não trabalhada; não jóia nem artigo de ouro trabalhado',
'Adquirente identificado como Banco de Moçambique; não qualquer banco ou comprador estrangeiro',
]),
make('export_packaging','Taras e embalagens para mercadorias a exportar','t',[
'Transmissão de taras ou embalagens identificadas que servem de invólucro de mercadorias; não serviço autónomo de transporte ou armazenagem',
'Mercadorias a exportar identificadas e afectação das taras/embalagens a essas mercadorias documentada ou expressamente pressuposta; não inferida só da actividade exportadora do comprador',
]),
];
+20
View File
@@ -0,0 +1,20 @@
import type { OperationTreatment } from './iva-operations.ts';
const source='CIVA republicado Lei13/2016,13(1)(m/n/s),PDF12/p.1426(270);remissões12(1)(c),PDF11/p.1426(269),14,PDF13/p.1426(271),19(1)(b)(i),PDF15/p.1426(273). Lei22/2022art.1 eLei10/2025art.1 mantêm13 e19(1)(b)(i);Lei10/2025PDF12–13/p.2180(12)–(13). Âmbito2026/MZN;classificação do serviço,sem certificar regime/documentos ou deduzir compras automaticamente.';
const scope='O próprio serviço está localizado e abrangido pelo CIVA em Moçambique, com territorialidade identificada; cliente estrangeiro ou operação subjacente no estrangeiro não determinam, por si, a localização deste serviço';
const make=(id:string,label:string,letter:string,conditions:string[]):OperationTreatment=>({id,label,field:'05',rate:0,article:`CIVA arts.13(1)(${letter}),19(1)(b)(i)`,source,logicVersion:'export-linked-services/1',conditions:[scope,...conditions]});
export const exportServiceTreatments:OperationTreatment[]=[
make('export_customs_related_services','Serviços ligados a bens nos regimes indicados no artigo13(1)(m)','m',[
'Serviço directamente relacionado com trânsito, exportação ou importação dos bens identificados, com ligação concreta descrita',
'Os bens estão isentos por admissão temporária, draubaque ou trânsito nos termos de12(1)(c), ou entraram em depósitos de regime aduaneiro ou livre de outras áreas do14; regime e documento/pressuposto identificados, não apenas localização do projecto numa zona',
'O serviço não está entre os serviços referidos no artigo9; a exclusão foi analisada para esta operação concreta, não presumida por o cliente exportar',
]),
make('export_dispatch_services','Serviços ligados à expedição de bens para o estrangeiro','n',[
'Serviço identificado e relacionado com expedição de bens destinados ao estrangeiro; bens, destino e ligação concreta do serviço identificados no documento ou pressuposto',
'O serviço não está entre os serviços referidos no artigo9; não basta uma venda a cliente estrangeiro nem um serviço genérico ao exportador',
]),
make('export_disclosed_intermediation','Intermediação em nome e por conta de outrem — artigo13(1)(s)','s',[
'Prestação de intermediação em nome e por conta de outrem, com mandante e mandato/pressuposto identificados; não actuação em nome próprio',
'O intermediário intervém numa operação descrita no artigo13 ou realizada fora do território nacional, com operação e fundamento/localização identificados; a referência a outra linha não comprova automaticamente esses factos',
]),
];
export function isExportService(id:string):boolean{return exportServiceTreatments.some(item=>item.id===id);}
+61
View File
@@ -0,0 +1,61 @@
import {acquisitionScope,readAcquisitionStore} from './iva-acquisitions.ts';
export const fuelBaseVersion='regulated-fuel-base/1';
export const fuelBaseSource='CIVA republicado Lei13/2016,15(2)(i),PDF13/p1426(271): nas transmissões de combustíveis cujo preço é fixado por Autoridade Pública,efectuadas por revendedores,o valor da contraprestação determinado nos termos dos números1 e5 não inclui a Taxa sobre os Combustíveis. Art15(5)/(6),PDF14/p1426(272),composição/exclusões,sem próprioIVA. Lei22/2022PDF3mantém15(2)(i)/(1)/(5)/(6)por remissão;Lei10/2025não altera15. Recorte2026/MZN;base apenas,sem presumir preço regulado,valorTC,incidência,taxaIVA,IVA,dedução/campo11 ou totaisModeloA.';
export const fuelBaseTreatments=[{id:'fuel_tax_included',label:'Montante sem IVA ainda inclui a Taxa sobre Combustíveis'},{id:'fuel_tax_excluded',label:'Montante sem IVA já exclui a Taxa sobre Combustíveis'}] as const;
export const fuelBaseConditions=[
['taxableFuelResale','Está identificada uma transmissão de combustíveis sujeita a IVA,efectuada por revendedor; não é qualquer aquisição ou prestação de serviços'],
['publicFixedPrice','O preço deste combustível é fixado pela Autoridade Pública identificada na referência aplicável'],
['priceScopeMatches','A referência do preço e o respectivo âmbito abrangem este combustível,operação,local e data; não se presume um preço actual para outro período'],
['netComposition','O montante indicado exclui o próprio IVA e reflecte a composição aplicável do artigo15(1)/(5)/(6),sem omissões ou duplicações'],
['fuelTaxTreatment','O tratamento escolhido corresponde à composição do montante:TC ainda incluída ou já excluída; a mesma TC não será subtraída duas vezes'],
] as const;
type Choice=''|'yes'|'no';type Condition=typeof fuelBaseConditions[number][0];
export type FuelBaseRow={id:string;treatment:string;description:string;period:string;origin:'projected'|'effective';currency:string;operationDate:string;priceRef:string;priceScope:string;priceFrom:string;priceTo:string;documentRef:string;documentDate:string;consideration:string;fuelTax:string;fuelTaxRef:string;compositionRef:string;evidence:string;conditions:Partial<Record<Condition,Choice>>};
type LineResult={id:string;status:'determined'|'not_applicable'|'indeterminate';baseAmount:string|null;vat:null;rate:null;reason:string};
export type FuelBaseCalculation={version:string;revision:number;calculatedAt:string;opportunity:string;location:string;sourceKey:string;source:string;inputs:FuelBaseRow[];rows:LineResult[]};
export type FuelBaseBook={rows:FuelBaseRow[];result?:FuelBaseCalculation;history?:FuelBaseCalculation[]};
type Store=ReturnType<typeof readAcquisitionStore>&{regulatedFuelBases?:Record<string,FuelBaseBook>};
export function newFuelBase(id:string,currency:string):FuelBaseRow{return{id,treatment:'',description:'',period:'',origin:'projected',currency,operationDate:'',priceRef:'',priceScope:'',priceFrom:'',priceTo:'',documentRef:'',documentDate:'',consideration:'',fuelTax:'',fuelTaxRef:'',compositionRef:'',evidence:'',conditions:{}};}
export function switchFuelTaxTreatment(row:FuelBaseRow,treatment:string):FuelBaseRow{return{...row,treatment,conditions:{...row.conditions,fuelTaxTreatment:''}};}
function readStore(draft:Record<string,unknown>):Store{
const store=readAcquisitionStore(draft.modelo_a_snapshot) as Store;
if(store.regulatedFuelBases!==undefined&&(!store.regulatedFuelBases||typeof store.regulatedFuelBases!=='object'||Array.isArray(store.regulatedFuelBases)))throw new Error('Bases de combustíveis não recuperáveis;originais preservados.');
const fields=Object.keys(newFuelBase('','')).filter(key=>key!=='conditions');
for(const book of Object.values(store.regulatedFuelBases??{}))if(!book||!Array.isArray(book.rows)||(book.history!==undefined&&!Array.isArray(book.history))||book.rows.some(row=>!row||fields.some(key=>typeof row[key as keyof FuelBaseRow]!=='string')||!row.conditions||typeof row.conditions!=='object'||Array.isArray(row.conditions)))throw new Error('Linhas de combustíveis não recuperáveis;originais preservados,sem substituição por lista vazia.');
return store;
}
export function fuelBaseBook(draft:Record<string,unknown>):FuelBaseBook{return readStore(draft).regulatedFuelBases?.[acquisitionScope(draft)]??{rows:[]};}
export function saveFuelBaseBook(draft:Record<string,unknown>,book:FuelBaseBook):string{const current=readStore(draft),encoded=JSON.stringify({...current,regulatedFuelBases:{...current.regulatedFuelBases,[acquisitionScope(draft)]:book}});readStore({...draft,modelo_a_snapshot:encoded});return encoded;}
function decimal(raw:unknown):bigint|null{if(typeof raw!=='string'||!/^\d{1,15}(\.\d{1,6})?$/.test(raw.trim()))return null;const[whole,fraction='']=raw.trim().split('.');return BigInt(whole)*1000000n+BigInt(fraction.padEnd(6,'0'));}
function money(n:bigint):string{return`${n/1000000n}.${(n%1000000n).toString().padStart(6,'0').replace(/0+$/,'').padEnd(2,'0')}`;}
function validDate(value:string):boolean{const d=new Date(value+'T00:00:00Z');return /^\d{4}-\d{2}-\d{2}$/.test(value)&&Number.isFinite(d.getTime())&&d.toISOString().slice(0,10)===value;}
export function evaluateFuelBase(row:FuelBaseRow,currency:unknown):LineResult{
const result:LineResult={id:row.id,status:'indeterminate',baseAmount:null,vat:null,rate:null,reason:''};const stop=(reason:string,status:LineResult['status']='indeterminate')=>({...result,status,reason});
if(!fuelBaseTreatments.some(item=>item.id===row.treatment))return stop('Indique se o montante sem IVA ainda inclui a TC ou já a exclui;não se presume a composição.');
if(currency!=='MZN'||row.currency!==currency)return stop('Moeda fora do âmbito MZN ou divergente do projecto;sem conversão silenciosa.');
if(!/^2026-(0[1-9]|1[0-2])$/.test(row.period)||!['projected','effective'].includes(row.origin))return stop('Indique mês em2026 e dados efectivos declarados ou pressupostos de projecção;sem inferir do orçamento.');
const failed=fuelBaseConditions.filter(([key])=>row.conditions[key]==='no');if(failed.length)return stop('Não se aplica esta base especial de combustíveis: '+failed.map(([,label])=>label).join('; ')+'. Não é isenção nem IVA zero.','not_applicable');
const missing=fuelBaseConditions.filter(([key])=>row.conditions[key]!=='yes');if(missing.length)return stop('Condições por indicar: '+missing.map(([,label])=>label).join('; ')+'. Desconhecido não significa não aplicável ou zero.');
if(!row.description.trim()||!row.priceRef.trim()||!row.priceScope.trim()||!row.documentRef.trim()||!row.compositionRef.trim()||!row.evidence.trim()||!validDate(row.documentDate))return stop('Identifique combustível/transmissão,referência e âmbito do preço,documento/data,composição e fundamento ou pressupostos expressos;reutilize referências existentes,sem novo certificado/aprovador.');
if(!validDate(row.operationDate)||row.operationDate.slice(0,7)!==row.period||!validDate(row.priceFrom)||row.operationDate<row.priceFrom||(row.priceTo!==''&&(!validDate(row.priceTo)||row.priceFrom>row.priceTo||row.operationDate>row.priceTo)))return stop('Identifique a data da transmissão no mês escolhido e o intervalo aplicável do preço que a abrange. Sem aplicar preço de outro período;na projecção indique pressupostos temporais expressos. O fim pode ficar vazio quando não existe termo fixado,com a correspondência temporal confirmada.');
const amount=decimal(row.consideration);if(amount===null)return stop('Indique o montante da contraprestação sem IVA;valor desconhecido ou inválido não é zero.');
let base=amount,formula='montante já sem TC,sem nova subtracção';
if(row.treatment==='fuel_tax_included'){
const tc=decimal(row.fuelTax);if(tc===null||!row.fuelTaxRef.trim())return stop('Identifique o montante exacto e a referência da TC incluída nesta contraprestação,ou pressuposto expresso;sem taxa TC presumida ou valor desconhecido igual a zero.');
if(tc>amount)return stop('A TC indicada excede a contraprestação sem IVA;reveja a composição e os montantes,sem base negativa ou zero substituto.');
base=amount-tc;formula=`${money(amount)} − ${money(tc)} de TC`;
}
return{...result,status:'determined',baseAmount:money(base),reason:`Base15(2)(i): ${formula} = ${money(base)}MZN,${row.origin==='projected'?'nas condições expressamente assumidas na projecção':'nos dados efectivos declarados'}. Preço/âmbito/período e composição identificados;sem determinar automaticamente preço ou taxaTC. Base não é imposto;IVA/taxa,dedução/campo11 e totaisModeloA não são determinados por este cálculo.`};
}
function key(draft:Record<string,unknown>,book:FuelBaseBook):string{return JSON.stringify({version:fuelBaseVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
export function fuelBaseCurrent(draft:Record<string,unknown>,book:FuelBaseBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
export function recordFuelBases(draft:Record<string,unknown>,book:FuelBaseBook):FuelBaseBook{
if(!book.rows.length||new Set(book.rows.map(row=>row.id)).size!==book.rows.length)throw new Error('Indique operações com identificadores distintos;originais conservados.');
const result:FuelBaseCalculation={version:fuelBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:fuelBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateFuelBase(row,draft.currency))};
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};saveFuelBaseBook(draft,next);return next;
}
export function fuelBaseReportRows(draft:Record<string,unknown>):Array<[string,string,string,string]>{
try{const book=fuelBaseBook(draft),result=book.result;if(!result)return[];return result.inputs.map((row,index)=>['IVA mensal',`Base P095 — ${row.period} — ${row.id}`,`${row.description};base tributável: ${result.rows[index].baseAmount??'Indeterminada'} ${row.currency};IVA: Indeterminado;${result.rows[index].reason}`,`${result.opportunity};${result.location};${fuelBaseCurrent(draft,book)?'Resultado actual':'Entradas alteradas;resultado histórico conservado'};versão${result.revision};${result.calculatedAt};${result.source};${row.origin==='projected'?'Projecção':'Dados efectivos declarados'};transmissão ${row.operationDate};preço ${row.priceRef};âmbito ${row.priceScope};intervalo ${row.priceFrom} a ${row.priceTo||'sem termo fixado,correspondência temporal confirmada'};${fuelBaseTreatments.find(item=>item.id===row.treatment)?.label??'Composição por indicar'};contraprestação ${row.consideration} ${row.currency};${row.treatment==='fuel_tax_included'?`TC incluída ${row.fuelTax} ${row.currency},referência ${row.fuelTaxRef}`:'TC já excluída,sem segunda subtracção'};composição ${row.compositionRef};documento ${row.documentRef},${row.documentDate};condições ${fuelBaseConditions.map(([key,label])=>label+': '+(row.conditions[key]==='yes'?'Sim':row.conditions[key]==='no'?'Não':'Por indicar')).join('; ')};fundamento ${row.evidence};não preenche totaisModeloA ou campo11.`]);}
catch{return[['IVA mensal','Base de combustíveis','Dados não recuperáveis','Originais preservados;sem substituir por zero.']];}
}
+8
View File
@@ -0,0 +1,8 @@
export type FundraisingContext={entityReference:string;annualEvents:string;eventNumber:string;activity:string};
export const fundraisingActivities=[['health_public','Saúde pública — 9(1)(a)'],['social_assistance','Assistência social — 9(2)(a)'],['security_public','Segurança pública — 9(2)(b)'],['social_care','Equipamentos sociais — 9(2)(c)'],['activity_facilities','Prática artística/desportiva/recreativa — 9(2)(d)'],['cultural_visits','Visitas culturais — 9(2)(e)'],['statutory_membership','Serviços colectivos por quota — 9(2)(g)'],['education_public','Ensino público — 9(3)(a)'],['training_public','Formação pública — 9(3)(b)']];
export function fundraisingError(value:FundraisingContext|undefined,nonprofit:boolean):string|undefined {
if(!value||typeof value.entityReference!=='string'||!value.entityReference.trim())return 'Identifique a entidade organizadora; o limite anual não é por oportunidade.';
if(typeof value.annualEvents!=='string'||typeof value.eventNumber!=='string'||!/^[1-8]$/.test(value.annualEvents)||!/^[1-8]$/.test(value.eventNumber)||Number(value.eventNumber)>Number(value.annualEvents))return 'Indique o total anual da entidade (incluindo esta manifestação) e o número desta manifestação: de1a8, sem exceder o total. Desconhecido não significa zero.';
const activities=fundraisingActivities.map(([id])=>id).filter(id=>nonprofit?!id.endsWith('_public'):id!=='statutory_membership');
if(!activities.includes(value.activity))return 'Escolha uma actividade habitual isenta abrangida por9(2)(h) e compatível com a entidade; não basta ser uma angariação de fundos.';
}
+162
View File
@@ -0,0 +1,162 @@
import { acquisitionScope } from './iva-acquisitions.ts';
import { internationalShipEligibility,internationalAircraftEligibility } from './iva-international-assets.ts';
type Choice = ''|'yes'|'no';
export const importExemptionVersion = 'import-exemptions/1';
export const importExemptionSource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.12(1)(d/f),PDF11/p.1426(269). Lei22/2022,PDF2/p.2252(26),mantém d/f; Lei10/2025,PDF12–13/p.2180(12–13),mantém d/f. Cobertura2026/MZN; classificação do IVA na importação,sem cálculo de direitos aduaneiros ou dedução no campo11.';
export const importBeneficiaryVersion = 'import-beneficiaries/1';
export const importBeneficiarySource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.12(1)(j/l),PDF11/p.1426(269). Lei22/2022,PDF2/p.2252(26),e Lei10/2025,PDF13/p.2180(13),mantêm j/l. Cobertura2026/MZN; importação de objectos de arte e veículo de combate a incêndios nas condições próprias,sem dedução no campo11 nem cálculo de direitos aduaneiros.';
export const importAssetVersion = 'import-assets/1';
export const importAssetSource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.12(1)(h/i),PDF11/p.1426(269),por referência a13(1)(f/g),PDF12/p.1426(270),e actividades de13(1)(c/d). Lei22/2022,PDF2/p.2252(26),e Lei10/2025,PDF13/p.2180(13),mantêm h/i;13 não alterado nesses diplomas. Cobertura2026/MZN; importação de embarcação/avião elegível ou objecto incorporado/utilizado na respectiva exploração,sem dedução no campo11,base aduaneira ou cálculo de direitos aduaneiros.';
export const importCustomsVersion = 'import-customs-regimes/1';
export const importCustomsSource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.12(1)(c),PDF11/p.1426(269): importações de bens nos regimes de trânsito, importação temporária ou draubaque que sejam isentas totalmente de direitos aduaneiros. Lei22/2022,PDF2/p.2252(26),e Lei10/2025,PDF13/p.2180(13),mantêm c) por remissão,sem nova redacção expandida neste recorte. Cobertura2026/MZN; classificação de IVA na importação,sem cálculo de direitos,base aduaneira,saída de regime ou dedução no campo11.';
export const importSpecialRegimeVersion = 'import-special-regimes/1';
export const importSpecialRegimeSource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.14(1)(a) e condição inicial14(1),PDF13/p.1426(271). Lei22/2022 e Lei10/2025 não alteram14 neste acervo. Importações sob controlo alfandegário e disposições especificamente aplicáveis, enquanto os bens permanecem nos regimes enumerados, sem utilização nem consumo finais nas áreas mencionadas. Cobertura2026/MZN; sem dedução/campo11, cálculo de direitos ou saída do regime.';
export const importSupplyVersion = 'import-onboard-supplies/1';
export const importSupplySource = 'CIVA republicado pela Lei13/2016,BR156/10.º suplemento,12(1)(g),12(3)(a)(i–iv)/(b),PDF11–12/p.1426(269–270),e definição13(3). Lei22/2022PDF2/p.2252(26) e Lei10/2025PDF13/p.2180(13) mantêm g/3 por remissão. Cobertura2026/MZN; abastecimentos importados na janela própria,consumidos ou a bordo de embarcação de navegação internacional marítima/fluvial/lacustre ou avião de navegação aérea internacional;exclusões próprias de provisões e depósitos normais. Sem exigir companhia principalmente internacional,sem dedução/campo11,direitos ou base aduaneira.';
export const importServiceVersion = 'import-included-services/1';
export const importInvestmentVersion = 'import-investment-equipment/1';
export const importDevelopmentVersion = 'import-un-development/1';
export const importDevelopmentSource = 'CIVA republicado Lei13/2016,12(2)(c),PDF11/p.1426(269): materiais/equipamentos de projectos de desenvolvimento financiados pelas agências e instituições especializadas das Nações Unidas,devidamente acreditadas junto do Governo Moçambicano,destinados exclusivamente à implementação dos projectos;isenção ou redução de IVA na mesma proporção da redução de direitos. Art12(4),PDF12/p.1426(270): despacho favorável do Ministro que superintende Finanças,requerimento prévio da entidade promotora com lista discriminada e plano de importações;concessão pelos serviços aduaneiros segundo o plano e após confronto com a lista aprovada. Lei22/2022PDF2–3 eLei10/2025PDF13 mantêm12(2)/4 por remissão. Cobertura2026/MZN;sem calcular direitos/base aduaneira/taxa normal ou dedução/campo11;pedido não equivale a concessão.';
export const importDevelopmentFields = [
['developmentProject','Projecto de desenvolvimento identificado'],
['developmentAgency','Agência ou instituição especializada das Nações Unidas e referência da acreditação'],
['developmentDecisionRef','Despacho favorável / pressuposto expresso da projecção'],
['developmentListRef','Lista discriminada aprovada / referência da previsão'],
['developmentPlanRef','Plano de importações / referência da previsão'],
['developmentScope','Âmbito nesta importação: bens, operação, período e condições abrangidos'],
['developmentRightsRef','Fundamento da isenção ou redução de direitos / pressuposto expresso'],
] as const;
const developmentConditions = [
['developmentMaterials','Os bens desta importação são materiais ou equipamentos do projecto de desenvolvimento identificado'],
['developmentUNFunding','O projecto é financiado pela agência ou instituição especializada das Nações Unidas identificada; não basta financiamento externo genérico'],
['developmentAccredited','A agência ou instituição especializada identificada está devidamente acreditada junto do Governo Moçambicano'],
['developmentExclusiveUse','Os materiais ou equipamentos destinam-se exclusivamente à implementação deste projecto'],
['developmentFavourableDecision','Existe despacho favorável do Ministro que superintende a área de Finanças para este âmbito, ou esse despacho é pressuposto expresso da projecção; requerimento apresentado não equivale a decisão favorável'],
['developmentPriorRequest','A entidade promotora apresentou requerimento prévio acompanhado de lista discriminada dos bens a importar e respectivo plano de importações, ou estes elementos são pressupostos expressos da projecção'],
['developmentCustomsConformity','A concessão pelos serviços aduaneiros para esta importação segue o plano e o confronto com a lista aprovada no despacho, ou tal conformidade é pressuposto expresso da projecção; não se estende a outros bens ou operações'],
] as const;
export const importInvestmentSource = 'CIVA republicado Lei13/2016,12(1)(k),PDF11/p.1426(269): importações de bens de equipamento classificados na classe K da Pauta Aduaneira destinados a investimentos em empreendimentos autorizados ao abrigo da Lei de Investimentos e respectivo Regulamento. Lei22/2022,PDF2/p.2252(26),e Lei10/2025,PDF13/p.2180(13),mantêm k por remissão. Cobertura2026/MZN; classificação do IVA desta importação nas condições próprias,sem conceder autorização de investimento,classificar automaticamente mercadorias,estender o âmbito da autorização,calcular direitos/base aduaneira ou dedução/campo11.';
export const importServiceSource = 'CIVA republicado Lei13/2016,12(1)(e),PDF11/p.1426(269): prestações de serviços cujo valor esteja incluído na base tributável da importação de bens,conforme16. Art16(1)/16(1)(b)/16(2),PDF14/p.1426(272): valor aduaneiro e despesas acessórias até primeiro destino,do documento de transporte ou,na falta,primeira ruptura de carga no interior do País. Lei22/2022PDF1–2 e Lei10/2025PDF12–13 mantêm e por remissão e não alteram16. Cobertura2026/MZN; IVA do serviço,sem calcular base aduaneira,direitos,IVA dos bens,dedução/campo11 ou rectificação automática de factura.';
export const importExemptionRules = [
{id:'un_development_exemption',branch:'P060',label:'Projecto de desenvolvimento ONU — isenção integral',article:'12(2)(c)/12(4)',conditions:[...developmentConditions,['developmentFullRightsExemption','Esta importação beneficia de isenção integral de direitos no fundamento identificado; uma redução parcial não equivale a isenção integral de IVA']]},
{id:'un_development_reduction',branch:'P060',label:'Projecto de desenvolvimento ONU — redução proporcional',article:'12(2)(c)/12(4)',conditions:[...developmentConditions,['developmentRightsReduction','Esta importação beneficia da redução parcial de direitos na percentagem identificada; não é uma taxa aduaneira nem a fracção de direitos ainda a pagar']]},
{id:'authorized_investment_equipment',branch:'P056',label:'Equipamento classe K para empreendimento autorizado',article:'12(1)(k)',conditions:[['investmentEquipment','Os bens importados são bens de equipamento; não basta uma compra de materiais, consumíveis ou serviços para um investimento'],['investmentClassK','Os bens de equipamento identificados estão classificados na classe K da Pauta Aduaneira; uma descrição genérica ou código isolado não é classificação automática pelo portal'],['investmentAuthorized','O empreendimento está autorizado ao abrigo da Lei de Investimentos e respectivo Regulamento; a referência identifica a autorização aplicável ou o pressuposto expresso da projecção, não apenas um pedido apresentado'],['investmentDestination','Estes bens destinam-se ao investimento no empreendimento autorizado identificado; a operação, período e condições correspondem ao âmbito aplicável da autorização, sem o estender automaticamente a outros bens ou operações']]},
{id:'service_in_customs_value',branch:'P050',label:"Serviço já compreendido no valor aduaneiro",article:'12(1)(e)',conditions:[["serviceImportLinked", "A prestação está ligada à importação de bens identificada na referência própria; não basta tratar-se de serviço prestado a um importador"], ["serviceFullValueIncluded", "O valor integral do serviço desta linha está incluído na base tributável da importação identificada, nos termos do artigo16; documento ou pressuposto discrimina a inclusão, não apenas a intenção de a incluir"], ["serviceInCustomsValue", "O valor deste serviço já está compreendido no valor aduaneiro que integra a base do artigo16(1); não é uma nova parcela a somar pelo simulador"]]},
{id:'accessory_service_first_destination',branch:'P050',label:"Serviço acessório até ao primeiro destino",article:'12(1)(e)',conditions:[["serviceImportLinked", "A prestação está ligada à importação de bens identificada na referência própria; não basta tratar-se de serviço prestado a um importador"], ["serviceFullValueIncluded", "O valor integral do serviço desta linha está incluído na base tributável da importação identificada, nos termos do artigo16; documento ou pressuposto discrimina a inclusão, não apenas a intenção de a incluir"], ["serviceAccessoryCost", "O serviço é uma despesa acessória da importação (embalagem, transporte, seguro ou outro encargo) adicionada à base por ainda não estar compreendida no valor aduaneiro, conforme16(1)(b)"], ["serviceToFirstDestination", "A despesa verifica-se até ao primeiro lugar de destino no interior do País: o constante do documento de transporte ou, na sua falta, o local da primeira ruptura de carga no interior do País, conforme16(2); destino e percurso identificados no fundamento"]]},
{id:'ship_provisions_import',branch:'P052',label:"Embarcação internacional — Provisões de bordo",article:'12(1)(g)',conditions:[["supplyInternationalShip", "A embarcação identificada efectua navegação marítima, fluvial ou lacustre internacional; não basta pertencer a uma empresa marítima"], ["supplyProvisions", "São provisões de bordo: produtos destinados exclusivamente ao consumo da tripulação e dos passageiros"], ["supplyImportWindow", "Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento"], ["supplyOnboard", "Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual"], ["supplyNoDismantleOtherUse", "As provisões não se encontram em embarcação a desmantelar ou utilizada para fins diferentes da navegação internacional, durante essa situação"], ["supplyNoFloatingHospitality", "As provisões não se encontram em embarcação utilizada em hotel, restaurante, sala de jogos flutuante ou fim semelhante, durante permanência em porto ou águas territoriais/interiores nacionais"], ["supplyNoRecreation", "As provisões não se encontram em embarcação de recreio durante permanência em porto ou águas territoriais/interiores nacionais"], ["supplyNoCoastalFishing", "As provisões não se encontram em embarcação de pesca costeira"]]},
{id:'ship_fuel_import',branch:'P052',label:"Embarcação internacional — Combustíveis ou carburantes",article:'12(1)(g)',conditions:[["supplyInternationalShip", "A embarcação identificada efectua navegação marítima, fluvial ou lacustre internacional; não basta pertencer a uma empresa marítima"], ["supplyFuel", "São combustíveis ou carburantes destinados ao funcionamento das máquinas de propulsão ou de outros aparelhos de uso técnico instalados a bordo"], ["supplyImportWindow", "Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento"], ["supplyOnboard", "Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual"], ["supplyNormalTanks", "Os combustíveis/carburantes importados são os contidos nos depósitos normais; depósitos suplementares ou externos não cumprem esta condição"]]},
{id:'ship_technical_products_import',branch:'P052',label:"Embarcação internacional — Lubrificantes e outros produtos de funcionamento técnico",article:'12(1)(g)',conditions:[["supplyInternationalShip", "A embarcação identificada efectua navegação marítima, fluvial ou lacustre internacional; não basta pertencer a uma empresa marítima"], ["supplyTechnicalProducts", "São lubrificantes ou outros produtos, distintos dos combustíveis/carburantes, destinados ao funcionamento das máquinas de propulsão ou de outros aparelhos de uso técnico instalados a bordo"], ["supplyImportWindow", "Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento"], ["supplyOnboard", "Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual"]]},
{id:'ship_cargo_accessories_import',branch:'P052',label:"Embarcação internacional — Produtos acessórios para mercadorias transportadas",article:'12(1)(g)',conditions:[["supplyInternationalShip", "A embarcação identificada efectua navegação marítima, fluvial ou lacustre internacional; não basta pertencer a uma empresa marítima"], ["supplyCargoAccessories", "São produtos acessórios destinados à preparação, tratamento e conservação das mercadorias transportadas a bordo"], ["supplyImportWindow", "Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento"], ["supplyOnboard", "Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual"]]},
{id:'aircraft_provisions_import',branch:'P052',label:"Avião internacional — Provisões de bordo",article:'12(1)(g)',conditions:[["supplyInternationalAircraft", "O avião identificado efectua navegação aérea internacional; não se exige que a companhia se dedique principalmente ao tráfego internacional neste ramo"], ["supplyProvisions", "São provisões de bordo: produtos destinados exclusivamente ao consumo da tripulação e dos passageiros"], ["supplyImportWindow", "Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento"], ["supplyOnboard", "Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual"]]},
{id:'aircraft_fuel_import',branch:'P052',label:"Avião internacional — Combustíveis ou carburantes",article:'12(1)(g)',conditions:[["supplyInternationalAircraft", "O avião identificado efectua navegação aérea internacional; não se exige que a companhia se dedique principalmente ao tráfego internacional neste ramo"], ["supplyFuel", "São combustíveis ou carburantes destinados ao funcionamento das máquinas de propulsão ou de outros aparelhos de uso técnico instalados a bordo"], ["supplyImportWindow", "Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento"], ["supplyOnboard", "Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual"], ["supplyNormalTanks", "Os combustíveis/carburantes importados são os contidos nos depósitos normais; depósitos suplementares ou externos não cumprem esta condição"]]},
{id:'aircraft_technical_products_import',branch:'P052',label:"Avião internacional — Lubrificantes e outros produtos de funcionamento técnico",article:'12(1)(g)',conditions:[["supplyInternationalAircraft", "O avião identificado efectua navegação aérea internacional; não se exige que a companhia se dedique principalmente ao tráfego internacional neste ramo"], ["supplyTechnicalProducts", "São lubrificantes ou outros produtos, distintos dos combustíveis/carburantes, destinados ao funcionamento das máquinas de propulsão ou de outros aparelhos de uso técnico instalados a bordo"], ["supplyImportWindow", "Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento"], ["supplyOnboard", "Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual"]]},
{id:'aircraft_cargo_accessories_import',branch:'P052',label:"Avião internacional — Produtos acessórios para mercadorias transportadas",article:'12(1)(g)',conditions:[["supplyInternationalAircraft", "O avião identificado efectua navegação aérea internacional; não se exige que a companhia se dedique principalmente ao tráfego internacional neste ramo"], ["supplyCargoAccessories", "São produtos acessórios destinados à preparação, tratamento e conservação das mercadorias transportadas a bordo"], ["supplyImportWindow", "Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento"], ["supplyOnboard", "Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual"]]},
{id:'special_economic_zone_import',branch:'P080',label:"Importação — Zona económica especial",article:'14(1)(a)',conditions:[["specialEconomicZone", "Os bens importados são colocados no regime de zona económica especial identificado no documento; a localização geográfica, por si só, não comprova o regime"], ["specialCustomsControl", "Esta importação encontra-se sob controlo alfandegário"], ["specialApplicableProvisions", "A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis"], ["specialRegimePermanence", "Os bens permanecem sob o regime identificado no período desta classificação"], ["specialNoFinalUseConsumption", "Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime"]]},
{id:'free_zone_import',branch:'P080',label:"Importação — Zona franca",article:'14(1)(a)',conditions:[["freeZone", "Os bens importados são colocados no regime de zona franca identificado no documento"], ["specialCustomsControl", "Esta importação encontra-se sob controlo alfandegário"], ["specialApplicableProvisions", "A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis"], ["specialRegimePermanence", "Os bens permanecem sob o regime identificado no período desta classificação"], ["specialNoFinalUseConsumption", "Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime"]]},
{id:'free_warehouse_import',branch:'P080',label:"Importação — Depósito franco",article:'14(1)(a)',conditions:[["freeWarehouse", "Os bens importados são colocados no regime de depósito franco identificado no documento"], ["specialCustomsControl", "Esta importação encontra-se sob controlo alfandegário"], ["specialApplicableProvisions", "A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis"], ["specialRegimePermanence", "Os bens permanecem sob o regime identificado no período desta classificação"], ["specialNoFinalUseConsumption", "Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime"]]},
{id:'general_free_warehouse_import',branch:'P080',label:"Importação — Depósito geral franco",article:'14(1)(a)',conditions:[["generalFreeWarehouse", "Os bens importados são colocados no regime de depósito geral franco identificado no documento"], ["specialCustomsControl", "Esta importação encontra-se sob controlo alfandegário"], ["specialApplicableProvisions", "A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis"], ["specialRegimePermanence", "Os bens permanecem sob o regime identificado no período desta classificação"], ["specialNoFinalUseConsumption", "Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime"]]},
{id:'customs_warehouse_import',branch:'P080',label:"Importação — Depósito de regime aduaneiro",article:'14(1)(a)',conditions:[["customsWarehouse", "Os bens importados são introduzidos no depósito de regime aduaneiro identificado no documento"], ["specialCustomsControl", "Esta importação encontra-se sob controlo alfandegário"], ["specialApplicableProvisions", "A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis"], ["specialRegimePermanence", "Os bens permanecem sob o regime identificado no período desta classificação"], ["specialNoFinalUseConsumption", "Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime"]]},
{id:'duty_free_shop_import',branch:'P080',label:"Importação — Loja franca",article:'14(1)(a)',conditions:[["dutyFreeShop", "Os bens importados são introduzidos na loja franca identificada no documento"], ["specialCustomsControl", "Esta importação encontra-se sob controlo alfandegário"], ["specialApplicableProvisions", "A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis"], ["specialRegimePermanence", "Os bens permanecem sob o regime identificado no período desta classificação"], ["specialNoFinalUseConsumption", "Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime"]]},
{id:'reimport_same_state',branch:'P049',label:'Reimportação por quem exportou, no mesmo estado',article:'12(1)(d)',conditions:[['sameExporter','A reimportação é efectuada por quem exportou os bens'],['sameState','Os bens regressam no mesmo estado em que foram exportados'],['customsExempt','Esta reimportação beneficia de isenção de direitos aduaneiros']]},
{id:'central_bank_gold',branch:'P051',label:'Importação de ouro pelo Banco de Moçambique',article:'12(1)(f)',conditions:[['gold','Os bens importados são ouro'],['centralBank','A importação é efectuada pelo Banco de Moçambique']]},
{id:'author_art_import',branch:'P055',label:'Objectos de arte pelos artistas-autores, herdeiros ou legatários',article:'12(1)(j)',conditions:[['artObjects','Os bens importados são objectos de arte'],['eligibleArtImporter','A importação é efectuada pelos próprios artistas-autores, residentes no território nacional, seus herdeiros ou legatários; a identidade, residência e relação aplicáveis estão identificadas no fundamento factual']]},
{id:'fire_brigade_vehicle',branch:'P057',label:'Veículo de combate a incêndios por corporação de bombeiros',article:'12(1)(l)',conditions:[['fireVehicle','O bem importado é um veículo de combate a incêndios'],['fireBrigade','A importação é efectuada por uma corporação de bombeiros'],['exclusiveOwnUse','O veículo destina-se exclusivamente a ser utilizado na actividade própria da corporação']]},
{id:'eligible_ship_import',branch:'P053',label:'Importação de embarcação elegível',article:'12(1)(h)',conditions:[['eligibleShip',internationalShipEligibility],['importedShip','O bem importado é a própria embarcação elegível identificada; não um serviço nem qualquer bem adquirido pelo operador']]},
{id:'ship_operation_object_import',branch:'P053',label:'Importação de objecto incorporado ou utilizado na exploração de embarcação elegível',article:'12(1)(h)',conditions:[['eligibleShip',internationalShipEligibility],['shipObjectLink','O objecto importado está incorporado na embarcação elegível identificada ou é utilizado na sua exploração; objecto, embarcação e ligação concreta identificados no documento ou pressuposto, não um fornecimento genérico ao operador']]},
{id:'eligible_aircraft_import',branch:'P054',label:'Importação de avião de companhia principalmente internacional',article:'12(1)(i)',conditions:[['eligibleAircraft',internationalAircraftEligibility],['importedAircraft','O bem importado é o próprio avião elegível identificado; não um serviço nem qualquer bem adquirido pela companhia']]},
{id:'aircraft_operation_object_import',branch:'P054',label:'Importação de objecto incorporado ou utilizado na exploração de avião elegível',article:'12(1)(i)',conditions:[['eligibleAircraft',internationalAircraftEligibility],['aircraftObjectLink','O objecto importado está incorporado no avião elegível identificado ou é utilizado na sua exploração; objecto, avião e ligação concreta identificados no documento ou pressuposto, não um fornecimento genérico à companhia']]},
{id:'customs_transit_import',branch:'P048',label:'Importação de bens em trânsito com isenção total de direitos',article:'12(1)(c)',conditions:[['customsTransit','Os bens identificados são importados sob regime de trânsito; regime e operação constam do documento ou pressuposto expresso, não apenas passagem geográfica'],['fullCustomsExemption','Esta importação beneficia de isenção total de direitos aduaneiros, identificada no fundamento factual; redução parcial ou mera suspensão não comprovam esta condição']]},
{id:'customs_temporary_import',branch:'P048',label:'Importação temporária de bens com isenção total de direitos',article:'12(1)(c)',conditions:[['customsTemporary','Os bens identificados são importados sob regime de importação temporária; regime e operação constam do documento ou pressuposto expresso, não apenas intenção de utilização temporária'],['fullCustomsExemption','Esta importação beneficia de isenção total de direitos aduaneiros, identificada no fundamento factual; redução parcial ou mera suspensão não comprovam esta condição']]},
{id:'customs_drawback_import',branch:'P048',label:'Importação de bens em draubaque com isenção total de direitos',article:'12(1)(c)',conditions:[['customsDrawback','Os bens identificados são importados sob regime de draubaque; regime e operação constam do documento ou pressuposto expresso, não qualquer promessa de restituição futura'],['fullCustomsExemption','Esta importação beneficia de isenção total de direitos aduaneiros, identificada no fundamento factual; redução parcial ou mera suspensão não comprovam esta condição']]},
] as const;
type Condition = 'developmentMaterials'|'developmentUNFunding'|'developmentAccredited'|'developmentExclusiveUse'|'developmentFavourableDecision'|'developmentPriorRequest'|'developmentCustomsConformity'|'developmentFullRightsExemption'|'developmentRightsReduction'|'investmentEquipment'|'investmentClassK'|'investmentAuthorized'|'investmentDestination'|'serviceImportLinked'|'serviceFullValueIncluded'|'serviceInCustomsValue'|'serviceAccessoryCost'|'serviceToFirstDestination'|'supplyCargoAccessories'|'supplyFuel'|'supplyImportWindow'|'supplyInternationalAircraft'|'supplyInternationalShip'|'supplyNoCoastalFishing'|'supplyNoDismantleOtherUse'|'supplyNoFloatingHospitality'|'supplyNoRecreation'|'supplyNormalTanks'|'supplyOnboard'|'supplyProvisions'|'supplyTechnicalProducts'|'specialEconomicZone'|'freeZone'|'freeWarehouse'|'generalFreeWarehouse'|'customsWarehouse'|'dutyFreeShop'|'specialCustomsControl'|'specialApplicableProvisions'|'specialRegimePermanence'|'specialNoFinalUseConsumption'|'sameExporter'|'sameState'|'customsExempt'|'gold'|'centralBank'|'artObjects'|'eligibleArtImporter'|'fireVehicle'|'fireBrigade'|'exclusiveOwnUse'|'eligibleShip'|'importedShip'|'shipObjectLink'|'eligibleAircraft'|'importedAircraft'|'aircraftObjectLink'|'customsTransit'|'customsTemporary'|'customsDrawback'|'fullCustomsExemption';
function beneficiaryImport(id:string):boolean {return id==='author_art_import'||id==='fire_brigade_vehicle';}
function assetImport(id:string):boolean {return ['eligible_ship_import','ship_operation_object_import','eligible_aircraft_import','aircraft_operation_object_import'].includes(id);}
function customsImport(id:string):boolean {return ['customs_transit_import','customs_temporary_import','customs_drawback_import'].includes(id);}
function specialRegimeImport(id:string):boolean {return ["special_economic_zone_import", "free_zone_import", "free_warehouse_import", "general_free_warehouse_import", "customs_warehouse_import", "duty_free_shop_import"].includes(id);}
function supplyImport(id:string):boolean {return ["ship_provisions_import", "ship_fuel_import", "ship_technical_products_import", "ship_cargo_accessories_import", "aircraft_provisions_import", "aircraft_fuel_import", "aircraft_technical_products_import", "aircraft_cargo_accessories_import"].includes(id);}
export function isImportService(id:string):boolean {return ['service_in_customs_value','accessory_service_first_destination'].includes(id);}
export function isDevelopmentImport(id:string):boolean {return ['un_development_exemption','un_development_reduction'].includes(id);}
export function importRuleSource(id:string):string {return isDevelopmentImport(id)?importDevelopmentSource:id==='authorized_investment_equipment'?importInvestmentSource:isImportService(id)?importServiceSource:supplyImport(id)?importSupplySource:specialRegimeImport(id)?importSpecialRegimeSource:customsImport(id)?importCustomsSource:assetImport(id)?importAssetSource:beneficiaryImport(id)?importBeneficiarySource:importExemptionSource;}
export type ImportExemptionRow = {id:string;treatment:string;description:string;period:string;origin:'projected'|'effective';currency:string;declaredValue:string;goodsCode:string;originCountry:string;importer:string;documentRef:string;documentDate:string;evidence:string;conditions:Partial<Record<Condition,Choice>>;serviceImportRef?:string;serviceBaseRef?:string;serviceFirstDestination?:string;serviceProvider?:string;investmentAuthorizationRef?:string;investmentScope?:string} & Partial<Record<typeof importDevelopmentFields[number][0]|'developmentReductionPercent'|'developmentNormalVat'|'developmentNormalVatRef',string>>;
type ImportResult = {id:string;status:'exempt'|'reduced'|'not_applicable'|'indeterminate';importVat:string|null;serviceVat?:string|null;reason:string};
export type ImportExemptionCalculation = {version:string;revision:number;calculatedAt:string;opportunity:string;location:string;sourceKey:string;source:string;inputs:ImportExemptionRow[];rows:ImportResult[]};
export type ImportExemptionBook = {rows:ImportExemptionRow[];result?:ImportExemptionCalculation;history?:ImportExemptionCalculation[]};
type Store = {version:1;books:Record<string,unknown>;importExemptions?:Record<string,ImportExemptionBook>;[key:string]:unknown};
function store(draft:Record<string,unknown>):Store {
const value:Store=draft.modelo_a_snapshot?JSON.parse(String(draft.modelo_a_snapshot)):{version:1,books:{}};
if(value?.version!==1||!value.books||typeof value.books!=='object'||Array.isArray(value.books))throw new Error('Dados fiscais não recuperáveis; originais preservados, sem substituição.');
if(value.importExemptions!==undefined&&(!value.importExemptions||typeof value.importExemptions!=='object'||Array.isArray(value.importExemptions)))throw new Error('Importações guardadas não recuperáveis; originais preservados.');
for(const book of Object.values(value.importExemptions??{})) {
if(Array.isArray(book?.rows)&&book.rows.some(row=>row&&[...importDevelopmentFields.map(([key])=>key),'developmentReductionPercent','developmentNormalVat','developmentNormalVatRef'].some(key=>row[key as keyof ImportExemptionRow]!==undefined&&typeof row[key as keyof ImportExemptionRow]!=='string')))throw new Error('Referências do projecto de desenvolvimento não recuperáveis; originais preservados.');
if(Array.isArray(book?.rows)&&book.rows.some(row=>row&&['investmentAuthorizationRef','investmentScope'].some(key=>row[key as keyof ImportExemptionRow]!==undefined&&typeof row[key as keyof ImportExemptionRow]!=='string')))throw new Error('Referências do investimento não recuperáveis; originais preservados.');
if(Array.isArray(book?.rows)&&book.rows.some(row=>row&&['serviceImportRef','serviceBaseRef','serviceFirstDestination','serviceProvider'].some(key=>row[key as keyof ImportExemptionRow]!==undefined&&typeof row[key as keyof ImportExemptionRow]!=='string')))throw new Error('Referências do serviço associado à importação não recuperáveis; originais preservados.');
if(!book||!Array.isArray(book.rows)||(book.history!==undefined&&!Array.isArray(book.history))||book.rows.some(row=>!row||['id','treatment','description','period','origin','currency','declaredValue','goodsCode','originCountry','importer','documentRef','documentDate','evidence'].some(k=>typeof row[k as keyof ImportExemptionRow]!=='string')||!row.conditions||typeof row.conditions!=='object'||Array.isArray(row.conditions)))throw new Error('Linhas de importação não recuperáveis; sem substituição por lista vazia.');
}
return value;
}
export function importExemptionBook(draft:Record<string,unknown>):ImportExemptionBook {return store(draft).importExemptions?.[acquisitionScope(draft)]??{rows:[]};}
export function saveImportExemptionBook(draft:Record<string,unknown>,book:ImportExemptionBook):string {
const current=store(draft),encoded=JSON.stringify({...current,importExemptions:{...current.importExemptions,[acquisitionScope(draft)]:book}});store({...draft,modelo_a_snapshot:encoded});return encoded;
}
export function newImportExemption(id:string,currency:string):ImportExemptionRow {return {id,treatment:'',description:'',period:'',origin:'projected',currency,declaredValue:'',goodsCode:'',originCountry:'',importer:'',documentRef:'',documentDate:'',evidence:'',conditions:{}};}
function validDate(value:string):boolean {const d=new Date(value+'T00:00:00Z');return /^\d{4}-\d{2}-\d{2}$/.test(value)&&Number.isFinite(d.getTime())&&d.toISOString().slice(0,10)===value;}
export function evaluateImportExemption(row:ImportExemptionRow,currency:unknown):ImportResult {
const result:ImportResult={id:row.id,status:'indeterminate',importVat:null,reason:'',...(isImportService(row.treatment)?{serviceVat:null}:{})};
const stop=(reason:string,status:ImportResult['status']='indeterminate')=>({...result,status,reason});
const rule=importExemptionRules.find(r=>r.id===row.treatment);
if(!rule)return stop('Escolha o ramo aplicável; referência desconhecida ou em falta não concede isenção.');
if(currency!=='MZN'||row.currency!==currency)return stop('Moeda fora do âmbito MZN ou divergente do projecto; valores conservados, sem conversão.');
if(!/^2026-(0[1-9]|1[0-2])$/.test(row.period))return stop(isImportService(row.treatment)?'Indique o período do serviço em2026; a importação é identificada separadamente, sem inferir o mês do orçamento.':'Indique o período da importação em2026; não é inferido do mês do orçamento.');
if(!['projected','effective'].includes(row.origin))return stop('Indique dados efectivos ou pressupostos de projecção.');
const failed=rule.conditions.filter(([key])=>row.conditions[key]==='no');
if(failed.length)return stop('Não se aplica esta isenção: '+failed.map(([,label])=>label).join('; ')+'. O IVA fora deste fundamento permanece por enquadrar, sem taxa presumida.','not_applicable');
const missing=rule.conditions.filter(([key])=>row.conditions[key]!=='yes');
if(missing.length)return stop('Condições por indicar: '+missing.map(([,label])=>label).join('; ')+'. Desconhecido não significa não aplicável nem IVA zero.');
if(isDevelopmentImport(row.treatment)&&importDevelopmentFields.some(([key])=>!row[key]?.trim()))return stop('Identifique projecto, agência/acreditação, despacho favorável, lista aprovada, plano, âmbito desta importação e fundamento aduaneiro, ou os pressupostos expressos da projecção. Reutilize as referências documentais disponíveis; não é exigido novo certificado.');
if(row.treatment==='authorized_investment_equipment'&&(!row.investmentAuthorizationRef?.trim()||!row.investmentScope?.trim()))return stop('Identifique a autorização aplicável ao empreendimento e o seu âmbito nesta importação, ou os pressupostos expressos da projecção. Um pedido em preparação ou apresentado não equivale a autorização.');
if(isImportService(row.treatment)&&(!row.serviceImportRef?.trim()||!row.serviceBaseRef?.trim()||!row.declaredValue.trim()||(row.treatment==='accessory_service_first_destination'&&!row.serviceFirstDestination?.trim())))return stop('Identifique a importação de bens, a referência da base que inclui o valor do serviço e o montante desta linha; no serviço acessório, indique o primeiro destino e o fundamento documental ou pressuposto.');
if(!row.description.trim()||!row.importer.trim()||!row.documentRef.trim()||!row.evidence.trim())return stop(isImportService(row.treatment)?'Identifique o serviço, importador destinatário, documento/previsão e fundamento factual da inclusão; sem exigir segunda validação da fonte oficial.':'Identifique bens, importador, documento aduaneiro ou previsão e o fundamento factual das condições; não é exigida segunda validação da fonte oficial.');
if(!validDate(row.documentDate))return stop('Data do documento/previsão em falta ou inválida; o período da importação é indicado separadamente.');
if(row.declaredValue.trim()&&!/^\d{1,15}(\.\d{1,6})?$/.test(row.declaredValue.trim()))return stop('Valor declarado/previsional inválido; conserve o original e reveja, sem presumir base aduaneira ou imposto normal.');
if(row.treatment==='un_development_reduction') {
const normal=developmentDecimal(row.developmentNormalVat),percent=developmentDecimal(row.developmentReductionPercent);
if(percent===null)return stop('Indique a percentagem da redução de direitos identificada no fundamento; não é inferida da taxa aduaneira, do financiador ou do valor dos bens.');
if(percent===0n)return stop('Redução de direitos de0% não concede benefício proporcional de IVA neste fundamento; não se presume o imposto normal.','not_applicable');
if(percent>=100000000n)return stop('A redução parcial deve ser superior a0% e inferior a100%; para isenção integral use o tratamento próprio e as suas condições.');
if(normal===null||!row.developmentNormalVatRef?.trim())return stop('Indique o IVA desta importação sem benefício e a sua referência documental ou pressuposto; montante desconhecido não é zero e o portal não presume taxa/base aduaneira.');
const vat=developmentExactMoney(normal*(100000000n-percent));
return {...result,status:'reduced',importVat:vat,reason:`Redução proporcional ${rule.article} nas condições ${row.origin==='projected'?'expressamente assumidas na projecção':'efectivas declaradas'}. IVA informado sem benefício ${row.developmentNormalVat}MZN × (1 − ${row.developmentReductionPercent}/100) = ${vat}MZN. Proporção da redução de direitos, não taxa de IVA; aritmética decimal exacta, sem arredondamento fiscal presumido. Não calcula direitos/base aduaneira nem dedução.`};
}
if(isImportService(row.treatment))return {...result,status:'exempt',serviceVat:'0.00',reason:`Isenção do serviço ${rule.article} nas condições ${row.origin==='projected'?'expressamente assumidas na projecção':'efectivas declaradas'}. IVA do serviço:0.00MZN; não é o IVA dos bens importados, não soma novamente o serviço à base nem corrige factura ou dedução.`};
return {...result,status:'exempt',importVat:'0.00',reason:`Isenção ${rule.article} nas condições ${row.origin==='projected'?'expressamente assumidas na projecção':'efectivas declaradas'}. IVA na importação:0.00MZN por isenção, sem inferir direitos aduaneiros, certificação pela AT ou dedução.`};
}
function developmentDecimal(raw:unknown):bigint|null {
if(typeof raw!=='string'||!/^\d{1,15}(\.\d{1,6})?$/.test(raw.trim()))return null;
const [whole,decimal='']=raw.trim().split('.');return BigInt(whole)*1000000n+BigInt(decimal.padEnd(6,'0'));
}
function developmentExactMoney(numerator:bigint):string {
const scale=100000000000000n;
return `${numerator/scale}.${(numerator%scale).toString().padStart(14,'0').replace(/0+$/,'').padEnd(2,'0')}`;
}
function key(draft:Record<string,unknown>,book:ImportExemptionBook):string {
const base={version:importExemptionVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows};
return JSON.stringify({...base,...(book.rows.some(row=>isDevelopmentImport(row.treatment))?{developmentVersion:importDevelopmentVersion}:{}),...(book.rows.some(row=>row.treatment==='authorized_investment_equipment')?{investmentVersion:importInvestmentVersion}:{}),...(book.rows.some(row=>beneficiaryImport(row.treatment))?{beneficiaryVersion:importBeneficiaryVersion}:{}),...(book.rows.some(row=>assetImport(row.treatment))?{assetVersion:importAssetVersion}:{}),...(book.rows.some(row=>customsImport(row.treatment))?{customsVersion:importCustomsVersion}:{}),...(book.rows.some(row=>specialRegimeImport(row.treatment))?{specialRegimeVersion:importSpecialRegimeVersion}:{}),...(book.rows.some(row=>supplyImport(row.treatment))?{supplyVersion:importSupplyVersion}:{}),...(book.rows.some(row=>isImportService(row.treatment))?{serviceVersion:importServiceVersion}:{})});
}
export function importExemptionCurrent(draft:Record<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
export function recordImportExemptions(draft:Record<string,unknown>,book:ImportExemptionBook):ImportExemptionBook {
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique importações com identificadores distintos; versões anteriores conservadas.');
const result:ImportExemptionCalculation={version:importExemptionVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:[...new Set(book.rows.map(row=>importRuleSource(row.treatment)))].join(' | '),inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateImportExemption(row,draft.currency))};
return {...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};
}
export function importExemptionReportRows(draft:Record<string,unknown>):Array<[string,string,string,string]> {
try {
const book=importExemptionBook(draft),result=book.result;if(!result)return [];
const context=`${result.opportunity}; ${result.location}; ${importExemptionCurrent(draft,book)?'Resultado actual':'Entradas alteradas; resultado histórico conservado'}; versão${result.revision}; ${result.calculatedAt}; ${result.source}`;
return result.inputs.map((row,index)=>['IVA mensal',`${isImportService(row.treatment)?'Serviço associado à importação':'Importação'} ${importExemptionRules.find(r=>r.id===row.treatment)?.branch??row.treatment} — ${row.period} — ${row.id}`,`${row.description}; ${isImportService(row.treatment)?'IVA do serviço':'IVA na importação'}: ${(isImportService(row.treatment)?result.rows[index].serviceVat:result.rows[index].importVat)??'Indeterminado'} ${row.currency}; ${result.rows[index].reason}`,`${context}; ${row.origin==='projected'?'Projecção':'Dados efectivos declarados'}; importador ${row.importer}; valor declarado/previsional ${row.declaredValue||'Não informado'} ${row.currency}, sem fixar base aduaneira; ${isImportService(row.treatment)?`importação associada ${row.serviceImportRef||'por indicar'}; base com inclusão do serviço ${row.serviceBaseRef||'por indicar'}; prestador ${row.serviceProvider||'por indicar'}${row.treatment==='accessory_service_first_destination'?`; primeiro destino ${row.serviceFirstDestination||'por indicar'}`:''}`:`código ${row.goodsCode||'não indicado'}; origem ${row.originCountry||'não indicada'}`}${row.treatment==='authorized_investment_equipment'?`; autorização/pressuposto ${row.investmentAuthorizationRef||'por indicar'}; âmbito aplicável ${row.investmentScope||'por indicar'}`:''}${isDevelopmentImport(row.treatment)?`; ${importDevelopmentFields.map(([key,label])=>label+': '+(row[key]||'por indicar')).join('; ')}${row.treatment==='un_development_reduction'?`; redução dos direitos ${row.developmentReductionPercent||'por indicar'}%; IVA informado sem benefício ${row.developmentNormalVat||'por indicar'} ${row.currency}; referência do IVA sem benefício ${row.developmentNormalVatRef||'por indicar'}`:''}`:''}; documento ${row.documentRef},${row.documentDate}; condições ${(importExemptionRules.find(rule=>rule.id===row.treatment)?.conditions??[]).map(([key,label])=>label+': '+(row.conditions[key]==='yes'?'Sim':row.conditions[key]==='no'?'Não':'Por indicar')).join('; ')}; fundamento factual ${row.evidence}; campo11 e totaisModeloA não preenchidos por esta classificação.`]);
}catch {return [['IVA mensal','Importações','Dados não recuperáveis','Originais preservados; sem substituir por zero.']];}
}
@@ -0,0 +1,32 @@
import type { OperationTreatment } from './iva-operations.ts';
const source = 'CIVA republicado Lei13/2016, BR156/10.º suplemento, art.13(1)(c/d/f/g/i), PDF12/p.1426(270); art.19(1)(b)(i), PDF15/p.1426(273). Lei22/2022 art.1, PDF3/p.2252(27), e Lei10/2025 art.1, PDF12–13/p.2180(12)–(13), mantêm19(1)(b)(i), sem alterar13. Âmbito2026/MZN; sem dedução automática de compras ou submissãoAT.';
const scope = 'Operação abrangida pelo CIVA em Moçambique, com territorialidade identificada; não basta o sector, a localização do investimento ou a residência estrangeira do cliente';
const ship = 'Embarcação identificada, afecta a navegação marítima em alto mar com transporte remunerado de passageiros ou actividade comercial, industrial ou de pesca; ou a salvamento, assistência marítima ou pesca costeira, nos termos de13(1)(c/d). A natureza e utilização constam do documento ou pressuposto; não qualquer barco de recreio';
const aircraft = 'Avião identificado e utilizado por companhia de navegação aérea que se dedica principalmente ao tráfego internacional; companhia e utilização identificadas, não bastando um voo internacional isolado';
export const internationalShipEligibility = ship;
export const internationalAircraftEligibility = aircraft;
const make=(id:string,label:string,letter:string,conditions:string[]):OperationTreatment=>({id,label,field:'05',rate:0,article:`CIVA arts.13(1)(${letter}),19(1)(b)(i)`,source,logicVersion:'international-assets/1',conditions:[scope,...conditions]});
export const internationalAssetTreatments:OperationTreatment[] = [
make('international_ship_operations','Operações sobre embarcação elegível e objectos da sua exploração','f',[
ship,
'Operação identificada: transmissão, transformação, reparação, manutenção, frete ou aluguer da embarcação; ou transmissão, aluguer, reparação ou conservação de objectos incorporados ou utilizados na sua exploração, incluindo equipamento de pesca',
'A operação e o objecto estão ligados à embarcação elegível identificada; não qualquer venda ou serviço a uma empresa marítima',
]),
make('international_aircraft_operations','Operações sobre avião de companhia principalmente internacional','g',[
aircraft,
'Operação identificada: transmissão, transformação, reparação, manutenção, frete ou aluguer do avião; ou transmissão, reparação ou manutenção de objectos nele incorporados ou utilizados na sua exploração. Não estender o aluguer do avião ao aluguer autónomo de objectos não enumerado nesta alínea',
'A operação e o objecto estão ligados ao avião elegível identificado; não qualquer fornecimento à companhia aérea',
]),
make('international_ship_direct_services','Serviços para necessidades directas de embarcação elegível ou sua carga','i',[
ship,
'Prestação de serviços identificada e efectuada para necessidades directas da embarcação elegível ou da respectiva carga, com ligação concreta descrita; não qualquer serviço ao armador',
'Serviço distinto dos já mencionados em13(1)(f/g); confirme a natureza específica, sem duplicar o enquadramento das operações sobre embarcação ou avião',
]),
make('international_aircraft_direct_services','Serviços para necessidades directas de avião elegível ou sua carga','i',[
aircraft,
'Prestação de serviços identificada e efectuada para necessidades directas do avião elegível ou da respectiva carga, com ligação concreta descrita; não qualquer serviço à companhia aérea',
'Serviço distinto dos já mencionados em13(1)(f/g); confirme a natureza específica, sem duplicar o enquadramento das operações sobre embarcação ou avião',
]),
];
+1 -1
View File
@@ -45,7 +45,7 @@ export function modeloAComponentRows(snapshot: Record<string, unknown>): Array<[
return [
['Correspondência Modelo A',modeloAReference.status],
['Campos01/02', 'Base líquida e IVA mensal da versão publicada. Os restantes campos não foram presumidos iguais a zero.'],
['Apuramento do período — campos14–18', 'Indeterminado: faltam componentes e enquadramentos do Modelo A. IVA das vendas não é imposto final a pagar.'],
['Apuramento nesta execução de vendas — campos14–18', 'Indeterminado nesta execução isolada de01/02. Consulte o bloco separado de aquisições e apuramento parcial, quando preenchido. IVA das vendas não é imposto final a pagar.'],
['Origem dos dados','Projecção do negócio; não são operações efectivas nem declaração fiscal.'],
['Exemplar de referência',`${modeloAReference.file}; SHA256 ${modeloAReference.sha256}. ${modeloAReference.edition}`],
];
@@ -0,0 +1,76 @@
import { acquisitionBook, acquisitionScope } from './iva-acquisitions.ts';
import { importExemptionBook,isImportService } from './iva-import-exemptions.ts';
type Choice = ''|'yes'|'no';
export const offerPreparationSource='CIVA,Lei13/2016,14(2)(a/b) e14(3),PDF13/p.1426(271). Preparação de dados; procedimento regulamentar de aplicação ainda em pesquisa. Não concede isenção nem preenche dedução/campo11.';
export type OfferRequest = {state:'preparation'|'presented'|'granted'|'denied';reference:string;presentedOn:string;decisionRef:string;decisionOn:string;goods:string;operation:''|'acquisition'|'import';periodFrom:string;periodTo:string;conditions:string;operationScope?:string;periodScope?:string};
export const offerRequestLabels = {preparation:'Em preparação',presented:'Apresentado',granted:'Deferido',denied:'Indeferido'};
export type OfferPreparation = {id:string;branch:'P084'|'P085';operation:''|'acquisition'|'import';description:string;period:string;currency:string;amount:string;counterparty:string;documentRef:string;documentDate:string;beneficiary:string;purpose:string;evidence:string;nationalInstitution:Choice;publicSocialInstitution:Choice;goodsSuitable:Choice;publicInterestUse:Choice;disaster:string;disasterKind:string;mitigation:Choice;reusedFrom?:{key:string;copiedAt:string};humanitarianPurpose?:string;availableDocuments?:string;request?:OfferRequest;requestRecords?:Array<{recordedAt:string;request:OfferRequest}>;normalVat?:string;normalVatSource?:string;conditionalAssumption?:Choice};
export type OfferPreparationBook={rows:OfferPreparation[];history?:Array<{savedAt:string;rows:OfferPreparation[]}>;saved?:{savedAt:string;rows:OfferPreparation[]}};
type Store={version:1;books:Record<string,unknown>;offerPreparations?:Record<string,OfferPreparationBook>;[key:string]:unknown};
export function newOfferPreparation(id:string,branch:OfferPreparation['branch'],currency:string):OfferPreparation{return {id,branch,operation:branch==='P085'?'acquisition':'',description:'',period:'',currency,amount:'',counterparty:'',documentRef:'',documentDate:'',beneficiary:'',purpose:'',evidence:'',nationalInstitution:'',publicSocialInstitution:'',goodsSuitable:'',publicInterestUse:'',disaster:'',disasterKind:'',mitigation:''};}
function read(draft:Record<string,unknown>):Store {
const value:Store=draft.modelo_a_snapshot?JSON.parse(String(draft.modelo_a_snapshot)):{version:1,books:{}};
if(value?.version!==1||!value.books||typeof value.books!=='object'||Array.isArray(value.books))throw new Error('Dados fiscais não recuperáveis; originais preservados.');
if(value.offerPreparations!==undefined&&(!value.offerPreparations||typeof value.offerPreparations!=='object'||Array.isArray(value.offerPreparations)))throw new Error('Rascunhos de ofertas não recuperáveis; sem substituição por lista vazia.');
for(const book of Object.values(value.offerPreparations??{})){
if(!book||!Array.isArray(book.rows)||(book.history!==undefined&&!Array.isArray(book.history)))throw new Error('Formato de rascunhos de ofertas não recuperável; originais preservados.');
for(const row of book.rows){
if(!row||!['P084','P085'].includes(row.branch)||Object.keys(newOfferPreparation('','P084','')).some(key=>typeof row[key as keyof OfferPreparation]!=='string')||(row.branch==='P085'&&row.operation==='import'))throw new Error('Rascunho de oferta não recuperável ou operação fora do ramo; dados conservados.');
if(['humanitarianPurpose','availableDocuments','normalVat','normalVatSource','conditionalAssumption'].some(key=>row[key as keyof OfferPreparation]!==undefined&&typeof row[key as keyof OfferPreparation]!=='string')||(row.requestRecords!==undefined&&!Array.isArray(row.requestRecords)))throw new Error('Elementos do percurso de ofertas não recuperáveis; originais preservados.');
if(row.request!==undefined&&(!row.request||!Object.hasOwn(offerRequestLabels,row.request.state)||Object.entries(emptyOfferRequest()).some(([key])=>typeof row.request?.[key as keyof OfferRequest]!=='string')))throw new Error('Pedido de oferta não recuperável; decisão e originais conservados.');
}
}
return value;
}
export function offerPreparationBook(draft:Record<string,unknown>):OfferPreparationBook{return read(draft).offerPreparations?.[acquisitionScope(draft)]??{rows:[]};}
export function saveOfferPreparationBook(draft:Record<string,unknown>,book:OfferPreparationBook):string{
const previous=read(draft);const next={...previous,offerPreparations:{...previous.offerPreparations,[acquisitionScope(draft)]:book}};const encoded=JSON.stringify(next);read({...draft,modelo_a_snapshot:encoded});return encoded;
}
export function recordOfferPreparations(book:OfferPreparationBook):OfferPreparationBook{
if(!book.rows.length||new Set(book.rows.map(r=>r.id)).size!==book.rows.length)throw new Error('Indique rascunhos com identificadores distintos.');
return {...book,history:[...(book.history??[]),...(book.saved?[structuredClone(book.saved)]:[])],saved:{savedAt:new Date().toISOString(),rows:structuredClone(book.rows)}};
}
export type OfferReusable={key:string;label:string;operation:'acquisition'|'import';values:Partial<OfferPreparation>};
export function offerReusableData(draft:Record<string,unknown>):OfferReusable[]{
const purchases=acquisitionBook(draft).rows.map(row=>({key:'acquisition:'+row.id,label:'Aquisição: '+(row.description||row.documentRef||row.id),operation:'acquisition' as const,values:{description:row.description,period:row.period,currency:row.sourceCurrency,amount:row.net,documentRef:row.documentRef,documentDate:row.documentDate,counterparty:row.supplier}}));
const imports=importExemptionBook(draft).rows.filter(row=>!isImportService(row.treatment)).map(row=>({key:'import:'+row.id,label:'Importação: '+(row.description||row.documentRef||row.id),operation:'import' as const,values:{description:row.description,period:row.period,currency:row.currency,amount:row.declaredValue,documentRef:row.documentRef,documentDate:row.documentDate,counterparty:row.importer}}));
return [...purchases,...imports];
}
export function reuseOfferData(row:OfferPreparation,source:OfferReusable):OfferPreparation {
if(row.branch==='P085'&&source.operation==='import')throw new Error('P085 abrange aquisição; esta referência de importação conserva-se no seu percurso.');
const next={...row};
if(next.currency&&source.values.currency&&next.currency!==source.values.currency)throw new Error('Moeda da referência divergente; valores e edições conservados, sem conversão.');
// Only fill empty inputs. Deliberate edits and answers are never replaced.
if(!next.operation)next.operation=source.operation;
if(next.operation!==source.operation)throw new Error('A operação já escolhida diverge da origem; rascunho conservado.');
for(const [key,value] of Object.entries(source.values))if(!next[key as keyof OfferPreparation]&&typeof value==='string')Object.assign(next,{[key]:value});
return {...next,reusedFrom:{key:source.key,copiedAt:new Date().toISOString()}};
}
export function emptyOfferRequest():OfferRequest{return {state:'preparation',reference:'',presentedOn:'',decisionRef:'',decisionOn:'',goods:'',operation:'',periodFrom:'',periodTo:'',conditions:''};}
export function recordOfferRequest(row:OfferPreparation):OfferPreparation{
if(row.branch!=='P084')throw new Error('Os estados deste pedido pertencem ao percurso P084; emergência conservada no percurso próprio.');
const request=row.request??emptyOfferRequest();
const validPeriod=(value:string)=>{if(/^\d{4}-(0[1-9]|1[0-2])$/.test(value))return true;if(!/^\d{4}-\d{2}-\d{2}$/.test(value))return false;const d=new Date(value+'T00:00:00Z');return Number.isFinite(d.getTime())&&d.toISOString().slice(0,10)===value;};
const temporalScope=!!request.periodScope?.trim()||(validPeriod(request.periodFrom)&&validPeriod(request.periodTo)&&request.periodFrom.length===request.periodTo.length&&request.periodTo>=request.periodFrom);
if(['granted','denied'].includes(request.state)&&(!request.goods.trim()||(!['acquisition','import'].includes(request.operation)&&!request.operationScope?.trim())||!temporalScope||!request.conditions.trim()))throw new Error('Conserve o âmbito da decisão: bens, operação, período e condições. Pode usar datas, meses ou o âmbito temporal literal do documento, inclusive sem termo. Pode continuar a guardar o rascunho incompleto.');
return {...row,requestRecords:[...(row.requestRecords??[]),{recordedAt:new Date().toISOString(),request:structuredClone(request)}]};
}
export function offerScenarios(row:OfferPreparation):{normalVat:string|null;conditionalVat:string|null;conditionalReason:string;applied:false}{
const normalVat=row.normalVatSource?.trim()&&/^\d{1,15}(\.\d{1,6})?$/.test(row.normalVat??'')?row.normalVat!:null;
const result={normalVat,conditionalVat:null as string|null,conditionalReason:'Hipótese de isenção não assumida; benefício não aplicado.',applied:false as const};
if(row.conditionalAssumption!=='yes')return result;
const choices=row.branch==='P084'?[row.nationalInstitution,row.publicSocialInstitution,row.goodsSuitable,row.publicInterestUse]:[row.mitigation];
if(choices.includes('no'))return {...result,conditionalReason:'Condição material contrariada; este cenário de isenção não está demonstrado. Benefício não aplicado.'};
if(choices.some(value=>value!=='yes')||!row.description.trim()||!row.beneficiary.trim()||!row.purpose.trim()||!row.operation||!/^2026-(0[1-9]|1[0-2])$/.test(row.period)||row.currency!=='MZN'||(row.branch==='P085'&&(!row.disaster.trim()||!row.humanitarianPurpose?.trim())))return {...result,conditionalReason:'Pressupostos, contexto ou condições materiais por indicar; sem IVA zero presumido. Benefício não aplicado.'};
return {...result,conditionalVat:'0.00',conditionalReason:'Cenário condicionado à isenção: hipótese expressa de cumprimento das condições e aplicação do procedimento, cuja correspondência permanece pendente. Não é benefício concedido nem imposto aplicado; apresentar pedido não concede isenção.'};
}
export function offerPathReport(row:OfferPreparation):string {
const request=row.request??emptyOfferRequest(),scenario=offerScenarios(row);
const scope=(r:OfferRequest)=>`bens ${r.goods||'por indicar'}; operação ${r.operationScope||r.operation||'por indicar'}; período ${r.periodScope||`${r.periodFrom||'por indicar'} a ${r.periodTo||'por indicar'}`}; condições ${r.conditions||'por indicar'}; documento ${r.decisionRef||'por indicar'},${r.decisionOn||'data por indicar'}`;
return `${row.branch==='P084'?`Pedido ${offerRequestLabels[request.state]} (estado declarado, sem concessão pelo simulador); referência ${request.reference||'por indicar'}, apresentação ${request.presentedOn||'por indicar'}; âmbito em edição ${scope(request)}; ${(row.requestRecords??[]).map(record=>`estado registado ${offerRequestLabels[record.request.state]} em ${record.recordedAt}, ${scope(record.request)}`).join(' | ')||'sem estado/decisão registado'}; não estender decisão aos restantes bens, operações, períodos ou oportunidades; apresentar pedido não concede isenção`:`Emergência ${row.disaster||'por indicar'}; finalidade humanitária ${row.humanitarianPurpose||'por indicar'}; procedimento de emergência/doação por corresponder, sem aplicação automática`}; documentos disponíveis ${row.availableDocuments||row.documentRef||'por indicar'}; Cenário normal — IVA ${scenario.normalVat??'Indeterminado'} ${row.currency}, documento/pressuposto ${row.normalVatSource||'por indicar'}; Cenário condicionado à isenção — IVA ${scenario.conditionalVat??'Indeterminado'} ${row.currency}; ${scenario.conditionalReason}`;
}
export function offerPreparationReportRows(draft:Record<string,unknown>):Array<[string,string,string,string]>{
try{return offerPreparationBook(draft).rows.map(row=>['IVA mensal',`Rascunho de oferta ${row.branch} — ${row.id}`,`${row.description||'Bens por indicar'}; preparação, benefício não aplicado; ${row.amount||'Valor não informado'} ${row.currency}; ${row.period||'Período não informado'}`,`${offerPreparationSource} Oportunidade ${acquisitionScope(draft)}; operação ${row.operation||'por indicar'}; contraparte ${row.counterparty||'por indicar'}; documento ${row.documentRef||'por indicar'},${row.documentDate||'data por indicar'}; beneficiário ${row.beneficiary||'por indicar'}; finalidade ${row.purpose||'por indicar'}; ${row.branch==='P084'?`instituição nacional ${row.nationalInstitution||'por indicar'}, interesse público/relevantes fins sociais ${row.publicSocialInstitution||'por indicar'}, bens adequados ${row.goodsSuitable||'por indicar'}, utilização de interesse público ${row.publicInterestUse||'por indicar'}`:`calamidade ${row.disaster||'por indicar'}, natureza ${row.disasterKind||'por indicar'}, atenuação dos efeitos ${row.mitigation||'por indicar'}`}; fundamento ${row.evidence||'por indicar'}; origem reutilizada ${row.reusedFrom?.key||'entrada directa'}; ${offerPathReport(row)}; sem isenção automática ou dedução.`]);}
catch{return [['IVA mensal','Rascunhos de ofertas','Dados não recuperáveis','Originais preservados; sem substituição por zero.']];}
}
+37
View File
@@ -0,0 +1,37 @@
import type { OperationTreatment } from './iva-operations.ts';
export type SupplyCategory = '' | 'provisions' | 'beverages' | 'fuel' | 'cargo_products';
export const supplyCategories: Array<[Exclude<SupplyCategory, ''>, string]> = [
['provisions', 'Provisões de bordo, excepto bebidas — consumo exclusivo da tripulação e passageiros'],
['beverages', 'Bebidas como provisões de bordo — consumo exclusivo da tripulação e passageiros'],
['fuel', 'Combustíveis, carburantes, lubrificantes ou outros produtos para propulsão ou aparelhos de uso técnico a bordo'],
['cargo_products', 'Produtos acessórios para preparação, tratamento ou conservação das mercadorias transportadas a bordo'],
];
const source = 'CIVA republicado Lei 13/2016, BR156/10.º suplemento, art.13(1)(c/d/e/h),13(2–3), PDF12/p.1426(270);19(1)(b)(i), PDF15/p.1426(273). Lei22/2022 art.1, PDF3/p.2252(27), e Lei10/2025 art.1, PDF12–13/p.2180(12)–(13), não alteram13 e mantêm19(1)(b)(i). Âmbito2026/MZN; bebidas em c/d/h não têm isenção directa automática:13(2) prevê dedução ou restituição, sem aplicar20(1)(d) para esse efeito.';
const make = (id:string,label:string,letter:string,conditions:string[]):OperationTreatment => ({id,label,field:'05',rate:0,article:`CIVA arts.13(1)(${letter}),13(2–3),19(1)(b)(i)`,source,logicVersion:'onboard-supplies/1',conditions:[
'Transmissão de bens localizada em Moçambique, com territorialidade identificada; não importação nem serviço autónomo',
'Bens efectivamente postos a bordo do meio identificado; natureza e destino correspondem à categoria escolhida do artigo13(3), sustentados pelo documento ou pressuposto expresso da projecção',
...conditions,
]});
export const onboardSupplyTreatments:OperationTreatment[] = [
make('onboard_seagoing_ship','Abastecimento de embarcação de navegação marítima em alto mar','c',[
'Embarcação identificada que efectua navegação marítima em alto mar e assegura transporte remunerado de passageiros ou actividade comercial, industrial ou de pesca; utilização identificada, não qualquer barco de recreio',
]),
make('onboard_rescue_coastal_ship','Abastecimento de embarcação de salvamento, assistência marítima ou pesca costeira','d',[
'Embarcação identificada de salvamento, assistência marítima ou pesca costeira; actividade identificada, não presumida pelo nome do operador',
]),
make('onboard_departing_warship','Abastecimento de embarcação de guerra com destino estrangeiro','e',[
'Embarcação de guerra identificada que deixa o país com destino a porto ou ancoradouro situado no estrangeiro; saída e destino identificados, não simples utilização militar',
]),
make('onboard_international_aircraft','Abastecimento de avião de companhia principalmente internacional','h',[
'Avião identificado utilizado por companhia de navegação aérea que se dedica principalmente ao tráfego internacional nos termos de13(1)(g); companhia e utilização identificadas, não apenas um voo internacional isolado',
]),
];
export function isOnboardSupply(id:string):boolean { return onboardSupplyTreatments.some(rule=>rule.id===id); }
export function onboardSupplyIssue(id:string,category:unknown):string|null {
if(!isOnboardSupply(id))return null;
if(!supplyCategories.some(([value])=>value===category))return 'Identifique a natureza do abastecimento segundo o artigo13(3). Informação em falta não significa ausência de bebidas ou provisões; nenhum montante fiscal foi presumido.';
if(id==='onboard_rescue_coastal_ship'&&(category==='provisions'||category==='beverages'))return 'As provisões de bordo estão excluídas da isenção de13(1)(d), incluindo bebidas, nas embarcações de salvamento, assistência marítima e pesca costeira. Esta isenção não se aplica; o tratamento fiscal alternativo deve ser identificado, sem presumir taxa ou zero.';
if(category==='beverages'&&id!=='onboard_departing_warship')return 'Bebidas em13(1)(c/h):13(2) prevê isenção por dedução ou restituição, não isenção directa deste fornecimento; para esse efeito não se aplica20(1)(d). O montante liquidado e o procedimento aplicável não são determinados neste incremento: sem crédito, restituição, taxa ou zero automáticos. Conserve o preço e identifique o tratamento antes do apuramento.';
return null;
}
+276
View File
@@ -0,0 +1,276 @@
import { acquisitionScope, readAcquisitionStore } from './iva-acquisitions.ts';
import { fundraisingError, type FundraisingContext } from './iva-fundraising.ts';
import { pharmaAnnexEntry, pharmaAnnexReference, pharmaAnnexSource, pharmaAnnexVersion } from './iva-pharma-annex.ts';
import { annexIEntry, annexIReference, annexISource, annexIVersion } from './iva-annex-i.ts';
import { productionOptionCheck, productionOptionVersion, type ProductionTaxOption } from './iva-production-option.ts';
import { temporaryBenefits, temporaryBenefit, temporaryBenefitNotice, temporaryBenefitVersion } from './iva-temporary-benefits.ts';
import { directExportTreatments } from './iva-export-operations.ts';
import { exportBeneficiaryTreatments } from './iva-export-beneficiaries.ts';
import { specialRegimeTreatments, specialRegimeIssue, specialRegimeOptions, isSpecialRegime, type SpecialRegime } from './iva-special-regimes.ts';
import { internationalAssetTreatments } from './iva-international-assets.ts';
import { exportServiceTreatments, isExportService } from './iva-export-services.ts';
import { onboardSupplyTreatments, onboardSupplyIssue, supplyCategories, isOnboardSupply, type SupplyCategory } from './iva-onboard-supplies.ts';
import { monthlySalesFromDraft, readMonthlyIvaSettings } from './monthly-iva.ts';
import { addFractions, decimalFraction, fraction, fractionLabel, fractionPresentation, type FiscalFraction } from './fiscal-rational.ts';
export const operationVersion = 'iva-operations-l1/2';
// The accepted v2 full-catalogue key predates scoped keys. Freeze its members
// so later, independent catalogue additions cannot invalidate those snapshots.
const legacyV2TreatmentIds = ['general','private_health','private_education','private_training','personal_lessons','export_goods','housing_rent','public_health','public_education','public_training','foreign_operation','other'];
const source2022 = 'Lei22/2022, BR250, 2.º suplemento, PDF1–4 (2252(25)–(28)); arts.1/2/6; efeitos01/01/2023';
const source2016 = 'CIVA republicado Lei13/2016, BR156, 10.º suplemento, PDF9–15 (1426(267)–(273))';
const source2025 = 'Lei10/2025, BR248, suplemento1, PDF14–15 (2180(14)–(15)); arts.1/2/3/5; efeitos01/01/2026';
const healthGoodsSource = 'CIVA republicado Lei13/2016, PDF9, p.1426(267), art.9(1)(b–f); PDF15, p.1426(273), art.19(1); Lei22/2022 art.1, PDF1, p.2252(25), mantém9(1)(b–f). Âmbito técnico2026/MZN';
const internalOperation = 'Operação interna localizada em Moçambique; não é importação nem operação localizada no estrangeiro';
export const modeloA06Correspondence = 'Exemplar recebido:06 é base de operações isentas, com remissão18(1)(b); nessa lei18(1)(b) trata IVA de importações, enquanto19(1)(b) enumera operações com direito. O mesmo exemplar já tem05 para vendas isentas com direito. O formulário antigo da AT usa03 para a remissão e06 para existências. Não há correspondência unívoca nem instrução aplicável que separe05/06 no acervo conferido: não atribuir06 automaticamente a operações no estrangeiro ou importar instruções antigas por número.';
export type OperationTreatment = {id:string; label:string; field:string|null; rate:number|null; article:string; source:string; conditions:string[];logicVersion?:string};
const nonprofitConditions = [
'Não distribui nem disponibiliza lucros; os corpos gerentes não têm interesse directo ou indirecto nos resultados, por si ou interposta pessoa',
'Escrituração abrange todas as actividades e está à disposição dos serviços fiscais para comprovação',
'Preços homologados pela autoridade competente ou, quando não susceptíveis de homologação, inferiores aos de operações análogas das empresas comerciais sujeitas a imposto',
'Não entra em concorrência directa com sujeitos passivos do imposto',
];
function socialTreatment(id:string,label:string,article:string,conditions:string[],nonprofit:boolean):OperationTreatment {
return {id,label,field:'07',rate:0,article:`CIVA arts.9(2)(${article}),10(${nonprofit?'2':'1'}),19(1)`,source:'CIVA republicado Lei13/2016, PDF9, p.1426(267), art.9(2)(a/c/d); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26),10(1–2). Âmbito técnico2026/MZN',conditions:[internalOperation,...(nonprofit?nonprofitConditions:['Entidade pública: órgão ou instituição da Administração Pública que desempenha funções administrativas do Estado, nos termos da legislação aplicável']),...conditions]};
}
const culturalSource = 'CIVA republicado Lei13/2016, PDF9, p.1426(267), art.9(2)(e–g); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF1, p.2252(25), mantém9(2)(e–g), e PDF2, p.2252(26),10(1–2). Âmbito técnico2026/MZN';
const culturalTreatments:OperationTreatment[] = ([false,true] as const).flatMap(nonprofit=>{
const suffix=nonprofit?'nonprofit':'public',entity=nonprofit?'organismo sem finalidade lucrativa':'entidade pública';
const make=(id:string,label:string,article:string,conditions:string[]):OperationTreatment=>({...socialTreatment(id,label,article,conditions,nonprofit),source:culturalSource});
return [
make(`cultural_visits_${suffix}`,`Visitas culturais/naturais — ${entity}`,'e',['Visita, guiada ou não, a museu, galeria de arte, monumento, parque, perímetro florestal, jardim botânico/zoológico ou similar pertencente ao Estado, a entidade pública ou a entidade sem finalidade lucrativa','Serviço efectuado pela própria entidade, por intermédio dos seus próprios agentes; organismo sem finalidade lucrativa devidamente autorizado quando aplicável','Se houver bens, são transmissões estreitamente conexas com essa visita; não venda autónoma nem serviço de intermediário']),
make(`religious_personnel_${suffix}`,`Cedência de pessoal religiosa/filosófica — ${entity}`,'f',['Cedência de pessoal efectuada por instituição religiosa ou filosófica identificada','Destino identificado: actividade isenta nos termos do CIVA, com fundamento específico, ou assistência espiritual; não qualquer fornecimento de mão-de-obra']),
];
});
culturalTreatments.push({id:'statutory_membership',label:'Serviços colectivos aos associados por quota estatutária',field:'07',rate:0,article:'CIVA arts.9(2)(g),10(2),19(1)',source:culturalSource,conditions:[internalOperation,...nonprofitConditions,'Serviços efectuados no interesse colectivo dos próprios associados por organismo sem finalidade lucrativa','Objectivos de natureza política, sindical, religiosa, patriótica, filantrópica, recreativa, desportiva, cultural, cívica ou de representação de interesses económicos, identificados','A única contraprestação é uma quota fixada nos respectivos estatutos; não pagamentos adicionais por serviços individuais']});
const listedGoodsTreatments:OperationTreatment[] = [
['maize','Milho','Bem transmitido identificado como milho'],
['maize_flour','Farinha de milho','Bem transmitido identificado como farinha de milho'],
['rice','Arroz','Bem transmitido identificado como arroz'],
['bread','Pão','Bem transmitido identificado como pão'],
['iodised_salt','Sal iodado','Sal identificado como iodado; não qualquer sal'],
['infant_powdered_milk','Leite em pó para lactente até um ano','Leite em pó identificado como destinado a lactente até um ano; não qualquer leite ou alimento infantil'],
['wheat','Trigo','Bem transmitido identificado como trigo'],
['wheat_flour','Farinha de trigo','Bem transmitido identificado como farinha de trigo'],
['fresh_chilled_tomato','Tomate fresco ou refrigerado','Tomate identificado como fresco ou refrigerado; não alargar automaticamente a conserva ou preparação'],
['potato','Batata','Bem transmitido identificado como batata'],
['onion','Cebola','Bem transmitido identificado como cebola'],
['frozen_horse_mackerel','Carapau congelado','Peixe identificado como carapau congelado; não qualquer espécie ou estado de conservação'],
['lighting_kerosene','Petróleo de iluminação','Produto identificado como petróleo de iluminação; não qualquer combustível'],
['domestic_lpg','Gás doméstico — GPL','Produto identificado como gás doméstico GPL; não qualquer gás industrial'],
['jet_fuel','Jet fuel','Produto identificado como jet fuel; não qualquer combustível de transporte'],
['eligible_bicycles','Bicicletas comuns e de ferro até 4 velocidades','Produto identificado na enumeração legal «bicicletas comuns e de ferro até 4 velocidades», com características sustentadas; não qualquer veículo'],
['condoms','Preservativos','Bem transmitido identificado como preservativo'],
['insecticides','Insecticidas','Bem transmitido identificado como insecticida; não qualquer produto químico'],
].map(([id,label,condition])=>({id:`listed_${id}`,label:`Lista legal — ${label}`,field:'05',rate:0,article:'CIVA arts.9(10),19(1)(b)(v), redacção Lei22/2022',source:'Lei22/2022 art.1, PDF2, p.2252(26),9(10); CIVA republicado Lei13/2016, PDF15, p.1426(273),19(1)(b)(v). Âmbito técnico2026/MZN',conditions:[internalOperation,'Transmissão do próprio bem enumerado, identificado; não um serviço autónomo nem extensão por sector, marca ou destino',condition]}));
export const operationTreatments:OperationTreatment[] = [
...exportServiceTreatments,
...onboardSupplyTreatments,
...internationalAssetTreatments,
...directExportTreatments,
...exportBeneficiaryTreatments,
...specialRegimeTreatments,
...temporaryBenefits.map(item=>({id:item.id,label:`Benefício terminado31/12/2025 — ${item.label}`,field:null,rate:null,article:`CIVA art.${item.article}`,source:`${item.source} CIVA republicado Lei13/2016,9(14),PDF10/p.1426(268),apenas para9(13)(b/f). Âmbito:cessação nas operações internas2026/MZN;sem cálculo histórico.`,conditions:[],logicVersion:temporaryBenefitVersion})),
{id:'annexI_goods',label:'Equipamento, sementes e outros bens do Anexo I — artigo9(12)(h)',field:'07',rate:0,logicVersion:annexIVersion,article:'CIVA arts.9(12)(h),19(1); Lei22/2022 art.3(1)',source:`CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(h), e PDF15, p.1426(273),19(1); rectificação BR89/2017, PDF1, p.569; ${annexISource}. Âmbito técnico2026/MZN`,conditions:[internalOperation,'O bem transmitido corresponde ao código e à designação da posição escolhida no Anexo I; não basta a actividade agrícola, a marca ou uma indicação genérica de equipamento','Qualificadores expressos na posição conferidos e fundamentados, incluindo natureza, destino, certificação, peso, capacidade ou potência quando exigidos nessa linha; não acrescentar condições a linhas que não as exigem']},
{id:'pharma_manufacturing_inputs',label:'Bens do Anexo III para fabrico de medicamentos — estabelecimento integrado no SNS',field:'07',rate:0,logicVersion:pharmaAnnexVersion,article:'CIVA arts.9(1)(g),19(1); Lei22/2022 art.3(1)',source:`CIVA republicado Lei13/2016, PDF9, p.1426(267),9(1)(g), e PDF15, p.1426(273),19(1); rectificação BR89/2017, PDF1, p.569; ${pharmaAnnexSource}. Âmbito técnico2026/MZN`,conditions:[internalOperation,'Transmissão efectuada pelo próprio estabelecimento público ou privado identificado, integrado no Serviço Nacional de Saúde; não basta que o adquirente ou destino seja um hospital','Bens a utilizar como matérias-primas, produtos intermédios ou componentes para o fabrico de medicamentos, com utilização/fundamento identificados; não mera venda de produto acabado ou utilização genérica','Bem corresponde cumulativamente ao código e à designação da linha seleccionada no Anexo III; confirmar as especificações aplicáveis sem corrigir ou completar a pauta por suposição']},
...([false,true] as const).map(nonprofit=>({...socialTreatment(`fundraising_${nonprofit?'nonprofit':'public'}`,`Angariação ocasional de fundos — ${nonprofit?'organismo sem finalidade lucrativa':'entidade pública'}`,'h',['Actividade habitual isenta identificada:9(1)(a),9(2)(a/b/c/d/e/g) ou9(3)(a/b), com condições dessa isenção e fundamento identificados','Manifestação ocasional destinada à angariação de fundos em proveito exclusivo da entidade organizadora','Total anual declarado inclui esta manifestação e as realizadas fora deste dossier; não superior a oito no ano'],nonprofit),logicVersion:'fundraising/1',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(2)(h); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF1, p.2252(25),9(1–3), e PDF2, p.2252(26),10(1–2). Âmbito técnico2026/MZN'})),
...(['agriculture','forestry','livestock','fishing'] as const).flatMap((kind,index)=>{
const label=['Produção agrícola, avicultura e apicultura','Produção silvícola','Produção pecuária','Pesca'][index],letter=['a','b','c','d'][index];
const conditions=[internalOperation,'Operação no âmbito da própria produção identificada, utilizando os próprios recursos; não mera revenda/comércio','Se houver transformação, é acessória, pelo próprio produtor sobre produtos da sua produção, por meios geralmente utilizados nas respectivas explorações'];
const source=`CIVA republicado Lei13/2016, PDF10, p.1426(268),9(7)(${letter}); PDF11, p.1426(269),11; PDF15, p.1426(273),19(1)(b)(v); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(7). Âmbito técnico2026/MZN`;
const exempt:OperationTreatment={id:`production_${kind}`,label:`${label} — isenção`,field:kind==='agriculture'?'05':'07',rate:0,article:`CIVA arts.9(7)(${letter}),19(1)${kind==='agriculture'?'(b)(v)':',11'}`,source,conditions:[...conditions,...(kind==='agriculture'?[]:['Regime de isenção aplicável nesta operação: não existe opção de tributação eficaz do art.11 no período; fundamento/histórico identificado'])]};
return kind==='agriculture'?[exempt]:[exempt,{id:`production_${kind}_opted`,logicVersion:productionOptionVersion,label:`${label} — opção de tributação eficaz`,field:'01',rate:16,article:`CIVA arts.9(7)(${letter}),11,15(1),17(1),19(1)(a),34`,source:`${source}; ${source2022}; ${source2025}`,conditions:[...conditions,'Opção declarada à Direcção da Área Fiscal competente, na declaração adequada; se opção no início, consta da declaração de início da actividade','Operação no regime normal por opção eficaz; contraprestação completa, sem base especial do art.15(2) ou outro tratamento próprio']}];
}),
...listedGoodsTreatments,
{...socialTreatment('public_security','Bens e serviços ligados à segurança por entidade pública','b',['Transmissão de bens ou prestação ligada à segurança identificada e efectuada pela própria entidade pública; não presumir segurança social nem extensão a prestador privado contratado'],false),source:'CIVA republicado Lei13/2016, PDF9, p.1426(267),9(2)(b); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF1, p.2252(25), mantém9(2)(b); PDF2, p.2252(26),10(1). Âmbito técnico2026/MZN'},
{id:'official_military_supplies',label:'Fornecimentos oficiais militares/paramilitares elegíveis',field:'07',rate:0,article:'CIVA arts.9(11),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(11); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(11). Âmbito técnico2026/MZN',conditions:[internalOperation,'Bem/serviço no fornecimento de material de guerra e de aquartelamento ou fardamento militar/paramilitar, identificado','Destino de utilização oficial das Forças de Defesa e Segurança Nacional; actividade efectuada exclusivamente para aqueles serviços','Estabelecimento reconhecido pelo Ministério competente, com reconhecimento identificado; não basta o cliente ser militar']},
{id:'sisa_subject_operation',label:'Operação sujeita a SISA, ainda que dela isenta',field:'07',rate:0,article:'CIVA arts.9(12)(d),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(d); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(12)(d). Âmbito técnico2026/MZN',conditions:[internalOperation,'Operação e fundamento de sujeição a SISA identificados, ainda que exista isenção desse imposto; não qualquer operação imobiliária','Esta linha corresponde à operação sujeita a SISA, não a locação, mediação ou outro serviço autónomo; este bloco não calcula SISA']},
{id:'exempt_activity_asset_sale',label:'Alienação de bem exclusivamente afecto a actividade isenta',field:'07',rate:0,article:'CIVA arts.9(12)(e),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(e); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(12)(e). Âmbito técnico2026/MZN',conditions:[internalOperation,'Transmissão de bem identificado, com histórico de afectação disponível','Bem afecto exclusivamente a sector de actividade isento; não mera afectação parcial ou existência de alguma operação isenta na entidade']},
{id:'no_deduction_right_asset_sale',label:'Alienação de bem sem direito anterior à dedução',field:'07',rate:0,article:'CIVA arts.9(12)(e),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(e); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(12)(e). Âmbito técnico2026/MZN',conditions:[internalOperation,'Transmissão de bem identificado, com histórico fiscal da aquisição/afectação disponível','Bem não foi objecto de direito à dedução, com fundamento identificado; não basta não ter exercido um direito existente nem desconhecer o histórico']},
{id:'excluded_deduction_asset_sale',label:'Alienação de bem adquirido com exclusão do artigo 20',field:'07',rate:0,article:'CIVA arts.9(12)(e),20,19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(e); PDF15, p.1426(273),19(1)/20(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(12)(e), e PDF3, p.2252(27),20(2–3). Âmbito técnico2026/MZN',conditions:[internalOperation,'Transmissão de bem identificado e aquisição correspondente documentada ou expressamente pressuposta','Aquisição feita com exclusão do direito à dedução nos termos do artigo20: identificar número/alínea aplicável e conferir as excepções do20(3); não assumir exclusão apenas por falta de documento ou dedução não exercida']},
{id:'special_tax_games',label:'Jogos e operações sujeitos ao imposto especial sobre o jogo',field:'07',rate:0,article:'CIVA arts.9(8),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(8); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(8). Âmbito técnico2026/MZN',conditions:[internalOperation,'Exploração/prática de jogo de fortuna ou azar ou diversão social nos termos da legislação própria, respectiva comissão, título de aposta ou bilhete de acesso/ingresso à área de jogo, identificado','Esta operação está sujeita ao imposto especial sobre o jogo, com fundamento identificado; não qualquer entretenimento ou serviço acessório autónomo; o imposto especial não é calculado neste bloco']},
{id:'stamped_values',label:'Transmissão de valores selados',field:'07',rate:0,article:'CIVA arts.9(12)(a),19(1), redacção Lei22/2022',source:'Lei22/2022 art.1, PDF2, p.2252(26),9(12)(a); CIVA republicado Lei13/2016, PDF15, p.1426(273),19(1). Âmbito técnico2026/MZN',conditions:[internalOperation,'Bem transmitido identificado como valor selado, com natureza sustentada pelo documento ou pressuposto da operação','A linha corresponde à transmissão do valor selado; comissão de venda ou serviço autónomo não é abrangido automaticamente por esta opção']},
{id:'public_passenger_transport',label:'Serviço de transporte público de passageiros',field:'07',rate:0,article:'CIVA arts.9(12)(j),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(j); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(12)(j). Âmbito técnico2026/MZN',conditions:[internalOperation,'Serviço identificado como transporte público de passageiros, com natureza da prestação sustentada; não inferido apenas da natureza pública do prestador','A linha corresponde ao transporte de passageiros; não transporte de mercadorias, aluguer autónomo de veículo ou outro serviço acessório sem enquadramento próprio']},
{id:'industrial_feed',label:'Rações de produção industrial para animais elegíveis',field:'05',rate:0,article:'CIVA arts.9(12)(f),19(1)(b)(v)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(f); PDF15, p.1426(273),19(1)(b)(v); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(12)(f). Âmbito técnico2026/MZN',conditions:[internalOperation,'Transmissão de bens resultantes de actividade industrial de produção de rações, identificada; não presumir isenção de qualquer alimento para animais','Rações destinadas à alimentação de animais de reprodução e abate para consumo humano, com destino identificado']},
{id:'industrial_feed_inputs',label:'Insumos enumerados para produção industrial de rações',field:'07',rate:0,article:'CIVA arts.9(12)(g),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(g); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(12)(g). Âmbito técnico2026/MZN',conditions:[internalOperation,'Bem identificado na enumeração: grão de soja, bagaço de soja, soja integral, farinha de peixe, farinha de carne, pós de osso, monofosfato de cálcio, lisina ou metionina','Utilização como matéria-prima na actividade industrial de produção de rações destinadas à alimentação de animais de reprodução e abate para consumo humano, identificada']},
{id:'veterinary_goods',label:'Agulhas, seringas e medicamentos de uso veterinário',field:'07',rate:0,article:'CIVA arts.9(12)(i),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(12)(i); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(12)(i). Âmbito técnico2026/MZN',conditions:[internalOperation,'Transmissão de agulha, seringa ou medicamento identificado; não qualquer equipamento ou serviço veterinário','Uso veterinário identificado para os bens da operação']},
{id:'agricultural_services',label:'Serviços agrícolas de canais, regadio, drenagem e pulverização',field:'07',rate:0,article:'CIVA arts.9(15),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(15); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(15). Âmbito técnico2026/MZN',conditions:[internalOperation,'Serviço identificado: abertura de canais, ceifa, drenagem, fornecimento de água para irrigação, limpeza de valas de drenagem ou pulverização da terra','Serviço efectuado no âmbito da actividade agrícola, com afectação identificada; não qualquer obra, limpeza ou fornecimento de água']},
{id:'author_rights',label:'Direitos de autor pelo autor, herdeiro ou legatário',field:'07',rate:0,article:'CIVA arts.9(9)(a),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(9)(a); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(9). Âmbito técnico2026/MZN',conditions:[internalOperation,'Operação identificada como transmissão de direitos de autor ou autorização para utilização de obra intelectual','Efectuada pelo próprio autor, seu herdeiro ou legatário, com qualidade identificada; não presumir isenção de revenda/intermediação por terceiro']},
{id:'cultural_publications',label:'Jornais, revistas e livros de natureza elegível',field:'07',rate:0,article:'CIVA arts.9(9)(b),19(1)',source:'CIVA republicado Lei13/2016, PDF10, p.1426(268),9(9)(b); PDF15, p.1426(273),19(1); Lei22/2022 art.1, PDF2, p.2252(26), mantém9(9). Âmbito técnico2026/MZN',conditions:[internalOperation,'Transmissão de jornal, revista ou livro identificado; não qualquer material escolar, serviço editorial ou fornecimento autónomo','Natureza cultural, educativa, técnica ou recreativa da publicação identificada e sustentada; não inferida apenas do nome do fornecedor ou sector']},
...culturalTreatments,
{id:'general',label:'Operação interna geral',field:'01',rate:16,article:'CIVA arts.1,6,15(1),17(1–2); art.34 (Lei10/2025)',source:`${source2016}; ${source2022}; ${source2025}`,conditions:['Operação localizada e tributável em Moçambique, no regime normal','Contraprestação completa; sem base especial do art.15(2), isenção ou taxa reduzida']},
{id:'private_health',label:'Serviços médicos e sanitários privados',field:'03',rate:5,article:'CIVA arts.15(10),17-A(a)',source:source2022,conditions:['Serviço médico/sanitário ou operação estreitamente conexa','Prestador hospitalar privado, clínica, dispensário ou similar']},
{id:'private_education',label:'Ensino privado reconhecido',field:'03',rate:5,article:'CIVA arts.15(10),17-A(b)',source:source2022,conditions:['Ensino ou bens/serviços conexos prestados pelo estabelecimento','Estabelecimento privado integrado no Sistema Nacional de Ensino e reconhecido pelo Ministério competente']},
{id:'private_training',label:'Formação profissional privada',field:'03',rate:5,article:'CIVA arts.15(10),17-A(c)',source:source2022,conditions:['Formação profissional ou fornecimentos conexos pelo prestador, não venda autónoma de materiais','Prestador privado']},
{id:'personal_lessons',label:'Lições ministradas a título pessoal',field:'03',rate:5,article:'CIVA arts.15(10),17-A(d)',source:source2022,conditions:['Lições ministradas a título pessoal','Matérias de ensino escolar ou superior']},
{id:'export_goods',label:'Exportação de bens pelo vendedor',field:'05',rate:0,article:'CIVA arts.13(1)(a),19(1)(b)(i)',source:source2016,conditions:['Bens expedidos/transportados para o estrangeiro pelo vendedor ou terceiro por sua conta','Saída documentada, ou pressuposto expresso da projecção; não mera venda a cliente estrangeiro']},
{id:'housing_rent',label:'Locação de imóvel para habitação',field:'07',rate:0,article:'CIVA art.9(5), redacção Lei22/2022; art.19(1)',source:source2022,conditions:['Locação de imóvel para fins de habitação','Não é hospedagem nem locação comercial/industrial ou serviço autónomo']},
{id:'public_health',label:'Serviços médicos e sanitários públicos',field:'07',rate:0,article:'CIVA arts.9(1)(a),10(1),19(1)',source:source2022,conditions:['Serviço médico/sanitário ou operação estreitamente conexa','Estabelecimento hospitalar público, dispensário ou similar; natureza pública confirmada']},
{id:'public_education',label:'Ensino público reconhecido',field:'07',rate:0,article:'CIVA arts.9(3)(a),10(1),19(1)',source:source2022,conditions:['Ensino ou fornecimentos conexos pelo estabelecimento','Estabelecimento público integrado no Sistema Nacional de Ensino e reconhecido pelo Ministério competente']},
{id:'public_training',label:'Formação profissional pública',field:'07',rate:0,article:'CIVA arts.9(3)(b),10(1),19(1)',source:source2022,conditions:['Formação profissional ou fornecimentos conexos pelo prestador','Prestador público']},
{id:'financial_stamp',label:'Operação bancária/financeira sujeita a Selo',field:'07',rate:0,article:'CIVA art.9(4), redacção Lei22/2022; art.19(1)',source:`${source2022}; ${source2016}`,conditions:['A operação é bancária ou financeira, não um serviço acessório autónomo','Sujeição a Imposto do Selo identificada para esta operação; não depende de calcular o Selo neste bloco']},
{id:'insurance_stamp',label:'Seguro/resseguro ou mediação conexa sujeitos a Selo',field:'07',rate:0,article:'CIVA art.9(6), redacção Lei22/2022; art.19(1)',source:`${source2022}; ${source2016}`,conditions:['Seguro/resseguro ou serviço conexo efectuado por corrector ou outro mediador de seguros','Sujeição a Imposto do Selo identificada para esta operação']},
{id:'public_waste',label:'Remoção de lixo pública ou por entidade contratada',field:'07',rate:0,article:'CIVA art.9(12)(b), redacção Lei22/2022; art.19(1)',source:`${source2022}; ${source2016}`,conditions:['Prestação de serviço de remoção de lixo, não qualquer serviço de limpeza','Efectuada por entidade pública ou por entidade por ela contratada, com relação identificada']},
{id:'public_funeral',label:'Serviços funerários/cremação públicos e bens acessórios',field:'07',rate:0,article:'CIVA art.9(12)(c), redacção Lei22/2022; art.19(1)',source:`${source2022}; ${source2016}`,conditions:['Serviço funerário/cremação ou transmissão de bem acessório a esse serviço','Efectuado por entidade pública; não aplicar automaticamente a funerária privada']},
{id:'health_assistive',label:'Bens de compensação da deficiência, próteses e braille',field:'07',rate:0,article:'CIVA arts.9(1)(b),19(1)',source:healthGoodsSource,conditions:[internalOperation,'Bem identificado na enumeração: cadeira de rodas/veículo semelhante, aparelho/máquina/impressora braille, prótese ou material de compensação','Destino documentado conforme a categoria: deficiência, substituição de membro/órgão, fractura, pessoa invisual ou correcção da audição; não qualquer equipamento médico']},
{id:'human_materials',label:'Órgãos, sangue e leite humanos',field:'07',rate:0,article:'CIVA arts.9(1)(c),19(1)',source:healthGoodsSource,conditions:[internalOperation,'Transmissão de órgãos, sangue ou leite de origem humana, identificada; não produto de origem animal nem serviço autónomo']},
{id:'patient_transport',label:'Transporte de doentes/feridos por organismo autorizado',field:'07',rate:0,article:'CIVA arts.9(1)(d),19(1)',source:healthGoodsSource,conditions:[internalOperation,'Transporte de doente ou ferido em ambulância ou outro veículo apropriado','Organismo que efectua o transporte devidamente autorizado, com autorização identificada; não basta o destino hospitalar']},
{id:'mosquito_nets',label:'Transmissão de redes mosquiteiras',field:'07',rate:0,article:'CIVA arts.9(1)(e),19(1)',source:healthGoodsSource,conditions:[internalOperation,'Bem identificado como rede mosquiteira; não extensão automática a outros produtos de prevenção']},
{id:'medicines',label:'Medicamentos e artigos terapêuticos/profilácticos elegíveis',field:'07',rate:0,article:'CIVA arts.9(1)(f),19(1)',source:healthGoodsSource,conditions:[internalOperation,'Medicamento/especialidade farmacêutica ou produto farmacêutico exclusivamente terapêutico/profiláctico; ou pasta, gaze, algodão hidrófilo, tira/penso adesivo ou análogo','Finalidade elegível identificada: terapêutica/profiláctica nos produtos farmacêuticos; higiénica, medicinal ou cirúrgica nos artigos enumerados, mesmo impregnados/revestidos; não qualquer produto vendido por farmácia']},
...([false,true] as const).flatMap(nonprofit=>{
const suffix=nonprofit?'nonprofit':'public',entity=nonprofit?'organismo sem finalidade lucrativa':'entidade pública';
return [
socialTreatment(`social_assistance_${suffix}`,`Assistência social — ${entity}`,'a',['Prestação de assistência social ou transmissão de bens estreitamente conexa, identificada','Fins e objecto da entidade reconhecidos pelas autoridades competentes, com fundamento identificado'],nonprofit),
socialTreatment(`social_care_${suffix}`,`Equipamentos sociais/creches/lares — ${entity}`,'c',['Prestação ou bem estreitamente conexo no exercício da actividade habitual de creche, jardim de infância, centro de tempos livres, lar ou outro equipamento social enumerado no art.9(2)(c)','Equipamento pertencente à entidade e fins/objecto reconhecidos pelas autoridades competentes; não qualquer alojamento ou empresa de cuidados'],nonprofit),
socialTreatment(`activity_facilities_${suffix}`,`Prática artística/desportiva/recreativa — ${entity}`,'d',['Serviço efectuado pela própria entidade que explora o estabelecimento ou instalação','Instalação destinada à prática artística, desportiva, recreativa ou de educação física e serviço prestado a quem a pratica; não isenção automática de bilhetes para espectadores'],nonprofit),
];
}),
{id:'foreign_operation',label:'Operação no estrangeiro — analisar territorialidade',field:null,rate:null,article:'CIVA art.6: localização por natureza da operação; art.19(1)(b)(ii) não determina sozinho a caixa06 do formulário',source:source2016,conditions:[]},
{id:'other',label:'Outra operação / enquadramento ainda desconhecido',field:null,rate:null,article:'Fundamento específico ainda necessário; não presumir taxa ou isenção',source:'Sem fonte operacional determinada para esta linha',conditions:[]},
];
export type SalesOperation = {id:string;period:string;description:string;establishment:string;amount:string;basis:''|'net'|'included';treatment:string;confirmed:number[];evidence:string;sourceAmount:string|null;sourcePeriod:string;sourceCurrency:string;source:string;taxOption?:ProductionTaxOption;fundraiser?:FundraisingContext;pharmaAnnexItem?:string;annexIItem?:string;annexIOnly?:boolean;temporaryBenefitOrigin?:string;relatedExport?:{id:string;description:string;treatment:string};supplyCategory?:SupplyCategory;specialRegime?:SpecialRegime; splitSource?:{id:string;amount:string|null;period:string;currency:string;basis:string}};
export type SalesBook = {currency:string;rows:SalesOperation[];periods:Array<{period:string;complete:boolean}>; result?:SalesResult; history?:SalesResult[]};
export type SalesLineResult = {id:string;field:string|null;net:string|null;vat:string|null;gross:string|null;rate:number|null;status:'calculated'|'exempt'|'indeterminate';reason:string;article:string;source:string;exact?:{net:FiscalFraction;vat:FiscalFraction;gross:FiscalFraction}};
export type SalesResult = {version:string;revision:number;calculatedAt:string;opportunity:string;location:string;currency:string;key:string;inputs:SalesOperation[];rows:SalesLineResult[];periods:Array<{period:string;fields:Record<string,string|null>;exactFields?:Record<string,FiscalFraction|null>;reasons:string[]}>;rounding:string};
type Store = ReturnType<typeof readAcquisitionStore> & {salesOperations?:Record<string,SalesBook>};
export function newSalesOperation(id:string,period:string,currency:string):SalesOperation {return {id,period,description:'',establishment:'',amount:'',basis:'',treatment:'other',confirmed:[],evidence:'',sourceAmount:null,sourcePeriod:period,sourceCurrency:currency,source:'Introdução directa; projecção, não declaração submetida'};}
export function continueAnnexIOperation(row:SalesOperation,targetId:string):SalesOperation {
const entry=annexIEntry(row.annexIItem),target=operationTreatments.find(t=>t.id===targetId);
if(row.treatment!=='annexI_goods'||!entry?.relatedTreatments?.includes(targetId)||!target)throw new Error('O tratamento de continuidade não corresponde à posição escolhida; dados conservados.');
return {...row,treatment:targetId,confirmed:[],annexIOnly:false,source:`${row.source}; continuidade expressamente escolhida a partir de ${annexIReference(entry)} para ${target.label}; rever condições do tratamento, sem alterar montante/moeda/contexto`};
}
export function continueTemporaryOperation(row:SalesOperation,targetId:string):SalesOperation {
const benefit=temporaryBenefit(row.treatment),target=operationTreatments.find(item=>item.id===targetId);
if(!benefit||!target||temporaryBenefit(targetId))throw new Error('Escolha um enquadramento actual distinto do benefício terminado; dados conservados.');
return {...row,treatment:targetId,confirmed:[],temporaryBenefitOrigin:benefit.id,source:`${row.source}; continuidade expressamente escolhida de ${benefit.id}/${benefit.branch}, CIVA art.${benefit.article}, termo31/12/2025, ${temporaryBenefitVersion}, para ${target.label}; ${benefit.source}; montante/moeda/período conservados; rever condições, sem cálculo automático`};
}
export function referenceExportOperation(row:SalesOperation,related:SalesOperation):SalesOperation {
if(!isExportService(row.treatment)||row.id===related.id)throw new Error('Escolha outra operação para referenciar neste serviço; dados conservados.');
return {...row,relatedExport:{id:related.id,description:related.description,treatment:related.treatment},confirmed:[]};
}
export function salesBook(draft:Record<string,unknown>):SalesBook {
const store=readAcquisitionStore(draft.modelo_a_snapshot) as Store;
if(store.salesOperations!==undefined&&(!store.salesOperations||typeof store.salesOperations!=='object'||Array.isArray(store.salesOperations)))throw new Error('Formato das operações IVA não recuperável; dados preservados, sem substituição.');
const book=store.salesOperations?.[acquisitionScope(draft)];
if(!book)return {currency:String(draft.currency??''),rows:[],periods:[]};
if(typeof book.currency!=='string'||!Array.isArray(book.rows)||!Array.isArray(book.periods)||book.rows.some(r=>!r||Object.keys(newSalesOperation('','','')).some(k=>k==='confirmed'?!Array.isArray(r.confirmed)||r.confirmed.some(c=>!Number.isInteger(c)):k==='sourceAmount'?!(r.sourceAmount===null||typeof r.sourceAmount==='string'):typeof r[k as keyof SalesOperation]!=='string'))||book.periods.some(p=>!p||!/^\d{4}-\d{2}$/.test(p.period)||typeof p.complete!=='boolean'))throw new Error('Operações IVA não recuperáveis; os dados originais foram preservados.');
return book;
}
export function saveSalesBook(draft:Record<string,unknown>,book:SalesBook):string {const store=readAcquisitionStore(draft.modelo_a_snapshot) as Store;return JSON.stringify({...store,salesOperations:{...store.salesOperations,[acquisitionScope(draft)]:book}});}
export function reuseSales(draft:Record<string,unknown>,book:SalesBook):SalesBook {
const source=monthlySalesFromDraft(draft),settings=readMonthlyIvaSettings(String(draft.monthly_iva_settings??''));
if(!/^2026-(0[1-9]|1[0-2])$/.test(settings.start)||Number(settings.start.slice(5))+source.amounts.length>13)throw new Error('Defina o período da projecção dentro de2026 antes de reutilizar vendas.');
if(book.currency!==draft.currency)throw new Error('Moeda da origem divergente; valores preservados, sem conversão.');
const rows=[...book.rows],periods=[...book.periods];
source.amounts.forEach((value,index)=>{const period=`2026-${String(Number(settings.start.slice(5))+index).padStart(2,'0')}`;
if(!periods.some(p=>p.period===period))periods.push({period,complete:false});
if(!rows.some(r=>r.sourcePeriod===period&&r.source!=='Introdução directa; projecção, não declaração submetida'))rows.push({...newSalesOperation(`sales-${period}`,period,book.currency),description:`Vendas do plano — ${period}`,amount:value??'',basis:settings.basis==='unknown'?'':settings.basis,sourceAmount:value,source:source.source,evidence:source.source});
});return {...book,rows,periods};
}
export function splitSales(book:SalesBook,id:string,newId:string):SalesBook {
const row=book.rows.find(r=>r.id===id);if(!row)throw new Error('Operação de origem não encontrada.');
if(row.sourceAmount===null&&!row.splitSource)throw new Error('Reparta uma venda reutilizada com valor de origem determinado; para entradas directas acrescente as operações em falta.');
const source=row.splitSource??{id:row.id,amount:row.sourceAmount??row.amount,period:row.period,currency:row.sourceCurrency,basis:row.basis};
if(!source.basis||source.amount===null||amount(source.amount)===null)throw new Error('Determine o valor e a representação do preço antes de repartir a origem.');
const first={...row,amount:'',sourceAmount:null,splitSource:source,source:`Repartição explícita de ${source.id}: ${source.amount} ${source.currency}; ${row.source}`};
return {...book,rows:[...book.rows.map(r=>r.id===id?first:r),{...first,id:newId,description:'Parcela adicional da mesma venda',treatment:'other',confirmed:[],evidence:''}],periods:book.periods.map(p=>p.period===row.period?{...p,complete:false}:p)};
}
export function recordSales(draft:Record<string,unknown>,book:SalesBook):SalesBook {return {...book,history:book.result?[...(book.history??[]),book.result]:book.history,result:calculateSales(draft,book)};}
function amount(raw:unknown):bigint|null {if(typeof raw!=='string'||!/^\d{1,15}(\.\d{1,6})?$/.test(raw.trim()))return null;const [n,d='']=raw.trim().split('.');return BigInt(n)*1000000n+BigInt(d.padEnd(6,'0'));}
function money(n:bigint):string {return `${n/1000000n}.${(n%1000000n).toString().padStart(6,'0').replace(/0+$/,'').padEnd(2,'0')}`;}
function sum(values:Array<string|null>):string|null {const parsed=values.map(amount);return parsed.some(v=>v===null)?null:money((parsed as bigint[]).reduce((a,b)=>a+b,0n));}
export function evaluateSalesOperation(row:SalesOperation,currency:string):SalesLineResult {
const rule=operationTreatments.find(r=>r.id===row.treatment),n=amount(row.amount);
const annex=row.treatment==='pharma_manufacturing_inputs'?pharmaAnnexEntry(row.pharmaAnnexItem):undefined;
const annexI=row.treatment==='annexI_goods'?annexIEntry(row.annexIItem):undefined;
const result:SalesLineResult={id:row.id,field:rule?.field??null,net:null,vat:null,gross:null,rate:rule?.rate??null,status:'indeterminate',reason:'',article:rule?.article??'Tratamento desconhecido',source:(rule?.source??'Fonte em falta')+(annex?`; ${pharmaAnnexReference(annex)}`:'')+(annexI?`; ${annexIReference(annexI)}`:'')};
const stop=(reason:string)=>({...result,reason});
if(currency!=='MZN'||row.sourceCurrency!==currency)return stop('Moeda fora de MZN ou divergente da origem; sem conversão silenciosa.');
if(!/^2026-(0[1-9]|1[0-2])$/.test(row.period))return stop('Período fora da cobertura de2026; sem cálculo histórico presumido.');
if(temporaryBenefit(row.treatment))return stop(temporaryBenefitNotice(row.treatment,row.period));
const regimeIssue=specialRegimeIssue(row.treatment,row.specialRegime);
if(regimeIssue)return {...stop(regimeIssue),field:null,rate:null};
const supplyIssue=onboardSupplyIssue(row.treatment,row.supplyCategory);
if(supplyIssue)return {...stop(supplyIssue),field:null,rate:null};
if(!rule||rule.rate===null||!rule.field)return stop('Operação não calculada: delimite incidência, territorialidade e fundamento desta linha. A remissão do campo06 não constitui uma regra de classificação de todas as operações no estrangeiro.');
if(n===null||!['net','included'].includes(row.basis))return stop('Montante ou indicação de IVA incluído/sem IVA em falta; vazio não significa zero.');
if(!row.description.trim()||!row.establishment.trim())return stop('Indique a operação e o estabelecimento a que pertence; não inferidos da localização do investimento.');
if(rule.conditions.some((_,i)=>!row.confirmed.includes(i))||!row.evidence.trim())return stop('Condições da operação ou fundamento/pressuposto em falta; o sector não prova o tratamento fiscal.');
if(row.sourceAmount!==null&&amount(row.sourceAmount)!==n)return stop('Divergência com o valor reutilizado: conserve a origem e prepare a repartição explicitamente; não substituir silenciosamente.');
if(row.treatment==='pharma_manufacturing_inputs'&&!annex)return stop('Escolha a linha aplicável do Anexo III/2022, com código e designação; um código livre, desconhecido ou de outro anexo não comprova a isenção.');
if(row.treatment==='annexI_goods'){
if(!annexI)return stop('Escolha a posição aplicável do Anexo I/2022, com código, designação e qualificadores; não presumir isenção por sector ou código livre.');
if(annexI.relatedRequired)return stop('Esta designação tem tratamento específico já disponível no artigo9(10), com direito à dedução nas condições do19(1)(b)(v). Escolha a continuidade indicada e confirme as suas condições; não atribuir07 apenas pela presença no Anexo I.');
if(annexI.relatedTreatments?.length&&row.annexIOnly!==true)return stop('A natureza ou o destino deste bem pode corresponder a outro tratamento já disponível. Escolha a continuidade aplicável ou fundamente expressamente por que a operação pertence apenas a9(12)(h); desconhecido não significa ausência desse enquadramento.');
}
if(row.treatment==='fundraising_public'||row.treatment==='fundraising_nonprofit'){const error=fundraisingError(row.fundraiser,row.treatment==='fundraising_nonprofit');if(error)return stop(error);}
const option=row.treatment.startsWith('production_')&&row.treatment.endsWith('_opted')?productionOptionCheck(row.taxOption,row.period):{};
if(option.error)return stop(option.error);
if(row.basis==='included'&&rule.rate===5){
const exact={net:fraction(n*20n,21000000n),vat:fraction(n,21000000n),gross:fraction(n,1000000n)};
return {...result,net:fractionPresentation(exact.net).decimal,vat:fractionPresentation(exact.vat).decimal,gross:money(n),exact,status:'calculated',reason:'Base e IVA conservados como fracções exactas (preço×20/21 e preço/21). Decimal a6casas é apresentação técnica, metade para cima; não é regra de arredondamento da declaração nem imposto final a pagar.'};
}
let net=n,vat=0n;
if(rule.rate===16&&row.basis==='included') {net=((n*100n+58000000n)/116000000n)*1000000n;vat=n-net;if(vat<0n)return stop('Arredondamento à unidade produz IVA negativo para este montante; reveja a linha e a documentação.');}
else vat=(n*BigInt(rule.rate)+50n)/100n;
return {...result,net:money(net),vat:money(vat),gross:money(row.basis==='included'?n:net+vat),status:rule.rate===0?'exempt':'calculated',reason:(rule.rate===0?(rule.field==='05'?'Isenção com direito à dedução nas condições legais; não é taxa zero nem dedução automática de compras.':'Isenção sem direito à dedução para esta operação; não é isenção geral da entidade.'):'IVA da operação projectada; não é imposto final a pagar nem declaração submetida.')+(option.summary?' '+option.summary:'')};
}
function key(draft:Record<string,unknown>,book:SalesBook,catalog=operationTreatments.filter(t=>book.rows.some(r=>r.treatment===t.id))):string {return JSON.stringify([operationVersion,catalog,acquisitionScope(draft),draft.currency,draft.province_id,draft.district_id,draft.business_plan_snapshot,draft.cashflow_snapshot,draft.monthly_iva_settings,book.currency,book.rows,book.periods]);}
export function salesCurrent(draft:Record<string,unknown>,book:SalesBook):boolean {return !!book.result&&book.result.version===operationVersion&&book.result.opportunity===acquisitionScope(draft)&&(book.result.key===key(draft,book)||book.result.key===key(draft,book,operationTreatments.filter(t=>legacyV2TreatmentIds.includes(t.id))));}
export function calculateSales(draft:Record<string,unknown>,book:SalesBook,now=new Date().toISOString()):SalesResult {
if(book.currency!=='MZN'||draft.currency!==book.currency)throw new Error('Confirme a moeda original MZN; sem conversão ou reinterpretação.');
if(new Set(book.rows.map(r=>r.id)).size!==book.rows.length||new Set(book.periods.map(p=>p.period)).size!==book.periods.length)throw new Error('Identificadores/períodos duplicados; corrija sem somar em duplicado.');
if(!book.periods.length||book.rows.some(r=>!book.periods.some(p=>p.period===r.period))||book.periods.some(p=>!/^2026-(0[1-9]|1[0-2])$/.test(p.period)))throw new Error('Cada operação deve pertencer a um período válido de2026 incluído na cobertura.');
let live:ReturnType<typeof monthlySalesFromDraft>|null=null;try {live=monthlySalesFromDraft(draft);}catch{ /* Explicitly block stale imported values below. */ }
const start=readMonthlyIvaSettings(String(draft.monthly_iva_settings??'')).start;
const rows=book.rows.map(r=>{
const result=evaluateSalesOperation(r,book.currency);
if(isExportService(r.treatment)&&r.relatedExport!==undefined){
const ref=r.relatedExport,target=ref&&typeof ref==='object'?book.rows.find(item=>item.id===ref.id&&item.id!==r.id):undefined;
if(!target||ref.description!==target.description||ref.treatment!==target.treatment)return {...result,net:null,vat:null,gross:null,status:'indeterminate' as const,reason:'A operação relacionada foi removida ou alterada. Actualize a referência e reveja as condições; preço do serviço e resultado anterior conservados.'};
}
const fundraiser=r.fundraiser;
if(r.treatment.startsWith('fundraising_')&&fundraiser&&book.rows.some(v=>v.id!==r.id&&v.treatment.startsWith('fundraising_')&&v.period.slice(0,4)===r.period.slice(0,4)&&String(v.fundraiser?.entityReference??'').trim()===String(fundraiser.entityReference??'').trim()&&v.fundraiser?.annualEvents!==fundraiser.annualEvents))return {...result,net:null,vat:null,gross:null,status:'indeterminate' as const,reason:'Totais anuais divergentes para a mesma entidade; resolva a divergência sem substituir dados de outra linha.'};
if(r.splitSource) {
const source=r.splitSource,group=book.rows.filter(v=>v.splitSource?.id===source.id),index=Number(source.period.slice(5))-Number(start.slice(5));
if(group.some(v=>v.period!==source.period||v.basis!==source.basis||v.sourceCurrency!==source.currency||JSON.stringify(v.splitSource)!==JSON.stringify(source))||sum(group.map(v=>v.amount))!==(amount(source.amount)===null?null:money(amount(source.amount)!))||!live||live.amounts[index]!==source.amount)return {...result,exact:undefined,net:null,vat:null,gross:null,status:'indeterminate' as const,reason:'Repartição não reconciliada com o total, período, moeda e representação do preço da origem; nenhuma parcela foi presumida.'};
}
if(r.sourceAmount!==null||r.source.startsWith('Vendas por produto')||r.source.startsWith('Receita mensal')) {
const index=Number(r.sourcePeriod.slice(5))-Number(start.slice(5));
if(!live||!/^2026-/.test(start)||r.sourcePeriod!==r.period||live.amounts[index]!==r.sourceAmount)return {...result,exact:undefined,net:null,vat:null,gross:null,status:'indeterminate' as const,reason:'A origem/período das vendas mudou. Reveja e confirme a nova origem; o resultado anterior foi conservado.'};
}
return result;
});
const periods=book.periods.map(p=>{
const matching=book.rows.map((r,i)=>({input:r,result:rows[i]})).filter(r=>r.input.period===p.period),fields:Record<string,string|null>={},exactFields:Record<string,FiscalFraction|null>={},reasons=matching.filter(r=>r.result.status==='indeterminate').map(r=>`${r.input.description||r.input.id}: ${r.result.reason}`);
const known=p.complete&&!matching.some(r=>r.result.status==='indeterminate');
for(const f of ['01','03','05','07'])fields[f]=known?sum(matching.filter(r=>r.result.field===f).map(r=>r.result.net)):null;
for(const [f,base] of [['02','01'],['04','03']])fields[f]=known?sum(matching.filter(r=>r.result.field===base).map(r=>r.result.vat)):null;
fields['06']=known?'0.00':null;
if(matching.some(r=>r.result.exact)) {
for(const [f,base,part] of [['01','01','net'],['02','01','vat'],['03','03','net'],['04','03','vat'],['05','05','net'],['06','06','net'],['07','07','net']] as const) {
exactFields[f]=known?addFractions(matching.filter(r=>r.result.field===base).map(r=>r.result.exact?.[part]??decimalFraction(r.result[part]!))):null;
fields[f]=exactFields[f]?fractionPresentation(exactFields[f]!).decimal:null;
}
}
if(!p.complete)reasons.push('Confirme que todas as operações do período foram incluídas; uma lista vazia só é zero após essa confirmação.');
return {period:p.period,fields,...(Object.keys(exactFields).length?{exactFields}:{}),reasons};
});
const labels=draft.selection_labels as Record<string,unknown>|undefined;
return {version:operationVersion,revision:(book.result?.revision??0)+1,calculatedAt:now,opportunity:acquisitionScope(draft),location:['province_id','district_id'].filter(k=>draft[k]).map(k=>String(labels?.[k]??draft[k])).join(' / '),currency:book.currency,key:key(draft,book),inputs:structuredClone(book.rows),rows,periods,rounding:'Base líquida: precisão técnica6decimais, metade para cima, sem arredondamento final da declaração. Preço geral com IVA: base=preço×100/116, arredondada à unidade mais próxima (metade para cima), IVA=preço−base, CIVA art.34 redacção Lei10/2025. Preço incluído5%: fracções exactas preço×20/21 e preço/21 conservadas; decimal a6casas/metade para cima apenas na apresentação. A regra declarativa não é presumida.'};
}
export function salesReportRows(draft:Record<string,unknown>):Array<[string,string,string,string]> {
try {const book=salesBook(draft),r=book.result;if(!r)return [];
const context=`${r.currency}; oportunidade ${r.opportunity}; ${r.location||'localização não indicada'}; ${r.version}; revisão ${r.revision}; ${r.calculatedAt}`;
const out:Array<[string,string,string,string]>=[['IVA mensal','Operações IVA L1',salesCurrent(draft,book)?'Resultado correspondente às entradas':'Histórico desactualizado; não aplicar à projecção actual',context],['IVA mensal','Método e limites L1',r.rounding,'Sem apuramento integral, dedução automática ou submissão AT']];
for(const row of r.inputs){const value=r.rows.find(v=>v.id===row.id)!;out.push(['IVA mensal',`${row.period} — ${row.description} — ${row.establishment}`,`Declarado ${row.amount||'em falta'} ${row.sourceCurrency}; ${row.basis==='included'?'IVA incluído':row.basis==='net'?'sem IVA':'base desconhecida'}; líquido ${value.net??'Indeterminado'}; IVA ${value.vat??'Indeterminado'}; bruto ${value.gross??'Indeterminado'}; campo ${value.field??'não determinado'}; ${value.reason}`,`${context}; ${value.article}; ${value.source}; origem: ${row.source}; pressuposto/documento: ${row.evidence||'em falta'}; condições confirmadas: ${row.confirmed.join(',')||'nenhuma'}`]);}
for(const row of r.inputs.filter(v=>v.fundraiser))out.push(['IVA mensal',`Manifestação ocasional — ${row.description}`,`Entidade ${row.fundraiser!.entityReference}; ano ${row.period.slice(0,4)}; total anual declarado ${row.fundraiser!.annualEvents}; manifestação ${row.fundraiser!.eventNumber}; actividade ${row.fundraiser!.activity}`,`${context}; dados declarados para a entidade, incluindo manifestações fora deste dossier; não é contagem automática das vendas.`]);
for(const row of r.inputs.filter(v=>isExportService(v.treatment)&&v.relatedExport))out.push(['IVA mensal',`Operação relacionada — ${row.description}`,`${row.relatedExport!.description}; ID ${row.relatedExport!.id}; tratamento ${row.relatedExport!.treatment}`,`${context}; referência escolhida expressamente nesta oportunidade,sem copiar valor para preço do serviço nem provar automaticamente o enquadramento subjacente`]);
for(const row of r.inputs.filter(v=>isOnboardSupply(v.treatment)))out.push(['IVA mensal',`Natureza do abastecimento — ${row.description}`,supplyCategories.find(([value])=>value===row.supplyCategory)?.[1]??'Por identificar',`${context}; CIVA13(2–3); natureza conservada no cálculo/relatório, sem aplicar dedução ou restituição automaticamente`]);
for(const row of r.inputs.filter(v=>isSpecialRegime(v.treatment)))out.push(['IVA mensal',`Regime especial — ${row.description}`,specialRegimeOptions.find(([value])=>value===row.specialRegime)?.[1]??'Por identificar',`${context}; CIVA14(1)(b/c/d),19(1)(b)(iv); regime declarado/documentado ou pressuposto expresso da projecção; não certifica admissão ou permanência, nem liquida importação ou saída do regime`]);
for(const value of r.rows.filter(v=>v.exact))out.push(['IVA mensal',`Precisão exacta — ${value.id}`,`Líquido ${fractionLabel(value.exact!.net)} MZN; IVA ${fractionLabel(value.exact!.vat)} MZN; bruto ${fractionLabel(value.exact!.gross)} MZN`,`${context}; apresentação decimal a6casas, aproximação quando a fracção não termina; não aplicar à declaração sem a sua regra própria.`]);
for(const p of r.periods){out.push(['IVA mensal',`Operações L1 — ${p.period}`,Object.entries(p.fields).map(([f,v])=>`${f}: ${v??'Indeterminado'}`).join('; '),`${context}; ${p.reasons.join(' ')}`]);
if(p.exactFields)out.push(['IVA mensal',`Precisão exacta do período — ${p.period}`,Object.entries(p.exactFields).map(([f,v])=>`${f}: ${v?fractionLabel(v):'Indeterminado'}`).join('; '),`${context}; totais em fracções MZN, calculados antes da apresentação decimal, sem regra declarativa presumida.`]);
}return out;
}catch{return [['IVA mensal','Operações IVA L1','Não foi possível recuperar as operações guardadas','Originais preservados; sem substituição por zero']];}
}
+180
View File
@@ -0,0 +1,180 @@
// Transcription of the accepted official exemplar, not a tariff classification service.
// Keep duplicated codes and printed incomplete positions distinct; never infer missing digits.
export const pharmaAnnexVersion='annexIII-lei22-2022/1';
export const pharmaAnnexSource='Lei22/2022, art.3(1), AnexoIII, PDF12–16, p.2252(36)–(40); efeitos01/01/2023';
export const pharmaAnnexPdfSha256='ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53';
export type PharmaAnnexEntry={id:string;code:string;label:string;pdfPage:number;lastPdfPage:number};
export const pharmaAnnexEntries:PharmaAnnexEntry[]=[
{"id":"annexIII-2022-001","code":"1108.11.00","label":"- Amido de trigo","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-002","code":"1108.12.00","label":"- Amido de milho","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-003","code":"1108.19.00","label":"- Outros amidos e féculas","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-004","code":"1301.20.00","label":"- Goma – arábica","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-005","code":"1301.90.00","label":"- Goma – laca; Gomas, resinas, gomas – resinas e oleorresinas (bálsamo, por exemplo), naturais - Outras","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-006","code":"1505.00.00","label":"- Lanolina","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-007","code":"1521.90.00","label":"- Ceras; cera de abelhas; cera de carnaúba; espermacete; ozocerite","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-008","code":"1701.99.00","label":"- Sacarose","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-009","code":"1702.11.00","label":"- Lactose","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-010","code":"1702.19.00","label":"- Lactose mono-hidratada (500 mg)","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-011","code":"1702.30.00","label":"- Glucose","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-012","code":"1702.50.00","label":"- Futose padrão","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-013","code":"2207.10.10","label":"- Álcool etílico para uso hospitalares","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-014","code":"2507.00.00","label":"- Caulino","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-015","code":"2709.00.00","label":"- Óleo Mineral betuminoso","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-016","code":"2806.10.00","label":"- Ácido Clorídrico","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-017","code":"2807.00.00","label":"- Ácido Sulfúrico","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-018","code":"2808.00.00","label":"- Ácido Nítrico","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-019","code":"2809.10.00","label":"- Pentóxido de difósforo","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-020","code":"2809.20.00","label":"- Ácido forfórico","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-021","code":"2810.00.00","label":"- Ácido Bórico","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-022","code":"2811.22.00","label":"- Dióxido de silício","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-023","code":"2811.29.00","label":"- Ácidos inorgânicos e outros componentes oxigenados inorgânicos dos elementos não metálicos - Outros","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-024","code":"2812.90.00","label":"- Halogenetos e oxialogenetos dos elementos não – metálicos - Outros","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-025","code":"2813.90.00","label":"- Sulfuretos dos elementos não-metalicos; trissulfureto de fósforo comercial - Outros","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-026","code":"2815.20.00","label":"- Hidróxido de Potássio","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-027","code":"2815.30.00","label":"- Peróxidos de Sódio ou de Potássio","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-028","code":"2819.90.00","label":"- Óxidos e hidróxidos de crónico - Outros","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-029","code":"2823.00.00","label":"- Óxido de Titânio","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-030","code":"2825.90.00","label":"- Hidrazina e hidroxilamina, e seus sais orgânicos - Outros","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-031","code":"2827.20.00","label":"- Cloreto de cálcio","pdfPage":12,"lastPdfPage":12},
{"id":"annexIII-2022-032","code":"2827.39.00","label":"- Cloretos, oxicloretos e hidroxicloretos, brometos e oxibrometos iodetos e oxiodetos - Outros","pdfPage":12,"lastPdfPage":13},
{"id":"annexIII-2022-033","code":"2827.60.00","label":"- Iodetos e oxidetos","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-034","code":"2829.19.00","label":"- Cloratos e precloratos; bromatos e perbromatos; iodatos e periodatos --Outros","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-035","code":"2829.90.00","label":"- Cloratos e precloratos; bromatos e perbromatos; iodatos e peridatos - Outros","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-036","code":"2832.30.00","label":"- Tiossulfatos","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-037","code":"2833.29.00","label":"- Sulfatos de sódio - Outros","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-038","code":"2834.29.00","label":"- Nitritos, nitratos - Outros","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-039","code":"2835.22.00","label":"- Fosfato sódico monobásico, fosfato sódico dibásico","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-040","code":"2835.24.00","label":"- Fosfato de Potássio Monobásico, fosfato de potássio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-041","code":"2835.25.00","label":"- Hidrogeno-ortofosfato de cálcio (fosfato dicalcico)","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-042","code":"2835.29.00","label":"- Outros fosfatos","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-043","code":"2836.40.00","label":"- Carbonato de Potássio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-044","code":"2836.50.00","label":"-Carbonato de Cálcio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-045","code":"2836.99.00","label":"- Carbonatos; Peroxocarbonatos (percarbonatos); carbonato de amónio comercial que contenha carbonato de amónio - Outros","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-046","code":"2837.19.00","label":"- Solução de Cianeto de Potássio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-047","code":"2839.90.00","label":"- Trissilicato de magnésio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-048","code":"2841.50.00","label":"- Cromato de Potássio AR","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-049","code":"2841.61.00","label":"- Permanganato de Potássio; Permanganato de Potássio AR","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-050","code":"2841.70.00","label":"- Solução de Mobibdato de Amónio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-051","code":"2841.80.00","label":"- Tungstato de sódio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-052","code":"2841.90.00","label":"- Piroantimoniato de Potássio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-053","code":"2842.90.00","label":"- Outros sais dos ácidos ou peróxidos inorgânicos","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-054","code":"2843.21.00","label":"- Nitrato de Prata","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-055","code":"2843.29.00","label":"- Cianeto de Potássio; Citrato Cúprico Alcalino TS","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-056","code":"2847.00.00","label":"- Peróxido de Hidrogénio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-057","code":"2901.29.00","label":"- Hidrocarbonetos acíclicos - Outros","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-058","code":"2902.11.00","label":"- Ciclohexano","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-059","code":"2902.20.00","label":"- Benzeno","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-060","code":"2902.30.00","label":"- Tolueno","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-061","code":"2902.90.00","label":"- Cloreto de Mitileno; Diclorometano;","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-062","code":"2903.13.00","label":"- Clorofórmio","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-063","code":"2903.14.00","label":"- Tetracloreto de Carbono","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-064","code":"2903.22.00","label":"- Tricloetileno","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-065","code":"2904.91.00","label":"- Hidrocarbonetos cíclicos - Outros","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-066","code":"2905.11.00","label":"- Metanol; Metanol HPLC; Metanol P.A","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-067","code":"2905.12.00","label":"- Álcool Isopropílico; Álcool n-Propílico","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-068","code":"2905.13.00","label":"- Etanol; clorobutanol","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-069","code":"2905.14.00","label":"- Álcool estearílico; álcool cetílico; álcool palmítico","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-070","code":"2905.19.00","label":"- Propranolol Cloridrato (200mg)","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-071","code":"2905.31.00","label":"- Etinoglicol","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-072","code":"2905.32.00","label":"- Propilenoglicol","pdfPage":13,"lastPdfPage":13},
{"id":"annexIII-2022-073","code":"2905.43.00","label":"- Manita ou manitol","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-074","code":"2905.44.00","label":"- D-glucitol (sorbitol)","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-075","code":"2905.45.00","label":"- Glicerina","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-076","code":"2905.49.00","label":"- Alcoois acíclicos e seus derivados halogenados, sulfonados, nitrados ou nitrosados - Outros","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-077","code":"2906.13.00","label":"- Esteróis e inositois","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-078","code":"2906.21.00","label":"- Álcool benzílico","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-079","code":"2907.15.00","label":"- 1 – Naftol Ts; 2 -naftol","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-080","code":"2907.19.00","label":"Fénois; fenóis-alcoois - Outros","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-081","code":"2907.29.00","label":"Pelifenois; fénois-alcoois - Outros","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-082","code":"2909.19.00","label":"- Etér Etílico","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-083","code":"2909.49.00","label":"- Outros Eteres","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-084","code":"2912.19.00","label":"- Solução de Formaldeido","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-085","code":"2912.19.00","label":"- Acetaldeíco; Anisaldeído;p-dimetilaminobenzaldeído","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-086","code":"2914.11.00","label":"- Acetona","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-087","code":"2914.13.00","label":"- 4-metilpentan-2-ol","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-088","code":"2915.21.00","label":"- Ácido Acético glacial","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-089","code":"2915.24.00","label":"- Anidrido Acético","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-090","code":"2915.39.00","label":"- Acidos monocarboxilicos acíclicos saturados e seus anidridos, halogenetos, peróxidos e peroxiácidos, seus derivados halogenados, sulfanados, nitrados ou nitrosados - Outros","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-091","code":"2915.50.00","label":"- Ácido propionico, seus sais e seus ésteres","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-092","code":"2915.70.00","label":"- Ácidos palmíticos, ácido esteárico, seus sais e seus ésteres","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-093","code":"2915.90.00","label":"- Ácidos monocarboxilicos acíclicos saturados e seus anidridos, halogenetos, peróxidos e perxiácidos; seus derivados halogenados, sulfanados, nitrados ou nitrosados - Outros","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-094","code":"2916.15.00","label":"- Ácido oleico, linoléico, seus sais e seus ésteres","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-095","code":"2916.31.00","label":"- Ácido benzóico sais e seus ésteres","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-096","code":"2916.32.00","label":"- Cloreto de benzoílo","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-097","code":"2916.39.00","label":"- Benzoato de sódio","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-098","code":"2917.11.00","label":"- Ácido oxálico; Oxalato de amónia AR","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-099","code":"2917.12.00","label":"- Ácido adípico","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-100","code":"2918.11.00","label":"- Ácido láctico, seus sais e seus ésteres","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-101","code":"2918.12.00","label":"- Ácido Tartárico","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-102","code":"2918.14.00","label":"- Ácido Cítrico","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-103","code":"2918.15.00","label":"- Sais e éstres do ácido cítrico: Citrato de sódio","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-104","code":"2918.16.00","label":"- Ácido Glucónico","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-105","code":"2918.19.00","label":"- Tartarato de sódio, ésteres propílico, octílico e dodecílico do ácido gálico","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-106","code":"2918.99.00","label":"- Captopril (200 mg); Captopril","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-107","code":"2921.59.00","label":"- Dietilamina","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-108","code":"2922.12.00","label":"- Dietilamina","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-109","code":"2922.15.00","label":"- Trietanolamina e seus sais","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-110","code":"2922.29.00","label":"- Cloridrato de procaína","pdfPage":14,"lastPdfPage":14},
{"id":"annexIII-2022-111","code":"2922.49.00","label":"- Compostos aminados de funções oxigenadas - Outros","pdfPage":14,"lastPdfPage":15},
{"id":"annexIII-2022-112","code":"2923.90.00","label":"- Sais e Hidróxido de Amónio quatenários - Outros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-113","code":"2924.29.00","label":"- Compostos de função carboxiamida; compostos de funçãoamida do ácido carbónico - Outros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-114","code":"2925.11.00","label":"- Sacarina sódica e seus sais","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-115","code":"2925.19.00","label":"- o – Tolina","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-116","code":"2926.10.00","label":"- Acrilonitrila","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-117","code":"2930.90.00","label":"- Tiocompostos orgânicos - Outros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-118","code":"2932.11.00","label":"- Tetrahidrofurano","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-119","code":"2932.99.00","label":"- Compostos heterocíclicos exclusivamente de heteroátomos de oxigénio - Outros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-120","code":"2933.31.00","label":"- Piridina e seus sais","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-121","code":"2933.39.00","label":"Compostos hetrocíclicos exclusivamente de heteroatomos de azoto - Outros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-122","code":"2933.91.00","label":"- Diazepam; Diazepam padrão; Composto Relacionado A de Diazepam; Composto relacionado B de Diazepam; Nordazepam padrão; Haloperidol (200 mg); Haloperido Composto Relacionado A (10 mg); Haloperidol Composto Relacionado B (10mg)","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-123","code":"2935.","label":"- Sulfonamidas","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-124","code":"2936.24.00","label":"- Ácido Fólico (500 mg) (Vitamina M ou Vitamina Bc); Ácido Fólico (500 mg) Composto relacionado A","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-125","code":"2936.27.00","label":"- Ácido ascórbico, ésteres de ácido ascórbico","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-126","code":"2936.28.00","label":"- Tocoferóis","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-127","code":"2936.29.00","label":"- Niacinamida","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-128","code":"2937.21.00","label":"- Prednison padrão","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-129","code":"2937.23.00","label":"- Progesterona 20 mg","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-130","code":"2939.30.00","label":"- Cafeina e seus sais","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-131","code":"2940.00.00","label":"- Açúcares quimicamente puros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-132","code":"2941.10.00","label":"- Penicilinas e seus derivados","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-133","code":"2941.30.00","label":"- Tetraclinas e seus derivados","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-134","code":"2941.90.00","label":"- Antibióticos - Outros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-135","code":"2942.00.00","label":"- Compostos orgânicos","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-136","code":"3204.11.00","label":"- Corantes dispersos e preparações à base desses corantes","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-137","code":"3206.19.00","label":"- Outras matérias corantes - Outros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-138","code":"3404.90.00","label":"- Cera microcristalina","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-139","code":"3503.00.00","label":"- Gelatina","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-140","code":"3505.10.00","label":"- Amidoglicolato de sódio (glicolato de amido sódico); Goma de amido TS; derivados de amido","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-141","code":"3701.99.00","label":"- Filmes, folhas e laminados: filmes de plástico; filmes de celulose regenerada; folhas ou lâminas de alumínio; folhas ou lâminas de alumínio (laminas ou revestidas com uma camada plástica)","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-142","code":"3901.90.00","label":"- Polietileno ( de baixa, média e alta densidade)","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-143","code":"3904.90.00","label":"- Cloresto de polivinilo (PVP) (com ou sem plastificante)","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-144","code":"3906.90.00","label":"- Polímero acrílico em forma primária - Outros","pdfPage":15,"lastPdfPage":15},
{"id":"annexIII-2022-145","code":"3911.90.00","label":"- Resinas sintéticas","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-146","code":"3912.31.00","label":"- Carboximetilcelulose e seus sais","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-147","code":"3912.90.00","label":"- Celulose e seus derivados - Outros","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-148","code":"3923.30.20","label":"- Embalagens para acondicionamento de medicamentos e produtos","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-149","code":"3926.90.90","label":"- Barricas plásticas, paletes de plástico","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-150","code":"4014.90.00","label":"- Artigos de higiene ou farmácia de borracha vulcanizada não endurecida - Outras","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-151","code":"4821.10.00","label":"- Etiquetas impressas (aprovação, reprovado, quarentena)","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-152","code":"5906.10.00","label":"- Fita gomada","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-153","code":"7010.10.00","label":"- Frascos de vidro, ampolas","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-154","code":"7017.90.00","label":"- Artefactos de vidro para laboratório, higiene e farmácia, mesmo graduados ou calibrados - Outros","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-155","code":"7310.10.00","label":"- Barricas metálicas","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-156","code":"7313.00.00","label":"- Arame farpado de ferro ou aço; Arames ou tiras retorcidos, mesmoi farpado de ferro ou aço, do tipo utinlizado em cercas","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-157","code":"7604.29.00","label":"- Placas de alumínio, ou ligas de alumínio","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-158","code":"7607.19.00","label":"- Placas de alumínio; filmes para fabrico de envelopes, blisters e strips","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-159","code":"7612.90.00","label":"- Recipientes para armazenamento e transporte de líquido","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-160","code":"7616.91.00","label":"- Paletes de alumínio","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-161","code":"8311.90.00","label":"- Outros fios, varetas, tubos, chapas e artefactos semelhantes de metais comuns","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-162","code":"8414.59.00","label":"- Câmaras de fluxo laminar","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-163","code":"8418.50.10","label":"-Refrigeradores, congeladores para usos nos laboratórios para fins medicinais","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-164","code":"8419.89.00","label":"- Estufa de leito fluidizado","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-165","code":"8456.90.00","label":"- Máquina para moldagem de supositórios","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-166","code":"8480.20.00","label":"- Placas de fundo para moldes","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-167","code":"9016.00.00","label":"- Balanças sensíveis e pesos iguais ou inferiores a 5 cg","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-168","code":"9018.39.00","label":"- Sistemas para bolsas de Injectáveis","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-169","code":"9025.19.00","label":"- Outros Termómetros","pdfPage":16,"lastPdfPage":16},
{"id":"annexIII-2022-170","code":"9025.90.00","label":"- Partes e acessórios de instrumentos de medição","pdfPage":16,"lastPdfPage":16}
];
export function pharmaAnnexEntry(id:unknown):PharmaAnnexEntry|undefined {return typeof id==='string'?pharmaAnnexEntries.find(entry=>entry.id===id):undefined;}
export function pharmaAnnexReference(entry:PharmaAnnexEntry):string {return `AnexoIII/2022: ${entry.id}; código ${entry.code}; ${entry.label}; PDF${entry.pdfPage}${entry.lastPdfPage===entry.pdfPage?'':`–${entry.lastPdfPage}`}; ${pharmaAnnexVersion}`;}
+36
View File
@@ -0,0 +1,36 @@
export type ProductionTaxOption = {mode:''|'annual'|'startup';declarationDate:string;startupDate:string;returnStatus:''|'none'|'declared';returnDeclarationDate:string;operationDate:string;origin?:{rowId:string;description:string;establishment:string}};
export const productionOptionVersion='production-option/2';
// Civil Code 279(c), read with 296: the term ends at 24:00 on this date.
// A missing anniversary day is clamped within the same month, never rolled to March.
export function productionMinimumTermEnd(effective:string):string {
const year=Number(effective.slice(0,4))+5,month=Number(effective.slice(5,7)),day=Number(effective.slice(8,10));
const leap=year%4===0&&(year%100!==0||year%400===0);
const lastDay=[31,leap?29:28,31,30,31,30,31,31,30,31,30,31][month-1];
return `${String(year).padStart(4,'0')}-${String(month).padStart(2,'0')}-${String(Math.min(day,lastDay)).padStart(2,'0')}`;
}
export const productionReturnEffective=(declarationDate:string):string=>String(Number(declarationDate.slice(0,4))+1).padStart(4,'0')+'-01-01';
export const emptyProductionTaxOption = ():ProductionTaxOption=>({mode:'',declarationDate:'',startupDate:'',returnStatus:'',returnDeclarationDate:'',operationDate:''});
export function productionOptionCheck(option:ProductionTaxOption|undefined,period:string):{error?:string;summary?:string} {
const valid=(value:unknown):value is string=>typeof value==='string'&&/^\d{4}-\d{2}-\d{2}$/.test(value)&&Number(value.slice(0,4))>=1&&Number.isFinite(new Date(value+'T00:00:00Z').valueOf())&&new Date(value+'T00:00:00Z').toISOString().slice(0,10)===value;
if(!option||!['annual','startup'].includes(option.mode)||!valid(option.declarationDate)||!valid(option.operationDate))return {error:'Indique o tipo/data da declaração de opção e a data da operação; não se presume renúncia eficaz.'};
if(option.operationDate.slice(0,7)!==period)return {error:'A data da operação deve pertencer ao período desta linha; não repartir montantes automaticamente.'};
let effective=String(Number(option.declarationDate.slice(0,4))+1).padStart(4,'0')+'-01-01';
if(option.mode==='startup'){
if(!valid(option.startupDate)||option.declarationDate>option.startupDate)return {error:'Na opção constante da declaração de início, indique a data de início e uma declaração que não lhe seja posterior.'};
effective=option.startupDate;
}
if(option.operationDate<effective)return {error:`Opção ainda sem efeitos nesta operação; início de efeitos ${effective}.`};
if(!['none','declared'].includes(option.returnStatus))return {error:'Indique expressamente se existe declaração de regresso à isenção; informação desconhecida não significa ausência de declaração.'};
if(option.returnStatus==='none'&&option.returnDeclarationDate)return {error:'Foi indicada ausência de declaração de regresso, mas existe uma data guardada; resolva a divergência explicitamente.'};
let end='';
if(option.returnStatus==='declared'){
if(!valid(option.returnDeclarationDate))return {error:'Data da declaração de regresso à isenção em falta ou inválida; não presumir uma data.'};
const anniversary=productionMinimumTermEnd(effective);
if(option.returnDeclarationDate<option.declarationDate)return {error:'A declaração de regresso antecede a declaração de opção; resolva a divergência do histórico.'};
if(option.returnDeclarationDate>anniversary)return {error:`A declaração de regresso indicada é posterior ao termo às 24 horas de ${anniversary}; o CIVA, art.11(3), exige entrega antes de expirar o prazo. Não presumir efeitos para esta declaração tardia.`};
end=productionReturnEffective(option.returnDeclarationDate);
if(end<=anniversary)return {error:`O regresso não pode produzir efeitos antes de terminado o prazo mínimo, às 24 horas de ${anniversary}.`};
if(option.operationDate>=end)return {error:`Opção já cessou na data desta operação; regresso à isenção com efeitos ${end}. Reveja o tratamento.`};
}
return {summary:`Art.11 (${productionOptionVersion}): declaração ${option.declarationDate} (${option.mode==='startup'?'opção no início da actividade':'opção anual'}); efeitos ${effective}; termo mínimo às 24 horas de ${productionMinimumTermEnd(effective)} (Código Civil, arts.279.º,c), e296.º); operação ${option.operationDate}; ${end?`declaração de regresso ${option.returnDeclarationDate}, efeitos ${end} (CIVA, art.11(3)); o termo do prazo não antecipa estes efeitos`:'ausência de declaração de regresso expressamente indicada; tributação continua, sem caducidade automática ao fim de cinco anos'}.${option.origin?` Opção reutilizada de ${option.origin.description} (${option.origin.rowId}), estabelecimento ${option.origin.establishment}; escolha confirmada nesta linha.`:''}`};
}

Some files were not shown because too many files have changed in this diff Show More