diff --git a/app/Http/Controllers/Api/V1/SimulationController.php b/app/Http/Controllers/Api/V1/SimulationController.php
index 3f752588..daef312a 100644
--- a/app/Http/Controllers/Api/V1/SimulationController.php
+++ b/app/Http/Controllers/Api/V1/SimulationController.php
@@ -40,7 +40,7 @@ class SimulationController extends Controller
$organizationId = $validated['organization_id'] ?? null;
$execution->authorizeOrganization($actorId, $organizationId);
if (($validated['scenario_kind'] ?? null) === 'fiscal_rule_published') {
- $input = array_intersect_key($validated, array_flip(['base', 'currency', 'reference_date', 'operation', 'scope_declared']));
+ $input = array_intersect_key($validated, array_flip(['base', 'currency', 'reference_date', 'operation', 'scope_declared', 'monthly_sales', 'sales_vat_basis']));
$input['scope_declared'] = (bool) $input['scope_declared'];
$result = $execution->createPublishedFiscal($input, $actorId, $organizationId, $token, $key);
} else {
diff --git a/app/Http/Controllers/Api/V1/SimulationTaxParameterController.php b/app/Http/Controllers/Api/V1/SimulationTaxParameterController.php
index 4553446a..e769ae57 100644
--- a/app/Http/Controllers/Api/V1/SimulationTaxParameterController.php
+++ b/app/Http/Controllers/Api/V1/SimulationTaxParameterController.php
@@ -19,13 +19,15 @@ class SimulationTaxParameterController extends Controller
$input['period_start'],
$input['period_end'],
$input['context'] ?? [],
+ $input['component'] === 'IVA',
);
return response()->json([
'component' => $input['component'],
'period' => ['start' => $input['period_start'], 'end' => $input['period_end']],
'assumptions' => $input['context'] ?? [],
- 'parameters' => $data,
+ 'parameters' => $input['component'] === 'IVA' ? $data['parameters'] : $data,
+ 'diagnostics' => $input['component'] === 'IVA' ? $data['diagnostics'] : [],
])->header('Cache-Control', 'no-store');
}
}
diff --git a/app/Http/Requests/ResolveSimulationTaxParametersRequest.php b/app/Http/Requests/ResolveSimulationTaxParametersRequest.php
index b7622aad..b6e0097d 100644
--- a/app/Http/Requests/ResolveSimulationTaxParametersRequest.php
+++ b/app/Http/Requests/ResolveSimulationTaxParametersRequest.php
@@ -21,7 +21,7 @@ class ResolveSimulationTaxParametersRequest extends FormRequest
'component' => ['required', 'in:IRPC,IVA,ISPC,IRPS,INSS,RETENCOES,DIREITOS_ADUANEIROS,ICE'],
'period_start' => ['required', 'date_format:Y-m-d'],
'period_end' => ['required', 'date_format:Y-m-d', 'after_or_equal:period_start'],
- 'context' => ['sometimes', 'array:fiscal_periodicity,fiscal_operation,fiscal_residency_assessment,fiscal_residency_country,fiscal_income_category,fiscal_establishments,fiscal_documentation,fiscal_customs_code,fiscal_vat_refund_state'],
+ 'context' => ['sometimes', 'array:currency,fiscal_periodicity,fiscal_operation,fiscal_residency_assessment,fiscal_residency_country,fiscal_income_category,fiscal_establishments,fiscal_documentation,fiscal_customs_code,fiscal_vat_refund_state'],
'context.*' => ['string', 'max:160'],
];
}
diff --git a/app/Http/Requests/StoreSimulationFormDraftRequest.php b/app/Http/Requests/StoreSimulationFormDraftRequest.php
index 74cf0d90..27b2e957 100644
--- a/app/Http/Requests/StoreSimulationFormDraftRequest.php
+++ b/app/Http/Requests/StoreSimulationFormDraftRequest.php
@@ -37,7 +37,7 @@ class StoreSimulationFormDraftRequest extends FormRequest
'contact_province', 'contact_district', 'preferred_channel',
];
$economic = [
- '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',
+ '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',
'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',
@@ -50,7 +50,7 @@ class StoreSimulationFormDraftRequest extends FormRequest
'environmental_category', 'community_benefits', 'tax_calculation', 'fiscal_scenario_mode', 'base', 'rate', 'reduction',
'sales_taxable', 'sales_exempt', 'sales_zero_rate', 'exports', 'deductible_costs', 'non_deductible_costs',
'carried_losses', 'payroll', 'outbound_payments', 'imports', 'claimed_benefits', 'reference_date',
- 'fiscal_period', 'fiscal_periodicity', 'fiscal_month', 'fiscal_quarter', 'fiscal_reference_date', 'irps_salary_view', 'fiscal_component', 'fiscal_income_category', 'fiscal_residency_assessment',
+ 'fiscal_currency', 'fiscal_period', 'fiscal_periodicity', 'fiscal_month', 'fiscal_quarter', 'fiscal_reference_date', 'irps_salary_view', 'fiscal_component', 'fiscal_income_category', 'fiscal_residency_assessment',
'fiscal_operation', 'fiscal_activity', 'fiscal_establishments', 'fiscal_documentation',
'fiscal_customs_code', 'fiscal_vat_refund_state',
'offer_or_demand', 'opportunity_type', 'opportunity_type_other', 'opportunity_description',
@@ -72,6 +72,8 @@ class StoreSimulationFormDraftRequest extends FormRequest
'economic_snapshot.business_plan_snapshot' => ['nullable', 'string', 'max:60000'],
'economic_snapshot.financial_tools_snapshot' => ['nullable', 'string', 'max:30000'],
'economic_snapshot.cashflow_snapshot' => ['nullable', 'string', 'max:20000'],
+ 'economic_snapshot.monthly_iva_settings' => ['nullable', 'string', 'max:2000'],
+ 'economic_snapshot.monthly_iva_snapshot' => ['nullable', 'string', 'max:60000'],
'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'],
@@ -279,7 +281,7 @@ class StoreSimulationFormDraftRequest extends FormRequest
'currency', 'funds_origin_countries', 'environmental_category', 'tax_calculation', 'fiscal_scenario_mode', 'offer_or_demand',
'opportunity_type', 'confidentiality', 'publish_requested', 'terms_accepted', 'truth_declaration',
'reuse_simulation', 'contact_authorisation', 'publication_authorisation', 'public_fields_confirmation', 'validation_acknowledged',
- 'fiscal_period', 'fiscal_periodicity', 'fiscal_month', 'fiscal_quarter', 'fiscal_reference_date', 'irps_salary_view', 'fiscal_component', 'fiscal_income_category', 'fiscal_residency_assessment', 'fiscal_operation',
+ 'fiscal_currency', 'fiscal_period', 'fiscal_periodicity', 'fiscal_month', 'fiscal_quarter', 'fiscal_reference_date', 'irps_salary_view', 'fiscal_component', 'fiscal_income_category', 'fiscal_residency_assessment', 'fiscal_operation',
'fiscal_documentation', 'fiscal_vat_refund_state'],
'personal_snapshot.selection_labels' => ['person_type', 'investor_origin', 'tax_residency_country', 'fiscal_residency_country', 'entity_stage', 'legal_form', 'preferred_channel'],
];
diff --git a/app/Http/Requests/StoreSimulationRequest.php b/app/Http/Requests/StoreSimulationRequest.php
index 736bd3e3..9c673ca7 100644
--- a/app/Http/Requests/StoreSimulationRequest.php
+++ b/app/Http/Requests/StoreSimulationRequest.php
@@ -22,6 +22,12 @@ class StoreSimulationRequest extends FormRequest
'date_format' => 'Indique uma data de exigibilidade válida.',
'boolean' => 'Indique se declara o enquadramento da operação.',
'prohibited' => 'O campo :attribute não pode ser definido pelo cliente neste cálculo.',
+ 'array' => 'Indique uma lista válida em :attribute.',
+ 'monthly_sales.min' => 'Indique pelo menos um mês de vendas.',
+ 'monthly_sales.max' => 'Este lote aceita até 12 meses dentro de 2026.',
+ 'monthly_sales.*.date.regex' => 'Indique o primeiro dia de um mês de 2026.',
+ 'monthly_sales.*.date.distinct' => 'Cada mês deve aparecer apenas uma vez.',
+ 'monthly_sales.*.amount.present' => 'Indique o valor das vendas ou deixe-o explicitamente sem informação.',
];
}
@@ -29,13 +35,31 @@ class StoreSimulationRequest extends FormRequest
{
return ['base' => 'base tributável', 'currency' => 'moeda', 'reference_date' => 'data de exigibilidade',
'operation' => 'operação', 'scope_declared' => 'declaração de enquadramento', 'scenario_kind' => 'tipo de cálculo',
- 'rule_id' => 'regra', 'rule_version' => 'versão da regra', 'rate' => 'taxa', 'reduction' => 'redução'];
+ 'rule_id' => 'regra', 'rule_version' => 'versão da regra', 'rate' => 'taxa', 'reduction' => 'redução',
+ 'monthly_sales' => 'vendas mensais', 'monthly_sales.*.date' => 'mês da projecção',
+ 'monthly_sales.*.amount' => 'vendas declaradas do mês', 'sales_vat_basis' => 'tratamento do IVA nos preços'];
}
/** @return array> */
public function rules(): array
{
if ($this->input('scenario_kind') === 'fiscal_rule_published') {
+ if ($this->exists('monthly_sales')) {
+ return [
+ 'scenario_kind' => ['required', 'in:fiscal_rule_published'],
+ 'monthly_sales' => ['required', 'array', 'min:1', 'max:12'],
+ 'monthly_sales.*' => ['required', 'array:date,amount'],
+ 'monthly_sales.*.date' => ['required', 'date_format:Y-m-d', 'regex:/^2026-\d{2}-01$/D', 'distinct'],
+ 'monthly_sales.*.amount' => ['present', 'nullable', 'string', 'max:40', 'regex:/^\d+(?:\.\d+)?$/D'],
+ 'sales_vat_basis' => ['required', 'in:net,included,unknown'],
+ 'currency' => ['required', 'in:MZN'],
+ 'scope_declared' => ['required', 'boolean'],
+ 'organization_id' => ['nullable', 'uuid', 'exists:organizations,id'],
+ 'base' => ['prohibited'], 'rate' => ['prohibited'], 'reduction' => ['prohibited'],
+ 'rule_id' => ['prohibited'], 'rule_version' => ['prohibited'], 'fiscal_preview' => ['prohibited'],
+ ];
+ }
+
return [
'scenario_kind' => ['required', 'in:fiscal_rule_published'],
'base' => ['required', 'string', 'max:40', 'regex:/^\d+(?:\.\d+)?$/'],
diff --git a/app/Services/SimulationIvaDiagnostics.php b/app/Services/SimulationIvaDiagnostics.php
new file mode 100644
index 00000000..096bcc4d
--- /dev/null
+++ b/app/Services/SimulationIvaDiagnostics.php
@@ -0,0 +1,54 @@
+ $version['valid_until'])) {
+ $add('period_unavailable', 'fiscal_period', 'Período', "$start a $end", $version['valid_from'].' a '.($version['valid_until'] ?? 'sem data final indicada'), 'Esta versão da regra não abrange todo o período seleccionado. Não altere a data real da operação para obter um resultado.');
+ }
+ foreach ($parameter['conditions'] ?? [] as $key => $expected) {
+ $received = $context[$key] ?? null;
+ if ($received === $expected) {
+ continue;
+ }
+ if ($key === 'currency') {
+ $category = $received === null || $received === '' ? 'missing_field' : (preg_match('/^[A-Z]{3}$/D', $received) ? 'out_of_scope' : 'invalid_value');
+ $add($category, 'fiscal_currency', 'Moeda', $received, $expected, $category === 'missing_field' ? 'Indique a moeda da operação.' : 'Esta versão aceita apenas '.$expected.'. Reveja a moeda ou utilize um cálculo adequado à operação; a resposta não foi alterada.');
+ } elseif ($key === 'operation' && ! array_key_exists('operation', $context) && $expected === 'internal_general_net' && in_array($context['fiscal_operation'] ?? null, ['import', 'export', 'non_resident', 'refund'], true)) {
+ $add('out_of_scope', 'fiscal_operation', 'Operação', $context['fiscal_operation'], 'Operação interna à taxa geral, sobre base líquida já apurada', 'A operação declarada está excluída desta versão. Utilize um cálculo adequado à operação; não altere a resposta para obter um resultado.');
+ } elseif ($key === 'operation' && ! array_key_exists('operation', $context)) {
+ $add('system_configuration', 'fiscal_operation', 'Operação', $context['fiscal_operation'] ?? null, $expected === 'internal_general_net' ? 'Operação interna à taxa geral, sobre base líquida já apurada' : $expected, 'Limitação de integração do sistema: esta consulta não comunica o enquadramento específico exigido pela versão. A resposta genérica não permite inferi-lo. Utilize o formulário IVA — taxa geral, com declaração explícita do âmbito; não altere respostas para forçar compatibilidade.');
+ } elseif ($key === 'operation') {
+ $add($received === null || $received === '' ? 'missing_field' : 'out_of_scope', 'fiscal_operation', 'Operação', $received, $expected === 'internal_general_net' ? 'Operação interna à taxa geral, sobre base líquida já apurada' : $expected, 'A operação não está abrangida por esta versão; utilize um cálculo adequado à operação declarada.');
+ } else {
+ $add('system_configuration', null, 'Configuração da regra', null, 'Condições publicadas ligadas a campos deste formulário', 'O sistema não consegue relacionar todas as condições desta versão com o formulário. Não é uma falha das suas respostas.');
+ }
+ }
+ if (! SimulationFiscalSourceAcceptance::eligible($version['source'] ?? [], $version['source_sha256'] ?? null)
+ || ($version['source_version_no'] ?? null) !== ($version['source']['version_no'] ?? null)
+ || ($version['rule_definition']['language'] ?? null) !== 'investmoz.tax.v1') {
+ $add('system_configuration', null, 'Regra', null, 'Versão publicada com fonte e configuração coerentes', 'A configuração ou a fonte da regra não permite resolver este parâmetro. Não altere as respostas; é necessária correcção do sistema.');
+ }
+ if ($issues !== []) {
+ $source = array_intersect_key($version['source'] ?? [], array_flip(['title', 'diploma', 'article', 'url']));
+ $diagnostics[] = ['label' => 'IVA — taxa geral', 'rule_version' => $version['rule_version'], 'validity' => ['start' => $version['valid_from'], 'end' => $version['valid_until']], 'source' => $source, 'issues' => $issues];
+ }
+ }
+
+ return $diagnostics;
+ }
+}
diff --git a/app/Services/SimulationPublishedFiscal.php b/app/Services/SimulationPublishedFiscal.php
index 6416fbb7..2ecfa5eb 100644
--- a/app/Services/SimulationPublishedFiscal.php
+++ b/app/Services/SimulationPublishedFiscal.php
@@ -6,6 +6,7 @@ namespace App\Services;
use App\Models\InvestmentLegalSource;
use App\Models\SimulationTaxRuleVersion;
+use Brick\Math\BigRational;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@@ -35,8 +36,11 @@ final class SimulationPublishedFiscal
->where('scope_key', 'mz.internal-general-net.mzn');
}
- public function admit(array $input): array
+ public function admit(array $input, bool $missingBase = false): array
{
+ if (isset($input['monthly_sales'])) {
+ return $this->admitMonthly($input);
+ }
// Called inside createPayload, after idempotent replay, never by the worker.
abort_unless(DB::transactionLevel() > 0, 500);
abort_unless(config('simulation-fiscal-consumer.enabled'), 503,
@@ -63,6 +67,9 @@ final class SimulationPublishedFiscal
$input['reference_date'], $input['reference_date'], ['currency' => $input['currency'], 'operation' => $input['operation']]);
$rate = collect($resolution)->firstWhere('parameter_code', 'IVA_GENERAL_RATE');
$missing = [];
+ if ($missingBase) {
+ $missing[] = 'taxable_sales';
+ }
$evaluation = null;
if (! ($input['scope_declared'] ?? false)) {
$missing[] = 'operation_scope';
@@ -79,4 +86,51 @@ final class SimulationPublishedFiscal
return app(SimulationFiscalSnapshot::class)->build($version, $input, $resolution, $evaluation, $missing, true);
}
+
+ private function admitMonthly(array $input): array
+ {
+ $rows = [];
+ $baseTotal = BigRational::zero();
+ $vatTotal = BigRational::zero();
+ $complete = true;
+ $previous = null;
+ foreach ($input['monthly_sales'] as $sale) {
+ abort_unless($previous === null || $sale['date'] === date('Y-m-d', strtotime($previous.' +1 month')), 422, 'A projecção deve conter meses consecutivos, sem duplicações.');
+ $previous = $sale['date'];
+ $known = $sale['amount'] !== null && $sale['amount'] !== '';
+ $net = $input['sales_vat_basis'] === 'net';
+ $month = $this->admit(['base' => $known && $net ? $sale['amount'] : null,
+ 'currency' => $input['currency'], 'reference_date' => $sale['date'],
+ 'operation' => 'internal_general_net', 'scope_declared' => $input['scope_declared']], ! $known || ! $net);
+ $snapshot ??= $month;
+ $rate = collect($month['fiscal_provenance']['resolution'])->firstWhere('parameter_code', 'IVA_GENERAL_RATE');
+ $vat = $month['result']['value'];
+ $status = ! $known ? 'missing_sales' : (! $net ? 'unsupported_basis' : ($vat === null ? 'indeterminate' : 'calculated'));
+ $rows[] = ['date' => $sale['date'], 'sales_declared' => $sale['amount'],
+ 'net_sales' => $known && $net ? $sale['amount'] : null,
+ 'rate' => $vat !== null && ($rate['status'] ?? null) === 'resolved' ? $rate['value'] : null,
+ 'vat' => $vat, 'gross_sales' => $vat === null ? null : (string) BigRational::of($sale['amount'])->plus($vat)->toBigDecimal(),
+ 'status' => $status, 'rule_id' => $month['fiscal_provenance']['rule']['id'],
+ 'rule_version' => $month['fiscal_provenance']['rule']['rule_version']];
+ if ($vat === null) {
+ $complete = false;
+ } else {
+ $baseTotal = $baseTotal->plus($sale['amount']);
+ $vatTotal = $vatTotal->plus($vat);
+ }
+ }
+ $value = $complete ? (string) $vatTotal->toBigDecimal() : null;
+ $snapshot['base'] = $complete ? (string) $baseTotal->toBigDecimal() : null;
+ $snapshot['indicative_total'] = $value;
+ $snapshot['result']['value'] = $value;
+ $snapshot['result']['status'] = $complete ? 'calculated' : 'indeterminate';
+ $snapshot['result']['missing_inputs'] = $complete ? [] : ['monthly_sales_or_net_basis_or_scope'];
+ $snapshot['result']['explanation'] = 'IVA mensal sobre vendas declaradas sem IVA, pela versão publicada congelada na admissão. Valores com IVA incluído ou sem informação permanecem indeterminados. Não é imposto final a pagar.';
+ $snapshot['presentation']['value'] = $value;
+ $snapshot['intermediate'] = null;
+ $snapshot['monthly_projection'] = ['input' => $input, 'rows' => $rows,
+ 'cash_treatment' => 'Informação separada da tesouraria: os recebimentos declarados não são aumentados pelo IVA nem o IVA é deduzido como custo ou imposto a pagar. Calendário de cobrança e liquidação fiscal não é inferido.'];
+
+ return $snapshot;
+ }
}
diff --git a/app/Services/SimulationTaxParameterResolver.php b/app/Services/SimulationTaxParameterResolver.php
index e669c5f5..7fcaf329 100644
--- a/app/Services/SimulationTaxParameterResolver.php
+++ b/app/Services/SimulationTaxParameterResolver.php
@@ -53,9 +53,9 @@ final class SimulationTaxParameterResolver
* never executes a tax formula and requires each parameter to declare context.
*
* @param array $context
- * @return list>
+ * @return list>|array{parameters:list>,diagnostics:list>}
*/
- public function resolvePublishedForPeriod(string $component, string $periodStart, string $periodEnd, array $context): array
+ public function resolvePublishedForPeriod(string $component, string $periodStart, string $periodEnd, array $context, bool $diagnostics = false): array
{
$start = $this->date($periodStart);
$end = $this->date($periodEnd);
@@ -67,14 +67,14 @@ final class SimulationTaxParameterResolver
->join('investment_legal_sources as source', 'source.id', '=', 'rule.legal_source_id')
->where('rule.component', $component)
->where('rule.status', 'published')
- ->whereDate('rule.valid_from', '<=', $periodEnd)
- ->where(fn ($query) => $query->whereNull('rule.valid_until')->orWhereDate('rule.valid_until', '>=', $periodStart))
+ ->when(! $diagnostics, fn ($query) => $query->whereDate('rule.valid_from', '<=', $periodEnd)
+ ->where(fn ($query) => $query->whereNull('rule.valid_until')->orWhereDate('rule.valid_until', '>=', $periodStart)))
->where(fn ($query) => $query->where('source.validation_status', 'validated')->orWhere(fn ($fiscal) => $fiscal->where('source.validation_status', 'pending')->where('source.fiscal_acceptance->scope', 'fiscal_parameters')
->where('source.fiscal_acceptance->basis', 'Tempo-official-sources-20261008')
->whereRaw("source.fiscal_acceptance->>'sha256'=rule.source_sha256")))
->whereColumn('source.version_no', 'rule.source_version_no')
- ->whereDate('source.valid_from', '<=', $periodStart)
- ->where(fn ($query) => $query->whereNull('source.valid_until')->orWhereDate('source.valid_until', '>=', $periodEnd))
+ ->when(! $diagnostics, fn ($query) => $query->whereDate('source.valid_from', '<=', $periodStart)
+ ->where(fn ($query) => $query->whereNull('source.valid_until')->orWhereDate('source.valid_until', '>=', $periodEnd)))
->select([
'rule.id', 'rule.rule_code', 'rule.rule_version', 'rule.component', 'rule.scope_key',
'rule.valid_from', 'rule.valid_until', 'rule.parameters', 'rule.rule_definition',
@@ -121,7 +121,11 @@ final class SimulationTaxParameterResolver
];
})->all());
- return $this->resolveAvailableParameters($versions, $component, $periodStart, $periodEnd, $context);
+ $parameters = $this->resolveAvailableParameters($versions, $component, $periodStart, $periodEnd, $context);
+
+ $resolvedIva = array_filter($parameters, fn (array $parameter): bool => $parameter['parameter_code'] === 'IVA_GENERAL_RATE' && $parameter['status'] === 'resolved');
+
+ return $diagnostics ? ['parameters' => $parameters, 'diagnostics' => $resolvedIva !== [] ? [] : (new SimulationIvaDiagnostics)->explain($versions, $periodStart, $periodEnd, $context)] : $parameters;
}
/**
diff --git a/docs/investmoz/document-corpus-inventory-2026-10-06.csv b/docs/investmoz/document-corpus-inventory-2026-10-06.csv
index 628e79cc..80ccf32e 100644
--- a/docs/investmoz/document-corpus-inventory-2026-10-06.csv
+++ b/docs/investmoz/document-corpus-inventory-2026-10-06.csv
@@ -76,3 +76,5 @@
"Cópia privada ou derivado";"C:\laragon\www\portal-investidor\storage\app\private\portal-documents\5c860c48-e8cb-4d8d-ab9b-2e3ea7036ce2";"5c860c48-e8cb-4d8d-ab9b-2e3ea7036ce2";"1834284";"EA1B0DC6F5CF6E595F6D9A19E7042F398999E0087CAEF1785F6E8FAC571B5F53";"5c860c48-e8cb-4d8d-ab9b-2e3ea7036ce2";"";"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."
"Cópia privada ou derivado";"C:\laragon\www\portal-investidor\storage\app\private\portal-documents\64c46765-96b9-4f43-afc6-f5b730c010c4";"64c46765-96b9-4f43-afc6-f5b730c010c4";"440018";"CCF2A8DEECA820F2DD076B4B2141B1EFE3F6A806568C3A587CA59A8E92F4C251";"64c46765-96b9-4f43-afc6-f5b730c010c4";"";"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."
"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."
diff --git a/docs/investmoz/simulations/integrated-review-continuation-20261020-receipt.json b/docs/investmoz/simulations/integrated-review-continuation-20261020-receipt.json
index 11ebdbf4..167f4986 100644
--- a/docs/investmoz/simulations/integrated-review-continuation-20261020-receipt.json
+++ b/docs/investmoz/simulations/integrated-review-continuation-20261020-receipt.json
@@ -739,5 +739,877 @@
"fiscal_acceptance_column": true,
"active_database_changed": false
}
+ },
+ "authorised_fiscal_rollout_execution_20261021": {
+ "recorded_utc": "2026-10-21T10:57:04.072315+00:00",
+ "authorisation": "Tempo authorised incorporating 4a4d1212 and the remaining source/rule registration, publication and consumer activation in current conversation",
+ "integrated_delta": "4a4d1212751726da6a71d465b3ea2266e720cf28",
+ "integration_completed": true,
+ "served_revision": {
+ "commit": "d3fe8a02ec7f5dcd01984c4f4a1eba18b5a0cf19",
+ "branch": "main",
+ "built_at": "2026-10-21T10:48:46.529930+00:00",
+ "manifest_sha256": "f417509cfa060240801c6a956a787a90d0e283c3c08e77b5be655d63394a4cb9"
+ },
+ "team_merge": "d3fe8a02 includes 4a4d1212; fiscal files unchanged; additional team navigation/presentation changes preserved",
+ "backup_restore": {
+ "utc": "2026-10-21T10:43:03.077516+00:00",
+ "source_database": "teste_investidor",
+ "served_commit": "226fd308dd45d2805ef4678b20ca4398d7fef6c6",
+ "backup_directory": "/var/backups/investmoz/iva-rollout-20261021_104253",
+ "dump_sha256": "b37bf4aad0abd839bc81d70adf802535ad7738fabe75fda61d74f39dfc11e74b",
+ "dump_bytes": 4584693,
+ "environment_backup_sha256": "537eff52f0f28b83ccc56bf9a9b85c2d8fca1da2f678c30b929b46c67c09491b",
+ "environment_path": "/var/www/html/teste-investidor.tempo.co.mz/.env",
+ "restore_database": "iva_rollout_20261021_104253_test",
+ "restore_database_public_connect": false,
+ "restore_equal": true,
+ "table_count": 171,
+ "method": "Exported repeatable-read snapshot, custom pg_dump, isolated restore, all public table counts and canonical row hashes compared",
+ "active_data_writes": false,
+ "qa_fixture_imported": false
+ },
+ "schema_operation": {
+ "utc": "2026-10-21T10:44:11.639087+00:00",
+ "operation": "Explicit authenticated destination schema application of reviewed QA DDL; QA migration not executed or weakened",
+ "authorisation": "Tempo current conversation",
+ "ssh_actor": "root",
+ "database": "teste_investidor",
+ "migration": "2026_10_21_130000_correct_fiscal_maintenance_actor_constraints",
+ "migration_sha256": "66102bc9f2f546c9a76df5c3cc03b0bf14e0b9f7afbcf4b2c75db6a047b223f9",
+ "ddl_sha256": "89125b27f5a8ce3855c9a4c0d8abe4e5821a298f54a8e084607212bc10956cd2",
+ "backup_directory": "/var/backups/investmoz/iva-rollout-20261021_104253",
+ "existing_rows_preserved": true,
+ "unrelated_constraints_preserved": true,
+ "qa_fixture_imported": false
+ },
+ "schema_contract": {
+ "utc": "2026-10-21T10:46:20.853594+00:00",
+ "target": "4a4d1212751726da6a71d465b3ea2266e720cf28",
+ "reviewed_schema_delta": [
+ "database/migrations/2026_10_21_130000_correct_fiscal_maintenance_actor_constraints.php"
+ ],
+ "compatibility_decision": "Tempo authorised correction; reviewed destination DDL applied with restored backup and preserved existing rows. Consumer remains off. Executor retains no-migration policy.",
+ "schema_contract_sha256": "4bf1ed9c79a795e55f83785efad54ed6b5beb4ac205644887a9a672a352917ae"
+ },
+ "consumer_availability": {
+ "enabled": true,
+ "coverage_start": "2026-01-01",
+ "coverage_end": "2026-12-31",
+ "message": "IVA geral sobre base líquida disponível; enquadramento declarado."
+ },
+ "rule_publication_completed": true,
+ "consumer_activation_completed": true,
+ "qa_fixture_imported": false,
+ "accepted_calculation_export_proofs_repeated": false,
+ "user_local_file_review_claimed": false,
+ "legal_opinion_attributed_to_user": false,
+ "authentication_note": "Normal portal login and MFA completed by user through loopback-only browser helper. Real account nala@tempo.co.mz (ID15) performed source registration and all governance stages through existing HTTPS endpoints. Cookies remained in memory; password/MFA not logged or saved. Synthetic QA session not used. Tool-created console not visible to user and Edge automation timeouts were limitations of tooling; browser helper access succeeded manually.",
+ "real_rule": {
+ "id": "01a15e1a-5338-700f-8a45-f87707d696a7",
+ "rule_code": "IVA-GERAL-BASE-LIQUIDA",
+ "rule_version": 1,
+ "component": "IVA",
+ "scope_key": "mz.internal-general-net.mzn",
+ "valid_from": "2023-01-01",
+ "valid_until": null,
+ "status": "published",
+ "rule_definition": {
+ "nodes": {
+ "base": {
+ "op": "input",
+ "key": "base_tributavel"
+ },
+ "rate": {
+ "op": "parameter",
+ "key": "iva_general_rate"
+ },
+ "hundred": {
+ "op": "literal",
+ "value": "100"
+ },
+ "product": {
+ "op": "multiply",
+ "args": [
+ "base",
+ "rate"
+ ]
+ },
+ "intermediate": {
+ "op": "divide",
+ "args": [
+ "product",
+ "hundred"
+ ]
+ }
+ },
+ "result": "intermediate",
+ "language": "investmoz.tax.v1"
+ },
+ "parameters": {
+ "IVA_GENERAL_RATE": {
+ "unit": "percent",
+ "value": "16",
+ "conditions": {
+ "currency": "MZN",
+ "operation": "internal_general_net"
+ }
+ }
+ },
+ "rounding_policy": {
+ "ties": "not_applicable_without_rounding",
+ "method": "none",
+ "status": "not_applied",
+ "purpose": "operation_tax_not_payment",
+ "evidence": "Orientação expressa Tempo: calcular este lote IVA sem arredondamento automático; ficha v1.2",
+ "precision": "exact_decimal",
+ "aggregation": "single_declared_taxable_base",
+ "coverage_end": "2026-12-31",
+ "coverage_start": "2026-01-01"
+ },
+ "legal_source_id": "01a15e1a-44a8-7316-82ba-008c432609ef",
+ "source_version_no": 1,
+ "source_sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
+ "author_id": 15,
+ "reviewer_id": 15,
+ "approver_id": 15,
+ "publisher_id": 15,
+ "review_evidence": "Manutenção fiscal autorizada pela Tempo nesta conversa; ficha v1.2 e fontes oficiais aceites em08/10/2026. Mesma conta autorizada, sem parecer jurídico ou revisão independente. civa2016=01a15e1a-3f26-713b-8964-3511cb2fea08 SHA256 b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b; iva2022=01a15e1a-44a8-7316-82ba-008c432609ef SHA256 ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53; iva2025=01a15e1a-4dc2-7021-bbd4-6052db9fcf36 SHA256 ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251. Conferência técnica do cadastro contra a ficha e os exemplares já documentados. Excluídos preço comIVA incluído, taxas reduzidas, isenções, regimes especiais, importações, digitais não residentes, dedução/crédito/reembolso, incentivos, pagamento/declaração e outros impostos. Não certifica elegibilidade individual.",
+ "approval_evidence": "Manutenção fiscal autorizada pela Tempo nesta conversa; ficha v1.2 e fontes oficiais aceites em08/10/2026. Mesma conta autorizada, sem parecer jurídico ou revisão independente. civa2016=01a15e1a-3f26-713b-8964-3511cb2fea08 SHA256 b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b; iva2022=01a15e1a-44a8-7316-82ba-008c432609ef SHA256 ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53; iva2025=01a15e1a-4dc2-7021-bbd4-6052db9fcf36 SHA256 ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251. Aprovação operacional do lote delimitado já autorizada pela Tempo; não é validação jurídica atribuída ao utilizador. Estimativa de IVA calculado sobre base declarada, sem apuramento final do imposto a pagar. Precisão calculada distinta de apresentação monetária.",
+ "publication_evidence": "Manutenção fiscal autorizada pela Tempo nesta conversa; ficha v1.2 e fontes oficiais aceites em08/10/2026. Mesma conta autorizada, sem parecer jurídico ou revisão independente. civa2016=01a15e1a-3f26-713b-8964-3511cb2fea08 SHA256 b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b; iva2022=01a15e1a-44a8-7316-82ba-008c432609ef SHA256 ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53; iva2025=01a15e1a-4dc2-7021-bbd4-6052db9fcf36 SHA256 ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251. Publicação apenas da versão1 fundamentada. Taxa eficaz desde01/01/2023, cobertura do consumidor01/01/2026–31/12/2026. Activação continua separada. Suspensão recusa novas admissões; execuções admitidas conservam versão congelada, históricos e relatórios.",
+ "closure_evidence": null,
+ "submitted_at": "2026-10-21 10:55:47+00",
+ "reviewed_at": "2026-10-21T10:55:49.000000Z",
+ "approved_at": "2026-10-21T10:55:51.000000Z",
+ "published_at": "2026-10-21T10:55:53.000000Z",
+ "suspended_at": null,
+ "archived_at": null,
+ "version_no": 5,
+ "created_at": "2026-10-21T10:55:45.000000Z",
+ "updated_at": "2026-10-21T10:55:53.000000Z"
+ },
+ "real_sources": {
+ "civa2016": {
+ "id": "01a15e1a-3f26-713b-8964-3511cb2fea08",
+ "title": "Lei n.º 13/2016 — CIVA republicado",
+ "url": "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",
+ "diploma": "Lei 13/2016",
+ "article": "Arts. 1–4, 6–7, 15, 17(2), 27 do CIVA; art. 4 da Lei",
+ "competent_entity": "Assembleia da República de Moçambique",
+ "valid_from": "2017-01-01",
+ "valid_until": null,
+ "validation_status": "pending",
+ "owner_id": 15,
+ "validator_id": null,
+ "validated_at": null,
+ "version_no": 1,
+ "created_at": "2026-10-21T10:55:40.000000Z",
+ "updated_at": "2026-10-21T10:55:40.000000Z",
+ "fiscal_acceptance": {
+ "basis": "Tempo-official-sources-20261008",
+ "scope": "fiscal_parameters",
+ "sha256": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
+ "citation": "BR156, 10.º suplemento, 30/12/2016. PDF6–8,13–14,17–18: âmbito, base tributável declarada e cálculo. Taxa histórica 17% não utilizada. Consulta dirigida da ficha v1.2; não certifica anexos ou elegibilidade individual.",
+ "accepted_at": "2026-10-21T10:55:40.836454Z",
+ "legal_opinion": false,
+ "official_origin": "Boletim da República; exemplar do acervo oficial já aceite pela decisão Tempo de 08/10/2026, arquivado em docs/investmoz/simulations/source-archive/Lei-13-2016-CIVA-BR-156-10-suplemento.pdf. Cadastro fiscal rastreável; sem atribuição de parecer jurídico ou revisão independente à Tempo.",
+ "independent_review": false,
+ "responsible_user_id": 15
+ }
+ },
+ "iva2022": {
+ "id": "01a15e1a-44a8-7316-82ba-008c432609ef",
+ "title": "Lei n.º 22/2022 — republicação oficial do IVA",
+ "url": "https://www.inm.gov.mz/pt-br/content/assembleia-da-rep%C3%BAblica-suplemento-n%C2%BA-2-de-281222-pag-2252-25-42-br-n%C2%BA-250-boletim-da",
+ "diploma": "Lei 22/2022",
+ "article": "Art. 17(1) do CIVA e art. 6 da Lei",
+ "competent_entity": "Assembleia da República de Moçambique",
+ "valid_from": "2023-01-01",
+ "valid_until": null,
+ "validation_status": "pending",
+ "owner_id": 15,
+ "validator_id": null,
+ "validated_at": null,
+ "version_no": 1,
+ "created_at": "2026-10-21T10:55:42.000000Z",
+ "updated_at": "2026-10-21T10:55:42.000000Z",
+ "fiscal_acceptance": {
+ "basis": "Tempo-official-sources-20261008",
+ "scope": "fiscal_parameters",
+ "sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
+ "citation": "BR250, 2.º suplemento, 28/12/2022; PDF3/BR2252-(27): taxa geral 16%; PDF4, art.6: eficácia 01/01/2023. Exemplar republicado; publicação inicial sem efeito. Aplicação delimitada à base líquida declarada em MZN e cobertura do consumidor 2026, ficha v1.2.",
+ "accepted_at": "2026-10-21T10:55:42.246583Z",
+ "legal_opinion": false,
+ "official_origin": "Boletim da República; exemplar do acervo oficial já aceite pela decisão Tempo de 08/10/2026, arquivado em docs/investmoz/simulations/source-archive/Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf. Cadastro fiscal rastreável; sem atribuição de parecer jurídico ou revisão independente à Tempo.",
+ "independent_review": false,
+ "responsible_user_id": 15
+ }
+ },
+ "iva2025": {
+ "id": "01a15e1a-4dc2-7021-bbd4-6052db9fcf36",
+ "title": "Lei n.º 10/2025 — alterações ao CIVA, BR248 suplemento1",
+ "url": "https://www.at.gov.mz/api/webdav?path=%2FLEGISLA%C3%87%C3%83O%2FLEGISLA%C3%87%C3%83O%20FISCAL%2FLEI%2FBR_248_I_SERIE_SUPLEMENTO_2025.pdf",
+ "diploma": "Lei 10/2025",
+ "article": "Art. 1 (artigos alterados) e disposição de entrada em vigor",
+ "competent_entity": "Assembleia da República de Moçambique",
+ "valid_from": "2026-01-01",
+ "valid_until": null,
+ "validation_status": "pending",
+ "owner_id": 15,
+ "validator_id": null,
+ "validated_at": null,
+ "version_no": 1,
+ "created_at": "2026-10-21T10:55:44.000000Z",
+ "updated_at": "2026-10-21T10:55:44.000000Z",
+ "fiscal_acceptance": {
+ "basis": "Tempo-official-sources-20261008",
+ "scope": "fiscal_parameters",
+ "sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
+ "citation": "BR248, suplemento1, 29/12/2025, PDF12–15: Lei10/2025 efectiva 01/01/2026; não altera arts.15/17 nas disposições consultadas. Apoio à cadeia temporal 2026 do lote delimitado, não implementação de regimes ou obrigações adicionais.",
+ "accepted_at": "2026-10-21T10:55:44.576628Z",
+ "legal_opinion": false,
+ "official_origin": "Boletim da República; exemplar do acervo oficial já aceite pela decisão Tempo de 08/10/2026, arquivado em docs/investmoz/simulations/source-archive/BR-248-I-Suplemento-1-2025.pdf. Cadastro fiscal rastreável; sem atribuição de parecer jurídico ou revisão independente à Tempo.",
+ "independent_review": false,
+ "responsible_user_id": 15
+ }
+ }
+ },
+ "publication_events": [
+ {
+ "action": "submit",
+ "status": "submitted",
+ "version_no": 2,
+ "utc": "2026-10-21T10:55:48.179954+00:00"
+ },
+ {
+ "action": "review",
+ "status": "reviewed",
+ "version_no": 3,
+ "utc": "2026-10-21T10:55:50.198403+00:00"
+ },
+ {
+ "action": "approve",
+ "status": "approved",
+ "version_no": 4,
+ "utc": "2026-10-21T10:55:52.268896+00:00"
+ },
+ {
+ "action": "publish",
+ "status": "published",
+ "version_no": 5,
+ "utc": "2026-10-21T10:55:54.303429+00:00"
+ }
+ ],
+ "activation": {
+ "utc": "2026-10-21T10:55:58.330391+00:00",
+ "authorisation": "Tempo current conversation, separate consumer activation",
+ "served_revision": {
+ "commit": "d3fe8a02ec7f5dcd01984c4f4a1eba18b5a0cf19",
+ "branch": "main",
+ "built_at": "2026-10-21T10:48:46.529930+00:00",
+ "manifest_sha256": "f417509cfa060240801c6a956a787a90d0e283c3c08e77b5be655d63394a4cb9"
+ },
+ "rule": {
+ "id": "01a15e1a-5338-700f-8a45-f87707d696a7",
+ "rule_code": "IVA-GERAL-BASE-LIQUIDA",
+ "rule_version": 1,
+ "status": "published",
+ "source_sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
+ "legal_source_id": "01a15e1a-44a8-7316-82ba-008c432609ef",
+ "source_version_no": 1,
+ "version_no": 5,
+ "author_id": 15,
+ "reviewer_id": 15,
+ "approver_id": 15,
+ "publisher_id": 15
+ },
+ "consumer_enabled": true,
+ "configuration_keys_changed": [
+ "INVESTMOZ_IVA_CONSUMER_ENABLED",
+ "INVESTMOZ_IVA_CONSUMER_RULE_ID",
+ "INVESTMOZ_IVA_CONSUMER_RULE_VERSION"
+ ],
+ "other_configuration_preserved": true,
+ "before_environment_sha256": "537eff52f0f28b83ccc56bf9a9b85c2d8fca1da2f678c30b929b46c67c09491b",
+ "after_environment_sha256": "7cdaba591bb5787485a349c24db2fd7c8279436da0eb31502e44db2fffa21d03",
+ "histories_preserved": true,
+ "accepted_calculation_export_tests_repeated": false,
+ "qa_fixture_imported": false
+ },
+ "destination_delta_read_only": {
+ "utc": "2026-10-21T10:56:37.650967+00:00",
+ "read_only": true,
+ "served": {
+ "commit": "d3fe8a02ec7f5dcd01984c4f4a1eba18b5a0cf19",
+ "branch": "main",
+ "built_at": "2026-10-21T10:48:46.529930+00:00",
+ "manifest_sha256": "f417509cfa060240801c6a956a787a90d0e283c3c08e77b5be655d63394a4cb9"
+ },
+ "inventory": {
+ "sources": [
+ {
+ "id": "01a15e1a-3f26-713b-8964-3511cb2fea08",
+ "title": "Lei n.º 13/2016 — CIVA republicado",
+ "diploma": "Lei 13/2016",
+ "article": "Arts. 1–4, 6–7, 15, 17(2), 27 do CIVA; art. 4 da Lei",
+ "version_no": 1,
+ "validation_status": "pending",
+ "owner_id": 15,
+ "fiscal_acceptance": {
+ "basis": "Tempo-official-sources-20261008",
+ "scope": "fiscal_parameters",
+ "sha256": "b90dc7c14ecea2e378c4a62e8e5a47d54a5644c457baeb8b8053b92fd2a5710b",
+ "citation": "BR156, 10.º suplemento, 30/12/2016. PDF6–8,13–14,17–18: âmbito, base tributável declarada e cálculo. Taxa histórica 17% não utilizada. Consulta dirigida da ficha v1.2; não certifica anexos ou elegibilidade individual.",
+ "accepted_at": "2026-10-21T10:55:40.836454Z",
+ "legal_opinion": false,
+ "official_origin": "Boletim da República; exemplar do acervo oficial já aceite pela decisão Tempo de 08/10/2026, arquivado em docs/investmoz/simulations/source-archive/Lei-13-2016-CIVA-BR-156-10-suplemento.pdf. Cadastro fiscal rastreável; sem atribuição de parecer jurídico ou revisão independente à Tempo.",
+ "independent_review": false,
+ "responsible_user_id": 15
+ }
+ },
+ {
+ "id": "01a15e1a-44a8-7316-82ba-008c432609ef",
+ "title": "Lei n.º 22/2022 — republicação oficial do IVA",
+ "diploma": "Lei 22/2022",
+ "article": "Art. 17(1) do CIVA e art. 6 da Lei",
+ "version_no": 1,
+ "validation_status": "pending",
+ "owner_id": 15,
+ "fiscal_acceptance": {
+ "basis": "Tempo-official-sources-20261008",
+ "scope": "fiscal_parameters",
+ "sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
+ "citation": "BR250, 2.º suplemento, 28/12/2022; PDF3/BR2252-(27): taxa geral 16%; PDF4, art.6: eficácia 01/01/2023. Exemplar republicado; publicação inicial sem efeito. Aplicação delimitada à base líquida declarada em MZN e cobertura do consumidor 2026, ficha v1.2.",
+ "accepted_at": "2026-10-21T10:55:42.246583Z",
+ "legal_opinion": false,
+ "official_origin": "Boletim da República; exemplar do acervo oficial já aceite pela decisão Tempo de 08/10/2026, arquivado em docs/investmoz/simulations/source-archive/Lei-22-2022-IVA-republicada-BR-250-2-suplemento.pdf. Cadastro fiscal rastreável; sem atribuição de parecer jurídico ou revisão independente à Tempo.",
+ "independent_review": false,
+ "responsible_user_id": 15
+ }
+ },
+ {
+ "id": "01a15e1a-4dc2-7021-bbd4-6052db9fcf36",
+ "title": "Lei n.º 10/2025 — alterações ao CIVA, BR248 suplemento1",
+ "diploma": "Lei 10/2025",
+ "article": "Art. 1 (artigos alterados) e disposição de entrada em vigor",
+ "version_no": 1,
+ "validation_status": "pending",
+ "owner_id": 15,
+ "fiscal_acceptance": {
+ "basis": "Tempo-official-sources-20261008",
+ "scope": "fiscal_parameters",
+ "sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
+ "citation": "BR248, suplemento1, 29/12/2025, PDF12–15: Lei10/2025 efectiva 01/01/2026; não altera arts.15/17 nas disposições consultadas. Apoio à cadeia temporal 2026 do lote delimitado, não implementação de regimes ou obrigações adicionais.",
+ "accepted_at": "2026-10-21T10:55:44.576628Z",
+ "legal_opinion": false,
+ "official_origin": "Boletim da República; exemplar do acervo oficial já aceite pela decisão Tempo de 08/10/2026, arquivado em docs/investmoz/simulations/source-archive/BR-248-I-Suplemento-1-2025.pdf. Cadastro fiscal rastreável; sem atribuição de parecer jurídico ou revisão independente à Tempo.",
+ "independent_review": false,
+ "responsible_user_id": 15
+ }
+ }
+ ],
+ "rules": [
+ {
+ "id": "01a15e1a-5338-700f-8a45-f87707d696a7",
+ "rule_code": "IVA-GERAL-BASE-LIQUIDA",
+ "rule_version": 1,
+ "status": "published",
+ "valid_from": "2023-01-01",
+ "valid_until": null,
+ "legal_source_id": "01a15e1a-44a8-7316-82ba-008c432609ef",
+ "source_sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53",
+ "source_version_no": 1,
+ "version_no": 5,
+ "author_id": 15,
+ "reviewer_id": 15,
+ "approver_id": 15,
+ "publisher_id": 15
+ }
+ ],
+ "event_count": 5,
+ "historical_counts": {
+ "results": 0,
+ "reports": 0
+ }
+ },
+ "consumer": {
+ "database": "teste_investidor",
+ "binding": {
+ "enabled": true,
+ "rule_id": "01a15e1a-5338-700f-8a45-f87707d696a7",
+ "rule_version": 1
+ },
+ "availability": {
+ "enabled": true,
+ "coverage_start": "2026-01-01",
+ "coverage_end": "2026-12-31",
+ "message": "IVA geral sobre base líquida disponível; enquadramento declarado."
+ },
+ "parameter_resolution_without_calculation": {
+ "parameter_code": "IVA_GENERAL_RATE",
+ "status": "resolved",
+ "value": "16",
+ "unit": "percent",
+ "conditions": {
+ "currency": "MZN",
+ "operation": "internal_general_net"
+ },
+ "scope_key": "mz.internal-general-net.mzn",
+ "rule_code": "IVA-GERAL-BASE-LIQUIDA",
+ "rule_id": "01a15e1a-5338-700f-8a45-f87707d696a7",
+ "rule_version": 1,
+ "period": {
+ "start": "2026-10-21",
+ "end": "2026-10-21"
+ },
+ "validity": {
+ "start": "2023-01-01",
+ "end": null
+ },
+ "source": {
+ "title": "Lei n.º 22/2022 — republicação oficial do IVA",
+ "diploma": "Lei 22/2022",
+ "article": "Art. 17(1) do CIVA e art. 6 da Lei",
+ "url": "https://www.inm.gov.mz/pt-br/content/assembleia-da-rep%C3%BAblica-suplemento-n%C2%BA-2-de-281222-pag-2252-25-42-br-n%C2%BA-250-boletim-da",
+ "declared_sha256": "ea1b0dc6f5cf6e595f6d9a19e7042f398999e0087caef1785f6e8fac571b5f53"
+ }
+ }
+ },
+ "qa_fixture_imported": false,
+ "calculations_exporters_repeated": false
+ },
+ "remaining": []
+ },
+ "iva_query_diagnostic_qa_20261021": {
+ "recorded_utc": "2026-10-21T11:35:00.737064+00:00",
+ "scope": "QA only, parameter-query diagnosis; no calculation/export retest, no destination writes",
+ "reported_surface": "Componentes fiscais e contributivas, IVA_GENERAL_RATE, annual 2026-01-01 to2026-12-31, indeterminate_context",
+ "confirmed_origin": "Implementation integration gap: query sent fiscal_operation and no currency/operation, whereas the published IVA parameter requires operation=internal_general_net and currency=MZN. Resolver collapsed every mismatch to indeterminate_context and UI blamed responses without individual evidence.",
+ "original_answers_known": "Only the period/component/message were provided. No original currency or operation is asserted; USD/domestic are explicit directed QA cases, not inferred original answers.",
+ "diagnostic_categories": [
+ "missing_field",
+ "invalid_value",
+ "out_of_scope",
+ "period_unavailable",
+ "system_configuration"
+ ],
+ "changes": [
+ "Server projects each failed criterion, field, received value, expected criterion, source and exact rule version; no expression projection",
+ "Explicit fiscal_currency answer for IVA query, persisted and recovered; no copy/conversion from budget or IVA-base currency",
+ "Generic domestic is never silently equated to internal_general_net; integration limitation is explained and links to explicit IVA form",
+ "Inline notes plus summary links, human IVA — taxa geral label and Ver fundamento disclosure",
+ "Period diagnostic can inspect published candidates outside queried period under existing visibility policy; selection/calculation eligibility unchanged",
+ "No eligible visible candidate remains explicitly uncertain; no invented input fault"
+ ],
+ "verification": {
+ "new_unit_tests": 5,
+ "new_unit_assertions": 24,
+ "targeted_api_tests": 1,
+ "targeted_api_assertions": 16,
+ "existing_resolver_regression_tests": 7,
+ "existing_resolver_regression_assertions": 25,
+ "typescript": "passed",
+ "build": "passed, exit0",
+ "pint": "passed",
+ "edge": "Normal simulator query, annual2026; missing currency then explicitly chosen USD; inline/summary linked fields focused; source/version disclosure; USD and generic operation preserved after save/recovery; internal code and expression absent from query text",
+ "no_simulation_created_by_api_diagnostic": true
+ },
+ "qa_fixture": {
+ "rule_version": 3,
+ "state_after_proof": "suspended",
+ "consumer_enabled": false,
+ "database": "simulator_fiscal_delta_20261021_test",
+ "imported_into_homologation": false
+ },
+ "test_database": "simulator_fiscal_checks_20261021_test, existing QA schema correction applied before targeted API test; isolated guard preserved",
+ "proofs": [
+ "outputs/simulator-continuation-20261020/iva-diagnostic-api-test.txt",
+ "outputs/simulator-continuation-20261020/iva-diagnostic-summary.txt",
+ "outputs/simulator-continuation-20261020/iva-diagnostic-summary.png",
+ "outputs/simulator-continuation-20261020/iva-diagnostic-build-final.txt"
+ ],
+ "main_integrated": false,
+ "homologation_rule_changed": false,
+ "legal_coverage_expanded": false
+ },
+ "monthly_iva_projection_qa_20261021": {
+ "branch": "codex/iva-monthly-projection-QA",
+ "status": "candidate_verified_in_isolated_QA_only",
+ "source": "existing monthly product sales; saved constant cashflow revenue only when no business plan exists",
+ "basis": "explicit net/included/unknown; only net calculated; no silent conversion",
+ "selection": "published version selected by server; frozen at admission; same resolver/evaluator",
+ "cash_treatment": "separate IVA memorandum; declared receipts/payments unchanged; not cost, no inferred collection or final settlement",
+ "manual_tax": "custom planning only; never input into monthly IVA",
+ "unknown_vs_zero": "missing month indeterminate; explicit zero calculated as zero; aggregate indeterminate if any month unknown",
+ "tests": {
+ "api_tests": 3,
+ "api_assertions": 46,
+ "frontend_tests": 4,
+ "types": "passed",
+ "build": "passed",
+ "pint": "passed",
+ "accepted_calculation_and_exporter_proofs": "reused, not repeated"
+ },
+ "qa_fixture": {
+ "database": "simulator_fiscal_delta_20261021_test",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "rule_version": 4,
+ "consumer_enabled": true,
+ "synthetic": true,
+ "left_available_for_review": true,
+ "draft_id": "e0201d19-286e-4d5c-9585-2c1e3bd1ad1e"
+ },
+ "live_history": [
+ {
+ "id": "06566910-9672-4176-804d-aad8350417cb",
+ "status": "completed",
+ "created_at": "2026-10-21T11:57:11.000000Z",
+ "basis": "net",
+ "rows": [
+ {
+ "vat": "160.0048",
+ "date": "2026-01-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "1000.03",
+ "gross_sales": "1160.0348",
+ "rule_version": 4,
+ "sales_declared": "1000.03"
+ },
+ {
+ "vat": "320.0096",
+ "date": "2026-02-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "2000.06",
+ "gross_sales": "2320.0696",
+ "rule_version": 4,
+ "sales_declared": "2000.06"
+ },
+ {
+ "vat": "0",
+ "date": "2026-03-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "0.00",
+ "gross_sales": "0",
+ "rule_version": 4,
+ "sales_declared": "0.00"
+ },
+ {
+ "vat": null,
+ "date": "2026-04-01",
+ "rate": null,
+ "status": "missing_sales",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": null,
+ "gross_sales": null,
+ "rule_version": 4,
+ "sales_declared": null
+ }
+ ],
+ "total": null,
+ "reports": [
+ {
+ "id": "42b95158-6c4c-43c6-801d-28e973a087a6",
+ "same_snapshot": true,
+ "sha256": "b6d10565f82f7e83952fbdbb15a357ca3a7fee550e53c80a0ef5b9e314ccfa68"
+ }
+ ]
+ },
+ {
+ "id": "098900ed-2f5f-4141-98c8-08f892912a5b",
+ "status": "completed",
+ "created_at": "2026-10-21T11:57:34.000000Z",
+ "basis": "net",
+ "rows": [
+ {
+ "vat": "480.0144",
+ "date": "2026-01-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "3000.09",
+ "gross_sales": "3480.1044",
+ "rule_version": 4,
+ "sales_declared": "3000.09"
+ },
+ {
+ "vat": "320.0096",
+ "date": "2026-02-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "2000.06",
+ "gross_sales": "2320.0696",
+ "rule_version": 4,
+ "sales_declared": "2000.06"
+ },
+ {
+ "vat": "0",
+ "date": "2026-03-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "0.00",
+ "gross_sales": "0",
+ "rule_version": 4,
+ "sales_declared": "0.00"
+ },
+ {
+ "vat": null,
+ "date": "2026-04-01",
+ "rate": null,
+ "status": "missing_sales",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": null,
+ "gross_sales": null,
+ "rule_version": 4,
+ "sales_declared": null
+ }
+ ],
+ "total": null,
+ "reports": [
+ {
+ "id": "44211195-0a53-4f4c-93ef-6ff0e439082b",
+ "same_snapshot": true,
+ "sha256": "5de00868029b7a688585e180bcd8fbef1e46e289b19ab766c58f7406fb2af972"
+ }
+ ]
+ },
+ {
+ "id": "96eec0d8-effa-4286-b465-6af50f756db4",
+ "status": "completed",
+ "created_at": "2026-10-21T11:58:35.000000Z",
+ "basis": "included",
+ "rows": [
+ {
+ "vat": null,
+ "date": "2026-01-01",
+ "rate": null,
+ "status": "unsupported_basis",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": null,
+ "gross_sales": null,
+ "rule_version": 4,
+ "sales_declared": "3000.09"
+ },
+ {
+ "vat": null,
+ "date": "2026-02-01",
+ "rate": null,
+ "status": "unsupported_basis",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": null,
+ "gross_sales": null,
+ "rule_version": 4,
+ "sales_declared": "2000.06"
+ },
+ {
+ "vat": null,
+ "date": "2026-03-01",
+ "rate": null,
+ "status": "unsupported_basis",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": null,
+ "gross_sales": null,
+ "rule_version": 4,
+ "sales_declared": "0.00"
+ },
+ {
+ "vat": null,
+ "date": "2026-04-01",
+ "rate": null,
+ "status": "missing_sales",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": null,
+ "gross_sales": null,
+ "rule_version": 4,
+ "sales_declared": null
+ }
+ ],
+ "total": null,
+ "reports": [
+ {
+ "id": "821e6347-680c-4029-9756-c3169d79f85e",
+ "same_snapshot": true,
+ "sha256": "06abadc593e65cfff64d208fac6cac3a8f98db4bef92795a27ce637fe7958cec"
+ }
+ ]
+ },
+ {
+ "id": "e88aaaea-4482-4b7d-869f-f0648a430651",
+ "status": "completed",
+ "created_at": "2026-10-21T12:00:32.000000Z",
+ "basis": "net",
+ "rows": [
+ {
+ "vat": "480.0144",
+ "date": "2026-01-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "3000.09",
+ "gross_sales": "3480.1044",
+ "rule_version": 4,
+ "sales_declared": "3000.09"
+ },
+ {
+ "vat": "320.0096",
+ "date": "2026-02-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "2000.06",
+ "gross_sales": "2320.0696",
+ "rule_version": 4,
+ "sales_declared": "2000.06"
+ },
+ {
+ "vat": "0",
+ "date": "2026-03-01",
+ "rate": "16",
+ "status": "calculated",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": "0.00",
+ "gross_sales": "0",
+ "rule_version": 4,
+ "sales_declared": "0.00"
+ },
+ {
+ "vat": null,
+ "date": "2026-04-01",
+ "rate": null,
+ "status": "missing_sales",
+ "rule_id": "01a15e50-7972-72e0-8991-82ca28df9b49",
+ "net_sales": null,
+ "gross_sales": null,
+ "rule_version": 4,
+ "sales_declared": null
+ }
+ ],
+ "total": null,
+ "reports": [
+ {
+ "id": "bc204cc7-1f0c-4468-80fa-e093642a5eac",
+ "same_snapshot": true,
+ "sha256": "4ed224f7de50b533f144f7f411d240eb1ccca6f3e5bff7a64b1eca6f6d7971dc"
+ }
+ ]
+ }
+ ],
+ "main_integrated": false,
+ "homologation_changed": false,
+ "rule_publication_on_destination": false,
+ "coverage_expanded": false,
+ "limitations": [
+ "IVA included prices unsupported in current net lot",
+ "2026 only, max 12 consecutive months",
+ "no final payable, deductions, refunds, special/reduced/exempt regimes",
+ "examples prove arithmetic/integration, not legal eligibility of every transaction"
+ ],
+ "remaining": "Tempo review/decision for code integration; no further generic preparation identified; keep real rule/publication/activation separate",
+ "proof_directory": "outputs/simulator-continuation-20261020"
+ },
+ "modelo_a_reconciliation_qa_20261021": {
+ "branch": "codex/iva-modelo-a-reconciliation-QA",
+ "parent_candidate": "3f5430c3",
+ "status": "documentary_and_first_interface_increment_verified; full IVA settlement remains incomplete",
+ "reference": "docs/investmoz/simulations/modelo-a-reconciliacao-20261021.md",
+ "originals": [
+ {
+ "id": "fbfa820d-29d5-4bf8-9f81-534931d80cef",
+ "file_name": "Novo Modelo A.docx",
+ "sha256": "62c198e90d8c6792f7d5ccefc6386df2e4b6089573067d3a6e1eae7fc2b9572b",
+ "status": "active",
+ "malware_scan_status": "clean",
+ "malware_scanned_sha256": "62c198e90d8c6792f7d5ccefc6386df2e4b6089573067d3a6e1eae7fc2b9572b"
+ },
+ {
+ "id": "cf8b799e-44de-4497-b2e3-a5c468f2fe0e",
+ "file_name": "Novo Modelo A v1.docx",
+ "sha256": "63d45fa80db17a60b43619d55a25813229d670d14c758273f86316285db8e02b",
+ "status": "active",
+ "malware_scan_status": "clean",
+ "malware_scanned_sha256": "63d45fa80db17a60b43619d55a25813229d670d14c758273f86316285db8e02b"
+ }
+ ],
+ "library_qa_only": true,
+ "resources": [
+ 33,
+ 34
+ ],
+ "published": false,
+ "inventory": "Existing document corpus inventory extended; private inventory of all seven accessible Notes files preserved",
+ "read": "OOXML text plus embedded image2.png visually inspected; image identical in both originals; source unchanged; all three LibreOffice reading pages inspected, field25 confirmed visually; conversion layout drift is not a replacement original",
+ "coverage": {
+ "fields_mapped": "01–27",
+ "frames_mapped": "1–13 plus ambiguously numbered prior-credit block",
+ "calculated": "Existing net general-rate component01/02 only",
+ "totals14_to18": "indeterminate, not inferred from VAT on sales"
+ },
+ "implemented": [
+ "Consultable field/purpose/data/calculation/basis/status table in normal QA simulator",
+ "Existing purchase schedules reused independently of sales completeness",
+ "Net/supported VAT/gross/deductible VAT kept separate and unknown without classification",
+ "Partial simulation marker in report; historical server snapshots not rewritten"
+ ],
+ "documentary_discrepancies": [
+ "Regularization prose11/12 versus boxes12/13",
+ "Credit note18/19 versus block19/20",
+ "Refund noteart20 versus art21 amended in2025",
+ "Ambiguous frame8 remissions; repeated25 was extraction artifact, one box25 confirmed visually"
+ ],
+ "official_sources_read": [
+ "Existing Lei22/2022 PDF4 art17-A and entry into force",
+ "Existing Lei10/2025 BR248 PDF12–15; visualPDF13/14"
+ ],
+ "unresolved": [
+ "Exact approved edition of form for period",
+ "Consolidation of relevant base provisions, Lei3/2025 and regulations for each extension",
+ "Operation-level scopes, eligibility, documents and effective dates for reduced rate/deduction"
+ ],
+ "tool_limits": [
+ "Direct AT form page timed out; indexed page has different frame numbering, not used as replacement",
+ "Current chat attachment was not exposed as a local attachment; exact-named local Tempo Notes exemplar used with hash disclosed"
+ ],
+ "tests": {
+ "new_frontend_tests": 3,
+ "types": "passed",
+ "build": "passed",
+ "browser": "new correspondence/purchases/report annotations only, no new calculation",
+ "import": "preview/private import/clean hash-matched scan/idempotent replay with zero duplicates"
+ },
+ "reused_proofs": [
+ "published rate selection",
+ "decimal calculation",
+ "monthly recovery",
+ "idempotency/suspension/history",
+ "CSV/DOCX/PDF exporters"
+ ],
+ "next_lot_estimate": {
+ "cadastre_and_consolidation_hours": [
+ 8,
+ 16
+ ],
+ "code_and_acceptance_hours": [
+ 20,
+ 36
+ ],
+ "total_hours": [
+ 28,
+ 52
+ ],
+ "excludes": "prior credits/substitutions/payment/refund and full fiscal coverage"
+ },
+ "main_integrated": false,
+ "homologation_changed": false,
+ "new_rules_registered": false,
+ "new_rules_published": false,
+ "consumer_activation_changed": false,
+ "proof_directory": "outputs/modelo-a-20261021"
}
}
diff --git a/docs/investmoz/simulations/modelo-a-reconciliacao-20261021.md b/docs/investmoz/simulations/modelo-a-reconciliacao-20261021.md
new file mode 100644
index 00000000..926253a2
--- /dev/null
+++ b/docs/investmoz/simulations/modelo-a-reconciliacao-20261021.md
@@ -0,0 +1,93 @@
+# Reconciliação do IVA com o Novo Modelo A
+
+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
+
+Exemplar exacto: **Novo Modelo A.docx**, 532008bytes, SHA256 **62c198e90d8c6792f7d5ccefc6386df2e4b6089573067d3a6e1eae7fc2b9572b**. Localizado na pasta de notas do portal indicada no inventário privado desta execução, não substituído por formulário genérico ou pela página da AT. O quadro1–8 é imagem incorporada: word/media/image2.png, SHA2567ae7f02efca96323087d0dfa5f3078b4ae724318edd5b6c4802c863d840bdf66, conferida visualmente sobre fundo branco para tornar legível a transparência. Os blocos seguintes e respectivas instruções foram extraídos do OOXML. Também se conferiram visualmente as três páginas da conversão de leitura em LibreOffice: quadros1–8 na primeira, créditos/quadros9–13 na segunda e apenas o rodapé de distribuição na terceira. A conversão apresenta deslocações de texto; serve para leitura, não é versão corrigida ou reprodução fiel para entrega. Nenhum DOCX original foi alterado, nem se afirmou edição oficial vigente pela simples leitura.
+
+Também inventariado e conservado **Novo Modelo A v1.docx**, 532100bytes, SHA25663d45fa80db17a60b43619d55a25813229d670d14c758273f86316285db8e02b. A mesma imagem é byte a byte igual; a extracção textual difere na segmentação de palavras. São originais distintos, não duplicados por bytes, conservados sem renomear uma revisão como diploma novo. A criação OOXML em21/10/2026 não é data de aprovação ou vigência do formulário.
+
+Biblioteca QA existente, clone simulator_fiscal_delta_20261021_test: recurso33/documento fbfa820d-29d5-4bf8-9f81-534931d80cef (original) e recurso34/documento cf8b799e-44de-4497-b2e3-a5c468f2fe0e (v1). Pré-visualização, hash, conflitos de identidade/bytes, importação privada idempotente, revisão/auditoria e scan reais reutilizados; ambos limpos com o hash analisado igual ao original. **Não publicados**; consulta privada e estado documental não activam cálculo. Actor166 é fixture QA já existente, configurada apenas neste processo de ensaio da administração da biblioteca, sem atribuir função real da Tempo ou alterar permissões persistentes. Nenhuma importação no destino activo. A aceitação oficial da Tempo08/10 é preservada; os estados genéricos do importador não a revogam nem certificam vigência.
+
+## Correspondência dos quadros
+
+| Quadro/bloco no exemplar | Finalidade e dados existentes | Delta/limite |
+|---|---|---|
+|1 — Tipo de declaração|Inicial/substituição; não corresponde a criar versão de uma projecção|Não simular uma declaração efectiva; futura ligação a declaração anterior separada de versões de planeamento|
+|2 — Período/prazo|Meses da projecção disponíveis; não prova de entrega dentro/fora do prazo|Calendário fiscal e entrega efectiva por integrar; nunca marcar submissão pela data da simulação|
+|3 — NUIT/sucursal/Área Fiscal|Identificação guardada no dossier quando disponível|Reutilização com confirmação específica; não exigir NUIT para planear nem inferir enquadramento fiscal|
+|4 — Nome/designação|Identificação privada existente|Não copiar para documento público; tratar como dado efectivo só se confirmado|
+|5 — Actividade/CAE|Actividade/sector existentes; não garantem CAE ou taxa|Correspondência CAE e classificação por operação, sem converter sector em incidência|
+|6 — Domicílio fiscal|Localização e contactos do dossier|Domicílio do projecto não prova domicílio fiscal; recolher apenas diferença/confirmar contexto|
+|7 — Inexistência de operações|Zero de vendas é conhecido, mas aquisições podem existir|Não assinalar inexistência por vendas zero ou campos vazios; precisa de todas as operações activas/passivas|
+|8 — Apuramento|Campos01–18; componente01/02 disponível no âmbito actual|Demais bases, imposto suportado/dedutível e regularizações continuam indeterminados|
+|Utilização de créditos anteriores|Campos19/20; o texto remete novamente para quadro8|Registar remissão ambígua; créditos efectivos e comunicados distintos de estimativas/pedidos|
+|9 — Substituições|Campo21 e referências17/18 da actual/substituída|Guardar a relação entre declarações efectivas; uma nova simulação não substitui declaração|
+|10 — Entrega ao Estado|Campos22–24, meios de pagamento|Sem pagamento ou guia gerada; caixa prevista não prova liquidação|
+|11 — Recuperação|Campos25–27, reporte e pedido|Separar crédito, pedido, reconhecimento e recebimento; não gerar reembolso automático|
+|12 — Autenticação|Data/nome/assinatura do sujeito passivo|Autenticação do portal não assina nem submete Modelo A|
+|13 — Serviços|Entrada/inserção/receita/funcionário/recebedor|Reservado à AT; não preencher ou imitar aceitação administrativa|
+
+## Correspondência campo a campo
+
+Os rótulos de finalidade são explicativos; não corrigem a imagem nem substituem o original. Fórmulas impressas estão mapeadas, não activadas por este registo. Ausência de componente não equivale a zero.
+
+|Campo do Modelo A|Finalidade|Origem dos dados|Cálculo|Fundamento|Já implementado/em falta|
+|---|---|---|---|---|---|
+|01|Base das operações à taxa geral|Vendas mensais já projectadas, declaradas sem IVA e no âmbito geral|Base líquida do mês|CIVA arts.15 e 17; Lei22/2022; regra publicada existente|Implementado no âmbito declarado|
+|02|IVA à taxa geral|Resultado mensal congelado no servidor|Campo01 × taxa da versão publicada /100|CIVA art.17(1); mesma regra/versionamento do consumidor|Implementado; componente do apuramento|
+|03|Base de operações específicas à taxa reduzida|Operações separadas e enquadradas; ainda não recolhidas|Base das operações elegíveis|Exemplar e CIVA art.17-A, aditado pela Lei22/2022; enquadramento a cadastrar|Em falta; não assumir zero|
+|04|IVA à taxa reduzida|Campo03 e futura versão fundamentada|Campo03 × taxa reduzida aplicável; não activa pelo exemplar|CIVA art.17-A; âmbito/versão temporal a integrar|Em falta; não assumir zero|
+|05|Vendas isentas com direito à dedução|Vendas classificadas por operação e fundamento|Soma das bases classificadas; sem taxa presumida|Exemplar; CIVA arts.9–14 e 18–20 a consolidar por operação|Em falta; não assumir zero|
+|06|Operações da alínea b), n.º1, art.18, conforme exemplar|Operações classificadas com referência verificada|Soma separada; não inferir do nome do sector|Remissão do exemplar ao art.18(1)(b); cotejo do âmbito necessário|Em falta; não assumir zero|
+|07|Isentas sem direito à dedução|Vendas classificadas e uso das aquisições|Soma das bases elegíveis|Exemplar; incidência/isenções e exclusões de dedução a fundamentar|Em falta; não assumir zero|
+|08|IVA dedutível — imobilizado|Aquisições/facturas de activos, não o valor global do investimento|Apenas imposto elegível documentado|CIVA arts.18–21; art.18(2), Lei10/2025: documentos legais e fornecedor inscrito|Em falta; não assumir zero|
+|09|IVA dedutível — existências|Compras projectadas reutilizáveis; falta IVA, documento e elegibilidade|IVA elegível das existências, não compras × taxa geral|CIVA arts.18–21; condições/exclusões, afectação e período|Em falta; não assumir zero|
+|10|IVA dedutível — outros bens/serviços|Aquisições discriminadas; despesas agregadas não provam IVA|IVA elegível; excluir operações sem direito|CIVA arts.18–21; art.19(2), Lei10/2025, inclui exclusão das operações art.17-A|Em falta; não assumir zero|
+|11|IVA dedutível — importações|Documento aduaneiro legal e afectação; ainda não recolhidos|Imposto aduaneiro elegível, não taxa sobre orçamento|CIVA art.18(2), Lei10/2025; demais condições/exclusões a cadastrar|Em falta; não assumir zero|
+|12|Regularizações a favor do sujeito passivo|Ajustamentos individualizados, documento e motivo|Soma de regularizações elegíveis|Exemplar tem remissão interna 11/12 divergente das caixas12/13; fundamento por motivo por conferir|Em falta; não assumir zero|
+|13|Regularizações a favor do Estado|Ajustamentos individualizados, documento e motivo|Soma separada das regularizações elegíveis|Mesma divergência; não corrigir o original nem inventar incidência|Em falta; não assumir zero|
+|14|Soma das bases do quadro de apuramento|Campos01,03,05,06,07 completos|01+03+05+06+07|Fórmula impressa no exemplar; não é apenas vendas tributáveis|Estrutura mapeada; total indeterminado|
+|15|Total a favor do sujeito passivo|Campos08–12 completos|08+09+10+11+12|Fórmula do exemplar; depende de deduções/regularizações fundamentadas|Estrutura mapeada; total indeterminado|
+|16|Total a favor do Estado|Campos02,04,13 completos|02+04+13|Fórmula impressa no exemplar; 02 sozinho não equivale a16|Estrutura mapeada; total indeterminado|
+|17|Diferença devedora antes de créditos anteriores|Totais15/16 completos|16−15 quando16>15|Instrução do exemplar; não é automaticamente pagamento|Indeterminado; sem consolidação completa|
+|18|Diferença credora antes de créditos anteriores|Totais15/16 completos|15−16 quando15>16|Instrução do exemplar; não constitui reembolso reconhecido|Indeterminado; sem consolidação completa|
+|19|Excesso a reportar do período anterior|Histórico fiscal anterior confirmado, separado de estimativas|Crédito anterior utilizável; sem copiar crédito estimado|Quadro de utilização de créditos do exemplar; condições/prazo por conferir|Em falta; não assumir zero|
+|20|Créditos comunicados pelos serviços|Comunicação efectiva da Administração Fiscal|Crédito efectivamente comunicado e utilizável|Exemplar; não converter pedido ou crédito estimado em comunicação|Em falta; não assumir zero|
+|21|Diferencial de declaração de substituição|Valores17/18 da declaração actual e da substituída|Casos impressos no quadro9, com sinal devedor/credor|Exemplar; ligação às declarações efectivas e regras de substituição em falta|Em falta; não assumir zero|
+|22|IVA a entregar no contexto da declaração|Apuramento e créditos/substituição completos|Não derivar apenas do campo02|Quadro10 do exemplar; procedimento aplicável por fundamentar|Em falta; não assumir zero|
+|23|Juros compensatórios|Factos e períodos que legalmente os determinem|Sem taxa, mora ou obrigação presumidas|Quadro10; fundamento específico não analisado neste lote|Em falta; não assumir zero|
+|24|Importância a pagar|Campos22/23 completos|22+23|Fórmula do exemplar; não é ordem nem execução de pagamento|Em falta; não assumir zero|
+|25|Crédito de imposto do quadro11|Apuramento completo e tratamento dos créditos anteriores|Montante recuperável no contexto próprio, por fundamentar|Caixa25 confirmada visualmente no bloco de recuperação; condições por consolidar|Em falta; não assumir zero|
+|26|Reporte para período seguinte|Crédito utilizável e opção no quadro11|Separado de pedido e recebimento|Quadro11; cotejo de condições/prazos e articulação19/20 necessário|Em falta; não assumir zero|
+|27|Pedido de reembolso|Crédito elegível e pedido, sem presumir reconhecimento/caixa|Pedido distinto de aprovação e recebimento|Exemplar cita art.20; Lei10/2025 altera reembolsos no art.21. Divergência registada.|Em falta; não assumir zero|
+
+## Cotejo documental para o período2026
+
+Reutilizados os exemplares oficiais aceites e arquivados em source-archive, a fichaIVA existente e a análise primária; não se pede nova autenticação genérica das fontes. Leitura dirigida agora: Lei22/2022, art.2/aditamento17-A, PDF4/BR2252-(28), e art.6, eficácia01/01/2023; Lei10/2025 no BR248/suplemento1, PDF12–15, especialmente arts.18,19,21 na PDF13/BR2180-(13), arts.32/34 na PDF14. Páginas13 e14 de2025 e página4 de2022 renderizadas para confronto. Não se afirma revisão integral de todo o CIVA ou de todas as alterações/regulamentos.
+
+- Campo01/02: taxa geral e base líquida já fundamentadas pela ficha existente; não reabrir a prova do motor.
+- Campo03/04: o art.17-A aditado pela Lei22/2022 identifica serviços médicos/sanitários de estabelecimentos privados indicados; ensino por estabelecimentos privados integrados e reconhecidos; formação profissional por entidades privadas; lições pessoais escolares/superiores. Esta enumeração não classifica automaticamente uma empresa ou toda a sua facturação. Falta cadastro/integração do âmbito temporal e classificação por linha; não se publica uma regra5% com base apenas no formulário.
+- Aquisições: Lei10/2025, art.18(2), exige os documentos legais indicados e inscrição do fornecedor; art.18(6) trata proporcionalidade em certas bases reduzidas. Art.19(2) exclui o direito relativo às operações do art.17-A e às indicadas no art.15(6)(c). Portanto, o valor das compras ou o IVA suportado não podem ser automaticamente dedutíveis. Arts.18(1),19(1),20,21 e22, exclusões, afectação, pro rata e momento de dedução precisam de consolidação para cada futuro lote; os trechos[...] da lei alteradora não substituem o texto-base.
+- Reembolso: a nota do exemplar cita art.20. A Lei10/2025 altera no art.21 condições e prazos de reembolso/crédito, incluindo números7/8/10/13/15. Registar a divergência; não transplantar prazos ou limites isolados para regras de elegibilidade. Crédito não é recebimento garantido.
+- Preços com IVA incluído: art.34 na redacção de2025 prevê método específico para apurar a base e referência a arredondamento nesse contexto. Não é regra universal para o cálculo líquido, nem autorização para aplicar16% ao bruto. O consumidor actual continua a preservar o bruto e a não o calcular. A extensão requer implementação própria e casos dirigidos; não reabre como bloqueio o arredondamento já resolvido para base líquida.
+- Declaração/período: art.32 alterado em2025 distingue situações/prazos. Não se decide entrega fora/dentro do prazo por ser uma projecção futura. O exemplar instrui terminar no quadro8 em certos casos; essa instrução não está activa como regra de software.
+
+**Divergências preservadas:** linha de regularizações diz campo11/12 mas caixas12/13; utilização de créditos cita campos18/19, enquanto as caixas desse bloco são19/20; nota de reembolso cita art.20 e as alterações de2025 tratam a matéria no art.21; remissões de quadro8 são ambíguas; a repetição25 foi um artefacto da extracção textual, não uma duplicação de campo no formulário, cuja caixa25 foi confirmada visualmente. Não se fez correcção silenciosa nem se apresentou uma transcrição com ambiguidades como fórmula legal inequívoca.
+
+Pesquisa oficial21/10/2026: [página AT Modelo A](https://edeclaracao.at.gov.mz/formularios/iva/view/formulario_iva_ma.aspx) tem resultado indexado com apuramento no quadro5, diferente do quadro8 deste exemplar. A abertura directa expirou; não se descarregou formulário substituto nem se certificou qual é a edição vigente. [INM BR248/2025](https://inm.gov.mz/pt-br/content/sum%C3%A1rio-suplemento-n%C2%BA-1-de-291225-pag-2180-1-20-br-n%C2%BA-248-boletim-da-rep%C3%BAblica-i-serie-p%C3%A1g-1) identifica a Lei10/2025. O [comunicado governamental de30/09/2026](https://portaldogoverno.gov.mz/governo-introduz-alteracoes-nos-regulamentos-fiscais-para-reforcar-eficiencia-tributaria/) anuncia alterações regulamentares; não fornece por si o articulado para cadastrar novos critérios. A edição exacta aplicável do formulário, correspondência da Lei3/2025 referida na Lei10/2025 e regulamentos pertinentes permanecem por localizar/consolidar no lote respectivo. Nenhuma destas pendências é convertida em bloqueio genérico do cálculo líquido16% já aceite.
+
+Inventário complementar sem utilização automática: Downloads/IVA-2025.pdf(83páginas, consolidação com leis listadas na capa, origem oficial do exemplar ainda não identificada), iva.pdf(8páginas sem texto extraível nas duas primeiras) e alteracao CIVA2023(18páginas, BR250/2022, já corresponde ao acervo arquivado) foram localizados. Não se usa a consolidação de programação ou uma cópia sem identificação como substituto do BR. O inventário global anterior e as fontes não analisadas permanecem conservados.
+
+## Delta entregue e execução progressiva restante
+
+**Entregue nesta candidataQA:** correspondência consultável dos27campos, quadros documentados, resumo mensal rotulado como simulação parcial01/02, notas no relatório sem reescrever os snapshots aceites, reutilização das compras/encomendas activas (por produto, calendário ou constante) mantendo zero distinto de falta e base/IVA/dedução separados e indeterminados. Não transforma custo das vendas, depreciação, pagamento de fornecedor, investimento global ou compra no imposto dedutível. Sem taxa nova no formulário, novo motor, migration, regra publicada ou activação.
+
+**Próximo lote implementável delimitado:** classificação fiscal por operação de venda e aquisição, com pressuposto ou dado efectivo identificados; tipos de documento, datas, fornecedor/inscrição quando aplicável, utilização e exclusões; separar net/IVA/gross sem repetir quantidade/preço. Reutilizar planos como fontes, pedir apenas a classificação e o que falta; registar ligações/versionamento do dado de origem, não copiar e divergir. Dados efectivos não substituem previsões históricas nem herdam automaticamente as declarações de âmbito da projecção. No cadastro, configurar versões/âmbitos/condições da taxa5% e das deduções apenas após consolidar os dispositivos pertinentes; testes de operações excluídas e entradas insuficientes antes de publicar. Depois ligar totais14–18 através do avaliador existente, propagando indeterminação até todas as parcelas estarem conhecidas ou explicitamente sem operações. Num lote posterior, créditos anteriores/substituições/pedido e liquidação, preservando comunicação/reconhecimento/caixa separados. A publicação/activação são operações expressas distintas da integração do código.
+
+Estimativa de saldo, não horas medidas nem compromisso de cobertura integral: **cadastro/consolidação8–16h** (classificação5%, deduções do primeiro âmbito, exemplos e correspondências) e **código/aceitação20–36h** (dados por operação8–14h; ligação a versões/dedução e totais8–14h; histórico/relatório/coerência4–8h), **28–52h** para o próximo lote delimitado. Créditos anteriores, substituições, pagamento/reembolso e cobertura integral ficam fora desta estimativa e exigem delimitação própria; não reutilizar as antigas15–26h como estimativa desta ampliação. Perguntas concretas ainda abertas: edição/norma de aprovação do formulário para o período e dispositivos consolidados pertinentes; não pedir à Tempo nova validação da credibilidade dos BR aceites.
+
+Critérios do lote seguinte: divisão de uma mesma venda entre enquadramentos sem duplicação; aquisições elegíveis/não elegíveis/mistas, documento ausente e fornecedor não inscrito; zero diferente de falta; não deduzir17-A; data relevante por componente; totais nulos com parcelas indeterminadas; alteração de origem cria versão e invalida dependentes, sem reescrever efectivos/previstos anteriores; relatório mostra período/fonte/regra e não gera declaração aceita, guia ou promessa de reembolso. Suspensão e históricos reutilizam o mecanismo existente.
+
+Provas deste delta:3testes frontend novos (prioridade dos calendários de compras, zero/falta e ausência de dedução presumida, adenda sem mutar resultados antigos); TypeScript/build; importação privada/hash/scan e repetição idempotente. Conferência Edge apenas da nova correspondência, compras e relatório recuperado, sem calcular novamente nem repetir CSV/PDF aceites. Provas privadas em outputs/modelo-a-20261021. MatrizAUD-SIM-INT02, inventário documental e recibo existentes actualizados; main e homologação intactos.
diff --git a/docs/investmoz/unification/traceability-and-manual.md b/docs/investmoz/unification/traceability-and-manual.md
index 0b9d17c3..833029b3 100644
--- a/docs/investmoz/unification/traceability-and-manual.md
+++ b/docs/investmoz/unification/traceability-and-manual.md
@@ -1943,3 +1943,78 @@ O backup/restauro anterior à escrita ficou comprovado em21/10/2026 às10:18:00U
3. **Activação do consumidor:** permanece separada da publicação. Aplicar a ligação aoID e `rule_version` reais autorizados e o interruptor de activação pelo procedimento já definido, conservando cálculo sobre base declarada como estimativa, sem apuramento final do imposto a pagar. Conferir somente a revisão/regra efectivamente servidas e o delta no destino. Desactivar o consumidor ou suspender a regra recusa novas admissões, preservando as já admitidas, históricos e relatórios.
**Saldo actual:** controlo corrigido e verificado emQA, fontes e funcionamento do cálculo não reabertos; sem nova publicação ou activação na homologação. A referência servida continua226fd308 e o consumidor desligado. A correcção não foi aplicada ao esquema activo. A indicação do responsável e a autorização operacional não são tratadas como conferência de ficheiros locais ou validação jurídica da Tempo. Esta actualização substitui a indicação anterior de que a simples falta de quatro listas configuradas bloqueava obrigatoriamente a disponibilização.
+
+### Execução autorizada da correcção fiscal — 21/10/2026
+
+A Tempo autorizou incorporar4a4d1212 e concluir apenas as operações pendentes. A correcção foi integrada emmain; a equipa integrou entretanto d3fe8a02, que inclui4a4d1212 e conserva o mesmo código fiscal. A revisão efectivamente servida, conferida em `/build/revision.json`, é `d3fe8a02ec7f5dcd01984c4f4a1eba18b5a0cf19`. Não se reinstalou226fd308.
+
+Backup/restauro actualizado: `/var/backups/investmoz/iva-rollout-20261021_104253`, dumpSHA256 `b37bf4aad0abd839bc81d70adf802535ad7738fabe75fda61d74f39dfc11e74b`; restauro isolado `iva_rollout_20261021_104253_test`,171tabelas com contagens e hashes coincidentes. A operação técnica autenticada aplicou exclusivamente oDDL revisto, com registos/históricos e constraints alheias preservados. A migration protegida não foi executada na base activa nem teve a guarda enfraquecida. O contrato do executor foi actualizado apenas para essa migration, após registo da compatibilidade; a primeira disponibilização conservou a release anterior ao encontrar a alteração de esquema. A retoma usou o mesmo executor e não passou a executar migrations no destino.
+
+Publicação e activação concluídas conforme recibo. O consumidor está activo. Não foram repetidas provas aceites do cálculo, precisão, exportadores ouPDF, nem importada a fixtureQA. A autenticação da infraestrutura não é identidade administrativa do portal. A conta Christiana/example.test reportada pelo utilizador pertence ao ensaio local anterior e não é usada no destino.
+
+Mantém-se o procedimento único: **1)** código/controlo do esquema, agora integrados; **2)** cadastro das fontes reais com hash/citação e da versão1 `IVA-GERAL-BASE-LIQUIDA`, seguido das etapas autenticadas pelo mesmo responsável autorizado; **3)** activação separada, ligando o consumidor aoID e versão publicados. Cobertura2026, operação interna geral sobre base líquida declarada emMZN; excluídos preços comIVA incluído, taxas reduzidas, isenções, regimes especiais, importações, digitais não residentes, deduções/créditos/reembolsos, incentivos, pagamento/declaração e outros impostos. O resultado é estimativa deIVA sobre a base declarada, não apuramento final a pagar.
+
+Para suspender, desligar `INVESTMOZ_IVA_CONSUMER_ENABLED` e reiniciar graciosamente os workers pelo mecanismo existente, ou suspender a versão publicada pela governação autenticada, com `version_no` corrente e evidência. Novas admissões são recusadas; as já admitidas concluem com snapshot congelado, mantendo históricos e relatórios. Não apagar fontes, versões ou execuções para reverter a exposição. A autorização e o cadastro não constituem conferência local dos ficheiros pelo utilizador nem validação jurídica atribuída à Tempo. O recibo JSON existente regista a revisão, a regra e o estado efectivamente observados.
+
+**Recibo final das três operações:** código4a4d1212 integrado e servido dentro ded3fe8a02; três fontes oficiais reais cadastradas comversão1, hashes e citações; regra `IVA-GERAL-BASE-LIQUIDA`, **rule_version1**, ID `01a15e1a-5338-700f-8a45-f87707d696a7`, estado `published`, controlo optimista `version_no5`; autor/revisor/aprovador/publicador reais: conta indicada `nala@tempo.co.mz`, ID15. A sessão normal comMFA foi efectuada pelo utilizador numa página temporária de apoio ligada apenas a127.0.0.1; não se guardaram palavra-passe, códigoMFA ou cookies. Não há alegação de revisão independente ou parecer jurídico. A aceitação fiscal das fontes tem o fundamentoTempo08/10/2026; o estado geral permanecepending, sem validação automática noutros processos.
+
+Activação separada aplicada em21/10/2026 às10:55:58UTC, alterando apenas as três chaves do consumidor. Ligação exacta aoID acima, rule_version1 eenabled=true; restante configuração preservada. `/api/v1/fiscal-consumer` confirmouenabled=true porHTTP200; a leitura do resolvedor, sem executar cálculo, confirmouIVA_GENERAL_RATE=16percent, mesmoID/versão/fonte no contextoMZN/internal_general_net de2026. Cinco eventos de governação; contagens de resultados/relatórios preservadas, sem simulações sintéticas no destino. O restauro de segurança e a configuração anterior estão conservados no arquivo privado identificado no recibo.
+
+Suspensão concreta: configurar `INVESTMOZ_IVA_CONSUMER_ENABLED=false` e executar o reinício gracioso existente `php8.4 artisan queue:restart` na releaseactual como operador autorizado; ou `POST /api/v2/investment/admin/tax-rules/01a15e1a-5338-700f-8a45-f87707d696a7/suspend`, com `version_no:5` enquanto corrente e evidência verdadeira de pelo menos20caracteres, pela administração autenticada/MFA. Não repetir a suspensão se o estado/versão já tiver mudado. Conservar a ligação e todos os registos; futuras retomas respeitam o estado da regra e o procedimento de versão aplicável, sem escolher automaticamente outra regra.
+
+
+### Diagnóstico da consulta IVA — correcção em QA,21/10/2026
+
+O caso reportado identifica «Componentes fiscais e contributivas», IVA_GENERAL_RATE, período01/01/2026–31/12/2026 e «As condições publicadas não correspondem às respostas indicadas». É consulta de parâmetros, não execução do consumidor IVA. O utilizador não forneceu a moeda ou a operação originais; não se afirma que tenha seleccionadoUSD, omitido um campo ou indicado uma operação excluída.
+
+**Causa confirmada no contrato:** o formulário envia `fiscal_operation`, sem `operation` ou `currency`; a versão publicada exige `operation=internal_general_net` e `currency=MZN`. A validação da consulta nem aceitava esses nomes canónicos. O resolvedor reduzia qualquer condição falhada a `indeterminate_context`; a interface mostrava apenas a frase genérica e o código interno. Esta restrição de ligação é escolha de implementação, não condição organizacional ou jurídica adicional da Tempo. O mesmo contrato reproduziu o estado no período anual reportado, independentemente de se presumir uma moeda no caso original.
+
+**Correcção delimitada:** cada condição não satisfeita tem categoria, campo, valor recebido e critério esperado, ligados à versão e fonte. Distinguem-se campo em falta, formato inválido, operação/moeda fora do âmbito, versão que não cobre o período e configuração do sistema. Quando não existe versão elegível visível e a evidência não permite separar ausência de cobertura de indisponibilidade de fonte/configuração, a interface mantém essa incerteza; não inventa uma causa nem atribui culpa às respostas.
+
+A consulta IVA passa a ter moeda explícita (`fiscal_currency`), guardada no rascunho, sem presumirMZN ou copiar moeda do orçamento ou do cálculo IVA. A API recebe esse valor em `context.currency`. A operação genérica não se converte automaticamente no âmbito «operação interna à taxa geral sobre base líquida»: a limitação de integração é explicada com a resposta recebida e o critério esperado, e existe ligação para o formulário IVA com declaração explícita do âmbito. Uma importação/exportação/não residente/reembolso expressamente seleccionado é identificado como exclusão deste lote; não se altera a resposta para a fazer passar.
+
+As notas aparecem junto dos campos e num resumo com ligações que focam o campo correspondente, mantendo o rascunho. O nome apresentado é «IVA — taxa geral»; «Ver fundamento» contém versão, vigência e fonte, sem expressãoDSL. As falhas de consulta/configuração são identificadas como sistema. O percurso de cálculo e as suas regras de admissão não foram ampliados. A consulta diagnóstica pode observar versões publicadas fora do período seleccionado, sob a mesma política de visibilidade, apenas para explicar a falta de cobertura; não as torna elegíveis.
+
+**Prova dirigida:**5testes unitários novos/24asserções;1testeAPI/16asserções no clone isolado simulator_fiscal_checks_20261021_test;7testes existentes do resolvedor/25asserções; TypeScript, build(exit0), Pint e diff-check. A primeira execuçãoAPI detectou que esse clone ainda não tinha a coluna fiscal_acceptance; aplicou-se nele a correcção de esquema já aceite, com a guardaQA intacta, e repetiu-se apenas o testeAPI afectado. Não é diagnóstico da base de homologação. A comparação por índice do ensaio foi ajustada à ordem das chavesJSONB; não se alterou o critério fiscal.
+
+No Edge, simulador normal QA em127.0.0.1:18580: consulta anual2026, operação genérica explicitamente escolhida para o ensaio; moeda inicialmente vazia, depoisUSD escolhido expressamente como caso dirigido. Confirmaram-se notas, resumo, foco em «Rever moeda»/«Rever operação», fundamento da versão sintética3, eUSD/ano/periodicidade/operação conservados após gravação e recuperação do mesmo rascunho. A captura de prova é um ensaioUSD, não evidência deUSD no caso original. Não se executou cálculo nem se exportou relatório. A fixture publicada apenas emQA para observar o diagnóstico foi depois suspensa; o consumidorQA permaneceu desligado. Nenhuma fixture foi importada, regra alterada ou consumidor activado na homologação nesta correcção.
+
+Provas privadas na pasta `outputs/simulator-continuation-20261020`: iva-diagnostic-api-test.txt, iva-diagnostic-summary.txt, iva-diagnostic-summary.png e iva-diagnostic-build-final.txt. O reciboJSON existente tem o estado detalhado. A candidata permanece na branch `codex/iva-diagnostics-QA`, separada de main; não é uma nova publicação fiscal nem altera a entrega autorizada anteriormente.
+
+
+### IVA mensal ligado às vendas — candidata QA, 21/10/2026
+
+Pedido da Tempo: o formulário recolhe pressupostos do negócio e calcula o IVA correspondente, sem repetir vendas nem tomar o imposto manual como entrada fiscal. A falta de ligação entre a projecção empresarial e o consumidor publicado era uma escolha de implementação; não uma nova obrigação do utilizador. Alteração na branch `codex/iva-monthly-projection-QA`, separada de main. Não altera a instalação, regra ou activação da homologação.
+
+**Ligação:** o simulador normal reutiliza quantidades e preços por produto/mês do plano empresarial, com a mesma representação monetária das vendas já usada nesse plano. Se não existir plano, admite a receita mensal constante já guardada na projecção personalizada, identificando essa origem e exigindo declaração do enquadramento. Não usa os valores demonstrativos de um widget ainda não guardado. A indicação sem IVA/com IVA incluído fica explícita, sem a presumir. Neste lote só a base líquida declarada permite calcular: preços com IVA incluído, base desconhecida e meses sem vendas informadas permanecem indeterminados. Zero explícito calcula IVA zero; não se preenche um mês vazio com zero.
+
+O cliente envia meses, vendas, moeda e declaração; não envia taxa, versão ou imposto manual. O servidor selecciona a versão publicada ligada ao consumidor e reutiliza o resolvedor temporal e avaliador decimal existentes em cada mês, dentro da mesma admissão transaccional. Nenhuma taxa foi fixada no formulário, nem introduzido arredondamento fiscal. A versão é congelada antes da fila; mantém-se a autorização/idempotência/histórico/relatório existentes. Sem migration ou reconstrução dos mecanismos. Cobertura permanece 2026, no máximo 12 meses consecutivos; um horizonte que atravessa o limite é explicado, sem truncar a projecção.
+
+**Ecrã e dependências:** cada mês apresenta vendas declaradas, vendas tributáveis sem IVA, taxa efectivamente aplicada, IVA calculado e total com IVA. Após a primeira execução, a actualização automática fica ligada e pode ser pausada. Alterar vendas, moeda, período ou tratamento do IVA assinala imediatamente o resultado anterior como histórico desactualizado. A nova execução guarda outra versão sem modificar a anterior. Repetir sem alterações recupera a execução concluída; uma execução pendente é consultada pelo mesmo ID. Falhas conservam os pressupostos e permitem tentar novamente. O rascunho conserva configurações e resultado; o relatório distingue resultado actual e histórico desactualizado e não recalcula o IVA na exportação. Se algum mês estiver indeterminado, o total fiscal fica indeterminado, conservando os meses conhecidos.
+
+**Tesouraria adoptada:** o IVA é um memorando fiscal separado; não se soma novamente aos recebimentos introduzidos, não se deduz como custo e não se apresenta como imposto final a pagar. Conserva-se o calendário de recebimentos/pagamentos declarado, sem inferir cobrança integral no mesmo mês nem liquidação fiscal. O imposto manual permanece exclusivamente no painel recolhido «Cenário personalizado de tesouraria — imposto manual, separado do IVA calculado», com rótulos de cenário personalizado. Não alimenta a base nem o resultado do consumidor IVA. Não foram acrescentados deduções, créditos, reembolsos, importações, isenções, taxas reduzidas ou regimes especiais ao cálculo fiscal; as hipóteses antigas de tesouraria continuam personalizadas e separadas.
+
+**Provas apenas do delta:** 3 testes API novos/46 asserções, transacções no clone `simulator_fiscal_checks_20261021_test` com guarda QA; 4 testes frontend novos para reutilização das vendas, zero/informação em falta, invalidação e recuperação/relatório. Incluem taxa proibida no cliente, âmbito não declarado, preços brutos, período excluído, repetição sem duplicações, versão congelada antes da suspensão e conclusão depois dela. TypeScript/build/Pint/diff-check verificados. Reutilizadas as provas aceites do avaliador decimal, exportadores e PDF; não se voltou a testar paginação nem a ampliar cobertura legal.
+
+**Percurso Edge no simulador normal:** dossier sintético privado «QA IVA mensal - vendas projectadas», ID `e0201d19-286e-4d5c-9585-2c1e3bd1ad1e`, QA127.0.0.1:18580. Vendas Janeiro1000.03/ Fevereiro2000.06/ Março0/ Abril vazio produziram IVA160.0048/320.0096/0/indeterminado. Alterar apenas a quantidade de Janeiro de1 para3 actualizou vendas3000.09, IVA480.0144 e total3480.1044. Assinalou-se resultado desactualizado durante a mudança. Seleccionar preços com IVA incluído conservou vendas e tornou base/IVA/total indeterminados; voltar manualmente à base líquida gerou nova execução. Após recarregar e recuperar o mesmo dossier, os valores permaneceram iguais e o fundamento mostrou a versão congelada. Quatro execuções mensais intencionais (inicial, venda alterada, base incluída, regresso à líquida), quatro relatórios com snapshots iguais às respectivas execuções; recuperação não criou a quinta. Não se atribui aplicabilidade fiscal universal a estes exemplos aritméticos.
+
+A fixture sintética **v4**, ID `01a15e50-7972-72e0-8991-82ca28df9b49`, está publicada e o consumidor ligado **apenas no clone QA** `simulator_fiscal_delta_20261021_test`, deixados disponíveis para esta revisão. Isto substitui o estado local suspenso/off da prova diagnóstica anterior; não é indisponibilidade na homologação. Não importar esta fixture, os seus actores ou os scripts privados. A regra real de homologação v1 mantém-se fora desta execução.
+
+**Revisão e disponibilização:** rever esta candidata QA e integrar somente o código autorizado, mantendo a ligação ao ID/versão reais do destino. Este delta não precisa de publicar outra regra nem de mudar a taxa/âmbito ou de reactivar um consumidor já activo. Conferir apenas revisão servida e ligação mensal no destino após autorização própria; conservar o procedimento separado de publicação e activação se alguma dessas operações vier a ser expressamente pedida. Suspender novas admissões pelo interruptor existente ou estado da regra preserva as já admitidas e os históricos. Não apagar snapshots para suspender ou reverter código. Sem integração em main, escrita activa, validação jurídica atribuída à Tempo ou nova ronda de preparação identificada nesta entrega QA.
+
+Provas privadas em `outputs/simulator-continuation-20261020`: monthly-iva-api-test.txt, monthly-iva-build-final.txt, monthly-iva-initial.txt, monthly-iva-updated.txt, monthly-iva-stale.txt, monthly-iva-included.txt, monthly-iva-recovered.txt, monthly-iva-live-history.json e monthly-iva-proof.png. O recibo existente conserva o saldo e os IDs; AUD-SIM-INT02 da matriz existente recebe esta referência, sem outra matriz/backlog.
+
+
+### Reconciliação Modelo A — primeiro incremento QA,21/10/2026
+
+Por instrução expressa da Tempo, o **Novo Modelo A.docx** é a referência estrutural, incluindo o quadro incorporado como imagem; não foi substituído por um modelo genérico. A [reconciliação campo a campo](../simulations/modelo-a-reconciliacao-20261021.md) contém todos os quadros, campos01–27, finalidade, origem, cálculo, fundamento e estado; inventário/versões/exemplares e divergências preservados. A componente16% existente representa apenas01/02. O apuramento14–18 não se presume igual ao IVA das vendas; não é saldo final a pagar.
+
+Original532008bytes/SHA25662c198e90d8c6792f7d5ccefc6386df2e4b6089573067d3a6e1eae7fc2b9572b e variantev1 de532100bytes/63d45fa80db17a60b43619d55a25813229d670d14c758273f86316285db8e02b preservados na biblioteca **privada QA**, recursos33/34, documentos e revisões/auditoria existentes. Importador existente, pré-visualização, conflitos/duplicados, scans reais limpos com mesmohash e nova tentativa sem criar documentos ou scans. Actor166 é a fixture administrativa do ensaio isolado, sem papel real ou alteração persistente de permissões atribuída à Tempo. Nenhuma publicação ou importação na homologação. Aceitação das fontes oficiais da Tempo08/10 mantida; edição vigente do formulário não afirmada pela data OOXML nem pela leitura do anexo.
+
+No simulador normal, resumo de simulação parcial e correspondência consultável ligados ao resultado mensal recuperado. Compras/encomendas projectadas reutilizadas conforme agenda activa por produto, calendário ou valor constante; não são custo das vendas ou pagamentos de fornecedor. Zero difere de falta. A indicação semIVA/IVA/comIVA/dedutível fica separada e por determinar quando faltam classificação e documentos; não se considera toda compra dedutível. Relatório acrescenta correspondência/limites e referências dos pressupostos actuais de compras, sem os apresentar como resultado fiscal histórico nem reescrever snapshots. Nenhuma nova fórmula fiscal activada ou taxa fixada no formulário; sem migration ou motor novo.
+
+Cotejo dirigido: Lei22/2022 art.17-A/aditamento e eficácia; Lei10/2025 arts.18/19/21/32/34 nas páginas12–15 do BR248, com leitura visual13/14. Registadas remissões divergentes do exemplar (regularizações11/12 versus caixas12/13; crédito18/19 versus caixas19/20; reembolsoart20 versus matéria noart21; quadro8 ambíguo). Não corrigir original nem aplicar instrução ambígua como regra. AT directa expirou; resultado indexado com numeração distinta é limitação de consulta, não substituto nem prova de edição vigente. Lei3/2025/dispositivos/regulamentos pertinentes por consolidar na extensão concreta, sem reabrir genericamente a base líquida16% aceite.
+
+Provas novas apenas do incremento:3testes frontend (agendas, zero/falta, sem IVA/dedução fabricados e relatório sem mutar resultado), TypeScript/build, Edge de consulta após recuperação e biblioteca idempotente/scan. Avaliador, selecção publicada, precisão, históricos e exportadores aceites reutilizados. DossierQA e fixtureIVA v4 continuam disponíveis para revisão; este incremento não calcula novamente. Provas privadas outputs/modelo-a-20261021; recibo e inventário existentes actualizados. Branch codex/iva-modelo-a-reconciliation-QA, parent3f5430c3, separada de main; homologação/regra real/interruptor inalterados.
+
+Saldo explícito: **reconciliação e primeiro incremento de interface concluídos, apuramento completo não implementado**. Próximo lote: classificação por operação e origem prevista/efectiva, cadastro fundamentado de âmbito/dedução e ligação a totais14–18 propagando indeterminação; 8–16h cadastro/consolidação e20–36h código/aceitação, total28–52h condicionado ao âmbito/consolidação, sem créditos anteriores/substituições/pagamento/reembolso ou simulador integral. O documento contém o delta e critérios concretos. Integração do código, publicação e activação continuam operações distintas; esta preparação não executa nenhuma no destino.
diff --git a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
index 299a8a23..50a5d133 100644
--- a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
+++ b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
@@ -10652,7 +10652,7 @@ AUD-SEARCH-T10,Consistência transversal da pesquisa e navegação — Bibliotec
AUD-SEARCH-T11,Consistência transversal da pesquisa e navegação — Legislação,Instruções expressas da Tempo na conversa de 20/10/2026; AGENTS.md; RF-MN-010 e AUD-GEO-01 preservados.,navegação/pesquisa,/legislacao,portal/services; portal/document — Reutiliza a correcção da biblioteca e preserva filtros jurídicos/documentais pertinentes.,Sem alteração remota nesta execução; revisão apenas na branch codex/opportunity-search.,HTTP/Inertia: resources.total=0; consumidor e query pública partilhados.,QA — delta delimitado; revisão Tempo pendente,"Situação jurídica, consulta e cálculo continuam independentes.",,"Filtros, contagem, resultados e URL coerentes; universos identificados; erro distinto de vazio; permissões e contexto conservados.",P1,,RF-MN-010; AUD-GEO-01,,,,,,,,,,,Mesmo padrão da biblioteca; não deve expor um universo concorrente.,"Situação jurídica, consulta e cálculo continuam independentes.",portal/services; portal/document; SearchState; SearchFeedback; TerritoryFields; portalNavigation,,"Integração em main apenas após revisão; assistência NLP, contratos e P7 separados.",Correcção/simplificação em QA,,HTTP/Inertia: resources.total=0; consumidor e query pública partilhados.,Pesquisa transversal QA 20/10/2026,20/10/2026,,,,,,,,,,"Provas comuns cobrem o componente reutilizado; HTTP vazio não demonstra operações de gestão ou publicação. Situação jurídica, consulta e cálculo continuam independentes.",,falha funcional; navegação; apresentação visual,,Disponível para revisão na aplicação QA local.
AUD-GUIDE-CARD-20261020,"Related educational cards: image, source summary, clear actions",Tempo 20/10/2026; independent delta after 0e7d51f18fb4,educational presentation,/sectores/{slug}; /explorar/{group}; articles; /oportunidades and detail,EducationalArticleCard; EducationalGuides; LegacyContent; SectorInvestment,QA only,1 test / 8 assertions; PHP syntax; TypeScript/build; desktop2048/mobile390; keyboard,QA review pending,Normal QA sector and article verified against existing library resource 10 and local image 25; previous dossier proof retained,,Source-derived summary; public images; conditional opportunity action; context preserved,P1,,,,,,,,,,,,,,,,,,presentation,,,,20/10/2026,,,,,,,,,,,,content; navigation; visual presentation,,Ready for QA review
AUD-SIM-INT01,Invalid one-off fiscal date can throw instead of returning validation state,Tempo request 20/10/2026; integrated simulator review; same manual,simulator and shared language,,,QA only,Fixed in QA; invalid-date checks; 38 directed frontend tests passed,Previous inline-date proof retained; unchanged delta not repeated,QA continuation verified; precise open inputs and cashflow visual check in same manual; 2-4 h remaining,,,P0,,,,,,,,,,,,,,,,,,diagnosis and targeted corrections,, | [Saldo consolidado21/10/2026] Concluído no recorte. Nenhum delta de validação de data por demonstrar; prova anterior preservada. Ver saldo dos oito itens no manual existente; sem fecho global por esta reconciliação.,,20/10/2026,,,,,,,,,,,,,,
-AUD-SIM-INT02,Review actual fiscal parameters sources periods and eligibility,Tempo request 20/10/2026; integrated simulator review; same manual,simulator and shared language,,,QA only,Verification pending; no parameter activation,"Parcial: consumidor IVA integrado e servido em 226fd308, desligado. Controlo de manutencao por mesma administracao autorizada corrigido em QA; publicacao real e activacao pendentes.",QA continuation verified; precise open inputs and cashflow visual check in same manual; 2-4 h remaining,,,P0,,,,,,,,,,,,,,Rever/aplicar delta de controlo fiscal e esquema ja ensaiado em QA; cadastrar/publicar versao real fundamentada e activar consumidor. Sem obrigacao de quatro pessoas. Demais componentes fiscais fora deste recorte.,,,Tempo indicou nala@tempo.co.mz e removeu expressamente a condicao de pessoas distintas na manutencao fiscal. Preservar as tres operacoes e as independencias aprovadas dos outros processos.,Ligacao de consumidor publicada concluida em QA; decisoes operacionais separadas.,Sem saldo de implementacao identificado para este delta QA; nao reutilizar estimativas anteriores como horas ainda em falta; nao estima cobertura fiscal integral.," | [Leitura SSH 21/10/2026 08:17 Maputo] Zero regras em simulation_tax_rule_versions na homologação, incluindo todos os estados por leitura administrativa sem ocultação RLS. Seis referências em investment_legal_sources; não são parâmetros executáveis. QA também tinha zero regras. BEGIN READ ONLY/SELECT/ROLLBACK; zero escritas. Prova homologation-fiscal-readonly.json. O git HEAD registado é do checkout consultado, não certifica a revisão do build servido. A ausência de cadastro não é ausência de fontes oficiais nem reabre a aceitação da Tempo de 08/10. Não implementa a ligação funcional ao motor fiscal. | [Saldo consolidado21/10/2026] Parcial. Leitura remota concluída: zero regras de todos os estados na homologação, tal como QA; seis referências jurídicas não são parâmetros executáveis. Falta cadastro fundamentado por componente/âmbito/período e ligação funcional ao motor fiscal. Fontes e análises existentes reutilizáveis; aceitação oficial da Tempo de08/10 preservada. Não activar taxas nem importar/publicar por esta reconciliação. Ver saldo dos oito itens no manual existente; sem fecho global por esta reconciliação. | [Candidata21/10/2026] Diagnóstico fiscal separado no manual existente: fontes/analises já disponíveis; zero parâmetros executáveis na QA e homologação por leitura de todos os estados; governação/resolvedor temporal/DSL existentes; RunSimulation ainda aritmética personalizada sem consumir regras fiscais. Saldo: cadastro fundamentado, orquestração, contrato de resultado/histórico e ligação ao dossier/relatório, com casos por componente/período. Nenhuma regra criada nem activada; implementação fiscal integral aberta e excluída das1–2h de exportações. | [Proposta21/10/2026] Primeiro lote proposto: uma regra IVA geral sobre base liquida/MZN, cobertura demonstrada2026 sem inventar caducidade legal. Reutilizar fontes/analises/governacao/resolvedor/avaliador existentes; arredondamento e ambito aplicavel explicitamente por fundamentar antes de publicar. Cadastro4-8h e codigo/aceitacao12-20h, total16-28h condicionado ao acervo, separado das1-2h de exportacao. Criterios e exclusoes no manual existente. Nenhuma regra cadastrada/activada; nao e implementacao fiscal integral. | [QA IVA v1.2 21/10/2026] Orientacao posterior Tempo: calcular com precisao decimal exacta sem arredondamento automatico, separando apresentacao monetaria; arredondamento generico deixa de ser bloqueio deste lote. Cadastro draft versionado em clone QA; resolvedor/avaliador existentes; proveniencia, historico e relatorio imutavel ligados. 5 feature (51 assercoes), 7 unit (25), 3 frontend; types/build/Pint aprovados. Contexto declarado; nao e saldo a pagar. Zero regras publicadas; sem main/activacao. Recorte QA autorizado verificado (0h engenharia identificada restante); produto fiscal integral continua parcial. Limites e provas no mesmo manual e ficha v1.2; sem atribuicao de validacao juridica ao utilizador. | [Revisao 83d2f97d] Ambito/periodo/exclusoes e procedimentos de integracao, publicacao, activacao e suspensao consolidados no mesmo manual. Lacuna concreta de ecra QA fechada: entradas 1000.03/MZN/2026-10-21; calculo exacto 160.0048; gravacao fa6d17f2-5f47-4cb6-b8cb-40850c12505f; recarga; recuperacao do mesmo ID; relatorio d13e2ad5-3ba8-4d01-9d30-5815496da774 com mesmo valor/proveniencia e hash igual ao resultado. Uma execucao persistida, draft e zero regras publicadas. 1 teste novo de rota/17 assercoes, TypeScript/build e browser aprovados; restantes provas reutilizadas. Interrupcao inicial da ferramenta resolvida, sem atribuicao de falha ao simulador. Revisao do recorte demonstrada; sem nova preparacao generica identificada, main ou activacao; nao fecha aplicabilidade fiscal universal nem simulador integral. | 21/10/2026: proposta do consumidor IVA no simulador existente no manual: falta ligacao a regra publicada e activacao explicita. Integrar codigo desligado, publicar versao e activar consumidor sao tres operacoes distintas. Reutiliza permissoes, governanca, historico e provas aceites; sem ampliar cobertura ou executar estas operacoes. | 21/10/2026: implementado delta de 2ced7b79 no simulador normal QA, activacao desligada por omissao. 8 testes/75 assercoes, 2 testes frontend novos, TypeScript/build/Pint. Edge: indeterminacao, calculo, repeticao sem duplicar, fila admitida antes de suspensao concluida depois, nova execucao recusada e historicos/relatorios preservados. Mesmo manual e recibo consolidam provas e tres operacoes. Fixture isolada suspensa; sem merge ou publicacao/activacao na homologacao. | 21/10/2026: origem da condicao fiscal localizada em e65cb269/servico/CHECKs de 03/10 e nota de implementacao; sem decisao expressa aplicavel encontrada. Correccao QA: administracao existente, mesma pessoa, fonte oficial identificada e eventos preservados. 6 testes/86 assercoes apenas do controlo, sem calculos/exportadores; constraints de outras tabelas iguais. Esquema activo nao alterado; backup/restauro de 171 tabelas confirmado; sem fixture ou publicacao real.",,20/10/2026,,,,,,,,,,,,,,
+AUD-SIM-INT02,Review actual fiscal parameters sources periods and eligibility,Tempo request 20/10/2026; integrated simulator review; same manual,simulator and shared language,,,QA only,Verification pending; no parameter activation,Recorte IVA geral sobre base declarada disponibilizado: 4a4d1212 integrado na revisao servida d3fe8a02; regra real v1 publicada e consumidor activo. Nao conclui o simulador fiscal integral.,QA continuation verified; precise open inputs and cashflow visual check in same manual; 2-4 h remaining,,,P0,,,,,,,,,,,,,,"Nenhuma operacao de disponibilizacao pendente neste lote delimitado. Outras componentes, regimes e coberturas fiscais permanecem fora do recorte; nao repetir provas aceites.",,,"Tempo autorizou incorporacao de 4a4d1212, cadastro/publicacao da regra real e activacao. Mesma administracao real nala@tempo.co.mz, login normal e MFA, sem quatro designacoes; sem parecer juridico ou revisao independente atribuidos a Tempo.",Ligacao de consumidor publicada concluida em QA; decisoes operacionais separadas.,Recorte executado; sem saldo de implementacao ou disponibilizacao identificado neste lote. Nao converter estimativas anteriores em implementacao fiscal integral.," | [Leitura SSH 21/10/2026 08:17 Maputo] Zero regras em simulation_tax_rule_versions na homologação, incluindo todos os estados por leitura administrativa sem ocultação RLS. Seis referências em investment_legal_sources; não são parâmetros executáveis. QA também tinha zero regras. BEGIN READ ONLY/SELECT/ROLLBACK; zero escritas. Prova homologation-fiscal-readonly.json. O git HEAD registado é do checkout consultado, não certifica a revisão do build servido. A ausência de cadastro não é ausência de fontes oficiais nem reabre a aceitação da Tempo de 08/10. Não implementa a ligação funcional ao motor fiscal. | [Saldo consolidado21/10/2026] Parcial. Leitura remota concluída: zero regras de todos os estados na homologação, tal como QA; seis referências jurídicas não são parâmetros executáveis. Falta cadastro fundamentado por componente/âmbito/período e ligação funcional ao motor fiscal. Fontes e análises existentes reutilizáveis; aceitação oficial da Tempo de08/10 preservada. Não activar taxas nem importar/publicar por esta reconciliação. Ver saldo dos oito itens no manual existente; sem fecho global por esta reconciliação. | [Candidata21/10/2026] Diagnóstico fiscal separado no manual existente: fontes/analises já disponíveis; zero parâmetros executáveis na QA e homologação por leitura de todos os estados; governação/resolvedor temporal/DSL existentes; RunSimulation ainda aritmética personalizada sem consumir regras fiscais. Saldo: cadastro fundamentado, orquestração, contrato de resultado/histórico e ligação ao dossier/relatório, com casos por componente/período. Nenhuma regra criada nem activada; implementação fiscal integral aberta e excluída das1–2h de exportações. | [Proposta21/10/2026] Primeiro lote proposto: uma regra IVA geral sobre base liquida/MZN, cobertura demonstrada2026 sem inventar caducidade legal. Reutilizar fontes/analises/governacao/resolvedor/avaliador existentes; arredondamento e ambito aplicavel explicitamente por fundamentar antes de publicar. Cadastro4-8h e codigo/aceitacao12-20h, total16-28h condicionado ao acervo, separado das1-2h de exportacao. Criterios e exclusoes no manual existente. Nenhuma regra cadastrada/activada; nao e implementacao fiscal integral. | [QA IVA v1.2 21/10/2026] Orientacao posterior Tempo: calcular com precisao decimal exacta sem arredondamento automatico, separando apresentacao monetaria; arredondamento generico deixa de ser bloqueio deste lote. Cadastro draft versionado em clone QA; resolvedor/avaliador existentes; proveniencia, historico e relatorio imutavel ligados. 5 feature (51 assercoes), 7 unit (25), 3 frontend; types/build/Pint aprovados. Contexto declarado; nao e saldo a pagar. Zero regras publicadas; sem main/activacao. Recorte QA autorizado verificado (0h engenharia identificada restante); produto fiscal integral continua parcial. Limites e provas no mesmo manual e ficha v1.2; sem atribuicao de validacao juridica ao utilizador. | [Revisao 83d2f97d] Ambito/periodo/exclusoes e procedimentos de integracao, publicacao, activacao e suspensao consolidados no mesmo manual. Lacuna concreta de ecra QA fechada: entradas 1000.03/MZN/2026-10-21; calculo exacto 160.0048; gravacao fa6d17f2-5f47-4cb6-b8cb-40850c12505f; recarga; recuperacao do mesmo ID; relatorio d13e2ad5-3ba8-4d01-9d30-5815496da774 com mesmo valor/proveniencia e hash igual ao resultado. Uma execucao persistida, draft e zero regras publicadas. 1 teste novo de rota/17 assercoes, TypeScript/build e browser aprovados; restantes provas reutilizadas. Interrupcao inicial da ferramenta resolvida, sem atribuicao de falha ao simulador. Revisao do recorte demonstrada; sem nova preparacao generica identificada, main ou activacao; nao fecha aplicabilidade fiscal universal nem simulador integral. | 21/10/2026: proposta do consumidor IVA no simulador existente no manual: falta ligacao a regra publicada e activacao explicita. Integrar codigo desligado, publicar versao e activar consumidor sao tres operacoes distintas. Reutiliza permissoes, governanca, historico e provas aceites; sem ampliar cobertura ou executar estas operacoes. | 21/10/2026: implementado delta de 2ced7b79 no simulador normal QA, activacao desligada por omissao. 8 testes/75 assercoes, 2 testes frontend novos, TypeScript/build/Pint. Edge: indeterminacao, calculo, repeticao sem duplicar, fila admitida antes de suspensao concluida depois, nova execucao recusada e historicos/relatorios preservados. Mesmo manual e recibo consolidam provas e tres operacoes. Fixture isolada suspensa; sem merge ou publicacao/activacao na homologacao. | 21/10/2026: origem da condicao fiscal localizada em e65cb269/servico/CHECKs de 03/10 e nota de implementacao; sem decisao expressa aplicavel encontrada. Correccao QA: administracao existente, mesma pessoa, fonte oficial identificada e eventos preservados. 6 testes/86 assercoes apenas do controlo, sem calculos/exportadores; constraints de outras tabelas iguais. Esquema activo nao alterado; backup/restauro de 171 tabelas confirmado; sem fixture ou publicacao real. | [Execucao autorizada 21/10/2026 10:56 UTC] Servido d3fe8a02ec7f5dcd01984c4f4a1eba18b5a0cf19 contendo 4a4d1212; DDL fiscal aplicado autenticadamente com backup/restauro de171tabelas e registos preservados. Tres fontes reais v1 com hashes/citacoes e aceitacao fiscal Tempo08/10/2026, sem validacao geral automatica. Regra IVA-GERAL-BASE-LIQUIDA rule_version1, ID01a15e1a-5338-700f-8a45-f87707d696a7, published, version_no5, actor15 emtodasetapas;5eventos. Activacao separada ligada a esseID/versao; APIHTTP200 enabled=true e resolvedor16percent no contexto delimitado sem calculo novo. FixtureQA nao importada; calculos/exportadores/PDF aceites nao repetidos. Suspensao de novas admissoes conserva snapshots/historicos/relatorios. Recibo e manual existentes actualizados; limitacoes de abertura de consola/extensao registadas como ferramenta. | [Diagnostico IVA QA21/10/2026] Falha estrutural reproduzida na consulta anual: fiscal_operation nao satisfaz operation e moeda nao era comunicada. Sem presumir respostas originais. Cada condicao tem campo/recebido/esperado/categoria; notas junto ao campo, resumo com foco e Ver fundamento semDSL/codigo. Moeda fiscal explicita, sem conversao/copia.5unitarios24assercoes+1API16assercoes, Edge comUSD dirigido preservado apos recuperacao; fixtureQA v3suspensa, consumidorQAoff. Nao altera regra/activacao da homologacao; calculos e exportadores nao repetidos. Branch codex/iva-diagnostics-QA. | [IVA mensal QA21/10/2026] Vendas por produto/mes reutilizadas; base liquida explicita; versao publicada seleccionada no servidor, sem taxa/manual no formulario. Zero distinto de falta; preco com IVA indeterminado. Actualizacao dependente cria versao, historicos/relatorios preservados. IVA separado de recebimentos/custos/imposto final; manual apenas cenario personalizado. 3API/46assercoes+4frontend e Edge: vendas alteradas, bruto, zero, falta, recuperacao e relatorio. Fixture sintetica v4 ligada apenas no clone QA para revisao. Sem main/HML ou alargamento fiscal; provas anteriores reutilizadas. Mesmo manual/recibo; branch codex/iva-monthly-projection-QA. | [Modelo A QA21/10/2026] Exemplar Tempo e imagem incorporada conferidos/preservados privados na biblioteca QA, hashes/scans/idempotencia; quadros e campos01-27 mapeados no mesmo registo. Componente01/02 existente; apuramento14-18 indeterminado. Correspondencia consultavel e compras/encomendas reutilizadas sem fabricar base/IVA/deducao. Divergencias de remissao registadas; edicao vigente nao afirmada.3testes novos/types/build/Edge; calculo/exportadores aceites reutilizados. Delta seguinte8-16h cadastro+20-36h codigo, condicionado e sem creditos/substituicao/pagamento/reembolso; nao e cobertura integral. Sem main/HML, nova regra publicada ou activacao. Ver docs/investmoz/simulations/modelo-a-reconciliacao-20261021.md.",,20/10/2026,,,,,,,,,,,,,,
AUD-SIM-INT03,Review isolation recovery across projects and sessions,Tempo request 20/10/2026; integrated simulator review; same manual,simulator and shared language,,,QA only,Existing controls and accepted proofs to reconcile; no leak established,Two dossiers and new login recovered in browser; cashflow persistence corrected and HTTP-tested; new visual cashflow delta pending,QA continuation verified; precise open inputs and cashflow visual check in same manual; 2-4 h remaining,,,P0,,,,,,,,,,,,,,,,,,diagnosis and targeted corrections,,"[Retoma 21/10/2026] QA 18576, clone simulator_review_delta_20261020_test: sessão sintética renovada por login normal; gravação autenticada e recarga recuperaram saldo 123, receita 900, custos 600, calendário mensal 10/vazio/0, crédito IVA estimado 500. Caixa conhecida 3713 MZN; total indeterminado desde mês 2; crédito estimado excluído da caixa. Prova visual cashflow-recovered-20261021.png e snapshot .txt em outputs/simulator-continuation-20261020. Não certifica recuperação destes novos valores após outro login, CSV/DOCX ou PDF nativo. Ligação de controlo do navegador perdida durante espera de download; não atribuir falha à aplicação. Leitura remota aguarda identificação da ligação SSH; zero alterações no destino. | [Saldo consolidado21/10/2026] Concluído no recorte. A/B, logout/novo login, recuperação e recusa pela aplicação demonstrados anteriormente. A tesouraria tem prova API de nova sessão e prova visual de recuperação por recarga. Não atribuir ao navegador nova sessão dos valores de tesouraria, nem nova certificação RLS; limites expressos conservados. Ver saldo dos oito itens no manual existente; sem fecho global por esta reconciliação.",,20/10/2026,,,,,,,,,,,,,,
AUD-SIM-INT04,Review stale and historical results and correct dossier,Tempo request 20/10/2026; integrated simulator review; same manual,simulator and shared language,,,QA only,Existing versions/fingerprints; targeted verification pending,Historical results visible after fix; 12 and 24 recovered; hashes unchanged; synthetic temporal resolver versions verified in memory only,QA continuation verified; precise open inputs and cashflow visual check in same manual; 2-4 h remaining,,,P1,,,,,,,,,,,,,,,,,,diagnosis and targeted corrections,," | [Saldo consolidado21/10/2026] Concluído no recorte demonstrado. Histórico24/12 visível, hashes preservados e versões temporais sintéticas do resolvedor conferidas. Execução fiscal integrada com parâmetros reais pertence ao saldo de02 e não foi demonstrada por estes testes. Ver saldo dos oito itens no manual existente; sem fecho global por esta reconciliação.",,20/10/2026,,,,,,,,,,,,,,
AUD-SIM-INT05,Independent financial controls unknown zero units and currencies,Tempo request 20/10/2026; integrated simulator review; same manual,simulator and shared language,,,QA only,Reconciliation pending; no invented tax assumptions,Independent business-plan and cashflow ledgers passed; complete credit recipe included in screen and exports,QA continuation verified; precise open inputs and cashflow visual check in same manual; 2-4 h remaining,,,P1,,,,,,,,,,,,,,,,,,diagnosis and targeted corrections,,"[Retoma 21/10/2026] QA 18576, clone simulator_review_delta_20261020_test: sessão sintética renovada por login normal; gravação autenticada e recarga recuperaram saldo 123, receita 900, custos 600, calendário mensal 10/vazio/0, crédito IVA estimado 500. Caixa conhecida 3713 MZN; total indeterminado desde mês 2; crédito estimado excluído da caixa. Prova visual cashflow-recovered-20261021.png e snapshot .txt em outputs/simulator-continuation-20261020. Não certifica recuperação destes novos valores após outro login, CSV/DOCX ou PDF nativo. Ligação de controlo do navegador perdida durante espera de download; não atribuir falha à aplicação. Leitura remota aguarda identificação da ligação SSH; zero alterações no destino. | [Saldo consolidado21/10/2026] Concluído nos controlos delimitados. Controlos independentes de caixa/plano/crédito, zero/desconhecido e moedas preservados. Não são validação de taxas legais nem certificação de toda a contabilidade. Ver saldo dos oito itens no manual existente; sem fecho global por esta reconciliação.",,20/10/2026,,,,,,,,,,,,,,
diff --git a/resources/js/components/simulation-cashflow-planner.tsx b/resources/js/components/simulation-cashflow-planner.tsx
index 92995f4d..94760cfd 100644
--- a/resources/js/components/simulation-cashflow-planner.tsx
+++ b/resources/js/components/simulation-cashflow-planner.tsx
@@ -156,7 +156,7 @@ export function SimulationCashflowPlanner({
{taxMode === 'fixed' ? (
)}
+ {diagnostics.length > 0 &&
+
IVA — taxa geral: condições não satisfeitas
+
Não foi possível resolver este parâmetro. As respostas foram preservadas; esta consulta não executa o cálculo do imposto.
- Indeterminado — nenhum parâmetro publicado
+ {code === 'IVA' ? 'Indeterminado — não existe uma versão elegível visível nesta consulta. Consulte o diagnóstico do período acima, quando disponível. Sem esse diagnóstico, não é possível distinguir ausência de cobertura de indisponibilidade da regra ou da fonte; não se atribui o problema às suas respostas.' : <>Indeterminado — nenhum parâmetro publicado
aplicável. Faltam parâmetros aprovados para{' '}
{code}, no período {periodStart} a{' '}
{periodEnd} e no âmbito indicado. A consulta
não identifica um conjunto obrigatório de
parâmetros; não é possível determinar o
- imposto nem substituir as lacunas por zero.
+ imposto nem substituir as lacunas por zero.>}
- {labels[parameter.status] ??
+ {(parameter.parameter_code === 'IVA_GENERAL_RATE' && diagnostics.length ? 'Consulte acima cada condição e o fundamento da versão.' : labels[parameter.status]) ??
'Indeterminado — não foi possível validar o parâmetro.'}
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.
+ Aquisições já projectadas — sem dedução presumida
+
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.
+ {error &&
{error}
}
+ {!purchases.length && !error &&
Sem agenda de compras recuperável do plano empresarial.
}
+ {!!purchases.length &&
Pressupostos actuais de compras; sem resultado fiscal guardado
{['Mês do plano','Compras declaradas','Sem IVA','IVA suportado','Com IVA','IVA dedutível'].map((name)=>
{name}
)}
{purchases.map((row)=>
{row.month}
{row.declared ?? 'Sem informação'}
Por classificar
Indeterminado
Por classificar
Indeterminado
)}
}
+
+ Ver campos, cálculos, fundamentos e cobertura do Modelo A
+
O exemplar contém divergências de numeração/remissões, registadas no confronto documental. Não foram corrigidas no original. A existência de um campo não activa uma regra fiscal.
+
Campo do Modelo A → finalidade → origem → cálculo → fundamento → cobertura
{['Campo','Finalidade','Origem dos dados','Cálculo','Fundamento','Estado'].map((name)=>
+
+ ;
+}
diff --git a/resources/js/components/simulation-monthly-iva.tsx b/resources/js/components/simulation-monthly-iva.tsx
new file mode 100644
index 00000000..56bc1b80
--- /dev/null
+++ b/resources/js/components/simulation-monthly-iva.tsx
@@ -0,0 +1,80 @@
+import { useEffect, useRef, useState } from 'react';
+import { monthlyIvaInput, monthlyIvaKey, monthlySalesFromDraft, readMonthlyIvaRecord, readMonthlyIvaSettings, 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 { SimulationModeloA } from './simulation-modelo-a';
+
+export function SimulationMonthlyIva({draft, busy, onCalculate, onChange}: {
+ draft: Record; busy: boolean;
+ onCalculate: (input: MonthlyIvaInput) => Promise;
+ onChange: (field: string, value: string) => void;
+}) {
+ const settings = readMonthlyIvaSettings(String(draft.monthly_iva_settings ?? ''));
+ const record = readMonthlyIvaRecord(String(draft.monthly_iva_snapshot ?? ''));
+ const [retry, setRetry] = useState(0);
+ const [error, setError] = useState('');
+ const [available, setAvailable] = useState(null);
+ const attempt = useRef('');
+ 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); }
+ catch (cause) { inputError = cause instanceof Error ? cause.message : 'Reveja a projecção de vendas.'; }
+ const key = input ? monthlyIvaKey(input) : '';
+ const current = !!(input && record && monthlyIvaKey(record.input) === key);
+ const completed = current && record?.execution.status === 'completed';
+ const saveSettings = (patch: Partial) => onChange('monthly_iva_settings', JSON.stringify({...settings, ...patch}));
+ useEffect(() => {
+ let active = true;
+ fetch('/api/v1/fiscal-consumer', {credentials: 'same-origin', headers: {Accept:'application/json'}}).then(async (response) => {
+ if (!response.ok) throw new Error(); const payload = await response.json(); if (active) setAvailable(payload?.data?.enabled === true);
+ }).catch(() => {if (active) setError('Não foi possível consultar a disponibilidade da regra. As vendas foram preservadas.');});
+ return () => { active = false; };
+ }, [retry]);
+ useEffect(() => {
+ if (!settings.auto || !input || busy || !available || completed || attempt.current === key) return;
+ const request = input;
+ const pending = current && record && ['queued','running'].includes(record.execution.status) ? record.execution.id : null;
+ const timer = window.setTimeout(() => {
+ attempt.current = key; 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;
+ } 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.');
+ 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.');}
+ })();
+ }, 700);
+ return () => window.clearTimeout(timer);
+ }, [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;
+ return
+
IVA mensal das vendas projectadas
+
{source}
Declare se os preços projectados são sem IVA ou com IVA incluído. Nenhuma taxa é fixada neste formulário; o servidor selecciona a versão publicada.
+ Primeiro mês da projecção saveSettings({start:event.target.value})} className="block rounded border p-2" />
+ Tratamento do IVA nos preços projectados
+ saveSettings({declared:event.target.checked})} /> Declaro que as vendas projectadas são tributáveis à taxa geral interna e não incluem as operações excluídas deste lote.
+
Sem importações, taxas reduzidas, isenções, regimes especiais, deduções, reembolsos ou apuramento final. Valores com IVA incluído permanecem indeterminados neste lote; não se aplica a taxa ao preço bruto.
+
{monthlyIvaCashTreatment}
+ {inputError &&
{inputError}
}
+ {available === null && !error &&
A consultar a disponibilidade da versão publicada…
}
+ {available === false &&
A versão publicada de IVA está indisponível neste ambiente para novas execuções. Os pressupostos e históricos mantêm-se.
}
+ {record && !current &&
As vendas ou os pressupostos mudaram. Os resultados abaixo são históricos e estão desactualizados; não são usados como resultados da projecção actual.
}
+ {settings.auto && !completed && current &&
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.
}
+ {busy &&
A actualizar os resultados dependentes das vendas…
}
+ {error &&
{error}
}
+
+ {settings.auto && }
+ {input &&
{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.
{['Mês','Vendas declaradas','Vendas tributáveis sem IVA','Taxa aplicada (%)','IVA calculado','Total com IVA','Estado'].map((label) =>
{label}
)}
{projection.rows.map((row) =>
{row.date.slice(0,7)}
{row.sales_declared ?? 'Sem informação'}
{row.net_sales ?? 'Indeterminado'}
{row.rate ?? 'Indeterminada'}
{row.vat ?? 'Indeterminado'}
{row.gross_sales ?? 'Indeterminado'}
{{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'}
)}
}
+ {snapshot && Ver fundamento e relatório da versão guardada
}
+
+ ;
+}
diff --git a/resources/js/components/simulation-published-iva.tsx b/resources/js/components/simulation-published-iva.tsx
index a9c484c7..0051bb49 100644
--- a/resources/js/components/simulation-published-iva.tsx
+++ b/resources/js/components/simulation-published-iva.tsx
@@ -1,6 +1,7 @@
import { useEffect, useState } from 'react';
+import type { MonthlyIvaInput } from '@/lib/monthly-iva';
-export type PublishedIvaInput = {
+export type PublishedIvaInput = MonthlyIvaInput | {
scenario_kind: 'fiscal_rule_published';
base: string;
currency: 'MZN';
@@ -11,7 +12,7 @@ export type PublishedIvaInput = {
export function SimulationPublishedIva({ busy, onCalculate }: {
busy: boolean;
- onCalculate: (input: PublishedIvaInput) => Promise;
+ onCalculate: (input: PublishedIvaInput) => Promise;
}) {
const [available, setAvailable] = useState(false);
const [message, setMessage] = useState('A consultar disponibilidade do cálculo de IVA…');
@@ -51,8 +52,8 @@ export function SimulationPublishedIva({ busy, onCalculate }: {
} catch { /* The execution flow already preserves and reports connection errors. */ }
}
- return
-
IVA geral sobre base líquida
+ return
+
IVA — taxa geral
{message}
Cobertura: exigibilidade em 2026, operação interna à taxa geral. A base tributável é indicada por si; não é copiada do orçamento. Sem isenções, taxas reduzidas, bases especiais, importações, deduções, declaração ou pagamento. O cálculo não valida o enquadramento jurídico.