Compare commits

..
13 changed files with 1236 additions and 129 deletions
@@ -867,3 +867,56 @@ Reutilizado o inventário autorizado de **8143ficheiros**, sem nova varredura de
| ÂmbitoL8 | Direito potencial ao créditoCBF15,aplicação anual de créditos,retenções,pagamentos e saldo final | Executar o mecanismo próprioL8;nenhuma dedução/compensação anual é presumida neste lote |
Fontes reutilizadas: inventário autorizado8143ficheiros; originaisCIRPC/alterações e CBF/compilaçãoAPIEX já identificados na delimitação,com hashes conservados. Sem activação por consulta ou revalidação jurídica genérica. Recibo: `docs/investmoz/simulations/irpc-l7-common-qa-20261026.json`. Provas locais: `outputs/irpc-l7-common/`; reprodução dirigida: `node --test tests/frontend/irpc-special.test.mjs`, `php tools/irpc-special-qa.php routes`, `php tools/irpc-special-qa.php test`, `tsc --noEmit`, build com `INVESTMOZ_QA_BUILD=1`.
## 26/10/2026 — preparação da entrega L7 e preservação do main concorrente
A entrega do âmbito QA `ab2ff2fd` integra o `main` concorrente `a2122dc3`, sem substituir as alterações de apresentação/navegação. Os seis ficheiros de execução L7 conservam exactamente o código QA;os oito ficheiros concorrentes conservam exactamente o código do main. Reutilizadas as provas19testes/API108/UI/tipos/build de L7. O conflito documental foi resolvido recuperando586linhas de histórico do manual que tinham sido removidas no merge concorrente,sem apagar a sua notaV2-01 no CSV. As3555linhas mantêm-se,com o único delta fiscal emAUD-SIM-INT02. O registo de instalação só será actualizado após backup/restauro fresco,conferência do destino e conclusão da entrega Git;esta nota não a antecipa.
## 26/10/2026 — primeira entrega agrupada L7 instalada pelo Git
Instalada `e07f89da3d59d06aa1b8c50c22a478b7b167bfdd` (integração do código QA `ab2ff2fdbcbe6fb94f03e4bc4cc7ccbd647d94fc` com o main concorrente`a2122dc3`),com `5aaf1a56f9d928331364fcc8b0d1528e51dba327` preservado como versão anterior. Os seis ficheiros de execução L7 são exactamente os da prova QA aceite;as sete alterações concorrentes de apresentação/navegação e o respectivo teste foram preservados. Recuperadas586linhas de histórico do manual removidas no merge concorrente;notaV2-01 conservada,sem alterar o seu conteúdo.
Backup fresco `2026-10-26T10:55:59Z`;restauro isolado sem rede/55441 verificou174tabelas por contagem/checksum e369ficheiros/configuração. Conferidos13ficheiros de execução do delta,50protegidos e31originais. Schema,roles/grants e permissões mantêm-se;172tabelas de negócio iguais ao backup. Cache/sessões reconciliadas por eventos operacionais e acessos públicos,sem inferir perda por RLS. A versão activa e a anterior foram preservadas durante o arquivo conferido de dependências antigas para recuperar espaço;nenhum dado,original ou backup foi eliminado.
Revisão/manifest público,marcadoresL7/L6/câmbio,assets e simuladorHTTP200 conferidos. Procedimento Git concluído;provas funcionais aceites19testes/API108/UI/tipos/build reutilizadas. Os controlos automáticos obrigatórios da instalação ficaram registados no recibo,sem nova ronda manual dos casos aceites. Sem migrações,importações,recálculo de históricos ou escrita privada sintética no activo.
Disponíveis apenas qualificação e tratamentos demonstrados:despesas61(4) sobre36g já ajustado,cooperativas12 integralmente abrangidas eCBF16 no recorte documentado. L6 permanece operacional no âmbito aceite;as suas pendências condicionam só dependentes. L7/IRPC não estão integralmente concluídos;localização não concede benefício;saldo final permaneceL8. O estado anterior deQA sem instalação é histórico. Recibo:`docs/investmoz/simulations/irpc-l7-common-delivery-20261026.json`.
## 26/10/2026 — saldo concreto de L7 após a primeira entrega agrupada
O âmbito demonstrado compreende qualificação comum, imposto autónomo61(4) sobre parcelas36g já calculadas emL6, cooperativas12 integralmente abrangidas e amortizaçãoCBF16 nos activos/período/método expressamente suportados. L7 permanece parcial. Este saldo distingue implementação de prova documental por caso; não cria outra matriz nem exige revalidação genérica das fontes aceites. L6 mantém o estado operacional delimitado e as suas pendências; só condiciona tratamentos que efectivamente dependam delas.
### Código ainda por implementar
| Tratamento / caso fora da cobertura | Exemplo | Condição concreta de retoma |
| --- | --- | --- |
| Despesas autónomas fora de parcela36g calculada e segregações adicionais | Despesa100 com apenas60 correspondidos no mapa de origem,ou encargo não incluído no resultado de partida | Implementar origem/parcela e reconciliação próprias,documentar incidência61(4) e impedir nova contabilização/acréscimo da mesma despesa. O ramo já entregue36g não é reaberto. |
| Cooperativas com rendimentos mistos/retidos;demais isenções por natureza da entidade,CIRPC9–14 | Cooperativa com actividade agrária e serviços não abrangidos;associação com rendimentos comerciais acessórios | Segregar proveitos,custos e base elegível e implementar o artigo específico. Não reduzir a base inteira nem estender a redução às retençõesL5. |
| ExtensõesCBF16 e combinações de benefícios | Imóvel reabilitado,método degressivo,quota inferior à máxima,duodécimos,quotas anteriores,ano posterior,cooperativa+CBF16 | Corresponder a regra temporal/método/contabilização e a compatibilidade/ordem/limite da combinação;reutilizar activo e quotas. Tabela ou casoL6 em falta impede apenas o activo dependente. |
| Mais-valias autónomas61-A e operações especiais | Ganho100 já incluído no resultado em2026;entrada de activos/fusão;perda transferida de outra sociedade | Implementar apuramento/parcela e reconciliação com resultadoL6,sem dupla incidência ou compensação de perdas presumida;para operações,aplicar54–56/41-A e preservar valores históricos. |
| Deduções/majoraçõesCBF17–19 e crédito potencialCBF15 | Formação sem ramo/base de limite;investimento novo com activos elegíveis e excluídos | Implementar elegibilidade,base,limite,ordem,janela temporal e não cumulação. CBF15 emL7 delimita direito/origem/crédito potencial;utilização anual,limitação por créditos/saldos e liquidação ficam emL8. |
| Regimes sectoriais/territoriais e disposições especiais | Projecto emZEE sem tratamentoIRPC correspondido;actividade mineira/petrolífera com regime próprio | Implementar a disposição/versão/período aplicáveis ao projecto e à parcela (CBF20–48 ou diploma específico). Endereço/código sectorial só identifica candidato;benefício aduaneiro não se transforma em benefícioIRPC. |
| Transporte de efeitosL7 paraM20/M22 | Imposto autónomo ou redução calculados mas sem campo/edição correspondente | Implementar apenas a correspondência demonstrada e a representação aplicável;conservar os montantes exactos e a preparaçãoL6 de referência,sem campo/taxa provisórios. |
### Dependências documentais que condicionam apenas o caso afectado
| Elemento em falta / dúvida concreta | Exemplo | Condição de retoma |
| --- | --- | --- |
| Classificação/incidência,parcela e período da operação | Há uma despesa36g e falta qualificar61(4);ou há actividade elegível e outra não abrangida | Associar prova/declaração da natureza e parcela ao exercício correcto. Informação em falta continua indeterminada;condição negativa e ausência declarada têm suporte próprio. Não inferir pela falta de anexo. |
| Estatuto e reconhecimento exigidos pela disposição | Endereço numaZEE sem estatuto do projecto;CBF16 sem instrumento10 ou norma de excepção | Juntar o elemento concreto exigido ou documentar a condição negativa/excepção aplicável. Não pedir aprovador ou parecer jurídico genérico adicional. |
| Norma/período/compatibilidade específicos ainda não correspondidos | Redução com termo31/12/2025 pretendida em2026;cumulação cooperativa+CBF16 | Disposição de vigência/prorrogação efectiva ou correspondência da combinação e seus limites. Sem informação nova,não repetir pesquisa transversal;prosseguir com os restantes casos. |
| Edição,campo ou representação do formulário | EfectoL7 com campoM20/M22 não identificado ou fracção sem regra de representação | Identificar exemplar/edição,instrução/campo e forma de representar o valor;limitar a pendência ao transporte afectado. O cálculo independente mantém-se disponível. |
**Limites conservados:** localização não concede benefícios automaticamente;benefício desconhecido não é zero;colecta normal,L7 e imposto autónomo permanecem discriminados. Retenções,pagamentos,aplicação anual de créditos e saldo final a pagar/recuperar continuam emL8. As provas aceites não são invalidadas por esta lista nem por uma dúvida documental num caso independente.
## 26/10/2026 — reconciliação do estado servido L7 e capacidade do instalador
Conferência autenticada por leitura em `2026-10-26T13:56:51.412248+02:00` (Africa/Johannesburg):o portal,o registo do instalador e o main actual coincidem em `e07f89da3d59d06aa1b8c50c22a478b7b167bfdd`. **L7 já está instalado no âmbito demonstrado**,com origemQA`ab2ff2fd`;o estado «ainda emQA,sem instalação» é histórico/desactualizado. A instalação terminou em26/10/2026 às13:02:35 locais;backup anterior às12:55:59 e restauro174tabelas/369ficheiros permanecem comprovados pelo recibo de entrega. Nesta passagem,o dump e o arquivo de ficheiros ainda coincidem com os hashes desse backup e a prova de restauro refere o mesmo dump. Não foi apresentado um novo backup/restauro como executado,nem repetida a instalação da revisão já activa.
**Partição do instalador e backup:**`/dev/md2 / ext4`;release,state,backup,tmp eDocker no mesmo dispositivo. Livres5.52GiB e21448231inodes de29089792. O código do instalador mantém o limiar5GiB;os ficheiros do backup observado ocupam0.164GiB. A leitura satisfaz5GiB+um backup desse tamanho,com margem0.35GiB. A release actual tem28674ficheiros e2503directórios sem seguir links,como referência de escala,não um novo limite arbitrário de inodes. Futuras entregas devem voltar a medir a capacidade imediatamente antes da operação;estes números não garantem uma carga futura diferente. Nenhuma limpeza local/remota foi executada;SGF TEMPO não foi afectado.
**Só o delta L7:**seis hashes de código correspondem à provaQA;revisão/manifest,sete marcadoresL7,quatroassets e entrada do simuladorHTTP200 conferidos. Reutilizadas as provas19testes/API108/UI/tipos/build e as provas anteriores de preservaçãoL6/L3/ISPC/câmbio;sem nova ronda funcional,escrita privada sintética,migração ou importação. A revisão activa e a anterior permanecem preservadas.
**Próximo conjunto delimitado para implementaçãoQA:CBF16 com duodécimos.** Reutilizar activos,tabela/taxa normal máxima,método constante,qualificaçãoCBF e periodizaçãoL6 existentes. Primeiro caso:exercício anual civil2026 com entrada em uso durante o ano;imóvel novo do projecto ou máquina industrial/agro-industrial já suportada;sem quotas anteriores,saída ou cumulação de outros benefícios. Ligar a quota mensalL6 ao incrementoCBF16,limitando ao contabilizado/saldo fiscal e mostrando apenas a diferença adicional. Demonstrar condição satisfeita,negativa,informação em falta e ausência declarada,cálculo→gravação→recuperação→relatório,efeitos no lucro/base/colecta e conservação dos históricos. Este conjunto está apenas delimitado:não é novo cálculo instalado.
Degressivo,reabilitados/usados/reavaliados,quotas anteriores e cumulação cooperativa+CBF16 continuam nos casos próprios. O saldo anterior de sete grupos de código e quatro dependências documentais permanece na mesma matriz,com exemplos/condições de retoma;nenhuma pendência foi apagada. Documento individual em falta limita só o activo/caso dependente. Localização não concede benefício. **L6 operacional delimitado;L7 parcial;retenções,pagamentos,créditos anuais e saldo final emL8.** Recibo:`docs/investmoz/simulations/irpc-l7-server-state-20261026.json`.
@@ -0,0 +1,585 @@
{
"status": "installed_first_grouped_L7_demonstrated_scope",
"installed": {
"status": "installed",
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"release": "/var/www/investmoz-homologacao/releases/e07f89da3d59d06aa1b8c50c22a478b7b167bfdd-6b82c3f2",
"previous_release": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
"database_migrations": 0,
"content_imports": 0
},
"QA_candidate": "ab2ff2fdbcbe6fb94f03e4bc4cc7ccbd647d94fc",
"integration_candidate": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"previous_main": "a2122dc34cc9d3e8b64938c3d6b31cc36f336154",
"previous_installed": "5aaf1a56f9d928331364fcc8b0d1528e51dba327",
"authorization": "Tempo:disponibilizar entrega agrupadaL7 peloGit,backup/restauro fresco,conferência do delta,preservarL6/provas aceites e apresentar saldo concreto",
"backup": {
"stage": "/var/backups/investmoz-irpc-l7-common-delivery-20261026/backup",
"created_at": "2026-10-26T10:55:59Z",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 174,
"files_verified": 369,
"dump_sha256": "a3d46de6c10b37bd6f211125686da8c489f879ab243f082e7b72a397638901f9",
"files_sha256": "409d378ce59ca3d82e39cbf44f139114a839e1aa56457755316a2fecdd7e5b07",
"restore_verified": false
},
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "irpc_l7_restore_20261026",
"port": 55441,
"source_dump_sha256": "a3d46de6c10b37bd6f211125686da8c489f879ab243f082e7b72a397638901f9",
"active_database_writes": 0
},
"preservation": {
"previous_release_preserved": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
"installed": {
"status": "installed",
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"release": "/var/www/investmoz-homologacao/releases/e07f89da3d59d06aa1b8c50c22a478b7b167bfdd-6b82c3f2",
"previous_release": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
"database_migrations": 0,
"content_imports": 0
},
"runtime_files_verified": 13,
"preserved_L3_ISPC_FX_runtime_files_verified": 50,
"documentary_files_verified": 31,
"persistent_files_and_env_verified": 369,
"tables_compared": 174,
"changed_tables": {
"cache": {
"before": {
"rows": 106,
"checksum": "63f3ceed97ce2f40106530ef6eb6e083"
},
"after": {
"rows": 106,
"checksum": "38aa09dc08f13ff12ac1e71dbae22d0b"
}
},
"sessions": {
"before": {
"rows": 11,
"checksum": "823228a21cb8173718f6010a9aaa319a"
},
"after": {
"rows": 14,
"checksum": "1529684ad387db4b9aaa40ac775ebe74"
}
}
},
"preserved_counts": {
"published_fiches": 29,
"relations": 28,
"geometries": 408
},
"migration_count": 0,
"content_imports": 0,
"comparison_role": "postgres_before_and_after;sameexportedsnapshotbaseline;noapplicationRLSvisibilityinference",
"writes_by_verification": 0
},
"schema_permissions_before": {
"schema_sha256": "5045b3e51d2185377aa3d9ac7fa07a44fad3ec620cdfa83ffe31c8884ee1601d",
"roles_grants_sha256": "1530c33cb016e67bfdc64891ddfce7f185b13b56b2cd87c012871a685e118109",
"filesystem_permissions": {
".env": {
"mode": 416,
"uid": 1001,
"gid": 33
},
"storage": {
"mode": 1533,
"uid": 1001,
"gid": 33
},
"storage/app": {
"mode": 1533,
"uid": 1001,
"gid": 33
},
"bootstrap/cache": {
"mode": 1528,
"uid": 1001,
"gid": 33
}
},
"comparison_identity": "postgres;catalogue read only;no passwords collected"
},
"schema_permissions_after": {
"schema_sha256": "5045b3e51d2185377aa3d9ac7fa07a44fad3ec620cdfa83ffe31c8884ee1601d",
"roles_grants_sha256": "1530c33cb016e67bfdc64891ddfce7f185b13b56b2cd87c012871a685e118109",
"filesystem_permissions": {
".env": {
"mode": 416,
"uid": 1001,
"gid": 33
},
"storage": {
"mode": 1533,
"uid": 1001,
"gid": 33
},
"storage/app": {
"mode": 1533,
"uid": 1001,
"gid": 33
},
"bootstrap/cache": {
"mode": 1528,
"uid": 1001,
"gid": 33
}
},
"comparison_identity": "postgres;catalogue read only;no passwords collected",
"unchanged": true
},
"operational_delta": {
"status": "operational_delta_reconciled",
"comparison_identity": "postgres before/after;isolated restored baseline;no RLS visibility inference",
"cache": "queue:restart;requestthrottle;identical home-sector cached value with refreshed expiry(HomeController remember10min);no deletedcache",
"sessions": "anonymous sessions from delivery user-agent or exactUA/time correlated with nginx public request;deleted sessions individually expired beyond configured lifetime,normal database session garbage collection(config/session lottery2/100)",
"delta": {
"cache": {
"before_rows": 106,
"after_rows": 106,
"changes": [
{
"key_sha256": "8d6ea77eb4b34d86d207362d583cfa8bf2880b907becd9b00398964482c6b4bd",
"kind": "updated",
"fields": [
"expiration"
],
"key_pattern": "investemoz-cache-{hash}",
"is_queue_restart_key": false,
"expiration_unchanged": false,
"throttle_timer_pair": true,
"same_value_home_cache_expiry_refresh": false
},
{
"key_sha256": "2f251473865d14b953236ab95b1521764754d76abd79b58ca7d38c96dfe2fab1",
"kind": "updated",
"fields": [
"value",
"expiration"
],
"key_pattern": "investemoz-cache-{hash}:timer",
"is_queue_restart_key": false,
"expiration_unchanged": false,
"throttle_timer_pair": true,
"same_value_home_cache_expiry_refresh": false
},
{
"key_sha256": "7f7dd83f47f5bf404d55e6e9f1367948721579970b195680645e356031a070ff",
"kind": "updated",
"fields": [
"value",
"expiration"
],
"key_pattern": "investemoz-cache-illuminate:queue:restart",
"is_queue_restart_key": true,
"expiration_unchanged": false,
"throttle_timer_pair": false,
"same_value_home_cache_expiry_refresh": false
}
]
},
"sessions": {
"before_rows": 11,
"after_rows": 14,
"changes": [
{
"key_sha256": "cd8c2106a4f4ab7802317e6602c26cfa4cf82a23a86f67a0abbc27fbd82edfb8",
"kind": "added",
"fields": [
"id",
"ip_address",
"user_agent",
"payload",
"last_activity"
],
"anonymous_user": true,
"delivery_user_agent": true,
"expired_before_comparison": false,
"session_lifetime_minutes": 120,
"anonymous_public_request_logged": true
},
{
"key_sha256": "a89dca10cb8a95f4451ff60eeefe7ac3cd7751b779b0bf97a7e5f5b894f9b115",
"kind": "added",
"fields": [
"id",
"ip_address",
"user_agent",
"payload",
"last_activity"
],
"anonymous_user": true,
"delivery_user_agent": true,
"expired_before_comparison": false,
"session_lifetime_minutes": 120,
"anonymous_public_request_logged": true
},
{
"key_sha256": "7fb2119013f872a5e4dd70952cc896a4ac8291134e02362bd60805eb77e9587a",
"kind": "added",
"fields": [
"id",
"ip_address",
"user_agent",
"payload",
"last_activity"
],
"anonymous_user": true,
"delivery_user_agent": true,
"expired_before_comparison": false,
"session_lifetime_minutes": 120,
"anonymous_public_request_logged": true
}
]
}
},
"business_tables_to_confirm_separately": 172,
"active_data_writes_by_comparison": 0,
"restore_network": "none"
},
"public": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"branch": "main",
"built_at": "2026-10-26T11:02:32.435267+00:00",
"manifest_sha256": "d78a1bdb503c10849f5ea8d8879753653c2c2fc22f6182f6d68ec9f6adf635b5"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"IRPC-normal-adjustments/10": [
"assets/project-dossier-KEyrPtc6.js"
],
"Preparar qualificação L7": [
"assets/services-BSj1SuMk.js"
],
"Despesas — imposto autónomo": [
"assets/project-dossier-KEyrPtc6.js"
],
"Cooperativa — redução da taxa": [
"assets/project-dossier-KEyrPtc6.js"
],
"Amortizações aceleradas": [
"assets/services-BSj1SuMk.js",
"assets/project-dossier-KEyrPtc6.js"
],
"novo ajustamento ao lucro:": [
"assets/project-dossier-KEyrPtc6.js"
],
"colecta combinada:": [
"assets/project-dossier-KEyrPtc6.js"
],
"Saldo final — âmbito L8": [
"assets/project-dossier-KEyrPtc6.js"
],
"Reutilizar selecção cambial": [
"assets/services-BSj1SuMk.js"
]
},
"assets": [
{
"file": "assets/project-dossier-document-BRdhvWgC.js",
"status": 200,
"sha256": "5b1de561be552259de776a2dbaf4b49909a3edd2647fec7c296a96054c929a9f"
},
{
"file": "assets/services-BSj1SuMk.js",
"status": 200,
"sha256": "ea1a3812cbced72f4df115e8e379ae6d2307e97b2152d288b1c80d357f03f78b"
},
{
"file": "assets/simulation-form-BqVD91Ek.js",
"status": 200,
"sha256": "85cbd533c5bc92af5a448db71da006d4346d2d0adb09dde825db0aa19ad5048c"
},
{
"file": "assets/project-dossier-KEyrPtc6.js",
"status": 200,
"sha256": "b6ae250a30b5030a6e40e7dfb140a3335ce6d5bc16835098d3d7c5828fc526c5"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-ByAQSjfI.js",
"existing_fiscal_availability": {
"data": {
"enabled": true,
"coverage_start": "2026-01-01",
"coverage_end": "2026-12-31",
"message": "IVA geral sobre base líquida disponível; enquadramento declarado."
}
},
"synthetic_private_writes": 0,
"method": "Read-only installedrevision/manifest/newcompiledcatalogueandreaders/simulatorentry;acceptedQAproofsreused"
},
"pipeline": {
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"installed": {
"status": "installed",
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"release": "/var/www/investmoz-homologacao/releases/e07f89da3d59d06aa1b8c50c22a478b7b167bfdd-6b82c3f2",
"previous_release": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
"database_migrations": 0,
"content_imports": 0
},
"latest_report": {
"status": "installed",
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"release": "/var/www/investmoz-homologacao/releases/e07f89da3d59d06aa1b8c50c22a478b7b167bfdd-6b82c3f2",
"previous_release": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"e07f89da3d59d06aa1b8c50c22a478b7b167bfdd"
],
"finished_at": "2026-10-26T11:02:35.885260+00:00"
},
"log_file": "1793012270105316629.log",
"summaries": [
"OK (1 test, 3106 assertions)",
"built in 33.69s",
"OK (59 tests, 317 assertions)",
"# tests 1007",
"# pass 1007",
"# fail 0"
],
"log_bytes": 287128
},
"concurrent_main_reconciliation": {
"QA_candidate": "ab2ff2fdbcbe6fb94f03e4bc4cc7ccbd647d94fc",
"concurrent_main": "a2122dc34cc9d3e8b64938c3d6b31cc36f336154",
"installed_baseline": "5aaf1a56f9d928331364fcc8b0d1528e51dba327",
"runtime_QA_files_exact": [
"resources/js/lib/irpc-special.ts",
"resources/js/components/simulation-irpc-special.tsx",
"resources/js/lib/irpc-normal.ts",
"resources/js/lib/irpc-normal-depreciation.ts",
"resources/js/components/simulation-irpc-normal.tsx",
"resources/js/lib/project-dossier-report.ts"
],
"concurrent_files_preserved": {
"resources/js/components/portal-hero.tsx": "0ebe2c3e2ae2615d966d050864699a90dac2fef36ebfc174aa1059b83db9a514",
"resources/js/components/tempo-brand.tsx": "27c01d317ec59c9a4ddb2a184c0a8a9427fcf92d34a916060287d07226364d02",
"resources/js/layouts/portal-navigation.tsx": "f1f66b645035f56c9bcc7fbc8c2983e84eb29ae3ecb99461e3963a7deefbaaa6",
"resources/js/lib/portal-navigation.ts": "12aad264eeb5cebe7c9bf467391c611f58d1b84cc9d5fd30db983ba640e25951",
"resources/js/pages/PortalInvestidor.tsx": "d418f960f82ae0d054acfe094047bc80a16f7b418506f054e6d7da07edf6ef00",
"resources/js/pages/investment/shared.tsx": "00098334435de3bb5c7b13608c0e53c63a4bdee7d9cdf07f24b3aec54441f05e",
"resources/js/pages/portal/why-invest.tsx": "3917efa7b0d33fe8fe6e4562c3b9e2f53200b9e07807cd29bade328f8e5ae7e2",
"tests/frontend/portal-navigation.test.mjs": "518c7e1de6fb1b385caffe39914e2905bf8f561d938f0527561156602a0e3098"
},
"CSV_concurrent_V2_01_preserved": true,
"removed_manual_history_lines_restored": 586,
"resolution": "main changed only by removing586tail lines from the manual;candidate manual retained in full;CSV auto-merge preserved V2-01 and changed only fiscal rowAUD-SIM-INT02",
"new_functional_round": false,
"accepted_QA_proofs_reused": {
"new_frontend_tests": 19,
"API_tests": 1,
"API_assertions": 108,
"API_database": "simulator_fiscal_delta_20261021_test",
"API_host": "127.0.0.1",
"API_port": 55441,
"API_transaction_rollback": true,
"QA_identity_guard": true,
"Wayfinder_generated_with_form": true,
"typescript_noEmit": true,
"QA_build": true,
"API_recovered_to_HTML_and_financial_dossier_cases": 6,
"UI": {
"actualComponent": true,
"expenseL6Addback100Autonomous35": true,
"missingClassificationDoesNotEraseNormalProfit": true,
"absenceExplicit": true,
"cooperative16MixedCaseBlockedOnly": true,
"acceleratedQuota150LimitedToAccounted120": true,
"netAdditionalDeduction20": true,
"cumulationMissingExplicit": true,
"saveRecoveryDownload": true,
"finalBalanceL8Unknown": true,
"errors": []
},
"old_functional_suites_repeated": false,
"building_and_lower_optional_quota_cases": true
}
},
"dependency_archiving": {
"status": "dependencies_archived_and_verified",
"versions": 8,
"free_before": 4349009920,
"free_after": 6454341632,
"receipt": "/var/backups/investmoz-build-dependencies-irpc-l7-common-20261026/receipt.json",
"protected": [
"/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
"/var/www/investmoz-homologacao/releases/56475acb2f39e58cb51664913f7fb499f58eb7ab-694b3932"
],
"active_or_previous_release_modified": false,
"source_data_backups_deleted": 0
},
"accepted_QA_proofs_reused": {
"new_frontend_tests": 19,
"API_tests": 1,
"API_assertions": 108,
"API_database": "simulator_fiscal_delta_20261021_test",
"API_host": "127.0.0.1",
"API_port": 55441,
"API_transaction_rollback": true,
"QA_identity_guard": true,
"Wayfinder_generated_with_form": true,
"typescript_noEmit": true,
"QA_build": true,
"API_recovered_to_HTML_and_financial_dossier_cases": 6,
"UI": {
"actualComponent": true,
"expenseL6Addback100Autonomous35": true,
"missingClassificationDoesNotEraseNormalProfit": true,
"absenceExplicit": true,
"cooperative16MixedCaseBlockedOnly": true,
"acceleratedQuota150LimitedToAccounted120": true,
"netAdditionalDeduction20": true,
"cumulationMissingExplicit": true,
"saveRecoveryDownload": true,
"finalBalanceL8Unknown": true,
"errors": []
},
"old_functional_suites_repeated": false,
"building_and_lower_optional_quota_cases": true
},
"source_inventory_reused": {
"files_reused": 8143,
"broad_search_repeated": false,
"receipt": "irpc-l7-scope-20261026.json",
"sources": [
{
"id": "CIRPC",
"title": "Lei34/2007",
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\Lei-34-2007-BR52.pdf",
"bytes": 1676884,
"sha256": "cdbef875ad7ccc1517b12faf5de0e893a70ed2ed81e33913cd6dc4a674474e6e",
"references": "PDF5/p768(59):12,14,15; PDF15–16:54–56; PDF17/p768(71):61",
"official_url": null,
"available_for_consultation": true,
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
"new_calculation_activation": false
},
{
"id": "IRPC-2026",
"title": "Lei12/2025",
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\BR-248-I-Suplemento-1-2025.pdf",
"bytes": 440018,
"sha256": "ccf2a8deeca820f2dd076b4b2141b1efe3f6a806568c3a587ca59a8e92f4c251",
"references": "PDF18–20; PDF20:art2/61-A,art3,art6; vigência01/01/2026",
"official_url": null,
"available_for_consultation": true,
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
"new_calculation_activation": false
},
{
"id": "IRPC-2022",
"title": "Lei20/2022",
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\docs\\investmoz\\simulations\\source-archive\\BR252-I-Serie-2022-Lei20-PESOE.pdf",
"bytes": 17966640,
"sha256": "1159fd3ce1ba5581671796d083534da48bd3c5578298819e896f1c2a8026318d",
"references": "PDF1/p2731:61(2), termo31/12/2025",
"official_url": null,
"available_for_consultation": true,
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
"new_calculation_activation": false
},
{
"id": "CBF-local",
"title": "Lei4/2009",
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\CBF-Lei4-2009-APIEX.pdf",
"bytes": 10998765,
"sha256": "4231a5b6783e603cedb98992f3e93ecaf1c1d5be341b093560cf2fdd0845b0dc",
"references": "Original local disponível; scan sem extracção textual útil; cotejo textual pela compilação oficial",
"official_url": null,
"available_for_consultation": true,
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
"new_calculation_activation": false,
"authorised_original": "\\\\Mac\\Home\\Documents\\TEMPO\\Portal Tempo\\Legislacao\\Apiex\\3.-Lei-no4-2009-de-12-de-Janeiro-Codigo-dos-Beneficios-Fiscais.pdf"
},
{
"id": "APIEX",
"title": "Compilação oficial APIEX",
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\APIEX-legislacao-investimentos-2025.pdf",
"bytes": 6467655,
"sha256": "ba1e9eaabfec5d0c4cb2d9f2444a6860f7a90f222034764197829be402d408ed",
"references": "pp8–32:Lei8/2023; pp36–59:Decreto8/2024; pp64–92:CBF4/2009; p68:9/10;p71–74:15–19",
"official_url": "https://pt.apiex.gov.mz/wp-content/uploads/2025/02/LEGISLACAO-DE-INVESTIMENTOS-EM-MOCAMBIQUE.pdf",
"available_for_consultation": true,
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
"new_calculation_activation": false
},
{
"id": "RCBF",
"title": "Decreto56/2009",
"exemplar": "C:\\laragon\\www\\portal-investidor-irpc-l7-scope-20261026\\outputs\\irpc-l7-scope\\Decreto56-2009-BR40.pdf",
"bytes": 422005,
"sha256": "6ea1b8d93daed48c6d590481d874010fa1708211d8f27c319dc9a31328456017",
"references": "Procedimento já cotejado em iva-l1-p084-p085-model-i1-cotejo-20261024.json; não estende isenções IVA a IRPC",
"official_url": null,
"available_for_consultation": true,
"documentary_status": "official_source_accepted; applicability/version/period_per_treatment",
"new_calculation_activation": false
}
],
"document_consultation_activates_calculation": false
},
"L6_operational_demonstrated_scope_preserved": true,
"L6_pending_code_and_documentation_preserved": true,
"L7_integrally_complete": false,
"IRPC_integrally_complete": false,
"new_private_synthetic_writes_on_active": 0,
"location_grants_benefit": false,
"L8_retentions_payments_annual_credit_application_final_balance_separate": true,
"remaining_scope": {
"implementation": [
"61(4) sources/partial segregation outside calculated36g",
"cooperative mixed/withheld income and other entity exemptions9–14",
"CBF16 other assets/methods/optional lower quota/periods/prior quotas and combinations",
"61-A capital gains and special operations54–56/41-A",
"CBF17–19 deductions/magnifications andCBF15 potential credit origin/eligibility",
"sector/territory and specific special regimes",
"L7 M20/M22 official transport"
],
"documentary_case_dependencies": [
"nature/incidence/parcel and correct period",
"individual statute/title/recognition or applicable exception only where required",
"specific norm/validity/compatibility/order/limit not corresponded",
"affected form edition/field/representation"
],
"examples_and_resume_conditions": "same consolidated matrix and manual section:saldo concreto de L7 após a primeira entrega agrupada"
},
"evidence": {
"backup.txt": "dac1a5cddac111160d64f4f34184f999cb40655b210582b9a18dbef20aedd8d0",
"baseline.txt": "6e4bf2e80c29cc3c81d14c3da9f44e1ef3d576b0eb25f9c7ecb85f060c15b196",
"compact-dependencies.txt": "a2385728e917cc20008da8b8144ff57a1bcbe3a1a352848c548b11bdf38fbbf0",
"concurrent-main-reconciliation.json": "8a6aefa957e2b28905f89dca161de53bcffdc9dba2575e9f76efb13ac80a6c16",
"installed-protected.txt": "e2fc267572cf8c29ee15e4efa524679843377766d19456ccba4e9187b7c55a21",
"installed-public-delta.json": "557cbdc9ec7db9b0eb6865d0998c83a9c4a957ee041ba1bce0e54cd2df4ee3cb",
"installed-public.txt": "4efa54256c1de8af63f80f0ff245f529cb581746f165a1299d7389ffd8047ee9",
"integration.txt": "c320a8d33ea33e1f70a291b7da2fa4934658b2f87fc9a26a9521325e23cfac7d",
"manifest-served.json": "d78a1bdb503c10849f5ea8d8879753653c2c2fc22f6182f6d68ec9f6adf635b5",
"operational-delta.txt": "18793b0013b52e87ad088317b49ef3ef31e582dfb073500fa29a5822e237f61c",
"preflight-ready.txt": "ffe2dfba440adebbd45ba72336d56668735f4916d3ae5385a4d750c5775a6a04",
"preflight.txt": "6bf42bb982a7e5807123569ba9a4951bd639132b628965586b7ed60f36b5f0ea",
"preparation.json": "46c078247bb3b68f2aabdb9aa5c0e40bf648dbc07e467933ce82d749b9741a00",
"process-progress.txt": "721a9cf3e8b3892122dabe8b05e8c377b097d94ed0123b7135dcf83c53a40cd6",
"progress-2.txt": "df6ae7b7f2e49c9da3ffbe12c0de6746a191f51dcf30428a93a3db4693c7972b",
"progress-3.txt": "de4fa512b1e124d6c48c34eec14ab50fb66ebb718b49c0fd039e6a148598688d",
"progress-4.txt": "de4fa512b1e124d6c48c34eec14ab50fb66ebb718b49c0fd039e6a148598688d",
"restore.txt": "fcf1cbf5a6de6c0ac9172c3b5acd39c7c0438f950a2297be5f84964268ef4c24",
"schema-permissions-after.txt": "76b5a4d8af11e4898a205062766cfb7ab6ec0783200e77e60a1927aa1ca18597",
"schema-permissions-before.txt": "0ab7c964792acdd8917bce256c472e55e034b103500a58b49f020b5084823ed7",
"status-before.txt": "290e99722a17dabbeb4bb609b2c3df423357dd1e34b3cc6f4e45cd64e758c797",
"status-final.txt": "3814636ae1e3d45f6da832b42b3a9215503598bc20c0c080b3ab5181a074bea0",
"status-progress-1.txt": "b289c9824a293d6b97db770712ce92e65c714fe72f22e0410ef6447b655d47d6"
}
}
@@ -0,0 +1,270 @@
{
"status": "L7_installed_reconfirmed_not_reinstalled",
"checked_at_UTC": "2026-10-26T11:56:51.412248+00:00",
"checked_at_Africa_Johannesburg": "2026-10-26T13:56:51.412248+02:00",
"main": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"QA_origin": "ab2ff2fdbcbe6fb94f03e4bc4cc7ccbd647d94fc",
"installed_commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"previous_delivery_receipt": "irpc-l7-common-delivery-20261026.json",
"server_read_only": {
"checked_at_UTC": "2026-10-26T11:56:51.412248+00:00",
"read_only": true,
"installed": {
"status": "installed",
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"release": "/var/www/investmoz-homologacao/releases/e07f89da3d59d06aa1b8c50c22a478b7b167bfdd-6b82c3f2",
"previous_release": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
"database_migrations": 0,
"content_imports": 0
},
"release_revision": {
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"branch": "main",
"built_at": "2026-10-26T11:02:32.435267+00:00",
"manifest_sha256": "d78a1bdb503c10849f5ea8d8879753653c2c2fc22f6182f6d68ec9f6adf635b5"
},
"latest_report": {
"status": "installed",
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"release": "/var/www/investmoz-homologacao/releases/e07f89da3d59d06aa1b8c50c22a478b7b167bfdd-6b82c3f2",
"previous_release": "/var/www/investmoz-homologacao/releases/5aaf1a56f9d928331364fcc8b0d1528e51dba327-c1543f3e",
"database_migrations": 0,
"content_imports": 0,
"requested_commits": [
"e07f89da3d59d06aa1b8c50c22a478b7b167bfdd"
],
"finished_at": "2026-10-26T11:02:35.885260+00:00"
},
"service": "ExecMainStatus=0\nActiveState=inactive\nSubState=dead\n",
"volumes": [
{
"path": "/var/www/investmoz-homologacao/releases",
"mount": "/dev/md2 / ext4",
"device": 2306,
"total_bytes": 467909804032,
"available_bytes": 5922545664,
"total_inodes": 29089792,
"available_inodes": 21448231
},
{
"path": "/var/lib/investmoz-deploy",
"mount": "/dev/md2 / ext4",
"device": 2306,
"total_bytes": 467909804032,
"available_bytes": 5922545664,
"total_inodes": 29089792,
"available_inodes": 21448231
},
{
"path": "/var/backups",
"mount": "/dev/md2 / ext4",
"device": 2306,
"total_bytes": 467909804032,
"available_bytes": 5922545664,
"total_inodes": 29089792,
"available_inodes": 21448231
},
{
"path": "/tmp",
"mount": "/dev/md2 / ext4",
"device": 2306,
"total_bytes": 467909804032,
"available_bytes": 5922545664,
"total_inodes": 29089792,
"available_inodes": 21448231
},
{
"path": "/var/lib/docker",
"mount": "/dev/md2 / ext4",
"device": 2306,
"total_bytes": 467909804032,
"available_bytes": 5922545664,
"total_inodes": 29089792,
"available_inodes": 21448231
}
],
"existing_pipeline_space_guard_excerpt": [
" self.releases.mkdir(parents=True,exist_ok=True)",
" if shutil.disk_usage(self.releases).free < 5 * 1024**3:",
" raise RuntimeError('Insufficient free space for an isolated build; active release preserved')",
" release=self.releases/(target+'-'+uuid.uuid4().hex[:8]);release.mkdir(mode=0o750)"
],
"pipeline_sha256": "adec1c17654f3a8658b83b134f1e75f95391b235738552721906c3236e388604",
"L7_delta_hashes_match": {
"resources/js/components/simulation-irpc-normal.tsx": true,
"resources/js/components/simulation-irpc-special.tsx": true,
"resources/js/lib/irpc-normal-depreciation.ts": true,
"resources/js/lib/irpc-normal.ts": true,
"resources/js/lib/irpc-special.ts": true,
"resources/js/lib/project-dossier-report.ts": true
},
"installed_release_nonlinked_files": 28674,
"installed_release_nonlinked_directories": 2503,
"inode_requirement_note": "Current release file/directory counts are an observed reference,not a guarantee for another build;no new inode threshold introduced.",
"prior_installation_backup": {
"created_at": "2026-10-26T10:55:59Z",
"tables": 174,
"files": 369,
"dump_sha256": "a3d46de6c10b37bd6f211125686da8c489f879ab243f082e7b72a397638901f9",
"restore": {
"restore_verified": true,
"tables_verified": 174,
"container_network": "none",
"database": "irpc_l7_restore_20261026",
"port": 55441,
"source_dump_sha256": "a3d46de6c10b37bd6f211125686da8c489f879ab243f082e7b72a397638901f9",
"active_database_writes": 0
},
"files_present": {
"database.dump": {
"present": true,
"bytes": 22880589
},
"files-before.tar.gz": {
"present": true,
"bytes": 153036740
},
"backup-receipt.json": {
"present": true,
"bytes": 94539
},
"restore-receipt.json": {
"present": true,
"bytes": 269
}
}
},
"new_backup_or_restore_executed": false,
"deployment_executed": false,
"cleanup_executed": false,
"active_data_writes": 0
},
"capacity_assessment": {
"mount": "/dev/md2 / ext4",
"existing_pipeline_guard_bytes": 5368709120,
"available_bytes": 5922545664,
"available_inodes": 21448231,
"total_inodes": 29089792,
"same_partition_for_release_state_backup_tmp_docker": true,
"observed_existing_backup_files_bytes": 176012137,
"available_minus_guard_and_one_observed_backup_bytes": 377824407,
"existing_space_guard_plus_observed_backup_satisfied": true,
"inode_reference_files_plus_directories": 31177,
"inode_note": "Available21million vs31thousand entries in current nonlinked release;no new arbitrary threshold or guarantee for changed future payload",
"new_deployment_needed": false
},
"existing_backup_integrity": {
"backup_created_at": "2026-10-26T10:55:59Z",
"existing_dump_hash_matches": true,
"existing_files_archive_hash_matches": true,
"accepted_restore_proof_matches_same_dump": true,
"restored_tables": 174,
"new_backup_or_restore_executed": false,
"active_writes": 0
},
"public_delta": {
"status": "installed_delta_verified",
"served_revision": {
"commit": "e07f89da3d59d06aa1b8c50c22a478b7b167bfdd",
"branch": "main",
"built_at": "2026-10-26T11:02:32.435267+00:00",
"manifest_sha256": "d78a1bdb503c10849f5ea8d8879753653c2c2fc22f6182f6d68ec9f6adf635b5"
},
"manifest_hash_matches": true,
"compiled_delta_markers": {
"IRPC-normal-adjustments/10": [
"assets/project-dossier-KEyrPtc6.js"
],
"Preparar qualificação L7": [
"assets/services-BSj1SuMk.js"
],
"Despesas — imposto autónomo": [
"assets/project-dossier-KEyrPtc6.js"
],
"Cooperativa — redução da taxa": [
"assets/project-dossier-KEyrPtc6.js"
],
"Amortizações aceleradas": [
"assets/project-dossier-KEyrPtc6.js",
"assets/services-BSj1SuMk.js"
],
"novo ajustamento ao lucro:": [
"assets/project-dossier-KEyrPtc6.js"
],
"colecta combinada:": [
"assets/project-dossier-KEyrPtc6.js"
]
},
"assets": [
{
"file": "assets/project-dossier-KEyrPtc6.js",
"status": 200,
"sha256": "b6ae250a30b5030a6e40e7dfb140a3335ce6d5bc16835098d3d7c5828fc526c5"
},
{
"file": "assets/simulation-form-BqVD91Ek.js",
"status": 200,
"sha256": "85cbd533c5bc92af5a448db71da006d4346d2d0adb09dde825db0aa19ad5048c"
},
{
"file": "assets/services-BSj1SuMk.js",
"status": 200,
"sha256": "ea1a3812cbced72f4df115e8e379ae6d2307e97b2152d288b1c80d357f03f78b"
},
{
"file": "assets/project-dossier-document-BRdhvWgC.js",
"status": 200,
"sha256": "5b1de561be552259de776a2dbaf4b49909a3edd2647fec7c296a96054c929a9f"
}
],
"simulator_status": 200,
"simulator_entry": "assets/app-ByAQSjfI.js",
"synthetic_private_writes": 0,
"method": "Read-only L7 revision/manifest/compiled delta/simulator entry;accepted functional proofs reused"
},
"accepted_proofs_reused": {
"QA_frontend_tests": 19,
"QA_API_assertions": 108,
"QA_UI_types_build": true,
"prior_installation_backup_restore_tables": 174,
"prior_installation_files": 369,
"prior_preservation_runtime_files": 50,
"prior_originals": 31,
"new_functional_round": false
},
"next_compatible_QA_scope": {
"status": "delimited_for_next_QA_not_implemented",
"treatment": "CBF16 constant-method depreciation by monthly fractions for supported new assets entering service during2026",
"reuse": [
"existing asset IDs/classification and maximum normal catalogue rates",
"L6 monthly timing/financial source and normal reference result",
"existing qualification/source/title/provenance and versioned book"
],
"first_case": "Civil annual2026,new supported industrial/agroindustrial machine or new project building entering service during the year;documented CBF eligibility,no previous quotas/no other benefits",
"acceptance": [
"normal vs accelerated quota and accounted/fiscal balance caps",
"additional effect only,without second deduction or changes to original asset/history",
"conditions true,false,missing and declared absence",
"calculation-save-recover-report with profit/base/colecta effects and final L8 balance unknown"
],
"out_of_scope": [
"declining method",
"rehabilitated/used/revalued assets",
"recovery of previous quotas",
"cooperative+CBF16 or other benefit combinations",
"unmapped official form fields"
],
"resume_condition": "Link already-demonstrated L6 monthly timing to qualified CBF16 rate increment,retain exact values/caps and prove only new effects in isolated QA;missing project evidence affects that asset only"
},
"remaining_L7_groups_preserved": {
"implementation_groups": 7,
"documentary_case_dependencies": 4,
"section": "saldo concreto de L7 após a primeira entrega agrupada"
},
"L6_operational_scope_and_pending_preserved": true,
"L7_integrally_complete": false,
"L8_final_settlement_separate": true,
"local_cleanup": false,
"SGF_affected": false,
"new_backup_restore_or_installation": false
}
@@ -2523,7 +2523,7 @@ As estimativas são **horas de trabalho técnico**, não calendário nem mediç
| L4 — ISPC: elegibilidade e apuramento | Campos de enquadramento e motor genérico | Regime/actividade/volume elegível, opções/exclusões, escalões/taxas aplicáveis, mínimo, trimestre e retenções específicas; comparação só entre regimes admissíveis | Vendas por actividade, custos, NUIT, natureza jurídica e residência confirmada | Lei9/2025 e regulamentação/período; distinguir receita anual, trimestre e excesso | 40–64 h |
| L5 — retenções IRPC e guias | Documentos de compras/vendas e guia M/39 como exemplar | Rendimento pago/recebido, entidade que retém, residente/não residente/EP, evento temporal, excepções e casos digitais/e-money; guia e comprovativo ligados à operação | Contrapartes, facturas, pagamentos, período, moeda, oportunidade | Artigos aplicáveis por rendimento, taxa/convenção se invocada; corrigir remissões do exemplar. Sem submissão electrónica AT presumida | 32–56 h |
| L6 — IRPC anual: regime normal | Disponível5aaf1a56:percurso normal demonstrado atécolecta,períodos/moedas e preparação parcialM20/M22 | Operacional no âmbito demonstrado por decisãoTempo26/10;limitações explícitas;5grupos código+5documentais preservados;sem conclusão integral | Plano financeiro,dados comuns,activos/livros e histórico;retenções/pagamentos/créditos anuaisL8 | Pendências bloqueiam só os casos dependentes;L7/L8 próprios | Estimativa inicial48–80h;saldo não reestimado |
| L7 — IRPC: tratamentos específicos | Qualificação/despesas61(4),cooperativa12 eCBF16 no recorte demonstrado emQA,fotografia10;sem instalação | Gravação/recuperação/relatório com referênciaL6 separada dos efeitosL7;informação em falta/ausência/não aplicação explícitas. Restantes famílias,parcelas mistas,cumulação e transporte oficial pendentes por caso | Sujeito/período/contexto,despesas36g e activos/quotasL6 reutilizados,sem benefício por localização | Fontes,condições/período e critérios de retoma na secção L7QA;L8 mantém liquidação anual | Estimativa inicial48–80h;saldo não reestimado |
| L7 — IRPC: tratamentos específicos | e07f89da instalado,reconfirmado26/10:main/revisão/delta6QAab2ff2fd coincidem | L7parcial;7grupos código/4documentais preservados. PróximoQA:CBF16 com duodécimos,activo novo suportado,método constante eano civil2026 | Reutilizar qualificação,activos/taxas eperiodizaçãoL6;sem benefício por localização | Provar só novos efeitos eguarda/recuperação/relatório;limites contabilístico/fiscal;sem repetir instalação;L8 separado | Estimativa inicial48–80h;saldo não reestimado |
| L8 — IRPC: liquidação e pagamentos | Parcelas L5–L7 e formulários originais | PPC/PEC, deduções/créditos, dupla tributação quando aplicável, saldo anual a pagar/recuperar; calendário e reconciliação com pagamentos | Retenções, colecta, saldos anteriores, pagamentos/comprovativos | Base anterior para PPC/PEC, regras de limitação/transporte; não usar cinco anos ou compensação automática sem cotejo específico | 32–56 h |
| L9 — INSS: contribuição social | Massa salarial agregada e referência TCO3%+4% | Trabalhadores, remuneração/base contributiva, exclusões, empregador/trabalhador, TCO/TCP, declaração e encargos por período | Equipa/custos, entidade e calendário; cadastro de pessoa partilhado com L10 | Regulamento e alterações aplicáveis, natureza do vínculo; confirmar base antes da taxa. Contribuição social, distinta dos impostos | 24–40 h |
| L10 — IRPS: retenção mensal e líquido | Entrada IRPS, custos salariais e escalões anuais documentais | Tabela mensal própria, remunerações/benefícios, situação pessoal relevante, retenção, salário líquido e contribuição ligada a L9 | Mesmo trabalhador/folha salarial, pagamentos e retenções | Tabela mensal do período, residência e condições familiares necessárias; não dividir escalões anuais por12 | 40–64 h |
@@ -6384,3 +6384,56 @@ Reutilizado o inventário autorizado de **8143ficheiros**, sem nova varredura de
| ÂmbitoL8 | Direito potencial ao créditoCBF15,aplicação anual de créditos,retenções,pagamentos e saldo final | Executar o mecanismo próprioL8;nenhuma dedução/compensação anual é presumida neste lote |
Fontes reutilizadas: inventário autorizado8143ficheiros; originaisCIRPC/alterações e CBF/compilaçãoAPIEX já identificados na delimitação,com hashes conservados. Sem activação por consulta ou revalidação jurídica genérica. Recibo: `docs/investmoz/simulations/irpc-l7-common-qa-20261026.json`. Provas locais: `outputs/irpc-l7-common/`; reprodução dirigida: `node --test tests/frontend/irpc-special.test.mjs`, `php tools/irpc-special-qa.php routes`, `php tools/irpc-special-qa.php test`, `tsc --noEmit`, build com `INVESTMOZ_QA_BUILD=1`.
## 26/10/2026 — preparação da entrega L7 e preservação do main concorrente
A entrega do âmbito QA `ab2ff2fd` integra o `main` concorrente `a2122dc3`, sem substituir as alterações de apresentação/navegação. Os seis ficheiros de execução L7 conservam exactamente o código QA;os oito ficheiros concorrentes conservam exactamente o código do main. Reutilizadas as provas19testes/API108/UI/tipos/build de L7. O conflito documental foi resolvido recuperando586linhas de histórico do manual que tinham sido removidas no merge concorrente,sem apagar a sua notaV2-01 no CSV. As3555linhas mantêm-se,com o único delta fiscal emAUD-SIM-INT02. O registo de instalação só será actualizado após backup/restauro fresco,conferência do destino e conclusão da entrega Git;esta nota não a antecipa.
## 26/10/2026 — primeira entrega agrupada L7 instalada pelo Git
Instalada `e07f89da3d59d06aa1b8c50c22a478b7b167bfdd` (integração do código QA `ab2ff2fdbcbe6fb94f03e4bc4cc7ccbd647d94fc` com o main concorrente`a2122dc3`),com `5aaf1a56f9d928331364fcc8b0d1528e51dba327` preservado como versão anterior. Os seis ficheiros de execução L7 são exactamente os da prova QA aceite;as sete alterações concorrentes de apresentação/navegação e o respectivo teste foram preservados. Recuperadas586linhas de histórico do manual removidas no merge concorrente;notaV2-01 conservada,sem alterar o seu conteúdo.
Backup fresco `2026-10-26T10:55:59Z`;restauro isolado sem rede/55441 verificou174tabelas por contagem/checksum e369ficheiros/configuração. Conferidos13ficheiros de execução do delta,50protegidos e31originais. Schema,roles/grants e permissões mantêm-se;172tabelas de negócio iguais ao backup. Cache/sessões reconciliadas por eventos operacionais e acessos públicos,sem inferir perda por RLS. A versão activa e a anterior foram preservadas durante o arquivo conferido de dependências antigas para recuperar espaço;nenhum dado,original ou backup foi eliminado.
Revisão/manifest público,marcadoresL7/L6/câmbio,assets e simuladorHTTP200 conferidos. Procedimento Git concluído;provas funcionais aceites19testes/API108/UI/tipos/build reutilizadas. Os controlos automáticos obrigatórios da instalação ficaram registados no recibo,sem nova ronda manual dos casos aceites. Sem migrações,importações,recálculo de históricos ou escrita privada sintética no activo.
Disponíveis apenas qualificação e tratamentos demonstrados:despesas61(4) sobre36g já ajustado,cooperativas12 integralmente abrangidas eCBF16 no recorte documentado. L6 permanece operacional no âmbito aceite;as suas pendências condicionam só dependentes. L7/IRPC não estão integralmente concluídos;localização não concede benefício;saldo final permaneceL8. O estado anterior deQA sem instalação é histórico. Recibo:`docs/investmoz/simulations/irpc-l7-common-delivery-20261026.json`.
## 26/10/2026 — saldo concreto de L7 após a primeira entrega agrupada
O âmbito demonstrado compreende qualificação comum, imposto autónomo61(4) sobre parcelas36g já calculadas emL6, cooperativas12 integralmente abrangidas e amortizaçãoCBF16 nos activos/período/método expressamente suportados. L7 permanece parcial. Este saldo distingue implementação de prova documental por caso; não cria outra matriz nem exige revalidação genérica das fontes aceites. L6 mantém o estado operacional delimitado e as suas pendências; só condiciona tratamentos que efectivamente dependam delas.
### Código ainda por implementar
| Tratamento / caso fora da cobertura | Exemplo | Condição concreta de retoma |
| --- | --- | --- |
| Despesas autónomas fora de parcela36g calculada e segregações adicionais | Despesa100 com apenas60 correspondidos no mapa de origem,ou encargo não incluído no resultado de partida | Implementar origem/parcela e reconciliação próprias,documentar incidência61(4) e impedir nova contabilização/acréscimo da mesma despesa. O ramo já entregue36g não é reaberto. |
| Cooperativas com rendimentos mistos/retidos;demais isenções por natureza da entidade,CIRPC9–14 | Cooperativa com actividade agrária e serviços não abrangidos;associação com rendimentos comerciais acessórios | Segregar proveitos,custos e base elegível e implementar o artigo específico. Não reduzir a base inteira nem estender a redução às retençõesL5. |
| ExtensõesCBF16 e combinações de benefícios | Imóvel reabilitado,método degressivo,quota inferior à máxima,duodécimos,quotas anteriores,ano posterior,cooperativa+CBF16 | Corresponder a regra temporal/método/contabilização e a compatibilidade/ordem/limite da combinação;reutilizar activo e quotas. Tabela ou casoL6 em falta impede apenas o activo dependente. |
| Mais-valias autónomas61-A e operações especiais | Ganho100 já incluído no resultado em2026;entrada de activos/fusão;perda transferida de outra sociedade | Implementar apuramento/parcela e reconciliação com resultadoL6,sem dupla incidência ou compensação de perdas presumida;para operações,aplicar54–56/41-A e preservar valores históricos. |
| Deduções/majoraçõesCBF17–19 e crédito potencialCBF15 | Formação sem ramo/base de limite;investimento novo com activos elegíveis e excluídos | Implementar elegibilidade,base,limite,ordem,janela temporal e não cumulação. CBF15 emL7 delimita direito/origem/crédito potencial;utilização anual,limitação por créditos/saldos e liquidação ficam emL8. |
| Regimes sectoriais/territoriais e disposições especiais | Projecto emZEE sem tratamentoIRPC correspondido;actividade mineira/petrolífera com regime próprio | Implementar a disposição/versão/período aplicáveis ao projecto e à parcela (CBF20–48 ou diploma específico). Endereço/código sectorial só identifica candidato;benefício aduaneiro não se transforma em benefícioIRPC. |
| Transporte de efeitosL7 paraM20/M22 | Imposto autónomo ou redução calculados mas sem campo/edição correspondente | Implementar apenas a correspondência demonstrada e a representação aplicável;conservar os montantes exactos e a preparaçãoL6 de referência,sem campo/taxa provisórios. |
### Dependências documentais que condicionam apenas o caso afectado
| Elemento em falta / dúvida concreta | Exemplo | Condição de retoma |
| --- | --- | --- |
| Classificação/incidência,parcela e período da operação | Há uma despesa36g e falta qualificar61(4);ou há actividade elegível e outra não abrangida | Associar prova/declaração da natureza e parcela ao exercício correcto. Informação em falta continua indeterminada;condição negativa e ausência declarada têm suporte próprio. Não inferir pela falta de anexo. |
| Estatuto e reconhecimento exigidos pela disposição | Endereço numaZEE sem estatuto do projecto;CBF16 sem instrumento10 ou norma de excepção | Juntar o elemento concreto exigido ou documentar a condição negativa/excepção aplicável. Não pedir aprovador ou parecer jurídico genérico adicional. |
| Norma/período/compatibilidade específicos ainda não correspondidos | Redução com termo31/12/2025 pretendida em2026;cumulação cooperativa+CBF16 | Disposição de vigência/prorrogação efectiva ou correspondência da combinação e seus limites. Sem informação nova,não repetir pesquisa transversal;prosseguir com os restantes casos. |
| Edição,campo ou representação do formulário | EfectoL7 com campoM20/M22 não identificado ou fracção sem regra de representação | Identificar exemplar/edição,instrução/campo e forma de representar o valor;limitar a pendência ao transporte afectado. O cálculo independente mantém-se disponível. |
**Limites conservados:** localização não concede benefícios automaticamente;benefício desconhecido não é zero;colecta normal,L7 e imposto autónomo permanecem discriminados. Retenções,pagamentos,aplicação anual de créditos e saldo final a pagar/recuperar continuam emL8. As provas aceites não são invalidadas por esta lista nem por uma dúvida documental num caso independente.
## 26/10/2026 — reconciliação do estado servido L7 e capacidade do instalador
Conferência autenticada por leitura em `2026-10-26T13:56:51.412248+02:00` (Africa/Johannesburg):o portal,o registo do instalador e o main actual coincidem em `e07f89da3d59d06aa1b8c50c22a478b7b167bfdd`. **L7 já está instalado no âmbito demonstrado**,com origemQA`ab2ff2fd`;o estado «ainda emQA,sem instalação» é histórico/desactualizado. A instalação terminou em26/10/2026 às13:02:35 locais;backup anterior às12:55:59 e restauro174tabelas/369ficheiros permanecem comprovados pelo recibo de entrega. Nesta passagem,o dump e o arquivo de ficheiros ainda coincidem com os hashes desse backup e a prova de restauro refere o mesmo dump. Não foi apresentado um novo backup/restauro como executado,nem repetida a instalação da revisão já activa.
**Partição do instalador e backup:**`/dev/md2 / ext4`;release,state,backup,tmp eDocker no mesmo dispositivo. Livres5.52GiB e21448231inodes de29089792. O código do instalador mantém o limiar5GiB;os ficheiros do backup observado ocupam0.164GiB. A leitura satisfaz5GiB+um backup desse tamanho,com margem0.35GiB. A release actual tem28674ficheiros e2503directórios sem seguir links,como referência de escala,não um novo limite arbitrário de inodes. Futuras entregas devem voltar a medir a capacidade imediatamente antes da operação;estes números não garantem uma carga futura diferente. Nenhuma limpeza local/remota foi executada;SGF TEMPO não foi afectado.
**Só o delta L7:**seis hashes de código correspondem à provaQA;revisão/manifest,sete marcadoresL7,quatroassets e entrada do simuladorHTTP200 conferidos. Reutilizadas as provas19testes/API108/UI/tipos/build e as provas anteriores de preservaçãoL6/L3/ISPC/câmbio;sem nova ronda funcional,escrita privada sintética,migração ou importação. A revisão activa e a anterior permanecem preservadas.
**Próximo conjunto delimitado para implementaçãoQA:CBF16 com duodécimos.** Reutilizar activos,tabela/taxa normal máxima,método constante,qualificaçãoCBF e periodizaçãoL6 existentes. Primeiro caso:exercício anual civil2026 com entrada em uso durante o ano;imóvel novo do projecto ou máquina industrial/agro-industrial já suportada;sem quotas anteriores,saída ou cumulação de outros benefícios. Ligar a quota mensalL6 ao incrementoCBF16,limitando ao contabilizado/saldo fiscal e mostrando apenas a diferença adicional. Demonstrar condição satisfeita,negativa,informação em falta e ausência declarada,cálculo→gravação→recuperação→relatório,efeitos no lucro/base/colecta e conservação dos históricos. Este conjunto está apenas delimitado:não é novo cálculo instalado.
Degressivo,reabilitados/usados/reavaliados,quotas anteriores e cumulação cooperativa+CBF16 continuam nos casos próprios. O saldo anterior de sete grupos de código e quatro dependências documentais permanece na mesma matriz,com exemplos/condições de retoma;nenhuma pendência foi apagada. Documento individual em falta limita só o activo/caso dependente. Localização não concede benefício. **L6 operacional delimitado;L7 parcial;retenções,pagamentos,créditos anuais e saldo final emL8.** Recibo:`docs/investmoz/simulations/irpc-l7-server-state-20261026.json`.
File diff suppressed because one or more lines are too long
+28 -11
View File
@@ -1,3 +1,4 @@
import { Link } from '@inertiajs/react';
import { ArrowRight, Search } from 'lucide-react';
import { useEffect, useState } from 'react';
import type { FormEvent } from 'react';
@@ -127,7 +128,6 @@ type PortalHeroProps = {
query: string;
setQuery: (value: string) => void;
onSearch: (event: FormEvent<HTMLFormElement>) => void;
onNavigate: (view: 'opportunities') => void;
stats?: HomeResponse['data']['stats'];
};
@@ -136,7 +136,6 @@ export default function PortalHero({
query,
setQuery,
onSearch,
onNavigate,
stats,
}: PortalHeroProps) {
const [currentSlide, setCurrentSlide] = useState(0);
@@ -261,20 +260,38 @@ export default function PortalHero({
</div>
</form>
<div className="mt-6 flex flex-wrap items-center justify-center gap-3">
<button
onClick={() => onNavigate('opportunities')}
className="inline-flex min-h-11 items-center gap-2 rounded-xl bg-white px-5 py-3 text-sm font-semibold text-[#101820] transition-colors hover:bg-slate-100 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white"
<div className="mt-4 flex flex-wrap items-center justify-center gap-2">
<Link
href="/porque-investir"
className="inline-flex min-h-11 items-center rounded-lg border border-white/50 bg-black/15 px-3 py-1.5 text-sm font-semibold text-white transition-colors hover:bg-white/15 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white sm:min-h-9"
>
Consultar oportunidades{' '}
Porquê investir em Moçambique?
</Link>
<Link
href="/investimentos/iniciar"
className="inline-flex min-h-11 items-center rounded-lg border border-white/50 bg-black/15 px-3 py-1.5 text-sm font-semibold text-white transition-colors hover:bg-white/15 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white sm:min-h-9"
>
Partir de uma ideia
</Link>
<Link
href="/oportunidades"
className="inline-flex min-h-11 items-center gap-1.5 rounded-lg bg-white px-3 py-1.5 text-sm font-semibold text-[#101820] transition-colors hover:bg-slate-100 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white sm:min-h-9"
>
Consultar oportunidades
<ArrowRight size={16} aria-hidden="true" />
</button>
<a
</Link>
<Link
href="/simulador-fiscal"
className="inline-flex min-h-11 items-center rounded-xl border border-white/50 bg-black/15 px-5 py-3 text-sm font-semibold text-white transition-colors hover:bg-white/15 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white"
className="inline-flex min-h-11 items-center rounded-lg border border-white/50 bg-black/15 px-3 py-1.5 text-sm font-semibold text-white transition-colors hover:bg-white/15 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white sm:min-h-9"
>
Simulador Fiscal
</a>
</Link>
<Link
href="/sectores"
className="inline-flex min-h-11 items-center rounded-lg border border-white/50 bg-black/15 px-3 py-1.5 text-sm font-semibold text-white transition-colors hover:bg-white/15 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white sm:min-h-9"
>
Sectores de investimento
</Link>
</div>
<dl
+22 -4
View File
@@ -58,10 +58,28 @@ const menuTranslations = [
'solicitudes recibidas',
],
[
'Porquê investir em Moçambique',
'Why invest in Mozambique',
'Pourquoi investir au Mozambique',
'Por qué invertir en Mozambique',
'Porquê investir em Moçambique?',
'Why invest in Mozambique?',
'Pourquoi investir au Mozambique ?',
'Por qué invertir en Mozambique?',
],
[
'Partir de uma ideia',
'Start with an idea',
'Partir d’une idée',
'Partir de una idea',
],
[
'Consultar oportunidades',
'Browse opportunities',
'Consulter les opportunités',
'Consultar oportunidades',
],
[
'Simulador Fiscal',
'Tax simulator',
'Simulateur fiscal',
'Simulador fiscal',
],
[
'Oportunidades de investimento',
+1 -1
View File
@@ -30,7 +30,7 @@ const names: Record<string, string> = {
'/contacto': 'Contacto',
'/politica-de-privacidade': 'Política de Privacidade',
'/termos-de-uso': 'Termos de Uso',
'/porque-investir': 'Porquê investir em Moçambique',
'/porque-investir': 'Porquê investir em Moçambique?',
'/investimentos/iniciar': 'Iniciar ou continuar investimento',
'/explorar/agronegocio': 'Explorar agronegócio',
'/agronegocio': 'Artigo de agronegócio',
+11 -11
View File
@@ -445,20 +445,25 @@ export function portalNavigation(access: PortalNavAccess): PortalNavItem[] {
id: 'discovery',
label: 'Descoberta',
children: [
link(
'why',
'Porquê investir em Moçambique?',
'/porque-investir',
),
link(
'idea-entry',
'Partir de uma ideia',
'/investimentos/iniciar',
),
link(
'why',
'Porquê investir em Moçambique',
'/porque-investir',
'opportunities',
'Consultar oportunidades',
'/oportunidades',
),
link(
'opportunities',
'Oportunidades de investimento',
'/oportunidades',
'simulator',
'Simulador Fiscal',
access.context?.simulator || '/simulador-fiscal',
),
link('sectors', 'Sectores de investimento', '/sectores'),
link('locations', 'Localizações', '/oportunidades?view=map'),
@@ -500,11 +505,6 @@ export function portalNavigation(access: PortalNavAccess): PortalNavItem[] {
label: 'Realização',
children: [
link('start', 'Iniciar investimento', '/investimentos/iniciar'),
link(
'simulator',
'Incentivos e simulador fiscal',
access.context?.simulator || '/simulador-fiscal',
),
link(
'licensing',
'Licenciamento',
-1
View File
@@ -1001,7 +1001,6 @@ export default function PortalInvestidorApp({
setQuery={setHeroQuery}
onSearch={handleHeroSearch}
stats={home.data?.data.stats}
onNavigate={navigate}
/>
<InvestmentContextCards />
<QueryStatus
+9 -1
View File
@@ -1,6 +1,7 @@
import { Head, Link, usePage } from '@inertiajs/react';
import type { ReactNode } from 'react';
import { PortalMenu } from '@/layouts/portal-navigation';
import { cn } from '@/lib/utils';
import type { TerritorialSourceEvidence } from '@/components/territorial-source-evidence';
import type {
StructureGeography,
@@ -101,9 +102,11 @@ export const card = 'rounded-xl border border-slate-200 bg-white p-5 shadow-sm';
export function Frame({
title,
children,
mainClassName,
}: {
title: string;
children: ReactNode;
mainClassName?: string;
}) {
const { flash } = usePage<{
flash?: { success?: string; warning?: string };
@@ -112,7 +115,12 @@ export function Frame({
<div className="min-h-screen bg-slate-50 text-slate-900">
<Head title={title} />
<PortalMenu />
<main className="mx-auto max-w-7xl space-y-6 px-5 py-9">
<main
className={cn(
'mx-auto max-w-7xl space-y-6 px-5 py-9',
mainClassName,
)}
>
<h1 className="text-3xl font-bold">{title}</h1>
{flash?.warning && (
<p
+198 -96
View File
@@ -1,99 +1,201 @@
import { Link } from '@inertiajs/react';
import { Frame, card, button } from '@/pages/investment/shared';
import { cn } from '@/lib/utils';
const compactCard = cn(card, 'p-4');
const compactButton = cn(button, 'min-h-11 px-3 py-1.5 text-sm sm:min-h-9');
export default function WhyInvest() {
return (
<Frame title="Porquê investir em Moçambique">
<section className={card + ' space-y-4'}>
<h2 className="text-2xl font-bold">
Encontrar possibilidades e avaliar as condições
</h2>
<p>
Investir começa por identificar uma necessidade, um mercado
e uma forma de criar valor. Em Moçambique, explore as
possibilidades de produção, transformação, logística,
turismo e serviços e compare as condições de cada projecto.
Este percurso destina-se a investidores nacionais e
estrangeiros, em todo o território nacional.
</p>
<p>
A informação do portal ajuda a comparar possibilidades e a
organizar os elementos do dossier. Uma página setorial ou
artigo educativo não representa uma oportunidade concreta
nem uma recomendação de retorno.
</p>
<div className="flex flex-wrap gap-3">
<Link className={button} href="/oportunidades">
Explorar oportunidades publicadas
</Link>
<Link className={button} href="/investimentos/iniciar">
Iniciar ou continuar uma ideia
</Link>
<Frame
title="Porquê investir em Moçambique?"
mainClassName="space-y-4 py-6"
>
<div className="flow-root">
<div className="-mx-2 flow-root">
<article
aria-label="Investir em Moçambique"
className="p-2 lg:float-left lg:w-2/3"
>
<div className="space-y-3 text-base leading-6 text-slate-700">
<p>
Investir em Moçambique é escolher um mercado em
forte expansão, estrategicamente posicionado na
África Austral e integrado na SADC, com acesso
directo a seis países vizinhos e a um dos
maiores blocos económicos da região. A
estabilidade política, a segurança e um ambiente
regulatório cada vez mais favorável tornam o
país um destino confiável e competitivo para
investidores nacionais e estrangeiros.
</p>
<p>
A localização privilegiada faz de Moçambique uma
plataforma logística natural. Os portos de
Maputo, Beira e Nacala — este último, o porto
natural mais profundo da costa oriental africana
— funcionam como corredores eficientes para
economias sem litoral como as de Malawi, Zâmbia
e Zimbabué. Esta infraestrutura sólida consolida
o país como um hub regional de comércio,
transporte e distribuição.
</p>
<p>
Moçambique reforça a confiança dos investidores
por meio de acordos bilaterais de investimento e
de tratados de dupla tributação com economias
estratégicas, garantindo estabilidade jurídica e
protecção aos investimentos. Além disso, oferece
incentivos fiscais e aduaneiros competitivos,
aliados ao acesso preferencial a grandes
mercados internacionais via AGOA (EUA), EBA
(União Europeia), preferências comerciais com a
China e parcerias com a Índia. Estes mecanismos
aumentam a competitividade das empresas que se
instalam no país e ampliam o seu alcance global.
</p>
<p>
O país oferece garantias essenciais, como
protecção da propriedade, repatriação livre de
lucros e incentivos específicos, incluindo
isenção de direitos aduaneiros para
equipamentos, crédito fiscal, depreciação
acelerada e benefícios para tecnologias,
formação, inovação e infraestruturas. Sectores
prioritários — agricultura, pescas, indústrias
rurais, turismo, mineração, petróleo e gás — bem
como zonas francas e zonas económicas especiais
dispõem de regimes particularmente vantajosos.
</p>
<p>
<strong>
Investir em Moçambique é integrar um país em
transformação
</strong>
, rico em recursos, com enorme potencial
energético, agricultura fértil, projectos
estruturantes em curso e uma visão clara de
industrialização. Com reformas consistentes,
vantagens logísticas e acesso preferencial a
mercados internacionais, o país destaca-se como
um dos destinos mais promissores para
investidores que buscam crescimento sustentável,
estabilidade e oportunidades concretas na África
Austral.
</p>
</div>
</article>
<div className="p-2 lg:inline-block lg:w-1/3 lg:align-top">
<section className={compactCard + ' space-y-3'}>
<h2 className="text-xl leading-snug font-bold">
Encontrar possibilidades e avaliar as condições
</h2>
<p>
Investir começa por identificar uma necessidade,
um mercado e uma forma de criar valor. Em
Moçambique, explore as possibilidades de
produção, transformação, logística, turismo e
serviços e compare as condições de cada
projecto. Este percurso destina-se a
investidores nacionais e estrangeiros, em todo o
território nacional.
</p>
<p>
A informação do portal ajuda a comparar
possibilidades e a organizar os elementos do
dossier. Uma página setorial ou artigo educativo
não representa uma oportunidade concreta nem uma
recomendação de retorno.
</p>
<div className="flex flex-wrap gap-2">
<Link
className={compactButton}
href="/oportunidades"
>
Explorar oportunidades publicadas
</Link>
<Link
className={compactButton}
href="/investimentos/iniciar"
>
Iniciar ou continuar uma ideia
</Link>
</div>
</section>
</div>
{[
[
'Produção e transformação',
'Compare fornecimento, processamento e comercialização. Avalie matérias-primas, fornecedores, energia, água e procura antes de escolher a escala do projecto.',
'/sectores',
],
[
'Território e ligações',
'Compare localizações, corredores e parques com o mercado que pretende servir. Confira acessos, logística, infra-estruturas e as condições documentadas de cada ficha.',
'/oportunidades?view=map',
],
[
'Serviços e parcerias',
'Explore necessidades de empresas e comunidades e possibilidades de cooperação. Distinga uma ideia a desenvolver de uma oportunidade publicada ou de uma parceria formalizada.',
'/parcerias',
],
].map(([title, text, href]) => (
<div
className="p-2 md:inline-block md:w-1/2 md:align-top lg:w-1/3"
key={title}
>
<article className={compactCard + ' space-y-2'}>
<h2 className="text-lg leading-snug font-bold">
{title}
</h2>
<p>{text}</p>
<Link className="underline" href={href}>
Explorar {title.toLowerCase()}
</Link>
</article>
</div>
))}
{[
[
'Sectores e modelos de negócio',
'Consulte o conteúdo educativo e as oportunidades cadastradas. Pode iniciar uma ideia mesmo sem um anúncio publicado.',
'/sectores',
],
[
'Localizações e enquadramentos',
'Explore o mapa e as fichas de corredores, clusters, zonas, parques e projectos. Cada referência conserva a natureza e o fundamento que lhe estão associados.',
'/oportunidades?view=map',
],
[
'Fontes para decidir',
'Consulte documentos e legislação do acervo publicado. Confirme o âmbito e o período aplicável antes de usar uma informação no seu processo.',
'/documentos',
],
[
'Um dossier para desenvolver a ideia',
'A oportunidade, o sector e a localização convergem num dossier com cinco fases e 19 etapas. A orientação permite preparar etapas em paralelo e respeita a aplicabilidade de terra e licenciamento.',
'/como-investir',
],
].map(([title, text, href]) => (
<div
className="p-2 md:inline-block md:w-1/2 md:align-top lg:w-1/3"
key={title}
>
<article className={compactCard + ' space-y-2'}>
<h2 className="text-lg leading-snug font-bold">
{title}
</h2>
<p>{text}</p>
<Link className="underline" href={href}>
Consultar {title.toLowerCase()}
</Link>
</article>
</div>
))}
</div>
</section>
<section
aria-label="Perspectivas para avaliar o investimento"
className="grid gap-4 md:grid-cols-3"
>
{[
[
'Produção e transformação',
'Compare fornecimento, processamento e comercialização. Avalie matérias-primas, fornecedores, energia, água e procura antes de escolher a escala do projecto.',
'/sectores',
],
[
'Território e ligações',
'Compare localizações, corredores e parques com o mercado que pretende servir. Confira acessos, logística, infra-estruturas e as condições documentadas de cada ficha.',
'/oportunidades?view=map',
],
[
'Serviços e parcerias',
'Explore necessidades de empresas e comunidades e possibilidades de cooperação. Distinga uma ideia a desenvolver de uma oportunidade publicada ou de uma parceria formalizada.',
'/parcerias',
],
].map(([title, text, href]) => (
<article className={card + ' space-y-3'} key={title}>
<h2 className="text-xl font-bold">{title}</h2>
<p>{text}</p>
<Link className="underline" href={href}>
Explorar {title.toLowerCase()}
</Link>
</article>
))}
</section>
<section className="grid gap-4 md:grid-cols-2">
{[
[
'Sectores e modelos de negócio',
'Consulte o conteúdo educativo e as oportunidades cadastradas. Pode iniciar uma ideia mesmo sem um anúncio publicado.',
'/sectores',
],
[
'Localizações e enquadramentos',
'Explore o mapa e as fichas de corredores, clusters, zonas, parques e projectos. Cada referência conserva a natureza e o fundamento que lhe estão associados.',
'/oportunidades?view=map',
],
[
'Fontes para decidir',
'Consulte documentos e legislação do acervo publicado. Confirme o âmbito e o período aplicável antes de usar uma informação no seu processo.',
'/documentos',
],
[
'Um dossier para desenvolver a ideia',
'A oportunidade, o sector e a localização convergem num dossier com cinco fases e 19 etapas. A orientação permite preparar etapas em paralelo e respeita a aplicabilidade de terra e licenciamento.',
'/como-investir',
],
].map(([title, text, href]) => (
<article className={card + ' space-y-3'} key={title}>
<h2 className="text-xl font-bold">{title}</h2>
<p>{text}</p>
<Link className="underline" href={href}>
Consultar {title.toLowerCase()}
</Link>
</article>
))}
</section>
<section className={card + ' space-y-3'}>
<h2 className="text-xl font-bold">
</div>
<section className={compactCard + ' space-y-2'}>
<h2 className="text-lg leading-snug font-bold">
Preparar condições, documentação e apoio
</h2>
<p>
@@ -109,7 +211,7 @@ export default function WhyInvest() {
retorno do investimento. Informação desconhecida deve
continuar identificada como tal.
</p>
<div className="flex flex-wrap gap-4">
<div className="flex flex-wrap gap-x-3 gap-y-2">
<Link className="underline" href="/legislacao">
Legislação e enquadramento
</Link>
@@ -121,8 +223,8 @@ export default function WhyInvest() {
</Link>
</div>
</section>
<section className={card + ' space-y-3'}>
<h2 className="text-xl font-bold">
<section className={compactCard + ' space-y-2'}>
<h2 className="text-lg leading-snug font-bold">
Apoio ao longo do percurso
</h2>
<p>
@@ -131,8 +233,8 @@ export default function WhyInvest() {
distinto de submeter um pedido; uma comunicação interna não
equivale a uma decisão oficial.
</p>
<div className="flex flex-wrap gap-4">
<Link className={button} href="/balcao-virtual">
<div className="flex flex-wrap gap-x-3 gap-y-2">
<Link className={compactButton} href="/balcao-virtual">
Serviços ao investidor
</Link>
<Link className="underline" href="/apoio">
+1 -1
View File
@@ -100,7 +100,7 @@ void test('reconciled navigation selects discovery, realization and private supp
);
assert.equal(
currentNavigationGroup(groups, '/simulador-fiscal'),
'realization',
'discovery',
);
assert.equal(
currentNavigationGroup(groups, '/balcao-virtual/dossiers/fixture'),