Compare commits
152
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70b4a640ee | ||
|
|
0460c85330 | ||
|
|
9f053ac9d3 | ||
|
|
6234d34392 | ||
|
|
92a7418cb6 | ||
|
|
76be72c38c | ||
|
|
3bcd98e78e | ||
|
|
9600880169 | ||
|
|
df7cb7fa47 | ||
|
|
287f2f8321 | ||
|
|
4672789f2b | ||
|
|
15894f4b04 | ||
|
|
e62b7dfdc2 | ||
|
|
9bd2e062f4 | ||
|
|
948621a65c | ||
|
|
50463ca716 | ||
|
|
4193056bdd | ||
|
|
20bfeb4f71 | ||
|
|
1dda6ea258 | ||
|
|
0a80f1c457 | ||
|
|
eb9294ef42 | ||
|
|
2359a88dba | ||
|
|
69b6c49a60 | ||
|
|
163e090ea5 | ||
|
|
9b26217dec | ||
|
|
ebf5e53c3c | ||
|
|
9783c54b2c | ||
|
|
0f9f7e3409 | ||
|
|
78c9f4a356 | ||
|
|
7996c35933 | ||
|
|
29e708ba2d | ||
|
|
f9fb04f947 | ||
|
|
77d1290258 | ||
|
|
946fc08906 | ||
|
|
7ecf9ec79a | ||
|
|
536559d651 | ||
|
|
c1314cdf90 | ||
|
|
ff8848d32d | ||
|
|
1565aa4ffb | ||
|
|
4e4bf6b859 | ||
|
|
5ec2f198a3 | ||
|
|
e32690799f | ||
|
|
2d889a211b | ||
|
|
50fdd97916 | ||
|
|
9842dcbb0e | ||
|
|
e384418ecc | ||
|
|
0eb37ef59b | ||
|
|
2ed62165b7 | ||
|
|
d46b794ab2 | ||
|
|
d65d3f5c4e | ||
|
|
8e5565d5e0 | ||
|
|
72e56f7ae5 | ||
|
|
4cebd61765 | ||
|
|
1efb32c244 | ||
|
|
f75f36f0e3 | ||
|
|
a23f1dcb6e | ||
|
|
e3601c124d | ||
|
|
615f78e79f | ||
|
|
965da26426 | ||
|
|
e99ea1d013 | ||
|
|
6f056359df | ||
|
|
0cd7e9fb62 | ||
|
|
689a4c93c3 | ||
|
|
d3e9f3732c | ||
|
|
69f2e365bf | ||
|
|
4e97cd05ea | ||
|
|
1f7fc13872 | ||
|
|
0eb2c485cc | ||
|
|
2e21ca4500 | ||
|
|
fae8162c58 | ||
|
|
d03101bb69 | ||
|
|
38faeac685 | ||
|
|
3be371c823 | ||
|
|
686328a085 | ||
|
|
40a4ddcbde | ||
|
|
e50733ba1d | ||
|
|
8df721ac51 | ||
|
|
25cae1d98b | ||
|
|
679203d4b1 | ||
|
|
2fccbc8ee8 | ||
|
|
19b31d51c5 | ||
|
|
b1c8e0e343 | ||
|
|
117f2a70a8 | ||
|
|
a153d0782f | ||
|
|
0b0e002d15 | ||
|
|
b641887274 | ||
|
|
f946364baa | ||
|
|
3846be8fc6 | ||
|
|
b898955603 | ||
|
|
7b54efb0fc | ||
|
|
7a58fa2435 | ||
|
|
0f0d2e566f | ||
|
|
82e010c44f | ||
|
|
6eefe4b332 | ||
|
|
0dc2d64b20 | ||
|
|
bda6d1e3a0 | ||
|
|
ac948bd8b7 | ||
|
|
908c8afc54 | ||
|
|
643ba6ed72 | ||
|
|
ccdecbd8d7 | ||
|
|
da798dd1d8 | ||
|
|
0304612093 | ||
|
|
d76078a81f | ||
|
|
c4cc7d83e7 | ||
|
|
744682835a | ||
|
|
1fe742561f | ||
|
|
8882dc54d0 | ||
|
|
eb9e0dbc60 | ||
|
|
e45a1394fa | ||
|
|
72f4187d3b | ||
|
|
a5ac8ca1c9 | ||
|
|
fe69a16eea | ||
|
|
7696af6814 | ||
|
|
d4eae917ee | ||
|
|
b297058d11 | ||
|
|
48146089cd | ||
|
|
2440cb448a | ||
|
|
9dbfdd67ad | ||
|
|
b1928b61e5 | ||
|
|
541ea70484 | ||
|
|
9a56d98242 | ||
|
|
38b49bd5fa | ||
|
|
9b0f437073 | ||
|
|
8171c7992e | ||
|
|
30760cab9b | ||
|
|
33d18b9efc | ||
|
|
0aac0d1555 | ||
|
|
3b788ec009 | ||
|
|
db4ff64e87 | ||
|
|
c28e290b42 | ||
|
|
8d127799cd | ||
|
|
d32ad1e0a6 | ||
|
|
122f4f04b9 | ||
|
|
dacda11c07 | ||
|
|
490527b92c | ||
|
|
4a35d63cd3 | ||
|
|
0e644b5524 | ||
|
|
675cf38f67 | ||
|
|
89ab288334 | ||
|
|
5030116ee5 | ||
|
|
8719e916ea | ||
|
|
689e7cbe8b | ||
|
|
d89912e579 | ||
|
|
544068e8cc | ||
|
|
e8c39a1b54 | ||
|
|
1655f57e69 | ||
|
|
d18ff0f049 | ||
|
|
355656b5c8 | ||
|
|
cd10cccbf4 | ||
|
|
d044ef1efc | ||
|
|
65b87819a0 | ||
|
|
be62783b98 |
@@ -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"
|
||||
|
||||
|
@@ -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"
|
||||
|
||||
|
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,167 @@
|
||||
{
|
||||
"implementation_commit": "3bcd98e78ee42c3034cee452b8570a72cd89020e",
|
||||
"status": "delivered_with_QA_proofs_preserved",
|
||||
"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",
|
||||
"qa_status_preserved": "QA_complete_not_delivered",
|
||||
"delivery_followup": {
|
||||
"served_commit": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"receipt": "l1-g7d-delivery-20261024.json",
|
||||
"record": "iva_l1_g7d_P095_homologation_20261024",
|
||||
"counts": {
|
||||
"delivered": 82,
|
||||
"QA": 0,
|
||||
"functional_pending": 50,
|
||||
"documentary": 1,
|
||||
"total": 133
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"implementation_commit": "9f053ac9d3f332c432420fd5b5d31cdfb7936071",
|
||||
"status": "QA_complete_not_delivered",
|
||||
"coverage": {
|
||||
"AUD-SIM-L1-P100": [
|
||||
"noncash_only",
|
||||
"cash_and_noncash"
|
||||
]
|
||||
},
|
||||
"branch_count": 1,
|
||||
"treatment_count": 2,
|
||||
"source": "CIVA15(3)/(4),Lei13/2016PDF14/p1426(272);composition15(5)/(6);Lei22/2022PDF3maintains15(3–6)byremissão;Lei10/2025doesnotamend15;2017rectificationdoesnotamend15(3)/(4).",
|
||||
"meaning": "Consideration not wholly or partly defined in money:money received/receivable plus normalvalue of goods/services given in exchange as consideration for identified operation. Entirely noncash only with express composition confirmation,not inferred from emptycash field.",
|
||||
"formula": {
|
||||
"noncash_only": "normalvalue,absence of monetary consideration explicitly confirmed",
|
||||
"cash_and_noncash": "cashamount received/receivable + normalvalue of goods/services given in exchange"
|
||||
},
|
||||
"technical_choices": "New noncashBases opportunity-scoped book in existingmodelo_a_snapshot/API/dossier;no schema/permissionschange. Exactdecimal up to6fractiondigits,no assumed fiscalrounding. Composition change retains cash/reference/normalvalue/documents but clears corresponding confirmation as integrity choice. Hidden cash is preserved but not summed in noncash_only. Normalvalue supplied with15(4)basis/scope,composition15(5)/(6)netofownVAT;no automatic appraisal/certificate/appraiser/approver.",
|
||||
"scope": "2026/MZN,baseonly;no currencyconversion,automatic normalvaluation,incidence/rate/VAT/deduction/field11/ModeloAtotals. Unknown monetary share not inferredzero;explicitzero differentiated. Otherbranches and prior normalvalue contexts unchanged.",
|
||||
"verification": {
|
||||
"frontend": {
|
||||
"tests": 4,
|
||||
"passed": 4,
|
||||
"failed": 0,
|
||||
"scope": "Ownconditions missing/no;exchange/agreement/normalvalue basis/scope/references;exactadditiononce/zero/largefractionalamounts;switchretention;hidden cash excluded;corruptwriteguard;alloldbooks/currentkeys/history/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-g7e-noncash-base-20261024\\api-tests.xml"
|
||||
},
|
||||
"types": "passed",
|
||||
"build": "passed,existing plugin timing warnings",
|
||||
"UI": "Realcomponent Edge/CUA:normalvalue basis/moneyunknown indeterminate;switch mixed→noncash hidescash/clearsconfirmation;confirmed noncash uses2200.50 despite retained500.25;switchback recovers500.25;finalnoncash2200.50/mixed2700.75,VATnull;save/recover/report2rows+5priorversions. SyntheticQA,not manualTempoacceptance.",
|
||||
"UI_screenshot": "C:\\laragon\\www\\portal-investidor\\outputs\\iva-l1-g7e-noncash-base-20261024\\qa-recovered-report.png"
|
||||
},
|
||||
"preservation": {
|
||||
"base": "6234d3439285f0251af90694c9347f1936cb4f7f",
|
||||
"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",
|
||||
"AUD-SIM-L1-P095"
|
||||
],
|
||||
"confirmed_losses": [],
|
||||
"accepted_delivery": "92a7418c/6234d343;174tables/369files;29published/28relations/408geometries;code/schema/data/config/permissions compared at delivery",
|
||||
"frozen": "tests\\frontend\\fixtures\\iva-g7e-preserved-inputs.json",
|
||||
"sha256": "825dd90f48540c83bd7c9ca8b234e0dd558a12aca19d394cfa91b32a17d0edb7",
|
||||
"counts_before": {
|
||||
"delivered": 82,
|
||||
"QA": 0,
|
||||
"functional_pending": 50,
|
||||
"P001": 1,
|
||||
"total": 133
|
||||
},
|
||||
"scope": "P100 only;allpreviousbooks immutable including P095TC/P094valuation/P091/P090/P060/P050/partialP084P085;no active query/write"
|
||||
},
|
||||
"runtime_delta": {
|
||||
"resources/js/lib/iva-noncash-base.ts": "d07cbefec4d54cffe41626093832972b31b8eacf0021a146655c79b189f25434",
|
||||
"resources/js/components/simulation-noncash-base.tsx": "e8d5dd905d9c6b75ed7589e4ecf7b708bb288ba59285d409f444e799f9f09c35",
|
||||
"resources/js/components/simulation-monthly-iva.tsx": "bc1005d31306c859dfa325f8d63e8bac98073b38f6d65ab22f736537629d4752",
|
||||
"resources/js/lib/project-dossier.ts": "84d3c968dfa0a644f1767c09dd266fbe32b086117da0416564681e4a51e8d7f6"
|
||||
},
|
||||
"counts_current": {
|
||||
"delivered": 82,
|
||||
"QA": 1,
|
||||
"functional_pending": 49,
|
||||
"P001": 1,
|
||||
"total": 133
|
||||
},
|
||||
"homologation_unchanged": "92a7418c",
|
||||
"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-g7e-noncash-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,312 @@
|
||||
{
|
||||
"status": "installed_delta_verified_partial_L1",
|
||||
"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": 82,
|
||||
"QA": 0,
|
||||
"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
|
||||
}
|
||||
},
|
||||
"served_commit": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"installation": {
|
||||
"protected": {
|
||||
"installed": {
|
||||
"status": "installed",
|
||||
"commit": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"release": "/var/www/investmoz-homologacao/releases/92a7418cb6b080916a4d02d3c1db4be94d3d96f1-ebe3dcb6",
|
||||
"previous_release": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
|
||||
"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": "9753319afae2b48c6603174611c29a44"
|
||||
},
|
||||
"after": {
|
||||
"rows": 105,
|
||||
"checksum": "0952fbca996676b2672ef9e20bc6f3b4"
|
||||
}
|
||||
},
|
||||
"sessions": {
|
||||
"before": {
|
||||
"rows": 62,
|
||||
"checksum": "3cad129ac66a652cdd459999598f14ce"
|
||||
},
|
||||
"after": {
|
||||
"rows": 63,
|
||||
"checksum": "157ddd76903db6ec5dd9176ac8f58bef"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"branch": "main",
|
||||
"built_at": "2026-10-24T20:37:45.995677+00:00",
|
||||
"manifest_sha256": "bac69b18e37c76367dbcdd4caee54122f088dfafdc344ebd8a7e31f66617cfc8"
|
||||
},
|
||||
"manifest_hash_matches": true,
|
||||
"compiled_delta_markers": {
|
||||
"regulated-fuel-base/1": [
|
||||
"assets/project-dossier-Cz-1HWwj.js"
|
||||
],
|
||||
"fuel_tax_included": [
|
||||
"assets/project-dossier-Cz-1HWwj.js",
|
||||
"assets/services-DYdBDJDo.js"
|
||||
],
|
||||
"fuel_tax_excluded": [
|
||||
"assets/project-dossier-Cz-1HWwj.js"
|
||||
],
|
||||
"regulatedFuelBases": [
|
||||
"assets/project-dossier-Cz-1HWwj.js"
|
||||
],
|
||||
"taxableFuelResale": [
|
||||
"assets/project-dossier-Cz-1HWwj.js"
|
||||
],
|
||||
"publicFixedPrice": [
|
||||
"assets/project-dossier-Cz-1HWwj.js"
|
||||
],
|
||||
"priceScopeMatches": [
|
||||
"assets/project-dossier-Cz-1HWwj.js"
|
||||
],
|
||||
"fuelTaxTreatment": [
|
||||
"assets/project-dossier-Cz-1HWwj.js"
|
||||
],
|
||||
"consideration": [
|
||||
"assets/project-dossier-Cz-1HWwj.js",
|
||||
"assets/services-DYdBDJDo.js"
|
||||
],
|
||||
"fuelTaxRef": [
|
||||
"assets/project-dossier-Cz-1HWwj.js",
|
||||
"assets/services-DYdBDJDo.js"
|
||||
],
|
||||
"priceRef": [
|
||||
"assets/project-dossier-Cz-1HWwj.js",
|
||||
"assets/services-DYdBDJDo.js"
|
||||
],
|
||||
"priceScope": [
|
||||
"assets/project-dossier-Cz-1HWwj.js",
|
||||
"assets/services-DYdBDJDo.js"
|
||||
],
|
||||
"priceFrom": [
|
||||
"assets/project-dossier-Cz-1HWwj.js",
|
||||
"assets/services-DYdBDJDo.js"
|
||||
],
|
||||
"priceTo": [
|
||||
"assets/project-dossier-Cz-1HWwj.js",
|
||||
"assets/services-DYdBDJDo.js"
|
||||
],
|
||||
"IVA: Indeterminado": [
|
||||
"assets/project-dossier-Cz-1HWwj.js"
|
||||
]
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"file": "assets/project-dossier-Cz-1HWwj.js",
|
||||
"status": 200,
|
||||
"sha256": "5d3889631817dce24a1d5117adfedb857f82b7904661f2542fe1e8bec9b175db"
|
||||
},
|
||||
{
|
||||
"file": "assets/project-dossier-document-CD6rt2wY.js",
|
||||
"status": 200,
|
||||
"sha256": "1d3d83cc19a332bf7b4a2f3bd53ded192944990da4c670da66894ca2bd5dd0d1"
|
||||
},
|
||||
{
|
||||
"file": "assets/services-DYdBDJDo.js",
|
||||
"status": 200,
|
||||
"sha256": "9963e8e963cc91d4ed93e49f855f72d2354353e13bd65329064875fca34584c7"
|
||||
},
|
||||
{
|
||||
"file": "assets/simulation-form-CPZAFZU3.js",
|
||||
"status": 200,
|
||||
"sha256": "c6bcf64e60a5eeac0cafe3dc055dc5544162f21942ee08b34d51bc6d52947567"
|
||||
}
|
||||
],
|
||||
"simulator_status": 200,
|
||||
"simulator_entry": "assets/app-DVpJlD3c.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": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"release": "/var/www/investmoz-homologacao/releases/92a7418cb6b080916a4d02d3c1db4be94d3d96f1-ebe3dcb6",
|
||||
"previous_release": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
|
||||
"database_migrations": 0,
|
||||
"content_imports": 0
|
||||
},
|
||||
"latest_report": {
|
||||
"status": "installed",
|
||||
"commit": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"release": "/var/www/investmoz-homologacao/releases/92a7418cb6b080916a4d02d3c1db4be94d3d96f1-ebe3dcb6",
|
||||
"previous_release": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
|
||||
"database_migrations": 0,
|
||||
"content_imports": 0,
|
||||
"requested_commits": [
|
||||
"92a7418cb6b080916a4d02d3c1db4be94d3d96f1"
|
||||
],
|
||||
"finished_at": "2026-10-24T20:37:48.666648+00:00"
|
||||
},
|
||||
"log_file": "1792874168886523454.log",
|
||||
"summaries": [
|
||||
"OK (1 test, 3106 assertions)",
|
||||
"built in 25.42s",
|
||||
"OK (59 tests, 317 assertions)",
|
||||
"# tests 358",
|
||||
"# pass 358",
|
||||
"# fail 0"
|
||||
],
|
||||
"log_bytes": 133280
|
||||
},
|
||||
"rollback_executed": false
|
||||
},
|
||||
"base_VAT_separation": "Accepted QA reused:TC included is subtracted once;alreadyexcluded unchanged. Price reference/scope/period and immutable inputs/history/report retained;no presumed price/TC or double subtraction. Base independent of VAT/rate(alwaysnull). Four installed runtime hashes and15compiled markers verified;no synthetic activewrite.",
|
||||
"activation": "Normal Git fast-forward/webhook/installer;zero migrations/imports"
|
||||
}
|
||||
@@ -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,131 @@
|
||||
{
|
||||
"status": "ready_after_fresh_authenticated_preflight_and_verified_backup_restore",
|
||||
"candidate": "0460c85330557b8074c14c04c74cd890e6cab97a",
|
||||
"base_installed": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"coverage_complete_branches": {
|
||||
"AUD-SIM-L1-P100": [
|
||||
"noncash_only",
|
||||
"cash_and_noncash"
|
||||
]
|
||||
},
|
||||
"branch_count_complete": 1,
|
||||
"treatment_count": 2,
|
||||
"runtime_delta": [
|
||||
{
|
||||
"path": "resources/js/lib/iva-noncash-base.ts",
|
||||
"sha256_LF": "d07cbefec4d54cffe41626093832972b31b8eacf0021a146655c79b189f25434"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-noncash-base.tsx",
|
||||
"sha256_LF": "e8d5dd905d9c6b75ed7589e4ecf7b708bb288ba59285d409f444e799f9f09c35"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/components/simulation-monthly-iva.tsx",
|
||||
"sha256_LF": "bc1005d31306c859dfa325f8d63e8bac98073b38f6d65ab22f736537629d4752"
|
||||
},
|
||||
{
|
||||
"path": "resources/js/lib/project-dossier.ts",
|
||||
"sha256_LF": "84d3c968dfa0a644f1767c09dd266fbe32b086117da0416564681e4a51e8d7f6"
|
||||
}
|
||||
],
|
||||
"counts_before": {
|
||||
"delivered": 82,
|
||||
"QA": 1,
|
||||
"functional_pending": 49,
|
||||
"documentary": 1,
|
||||
"total": 133
|
||||
},
|
||||
"counts_current": {
|
||||
"delivered": 82,
|
||||
"QA": 1,
|
||||
"functional_pending": 49,
|
||||
"documentary": 1,
|
||||
"total": 133
|
||||
},
|
||||
"counts_after_delivery": {
|
||||
"delivered": 83,
|
||||
"QA": 0,
|
||||
"functional_pending": 49,
|
||||
"documentary": 1,
|
||||
"total": 133
|
||||
},
|
||||
"QA_proofs_reused": [
|
||||
"iva-l1-g7e-qa-20261024.json"
|
||||
],
|
||||
"authorization": "Tempo explicitly deploy0460c853 through existingGit,preserve concurrentchanges and check installeddelta only;two treatments sameP100branch",
|
||||
"scope": "2026/MZN,baseonly;no currencyconversion,automatic normalvaluation,incidence/rate/VAT/deduction/field11/ModeloAtotals. Unknown monetary share not inferredzero;explicitzero differentiated. Otherbranches and prior normalvalue contexts unchanged.",
|
||||
"meaning": "Consideration not wholly or partly defined in money:money received/receivable plus normalvalue of goods/services given in exchange as consideration for identified operation. Entirely noncash only with express composition confirmation,not inferred from emptycash field.",
|
||||
"formula": {
|
||||
"noncash_only": "normalvalue,absence of monetary consideration explicitly confirmed",
|
||||
"cash_and_noncash": "cashamount received/receivable + normalvalue of goods/services given in exchange"
|
||||
},
|
||||
"preservation": "82priorclosures 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-g7e-readonly-rollback-20261024.patch,checked only,not applied;blocks newP100calculations only,preserves readers/history/otherbranches",
|
||||
"authenticated_preflight": {
|
||||
"installed": {
|
||||
"status": "installed",
|
||||
"commit": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"release": "/var/www/investmoz-homologacao/releases/92a7418cb6b080916a4d02d3c1db4be94d3d96f1-ebe3dcb6",
|
||||
"previous_release": "/var/www/investmoz-homologacao/releases/df7cb7fa47f50ae23f52c1bdf7e48e38489cffef-be472ead",
|
||||
"database_migrations": 0,
|
||||
"content_imports": 0
|
||||
},
|
||||
"current_link": "/var/www/investmoz-homologacao/releases/92a7418cb6b080916a4d02d3c1db4be94d3d96f1-ebe3dcb6",
|
||||
"release_revision": {
|
||||
"commit": "92a7418cb6b080916a4d02d3c1db4be94d3d96f1",
|
||||
"branch": "main",
|
||||
"built_at": "2026-10-24T20:37:45.995677+00:00",
|
||||
"manifest_sha256": "bac69b18e37c76367dbcdd4caee54122f088dfafdc344ebd8a7e31f66617cfc8"
|
||||
},
|
||||
"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-g7e-delivery-20261024/backup",
|
||||
"target": {
|
||||
"database": "teste_investidor",
|
||||
"port": 5432
|
||||
},
|
||||
"tables": 174,
|
||||
"files_verified": 369,
|
||||
"dump_sha256": "dcc4d9b15c0a62b065742f976dc4478c560674f40e6fd7c2017492dee433a27e",
|
||||
"files_sha256": "59804ad31f7c6a6055aed0020b7b8d30f23e0ad8b43e75d6280fba977d0e4a4e",
|
||||
"restore_verified": false
|
||||
},
|
||||
"restore": {
|
||||
"restore_verified": true,
|
||||
"tables_verified": 174,
|
||||
"container_network": "none",
|
||||
"database": "l1_g7e_restore_20261024",
|
||||
"port": 55441,
|
||||
"source_dump_sha256": "dcc4d9b15c0a62b065742f976dc4478c560674f40e6fd7c2017492dee433a27e",
|
||||
"active_database_writes": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
--- a/resources/js/lib/iva-noncash-base.ts
|
||||
+++ b/resources/js/lib/iva-noncash-base.ts
|
||||
@@ -49,6 +49,7 @@
|
||||
function key(draft:Record<string,unknown>,book:NoncashBaseBook):string{return JSON.stringify({version:noncashBaseVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
|
||||
export function noncashBaseCurrent(draft:Record<string,unknown>,book:NoncashBaseBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
|
||||
export function recordNoncashBases(draft:Record<string,unknown>,book:NoncashBaseBook):NoncashBaseBook{
|
||||
+ throw new Error('Novas bases P100 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:NoncashBaseCalculation={version:noncashBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:noncashBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateNoncashBase(row,draft.currency))};
|
||||
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};saveNoncashBaseBook(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
|
||||
|
||||
Binary file not shown.
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
|
||||
|
||||
|
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,18 @@
|
||||
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 { SimulationNoncashBase } from './simulation-noncash-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 +25,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 +35,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 +46,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 +86,21 @@ 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} />
|
||||
<SimulationNoncashBase draft={draft} onChange={onChange} />
|
||||
<SimulationOfferPreparations draft={draft} onChange={onChange} />
|
||||
<SimulationModeloA draft={draft} />
|
||||
</section>;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import {useState} from 'react';
|
||||
import {newNoncashBase,switchNoncashComposition,noncashBaseBook,noncashBaseConditions,noncashBaseCurrent,noncashBaseReportRows,noncashBaseSource,noncashBaseTreatments,recordNoncashBases,saveNoncashBaseBook,type NoncashBaseBook,type NoncashBaseRow} from '@/lib/iva-noncash-base';
|
||||
|
||||
export function SimulationNoncashBase({draft,onChange}:{draft:Record<string,unknown>;onChange:(field:string,value:string)=>void}){
|
||||
const[error,setError]=useState('');let book:NoncashBaseBook;
|
||||
try{book=noncashBaseBook(draft);}catch(cause){return<p role="alert">{String(cause)}</p>;}
|
||||
const save=(next:NoncashBaseBook)=>{try{onChange('modelo_a_snapshot',saveNoncashBaseBook(draft,next));setError('');}catch(cause){setError(String(cause));}};
|
||||
const change=(id:string,patch:Partial<NoncashBaseRow>)=>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 — contraprestação não monetária total ou parcial</summary>
|
||||
<p>Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Identifique a operação e os bens ou serviços dados em troca como contraprestação. Se houver parte em dinheiro,some o montante recebido ou a receber ao valor normal desses bens ou serviços;se não houver,confirme expressamente a ausência dessa parte.</p>
|
||||
<p>O valor normal deve ter fundamento e âmbito correspondentes ao artigo15(4),incluindo concorrência normal,fornecedor independente,estádio de comercialização e tempo/lugar da operação ou mais próximos. Reutilize referências existentes ou indique pressupostos de projecção. O portal não avalia automaticamente bens ou serviços. Indique montantes sem o próprio IVA e sem duplicar elementos da composição. Base e IVA são resultados distintos.</p>
|
||||
<p>{noncashBaseSource}</p>{error&&<p role="alert">{error}</p>}
|
||||
<button type="button" className="underline" onClick={()=>save({...book,rows:[...book.rows,newNoncashBase(crypto.randomUUID(),String(draft.currency??''))]})}>Acrescentar contraprestação não monetária</button>
|
||||
{book.rows.map(row=>{const rule=noncashBaseTreatments.find(item=>item.id===row.treatment);return<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>Composição da contraprestação<select className="block rounded border p-2" value={row.treatment} onChange={e=>change(row.id,switchNoncashComposition(row,e.target.value))}><option value="">Por indicar</option>{noncashBaseTreatments.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 NoncashBaseRow['origin']})}><option value="projected">Projectados / pressupostos</option><option value="effective">Efectivos declarados</option></select></label>
|
||||
{([['description','Operação identificada'],['exchangeDescription','Bens ou serviços dados em troca como contraprestação'],['agreementRef','Acordo / 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'],['valuationRef','Fundamento do valor normal / pressuposto'],['valuationScope','Âmbito do valor normal: bens/serviços, estádio, tempo, lugar 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>Valor normal dos bens ou serviços dados em troca,sem IVA (moeda indicada)<input className="block rounded border p-2" value={row.normalValue} onChange={e=>change(row.id,{normalValue:e.target.value})}/></label>}
|
||||
{row.treatment==='cash_and_noncash'&&<><label>Montante monetário recebido ou a receber,sem IVA (moeda indicada)<input className="block rounded border p-2" value={row.cashAmount} onChange={e=>change(row.id,{cashAmount:e.target.value})}/></label><label>Referência da parte monetária / pressuposto<input className="block rounded border p-2" value={row.cashRef} onChange={e=>change(row.id,{cashRef:e.target.value})}/></label></>}
|
||||
</div>
|
||||
<p>Mudar a composição conserva valores e documentos,mas exige rever a presença ou ausência da parte monetária. Os valores ocultos e as versões anteriores mantêm-se;um campo vazio não confirma ausência de dinheiro.</p>
|
||||
{rule?<fieldset><legend>Condições próprias desta operação</legend>{noncashBaseConditions.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(recordNoncashBases(draft,book));}catch(cause){setError(String(cause));}}}>Determinar bases de contraprestação e guardar versão</button>}
|
||||
{book.result&&<><p role="status">{noncashBaseCurrent(draft,book)?'Bases de contraprestação correspondentes às entradas guardadas.':'Entradas alteradas;bases de contraprestaçã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>{noncashBaseReportRows(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,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>;
|
||||
}
|
||||
@@ -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}};
|
||||
}
|
||||
@@ -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']];}
|
||||
}
|
||||
@@ -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.']];}
|
||||
}
|
||||
@@ -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}`;}
|
||||
@@ -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',
|
||||
]),
|
||||
];
|
||||
@@ -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',
|
||||
]),
|
||||
];
|
||||
@@ -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);}
|
||||
@@ -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.']];}
|
||||
}
|
||||
@@ -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.';
|
||||
}
|
||||
@@ -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',
|
||||
]),
|
||||
];
|
||||
@@ -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,59 @@
|
||||
import {acquisitionScope,readAcquisitionStore} from './iva-acquisitions.ts';
|
||||
|
||||
export const noncashBaseVersion='noncash-consideration-base/1';
|
||||
export const noncashBaseSource='CIVA republicado Lei13/2016,15(3)/(4),PDF14/p1426(272): contraprestação não definida,no todo ou em parte,em dinheiro;valor tributável=montante recebido ou a receber acrescido do valor normal dos bens ou serviços dados em troca. Valor normal:preço em concorrência normal,a fornecedor independente,no mesmo estádio de comercialização,tempo e lugar da operação ou mais próximos,aumentado dos elementos15(5)na medida não incluídos. Composição/exclusões15(5)/(6),sem próprioIVA. Lei22/2022PDF3mantém15(3–6)por remissão;Lei10/2025não altera15. Recorte2026/MZN,sem conversão cambial;base apenas,sem avaliação automática,incidência,taxaIVA,IVA,dedução/campo11 ou totaisModeloA.';
|
||||
export const noncashBaseTreatments=[{id:'noncash_only',label:'Contraprestação inteiramente não monetária'},{id:'cash_and_noncash',label:'Contraprestação em parte monetária e em parte não monetária'}] as const;
|
||||
export const noncashBaseConditions=[
|
||||
['taxableOperation','Está identificada a operação sujeita a IVA cuja contraprestação não é definida no todo ou em parte em dinheiro'],
|
||||
['exchangeIdentified','Estão identificados os bens ou serviços dados em troca como contraprestação desta operação; não se somam o valor da própria operação e a respectiva contraprestação'],
|
||||
['cashComposition','A composição escolhida corresponde à operação:inteiramente não monetária,sem parte em dinheiro,ou com montante monetário recebido/a receber identificado'],
|
||||
['normalValueBasis','O valor normal corresponde ao artigo15(4):concorrência normal,fornecedor independente,mesmo estádio de comercialização,tempo/lugar da operação ou mais próximos,com fundamento identificado'],
|
||||
['netComposition','Os montantes excluem o próprio IVA e incluem a composição aplicável15(5)/(6),sem omissões ou dupla contagem dos mesmos elementos'],
|
||||
] as const;
|
||||
type Choice=''|'yes'|'no';type Condition=typeof noncashBaseConditions[number][0];
|
||||
export type NoncashBaseRow={id:string;treatment:string;description:string;period:string;origin:'projected'|'effective';currency:string;exchangeDescription:string;agreementRef:string;documentRef:string;documentDate:string;cashAmount:string;cashRef: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 NoncashBaseCalculation={version:string;revision:number;calculatedAt:string;opportunity:string;location:string;sourceKey:string;source:string;inputs:NoncashBaseRow[];rows:LineResult[]};
|
||||
export type NoncashBaseBook={rows:NoncashBaseRow[];result?:NoncashBaseCalculation;history?:NoncashBaseCalculation[]};
|
||||
type Store=ReturnType<typeof readAcquisitionStore>&{noncashBases?:Record<string,NoncashBaseBook>};
|
||||
export function newNoncashBase(id:string,currency:string):NoncashBaseRow{return{id,treatment:'',description:'',period:'',origin:'projected',currency,exchangeDescription:'',agreementRef:'',documentRef:'',documentDate:'',cashAmount:'',cashRef:'',normalValue:'',valuationRef:'',valuationScope:'',compositionRef:'',evidence:'',conditions:{}};}
|
||||
export function switchNoncashComposition(row:NoncashBaseRow,treatment:string):NoncashBaseRow{return{...row,treatment,conditions:{...row.conditions,cashComposition:''}};}
|
||||
function readStore(draft:Record<string,unknown>):Store{
|
||||
const store=readAcquisitionStore(draft.modelo_a_snapshot) as Store;
|
||||
if(store.noncashBases!==undefined&&(!store.noncashBases||typeof store.noncashBases!=='object'||Array.isArray(store.noncashBases)))throw new Error('Bases de contraprestação não recuperáveis;originais preservados.');
|
||||
const fields=Object.keys(newNoncashBase('','')).filter(key=>key!=='conditions');
|
||||
for(const book of Object.values(store.noncashBases??{}))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 NoncashBaseRow]!=='string')||!row.conditions||typeof row.conditions!=='object'||Array.isArray(row.conditions)))throw new Error('Linhas de contraprestação não recuperáveis;originais preservados,sem substituição por lista vazia.');
|
||||
return store;
|
||||
}
|
||||
export function noncashBaseBook(draft:Record<string,unknown>):NoncashBaseBook{return readStore(draft).noncashBases?.[acquisitionScope(draft)]??{rows:[]};}
|
||||
export function saveNoncashBaseBook(draft:Record<string,unknown>,book:NoncashBaseBook):string{const current=readStore(draft),encoded=JSON.stringify({...current,noncashBases:{...current.noncashBases,[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 evaluateNoncashBase(row:NoncashBaseRow,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(!noncashBaseTreatments.some(item=>item.id===row.treatment))return stop('Identifique a composição não monetária total ou parcial;parte monetária desconhecida não equivale a ausência de dinheiro.');
|
||||
if(currency!=='MZN'||row.currency!==currency)return stop('Moeda fora do âmbito MZN ou divergente do projecto;sem conversão silenciosa ou taxa de câmbio presumida.');
|
||||
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=noncashBaseConditions.filter(([key])=>row.conditions[key]==='no');if(failed.length)return stop('Não se aplica esta determinação da base: '+failed.map(([,label])=>label).join('; ')+'. Não é isenção nem IVA zero.','not_applicable');
|
||||
const missing=noncashBaseConditions.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.exchangeDescription.trim()||!row.agreementRef.trim()||!row.documentRef.trim()||!row.valuationRef.trim()||!row.valuationScope.trim()||!row.compositionRef.trim()||!row.evidence.trim()||!validDate(row.documentDate))return stop('Identifique operação,contraprestação em bens/serviços,acordo,documento/data,fundamento e âmbito do valor normal e composição,ou pressupostos expressos;reutilize referências existentes,sem novo certificado/avaliador/aprovador.');
|
||||
const normal=decimal(row.normalValue);if(normal===null)return stop('Indique o valor normal dos bens/serviços dados em troca;desconhecido não é zero nem valor avaliado automaticamente pelo portal.');
|
||||
let base=normal,formula=`valor normal ${money(normal)},sem parte monetária expressamente confirmada`;
|
||||
if(row.treatment==='cash_and_noncash'){
|
||||
const cash=decimal(row.cashAmount);if(cash===null||!row.cashRef.trim())return stop('Identifique montante monetário recebido/a receber e referência ou pressuposto expresso;um montante desconhecido não é zero.');
|
||||
base=cash+normal;formula=`montante monetário ${money(cash)} + valor normal ${money(normal)}`;
|
||||
}
|
||||
return{...result,status:'determined',baseAmount:money(base),reason:`Base15(3)/(4): ${formula} = ${money(base)}MZN,${row.origin==='projected'?'nas condições expressamente assumidas na projecção':'nos dados efectivos declarados'}. Valor normal/fundamento/âmbito e composição identificados,sem avaliação automática. 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:NoncashBaseBook):string{return JSON.stringify({version:noncashBaseVersion,scope:acquisitionScope(draft),location:draft.selection_labels??{},currency:draft.currency,rows:book.rows});}
|
||||
export function noncashBaseCurrent(draft:Record<string,unknown>,book:NoncashBaseBook):boolean{return!!book.result&&book.result.sourceKey===key(draft,book);}
|
||||
export function recordNoncashBases(draft:Record<string,unknown>,book:NoncashBaseBook):NoncashBaseBook{
|
||||
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:NoncashBaseCalculation={version:noncashBaseVersion,revision:(book.result?.revision??0)+1,calculatedAt:new Date().toISOString(),opportunity:acquisitionScope(draft),location:JSON.stringify(draft.selection_labels??{}),sourceKey:key(draft,book),source:noncashBaseSource,inputs:structuredClone(book.rows),rows:book.rows.map(row=>evaluateNoncashBase(row,draft.currency))};
|
||||
const next={...book,result,history:[...(book.history??[]),...(book.result?[book.result]:[])]};saveNoncashBaseBook(draft,next);return next;
|
||||
}
|
||||
export function noncashBaseReportRows(draft:Record<string,unknown>):Array<[string,string,string,string]>{
|
||||
try{const book=noncashBaseBook(draft),result=book.result;if(!result)return[];return result.inputs.map((row,index)=>['IVA mensal',`Base P100 — ${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};${noncashBaseCurrent(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'};${noncashBaseTreatments.find(item=>item.id===row.treatment)?.label??'Composição por indicar'};bens/serviços dados em troca ${row.exchangeDescription};acordo ${row.agreementRef};${row.treatment==='cash_and_noncash'?`montante monetário ${row.cashAmount} ${row.currency},referência ${row.cashRef}`:'Sem parte monetária,expressamente confirmado'};valor normal ${row.normalValue} ${row.currency};fundamento ${row.valuationRef};âmbito ${row.valuationScope};composição ${row.compositionRef};documento ${row.documentRef},${row.documentDate};condições ${noncashBaseConditions.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 contraprestação não monetária','Dados não recuperáveis','Originais preservados;sem substituir por zero.']];}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user