Anexo técnico:
 A especificação 
OpenAPI
 3.0 e os exemplos de wireframe apresentados a seguir devem ser tratados como material de apoio para a equipa de desenvolvimento, complementando as recomendações funcionais descritas nas secções anteriores.
1. Especificação 
OpenAPI
 3.0 / 
Swagger
 (
Backend
 Integrador)
Esta especificação define os 
endpoints
 principais para integração transaccional com a 
APIEX
, 
Autoridade Tributária (AT)
 e 
Banco de Moçambique (BM)
.
YAML
openapi
: 3.0.3
info
:
  
title
: API do Portal do Investidor de Moçambique (
Backend
 Integrador)
  
description
: 
Endpoints
 para 
transações
 e integrações com APIEX, Autoridade Tributária e Banco de Moçambique.
  
version: 1.0.0
servers:
  - url: https://api.invest.gov.mz/v1
    
description
: Servidor Principal de Produção / 
Sandbox
paths:
  /
apiex
/projects/submit:
    post:
      
summary
: Submeter Proposta de Investimento Privado à APIEX
      
operationId
: 
submitInvestmentProject
      security:
        - 
BearerAuth
: []
      
requestBody
:
        required: true
        content:
          application/
json
:
            schema:
              $ref
: '#/
components/schemas/
InvestmentProjectRequest
'
      
responses:
        
'201':
          
description
: Projeto submetido com sucesso.
          
content:
            application/
json
:
              schema:
                $ref
: '#/
components/schemas/
ProjectSubmissionResponse
'
        
'400':
          
description
: Dados de formulário inválidos ou incompletos.
  
/
apiex
/
projects/{
projectId
}/
status:
    get:
      
summary
: Consultar Estado do Projeto na APIEX
      
operationId
: 
getProjectStatus
      security:
        - 
BearerAuth
: []
      parameters:
        - name: 
projectId
          
in:
 path
          required: true
          schema:
            type: string
      responses:
        '200':
          
description
: Detalhes e estado 
atual
 do processo.
          
content:
            application/
json
:
              schema:
                $ref
: '#
/components/schemas/
ProjectStatusResponse
'
  
/
tax
/
nuit
/
validate
:
    
post
:
      
summary
: Validar NUIT e Verificar Isenção de Benefícios Fiscais (AT)
      
operationId
: 
validateTaxNuit
      security:
        - 
BearerAuth
: []
      
requestBody
:
        required: true
        content:
          application/
json
:
            schema:
              type: object
              properties:
                nuit:
                  type: string
                  example: "400123456"
                
sectorCode
:
                  type: string
                  
example
: "AGRI_01"
      responses:
        '200':
          
description
: Validação do NUIT e estado de quitação/incentivo.
          
content:
            application/
json
:
              schema:
                type: object
                properties:
                  
isValid
:
                    type: 
boolean
                  
companyName
:
                    type: string
                  
eligibleTaxIncentive
:
                    type: 
boolean
                  
irpcReducedRate
:
                    type: number
                    example: 10
  /forex/capital-registration:
    
post
:
      
summary
: Registo Cambial de Entrada de Capital Estrangeiro (Banco de Moçambique)
      
operationId
: 
registerForeignCapital
      security:
        - 
BearerAuth
: []
      
requestBody
:
        required: true
        content:
          application/
json
:
            schema:
              $ref
: '#
/components/schemas/
ForexCapitalRegistration
'
      
responses:
        
'200':
          
description
: Registo 
efetuado
 com garantia legal de repatriamento de dividendos.
components:
  
securitySchemes
:
    
BearerAuth
:
      type: http
      scheme: bearer
      
bearerFormat
: 
JWT
  schemas:
    
InvestmentProjectRequest
:
      type: object
      required:
        - 
companyName
        - nuit
        - sector
        - 
investmentAmountUSD
        - province
      properties:
        
companyName
:
          type: string
          example: "
AgroMoz
 S.A."
        nuit:
          type: string
          example: "400123456"
        sector:
          
type
: 
string
          
enum
: [
AGRONEGOCIO
, 
ENERGIA_MINERACAO
, TURISMO, INFRAESTRUTURA, 
MERCADO_FINANCEIRO
]
        
investmentAmountUSD
:
          type: number
          example: 2500000.00
        province:
          type: string
          example: "
Zambézia
"
        
hasLocalPartner
:
          type: 
boolean
          example: true
    
ProjectSubmissionResponse
:
      type: object
      properties:
        
trackingNumber
:
          type: string
          example: "INV-MZ-2026-8891"
        status:
          type: string
          example: "
UNDER_REVIEW
"
        
submittedAt
:
          type: string
          format: date-time
    
ProjectStatusResponse
:
      type: object
      properties:
        
trackingNumber
:
          type: string
        status:
          type: string
          
enum
: [SUBMITTED, 
UNDER_REVIEW
, 
PENDING_DOCUMENTS
, APPROVED, REJECTED]
        
currentStage
:
          type: string
          example: "
Parecer
 da 
Autoridade
 
Tributária
"
        
estimatedDaysRemaining
:
          type: integer
          example: 5
    
ForexCapitalRegistration
:
      type: object
      properties:
        
trackingNumber
:
          type: string
        
amountForeignCurrency
:
          type: number
          example: 1000000.00
        currency:
          type: string
          example: "USD"
        
originBankCountry
:
          type: string
          example: "
ZAF
"
2. Wireframe / Layout da Nova Área Reservada do Investidor
Abaixo está o modelo visual em ASCII / Estrutura UI para o dashboard privado do investidor:
+---------------------------------------------------------------------------------------------------+
|  [
LOGO 
GOV
/
APIEX]  Portal
 do Investidor             
   [
Notificações (3
)]  [
PT|
EN
]  User
: 
Agromoz
 |
+---------------------------------------------------------------------------------------------------+
| NAV: [
Dashboard]  [
Os Meus 
Projetos
]  [
Simulador 
Fiscal]  [
Repositório 
Legal]  [
Suporte 
Direto
] |
+---------------------------------------------------------------------------------------------------+
|                                                                                                   |
|  BEM
-VINDO, 
AGROMOZ
 S.A.                                                                          |
|  Estado
 Geral do Investimento: ENCAMINHADO PARA APROVAÇÃO                                         |
|                                                                                                   |
|  +---------------------------------------------------------------------------------------------+  |
|  |
 PROGRESSO DA CANDIDATURA (
Tracking
 ID: INV-MZ-2026-8891)                                   
|  |
|  |                                                                                             |  |
|  |
  
( [
✓] 
Submissão )
  ──
─  (
 [✓] NUIT & 
AT )
  ──
─  (
 [●] Análise 
APIEX )
  ──
─  (
 
[ ]
 
Emitido )
  
|  |
|  |
  Concluído 20/
Jul
       Validado em Sistema      Em Avaliação (Restam 4 
dias)   
                
|  |
|  +---------------------------------------------------------------------------------------------+  |
|                                                                                                   |
|  +--------------------------------------------------+  +---------------------------------------+  |
|  |
 RESUMO DO PROJETO SUBMETIDO                      
|  |
 INCENTIVOS E ENQUADRAMENTO FISCAL     
|  |
|  +--------------------------------------------------+  +---------------------------------------+  |
|  |
 Sector: Agronegócio & Processamento             
|  |
 IRPC Aplicável: 10% (Redução de 68
%)  |
  |
|  |
 Província: Zambézia (Distrito de 
Gurúè
)   
      
|  |
 Isenção de IVA (Classe K): 
ATIVA
      
|  |
|  |
 Valor: USD $2,500,000.00                          
|  |
 Registo Cambial BM: REGISTADO         
|  |
|  |
 Empregos Previstos: 120 Locais                    
|  |
 Certidão de Quitação: VÁLIDA          
|  |
|  |
 [Descarregar Dossier 
PDF]   
                     
|  |
 [Ver Declaração de 
Incentivos]   
     
|  |
|  +--------------------------------------------------+  +---------------------------------------+  |
|                                                                                                   |
|  +---------------------------------------------------------------------------------------------+  |
|  |
 AÇÕES RÁPIDAS & SERVIÇOS INTEGRADOS                                                         
|  |
|  +---------------------------------------------------------------------------------------------+  |
|  |
  
[ +
 Novo 
Projeto ]
   
[ Agendar
 Reunião 
APIEX ]
   
[ Pedir
 
Certificado ]
   
[ Anexar
 
Licença ]
|  |
|  +---------------------------------------------------------------------------------------------+  |
|                                                                                                   |
+---------------------------------------------------------------------------------------------------+
As opções seguintes apresentam alternativas técnicas para desenvolvimento posterior: modelos de dados de 
backend
 em 
TypeScript
/
Python
 e componentes de 
frontend
 em 
React
/
Tailwind
 para a Área Reservada do Investidor.
Os elementos seguintes devem ser tratados como material técnico de apoio para a equipa de desenvolvimento, incluindo 
modelos de dados em 
TypeScript
, 
Python
/
Pydantic
 e componentes
 de 
frontend
 em 
React
 com 
Tailwind
 CSS
 para a Área Reservada do Investidor.
1. Modelos de Dados no 
Backend
A. 
TypeScript
 (Interfaces & 
Zod
 
Validation
)
TypeScript
// types/
investor.ts
import 
{ z
 } from '
zod
';
export
 
enum
 
ProjectSector
 {
  
AGRONEGOCIO
 = '
AGRONEGOCIO
',
  
ENERGIA_MINERACAO
 = '
ENERGIA_MINERACAO
',
  TURISMO = 'TURISMO',
  INFRAESTRUTURA = 'INFRAESTRUTURA',
  
MERCADO_FINANCEIRO
 = '
MERCADO_FINANCEIRO
',
}
export 
enum
 
ProjectStatus
 {
  SUBMITTED = 'SUBMITTED',
  
UNDER_REVIEW
 = '
UNDER_REVIEW
',
  
PENDING_DOCUMENTS
 = '
PENDING_DOCUMENTS
',
  APPROVED = 'APPROVED',
  REJECTED = 'REJECTED',
}
// Schema Zod para 
validação
 do payload de 
submissão
export const 
InvestmentProjectSchema
 = 
z.object
({
  
companyName
: 
z.string
(
).min
(2, "Nome da empresa é obrigatório"),
  
nuit
: 
z.string
(
).
length
(9, "O NUIT deve ter 
exatamente
 9 dígitos"),
  sector: 
z.nativeEnum
(
ProjectSector
),
  
investmentAmountUSD
: 
z.number
(
).positive
("O valor deve ser superior a 0"),
  
province
: 
z.string
(
).min
(2, "
Selecione
 a província do 
projeto
"),
  
hasLocalPartner
: 
z.boolean
().default(false),
  
contactEmail
: 
z.string
(
).email
("E-mail 
inválido
"),
});
export type 
InvestmentProjectRequest
 = 
z.infer
<
typeof
 
InvestmentProjectSchema
>;
export interface 
ProjectStatusResponse
 {
  
trackingNumber
: string;
  status: 
ProjectStatus
;
  
currentStage
: string;
  
estimatedDaysRemaining
: number;
  
submittedAt
: string;
  
taxIncentiveApplied
: {
    
irpcReducedRate
: number; // ex: 10%
    
vatExemption
: 
boolean
;
  };
}
B. Python (
Pydantic
 / 
FastAPI
 Models)
Python
# models/investor.py
from 
enum
 import Enum
from 
pydantic
 import 
BaseModel
, 
EmailStr
, Field
from datetime import datetime
from typing import Optional
class
 
ProjectSector
(
str
, 
Enum
):
    
AGRONEGOCIO
 = "
AGRONEGOCIO
"
    
ENERGIA_MINERACAO
 = "
ENERGIA_MINERACAO
"
    TURISMO = "TURISMO"
    INFRAESTRUTURA = "INFRAESTRUTURA"
    
MERCADO_FINANCEIRO
 = "
MERCADO_FINANCEIRO
"
class 
ProjectStatus
(
str, Enum):
    SUBMITTED = "SUBMITTED"
    
UNDER_REVIEW
 = "
UNDER_REVIEW
"
    
PENDING_DOCUMENTS
 = "
PENDING_DOCUMENTS
"
    APPROVED = "APPROVED"
    REJECTED = "REJECTED"
class 
InvestmentProjectRequest
(
BaseModel
):
    
company_name
: str = 
Field(
..., 
min_length
=2, example="
AgroMoz
 S.A.")
    nuit: str = 
Field(
..., 
min_length
=9, 
max_length
=9, example="400123456")
    sector: 
ProjectSector
    
investment_amount_usd
: float = 
Field(
..., 
gt
=0, example=2500000.00)
    province: str = 
Field(
..., example="
Zambézia
")
    
has_local_partner
: bool = False
    
contact_email
: 
EmailStr
class 
TaxIncentiveSummary
(
BaseModel
):
    
irpc_reduced_rate
: float = 
Field(
default=10.0, description="Taxa 
reduzida
 de IRPC 
em
 %")
    
vat_exemption
: bool = True
    
customs_exemption_class_k
: bool = True
class 
ProjectStatusResponse
(
BaseModel
):
    
tracking_number
: str = 
Field(
..., example="INV-MZ-2026-8891")
    status: 
ProjectStatus
    
current_stage
: str = 
Field(
..., example="
Parecer
 da 
Autoridade
 
Tributária
")
    
estimated_days_remaining
: int = 5
    
submitted_at
: datetime
    
tax_incentive
: 
TaxIncentiveSummary
2. 
Componente
 React (Next.js / Tailwind CSS)
Este componente 
renderiza
 a 
Área Reservada do Investidor (Dashboard)
 com monitorização de estado em tempo real, indicadores fiscais e atalhos rápidos de 
ação
.
TypeScript
// components/
InvestorDashboard.tsx
import React, 
{ 
useState
 } from 'react';
export default function 
InvestorDashboard
(
) {
  const [project] = 
useState
(
{
    
trackingNumber
: 'INV-MZ-2026-8891',
    
companyName
: '
Agromoz
 S.A.',
    
sector: 'Agronegócio & Processamento',
    
province
: 'Zambézia (
Gurúè
)',
    
amountUSD
: 2500000,
    status: '
UNDER_REVIEW
',
    stage: '
Análise
 
na
 APIEX',
    
daysRemaining
: 4,
    steps: [
      
{ label
: '
Submissão
', 
done:
 true, date: '20 Jul
' }
,
      
{ label
: 'NUIT & AT', 
done:
 true, date: '22 Jul
' }
,
      
{ label
: '
Análise
 APIEX', 
done:
 false, active: 
true }
,
      
{ 
label
: 'Certificado Emitido', 
done
: 
false }
,
    
],
  });
  return (
    <div 
className
="min-h-screen bg-slate-50 p-6 text-slate-800">
      {/* Top Header Bar 
*/}
      <header 
className
="mb-
8 flex
 flex-wrap items-center justify-between rounded-xl 
bg
-white p-4 shadow-
sm
 border border-slate-200">
        <div 
className
="flex items-center space-x-3">
          <div 
className
="
h-
10 w-10 rounded-lg bg-red-600 flex items-center justify-center text-white font-bold text-xl">
            
MZ
          </div>
          <div>
            <h1 
className
="
text-lg
 
font
-bold">Portal do Investidor</h1>
            <p 
className
="
text-xs
 text-slate-500">República de Moçambique</p>
          
</div>
        </div>
        <div 
className
="flex items-center space-x-4">
          <span 
className
="text-
xs
 bg-emerald-100 text-emerald-800 font-semibold px-2.5 py-1 rounded-full">
            ● 
Autenticado
 (e-ID)
          </span>
          <span 
className
="text-
sm
 font-medium text-slate-700">{
project.companyName
}</span>
          <button 
className
="text-
xs
 border border-slate-300 px-3 py-1.5 rounded-lg hover:bg-slate-100">
            PT | EN
          </button>
        </div>
      </header>
      {/* Main Container 
*/}
      <main 
className
="max-w-7xl mx-auto space-y-6">
        {/* Status Banner 
*/}
        <div 
className
="
bg
-white rounded-xl p-6 shadow-
sm
 border border-slate-200">
          <div 
className
="flex flex-
col
 
md:flex
-row
 
md:items
-center
 justify-between mb-6">
            <div>
              <span 
className
="text-
xs
 font-semibold text-slate-400 uppercase tracking-wider">
                
ID de Acompanhamento: {
project.trackingNumber
}
              
</span>
              <h2 
className
="text-xl font-bold text-slate-900 mt-1">
                
Estado 
Atual
: <
span
 
className
="text-amber-600">Em Avaliação Técnica</
span
>
              
</h2>
            </div>
            <div 
className
="mt-4 md:mt-0 text-
sm
 text-slate-500 bg-slate-100 px-4 py-2 rounded-lg">
              Tempo 
estimado
 restante: <strong 
className
="text-slate-800">{
project.daysRemaining
} 
dias
 
úteis
</strong>
            </div>
          </div>
          {/* Stepper Progress 
*/}
          <div 
className
="relative flex flex-
col
 
md:flex
-row
 justify-between items-center w-full my-4">
            {
project.steps.map
(
(step, 
idx
) => (
              <div key={
idx
} 
className
="flex-1 flex flex-col items-center relative mb-4 
md:mb
-0">
                <div
                  
className
={
`w-10 h-10 rounded-full flex items-center justify-center font-bold text-
sm
 z-10 ${
                    
step.done
                      ? '
bg
-emerald-600 text-white'
                      : 
step.active
                      ? '
bg
-amber-500 text-white ring-4 ring-amber-100'
                      : 'bg-slate-200 text-slate-500'
                  }`}
                >
                  {
step.done
 ? '✓
' :
 
idx
 + 1}
                </div>
                <span 
className
="text-
xs
 font-semibold mt-2 text-slate-700">{
step.label
}</span>
                {
step.date
 && <span 
className
="text-[10px] text-slate-400">{
step.date
}</span>}
              
</div>
            ))}
          </div>
        </div>
        {/* 
Info
 
Grid
 */}
        
<div 
className
="grid grid-
cols
-1 
md:grid
-cols-2 gap-6">
          {/* Card: 
Resumo
 do Projeto 
*/}
          <div 
className
="
bg
-white p-6 rounded-xl shadow-
sm
 border
 border-slate-200 space-y-4">
            
<h3 
className
="
text
-base 
font
-bold text-slate-900 
border
-b pb-2">Resumo da Proposta</h3>
            
<div 
className
="grid grid-
cols
-2 gap-4 text-
sm
">
              
<div>
                <p 
className
="text-slate-500 
text-xs
">Sector de 
Atividade
</p>
                
<p 
className
="font-semibold text-slate-800">{
project.sector
}</p>
              </div>
              <div>
                <p 
className
="text-slate-500 text-
xs
">
Localização
</p>
                <p 
className
="font-semibold text-slate-800">{
project.province
}</p>
              </div>
              <div>
                <p 
className
="text-slate-500 text-
xs
">Investimento 
Declarado
</p>
                <p 
className
="font-semibold text-emerald-700">
                  ${
project.amountUSD.toLocaleString
()}
 USD
                
</p>
              
</div>
              <div>
                <p 
className
="text-slate-500 
text-xs
">Entidade Gestora</p>
                
<p 
className
="font-semibold text-slate-800">APIEX Moçambique</p>
              </div>
            </div>
            <button 
className
="w-full mt-2 text-
xs
 font-semibold text-red-600 bg-red-50 hover:bg-red-100 py-2.5 rounded-lg transition">
              
Descarregar Dossier de Submissão (PDF)
            </
button
>
          </div>
          {/* Card: Enquadramento Fiscal e Regulatório */}
          
<div 
className
="
bg
-white p-6 rounded-xl shadow-
sm
 border
 border-slate-200 space-y-4">
            
<h3 
className
="
text
-base 
font
-bold text-slate-900 
border
-b pb-2">Benefícios Fiscais Aplicáveis</h3>
            
<ul 
className
="space-y-3 text-
sm
">
              <li 
className
="flex justify-between items-center text-
xs
">
                
<
span
 
className
="text-slate-600">Taxa de IRPC (Agronegócio):</
span
>
                
<span 
className
="font-bold text-emerald-600 bg-emerald-50 px-2 py-1 rounded">10% (
Redução
 de 68
%)<
/span>
              </li>
              <li 
className
="flex justify-between items-center text-
xs
">
                
<
span
 
className
="text-slate-600">Isenção de Direitos Aduaneiros (Classe 
K):<
/
span
>
                
<span 
className
="font-bold text-slate-800">
Elegível
 / 
Ativo
</span>
              </li>
              <li 
className
="flex justify-between items-center text-
xs
">
                
<
span
 
className
="text-slate-600">Registo Cambial (Banco de 
Moçambique):<
/
span
>
                
<span 
className
="font-bold text-emerald-600">
Garantia
 de 
Repatriamento
</span>
              </li>
            </ul>
            <button 
className
="w-full mt-2 text-
xs
 font-semibold text-slate-700 bg-slate-100 hover:bg-slate-200 py-2.5 rounded-lg transition">
              
Emitir Declaração de Benefícios Fiscais
            </
button
>
          
</div>
        </div>
        {/* Quick Actions Bar 
*/}
        <div 
className
="
bg
-white p-4 rounded-xl shadow-
sm
 border border-slate-200">
          <h4 
className
="text-
xs
 font-bold text-slate-400 uppercase tracking-wider mb-3">
Ações
 
Rápidas
</h4>
          <div 
className
="flex flex-wrap gap-3">
            <button 
className
="bg-red-600 hover:bg-red-700 text-white text-
xs
 font-semibold px-4 py-2.5 rounded-lg shadow-
sm
 transition">
              + Submeter Novo Projeto
            </button>
            <button 
className
="bg-slate-800 hover:bg-slate-900 text-white text-
xs
 font-semibold px-4 py-2.5 rounded-lg shadow-
sm
 transition">
              
Agendar Reunião com Assistente APIEX
            </
button
>
            
<button 
className
="border border-slate-300 text-slate-700 hover:bg-slate-50 text-
xs
 font-semibold px-4 py-2.5 rounded-lg transition">
              
Simulador de Incentivos
            </
button
>
          </div>
        </div>
      </
main
>
    </div>
  );
}
Modelos de dados de 
backend
 (
TypeScript
 e 
Python
/
Pydantic
)
 e o 
componente 
frontend
 em 
React
 com 
Tailwind
 CSS para o Dashboard
.
Para dar continuidade ao desenvolvimento da plataforma, o próximo passo lógico é concretizar a integração e a lógica funcional de uma das duas vertentes:
Opção A: Lógica de 
Backend
 (APIs & Persistência)
Endpoints
 e Controladores (
FastAPI
 ou Next.js API 
Routes
):
 Implementar a lógica dos 
endpoints
 /
apiex
/
projects
/
submit
, /
apiex
/
projects
/{
projectId
}/status e /
tax
/
nuit
/
validate
, integrando a validação 
Zod
/
Pydantic
 e o simulador de regras de negócio.
Modelo de Base de Dados (Prisma 
ORM
 / 
SQLAlchemy
):
 Estruturar o esquema da base de dados relacional (
PostgreSQL
) para gerir utilizadores, projectos de investimento, estados de aprovação e registos de auditoria (
audit
 
logs
).
Opção B: Módulos de 
Frontend
 (UI/UX 
Transacional
)
Formulário 
Multi-step
 de Submissão de Projeto:
 Componente 
React
 com validação em tempo real para recolha progressiva de dados (Entidade 
 Dados do Projeto 
 Documentação 
 Confirmação).
Simulador 
Interativo
 de Incentivos Fiscais:
 Calculadora visual onde o investidor selecciona o sector, a localização (Província / ZEE) e o montante de investimento para obter a estimativa instantânea de benefícios fiscais (IRPC, IVA, Direitos Aduaneiros).
implementação dos dois componentes de 
frontend
 em 
React
 com 
Tailwind
 CSS.
1. Formulário 
Multi-step
 de Submissão de Projeto
Este componente gere o estado de um formulário que progride através de quatro etapas, com validação básica em tempo real.
TypeScript
// components/
ProjectSubmissionForm.tsx
import React, 
{ 
useState
 } from 'react';
import 
{ 
useForm
, UseFormRegister, 
FieldErrors
 }
 from 'react-hook-form';
import 
{ 
zodResolver
 } from '@
hookform
/resolvers/
zod
';
import * as z from '
zod
';
// Define the steps
const
 steps = [
  
{ id
: '
entity
', 
name
: 'Entidade', 
description
: 'Dados da Empresa
' }
,
  
{ id
: '
project
', 
name
: 'Dados do Projeto', 
description
: '
Setor
, Local e Valor
' }
,
  
{ id
: 'documentation', name: '
Documentação
', description: 'Upload de 
Ficheiros
' }
,
  
{ id
: 'confirmation', name: '
Confirmação
', description: '
Revisão
 e 
Submissão
' }
,
];
// Define validation schemas for each step
const
 
entitySchema
 = 
z.object
({
  
companyName
: 
z.string
(
).min
(2, "Nome da empresa é obrigatório"),
  
nuit
: 
z.string
(
).
length
(9, "O NUIT deve ter 
exatamente
 9 dígitos"),
  
contactEmail
: 
z.string
(
).email
("E-mail inválido"),
});
const
 
projectSchema
 = 
z.object
({
  sector: 
z.enum
(['
AGRONEGOCIO
', '
ENERGIA_MINERACAO
', 'TURISMO', 'INFRAESTRUTURA', '
MERCADO_FINANCEIRO
']),
  
province
: 
z.string
(
).min
(2, "
Selecione
 a província do 
projeto
"),
  
investmentAmountUSD
: 
z.number
(
).positive
("O valor deve ser superior a 0"),
  
hasLocalPartner
: 
z.boolean
(),
});
// A simplify schema just for the file name, for demonstration
const
 
documentationSchema
 = 
z.object
({
  
businessPlan
: 
z.string
(
).min
(1, "Plano de Negócios é obrigatório"),
  
identityDocument
: 
z.string
(
).min
(1, "Documento de Identificação é obrigatório"),
});
// Full schema for types, not for individual step validation
const 
fullSchema
 = 
entitySchema.merge
(
projectSchema
).merge
(
documentationSchema
);
type 
FormData
 = 
z.infer
<
typeof
 
fullSchema
>;
// Step 1 Component
const 
StepEntity
 = 
({ register
, 
errors }
: 
{ register
: UseFormRegister<
FormData
>, errors: 
FieldErrors
<
FormData
> }
) => (
  
<div 
className
="space-y-4">
    <h3 
className
="
text-lg
 
font-semibold
 text-slate-900 mb-4">Passo 1: Dados da Entidade</h3>
    
<div>
      <label 
htmlFor
="
companyName
" 
className
="block text-
sm
 font-medium text-slate-700">Nome da Empresa</label>
      <input type="text" {...register('
companyName
')}
 
className
="mt-1 block w-full border border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
" />
      {
errors.companyName
 && <p 
className
="text-red-500 text-
xs
 mt-1">{
errors.companyName.message
}</p>}
    </div>
    <div>
      <label 
htmlFor
="nuit" 
className
="block text-
sm
 font-medium text-slate-700">NUIT</label>
      <input type="
text" {
...register('nuit
')}
 
className
="mt-1 block w-full border border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
" />
      {
errors.nuit
 && <p 
className
="text-red-500 text-
xs
 mt-1">{
errors.nuit
.
message
}<
/p>}
    </div>
    <div>
      <label 
htmlFor
="
contactEmail
" 
className
="block text-
sm
 font-medium text-slate-700">E-mail de Contacto</label>
      <input type="
email" {
...register('
contactEmail
')}
 
className
="mt-1 block w-
full border
 border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
" />
      {
errors.contactEmail
 && <p 
className
="text-red-500 text-
xs
 mt-1">{
errors.contactEmail.message
}</p>}
    </div>
  </div>
);
// Step 2 Component
const 
StepProject
 = 
({ register
, 
errors }
: 
{ register
: UseFormRegister<
FormData
>, errors: 
FieldErrors
<
FormData
> }
) => (
  
<div 
className
="space-y-4">
    <h3 
className
="
text-lg
 
font-semibold
 text-slate-900 mb-4">Passo 2: Dados do Projeto</h3>
    
<div>
      <label 
htmlFor
="sector" 
className
="block text-
sm
 font-medium text-slate-700">Sector de 
Atividade
</label>
      <select {...register('sector')} 
className
="mt-1 block w-full border border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
">
        <option value
=""
>
Selecione
...</option>
        <option value="
AGRONEGOCIO
">
Agronegócio
</option>
        
<
option
 
value
="
ENERGIA_MINERACAO
">Energia & Mineração</
option
>
        <
option
 
value
="TURISMO">Turismo</
option
>
        <
option
 
value
="INFRAESTRUTURA">Infraestrutura</
option
>
        <
option
 
value
="
MERCADO_FINANCEIRO
">Mercado Financeiro</
option
>
      
</select>
      {
errors.sector
 && <p 
className
="text-red-500 text-
xs
 mt-1">{
errors.sector
.
message
}<
/p>}
    </div>
    <div>
      <label 
htmlFor
="province" 
className
="block text-
sm
 font-medium text-slate-700">
Província
</label>
      <input type="text" {...register('province
')}
 
className
="mt-1 block w-full border border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
" />
      {
errors.province
 && <p 
className
="text-red-500 text-
xs
 mt-1">{
errors.province
.
message
}<
/p>}
    </div>
    <div>
      <label 
htmlFor
="
investmentAmountUSD
" 
className
="block text-
sm
 font-medium text-slate-700">Montante de Investimento (USD)</label>
      <input type="
number" {
...
register(
'
investmentAmountUSD
', 
{ 
valueAsNumber
: 
true }
)} 
className
="mt-1 block w-full border border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
" />
      {
errors.investmentAmountUSD
 && <p 
className
="text-red-500 text-
xs
 mt-1">{
errors.investmentAmountUSD.message
}</p>}
    </div>
    <div 
className
="flex items-center">
      <input type="checkbox" {...register('
hasLocalPartner
')}
 
className
="h-4 w-4 text-emerald-600 border-slate-300 rounded" />
      <label 
htmlFor
="
hasLocalPartner
" 
className
="ml-2 block text-
sm
 text-slate-700">Tem 
parceiro
 
local?<
/label>
    </div>
  </div>
);
// Step 3 Component - Demonstration (file names as strings)
const 
StepDocumentation
 = 
({ register
, 
errors }
: 
{ register
: UseFormRegister<
FormData
>, errors: 
FieldErrors
<
FormData
> }
) => (
  <div 
className
="space-y-4">
    <h3 
className
="text-lg font-semibold text-slate-900 mb-4">Passo 3: 
Documentação
</h3>
    <div>
      <label 
htmlFor
="
businessPlan
" 
className
="block text-
sm
 font-medium text-slate-700">Plano de 
Negócios
 (PDF/
Word)<
/label>
      <input type="file" {...register('
businessPlan
')} 
className
="mt-1 block w-full border border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
 text-slate-500 file:mr-4 file:py-1 
file:px
-2 
file:rounded
-md 
file:border
-0 file:text-xs file:font-semibold file:bg-emerald-50 file:text-emerald-700 
hover:file
:bg-emerald-100" />
      {
errors.businessPlan
 && <p 
className
="text-red-500 text-
xs
 mt-1">{
errors.businessPlan.message
}</p>}
    </div>
    <div>
      <label 
htmlFor
="
identityDocument
" 
className
="block text-
sm
 font-medium text-slate-700">
Documento
 de 
Identificação
 do Promotor</label>
      <input type="file" {...register('
identityDocument
')} 
className
="mt-1 block w-full border border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
 text-slate-500 file:mr-4 file:py-1 
file:px
-2 
file:rounded
-md 
file:border
-0 file:text-xs file:font-semibold file:bg-emerald-50 file:text-emerald-700 
hover:file
:bg-emerald-100" />
      {
errors.identityDocument
 && <p 
className
="text-red-500 text-
xs
 mt-1">{
errors.identityDocument.message
}</p>}
    </div>
  </div>
);
// Step 4 Component
const 
StepConfirmation
 = 
({ 
formData
 }: 
{ 
formData
: 
FormData
 }
) => (
  
<div className="space-y-4">
    
<h3 
className
="
text-lg
 
font-semibold
 text-slate-900 mb-4">Passo 4: Confirmação e Submissão</h3>
    
<div 
className
="grid grid-
cols
-2 gap-x-6 gap-y-4 text-
sm
 bg-slate-50 p-4 rounded-lg border border-slate-200">
      <div><span 
className
="font-semibold text-slate-700">Empresa:</span> {
formData.companyName
}<
/div>
      <div><span 
className
="font-semibold text-slate-700">NUIT:</span> {
formData.nuit
}<
/div>
      <div><span 
className
="font-semibold text-slate-700">E-mail:</span> {
formData.contactEmail
}<
/div>
      <div><span 
className
="font-semibold text-slate-700">Sector:</span> {
formData.sector
}<
/div>
      <div><span 
className
="font-semibold text-slate-700">
Província
:</span> {
formData.province
}<
/div>
      <div><span 
className
="font-semibold text-slate-700">Investimento (USD):</span> ${
formData.investmentAmountUSD.toLocaleString
(
)}<
/div>
      <div><span 
className
="font-semibold text-slate-700">
Parceiro
 Local:</span> {
formData.hasLocalPartner
 ?
 
'Sim
' :
 'Não
'}<
/div>
    </div>
    <p 
className
="
text-sm
 text-slate-600 mt-4">Ao clicar em "Submeter", confirma que os dados acima estão correctos e de acordo com os documentos anexados. O seu 
projeto
 será encaminhado para a APIEX para 
avaliação.<
/p>
  
</div>
);
export default function 
ProjectSubmissionForm
(
) {
  const [
currentStep
, 
setCurrentStep
] = 
useState
(
0);
  // Schema for current step validation
  const 
currentSchema
 = [
entitySchema
, 
projectSchema
, 
documentationSchema
][
currentStep
];
  const {
    register,
    
handleSubmit
,
    trigger,
    
getValues
,
    
formState
: 
{ errors
 },
  } = 
useForm
<
FormData
>(
{
    resolver: 
currentStep
 < 
3 ?
 
zodResolver
(
currentSchema
) :
 undefined, // No validation for confirmation step
    mode: '
onChange
', // Validate in real-time
    
defaultValues
: {
      
hasLocalPartner
: false, // Set default value
    }
  });
  const 
onSubmit
 = async (data: 
FormData
) => {
    // Implement API submission logic here, e.g., to `/
api
/v1/
apiex
/projects/submit`
    
console.log(
'Final 
Form
 Data:', data);
    
alert
(
'Projeto submetido com sucesso!');
    
// Redirect or show a final success message
  };
  const 
nextStep
 = async () => {
    const 
isStepValid
 = await 
trigger(
);
    if (
isStepValid
) {
      
setCurrentStep
((
prev
) => 
Math.min
(
prev
 + 1, 
steps.length
 - 1));
    }
  };
  const 
prevStep
 = () => {
    
setCurrentStep
((
prev
) => 
Math.max
(
prev
 - 1, 
0))
;
  };
  return (
    <div 
className
="min-h-screen bg-slate-50 p-6 text-slate-800">
      <header 
className
="mb-8 flex items-center justify-between rounded-xl 
bg
-white p-4 shadow-
sm
 border border-slate-200">
        <div 
className
="flex items-center space-x-3">
          <div 
className
="h-10 w-10 rounded-lg bg-red-600 flex items-center justify-center text-white font-bold text-xl">
MZ
</div>
          
<div>
            <h1 
className
="
text-lg
 
font
-bold">Submissão de Projeto</h1>
            <p 
className
="
text-xs
 text-slate-500">Portal do Investidor</p>
          
</div>
        </div>
      </header>
      <main 
className
="max-w-3xl mx-auto 
bg
-white p-8 rounded-xl shadow border border-slate-200">
        {/* Stepper Header 
*/}
        <nav 
className
="mb-10 pb-4 border-b border-slate-200">
          <
ol
 
className
="flex flex-col 
md:flex
-row
 justify-between items-start 
md:items
-center
 w-full my-4 gap-y-4 
md:gap
-y-0">
            {
steps.map
(
(step, 
idx
) => (
              <li key={step.id} 
className
="flex flex-
col
 
md:flex
-row
 items-center flex-1 relative mb-4 
md:mb
-0">
                <div
                  
className
={
`w-10 h-10 rounded-full flex items-center justify-center font-bold text-
sm
 z-10 transition border-2 ${
                    
idx
 < 
currentStep
                      ? '
bg
-emerald-600 text-white border-emerald-600'
                      : 
idx
 === 
currentStep
                      ? '
bg
-red-600 text-white border-red-600'
                      : 'bg-slate-100 text-slate-500 border-slate-200'
                  }`}
                >
                  {
idx
 + 1}
                </div>
                <div 
className
="mt-2 md:mt-0 md:ml-3 text-center 
md:text-left
">
                  <span 
className
={
`text-
xs
 font-semibold ${
idx
 <= 
currentStep
 ?
 '
text
-slate-900
' :
 'text-slate-500
'}`
}>{
step.name}<
/span>
                  <p 
className
="text-[10px] text-slate-400 hidden 
md:block
">{
step.description
}</p>
                </div>
              </li>
            
))}
          </
ol
>
        </nav>
        {/* Step Content 
*/}
        <form 
onSubmit
={
currentStep
 === 
3 ?
 
handleSubmit
(
onSubmit
) :
 undefined} 
className
="mb-10">
          {
currentStep
 === 0 && <
StepEntity
 register={register} errors={errors} />}
          {
currentStep
 === 1 && <
StepProject
 register={register} errors={errors} />}
          {
currentStep
 === 2 && <
StepDocumentation
 register={register} errors={errors} />}
          {
currentStep
 === 
3 &&
 <
StepConfirmation
 
formData
={
getValues
(
)} />}
          {/* Hidden submit button to trigger form submission on enter in any input 
*/}
          <button type="submit" 
className
="hidden" />
        </form>
        {/* Navigation Buttons 
*/}
        <footer 
className
="flex items-center justify-between pt-6 border-t border-slate-200">
          <button
            type="button"
            
onClick
={
prevStep
}
            disabled
={
currentStep
 === 0}
            
className
={
`px-6 py-2.5 text-
xs
 font-semibold rounded-lg transition ${
              
currentStep
 === 0
                ? '
bg
-slate-100 text-slate-400 border border-slate-200 cursor-not-allowed'
                : 'bg-slate-100 text-slate-700 hover:bg-slate-200 border border-slate-200'
            }`}
          >
            Anterior
          </button>
          <div 
className
="flex gap-2">
            {
currentStep
 < 
3 ?
 (
              <button
                type="button"
                
onClick
={
nextStep
}
                
className
="bg-slate-900 hover:bg-slate-800 text-white text-
xs
 font-semibold px-6 py-2.5 rounded-lg shadow-
sm
 transition"
              >
                
Próximo
              </button>
            ) : (
              <button
                type="submit"
                
onClick
={
handleSubmit
(
onSubmit
)}
                
className
="bg-red-600 hover:bg-red-700 text-white text-
xs
 font-semibold px-6 py-2.5 rounded-lg shadow-
sm
 transition"
              >
                Submeter Projeto
              </button>
            )}
          </div>
        </footer>
      
</
main
>
    </div>
  );
}
2. Simulador 
Interativo
 de Incentivos Fiscais
Este componente é uma calculadora visual onde os investidores podem simular cenários e obter estimativas de benefícios fiscais.
TypeScript
// components/
IncentiveSimulator.tsx
import React, 
{ 
useState
, 
useMemo
 }
 from 'react';
// Simplified rules for demonstration
const 
incentivesRules
 = {
  
IRPC: {
    base: 32, // %
    
agricultureReduced
: 10, // %
  },
  
VAT: {
    base: 16, // %
    
capitalExemption
: true, // Example: for capital goods (Classe K)
  },
  
Customs: {
    
capitalExemption
: true, // Example: for capital goods (Classe K)
  
},
};
const
 
sectors
 = [
  
{ id
: '
AGRONEGOCIO
', 
name
: 'Agronegócio', 
description
: 'Agricultura, pecuária, processamento', 
irpc
: 
10 }
,
  
{ id
: '
ENERGIA_MINERACAO
', 
name
: 'Energia & Mineração', 
irpc
: 
32 }
,
  
{ id
: 'TURISMO', 
name
: 'Turismo', 
irpc
: 
32 }
,
  
{ id
: 'INFRAESTRUTURA', 
name
: 'Infraestrutura', 
irpc
: 
10 }
, // 
Example
: some 
infrastructure
 
projects
  
{ id
: '
MERCADO_FINANCEIRO
', 
name
: 'Mercado Financeiro', 
irpc
: 
32 }
,
];
const
 
provinces
 = [
  'Maputo Cidade', 'Maputo Província', 'Gaza', 'Inhambane', 'Sofala', 'Manica', 'Tete', 'Zambézia', 'Nampula', 'Cabo Delgado', 'Niassa'
];
export default function 
IncentiveSimulator
(
) {
  const [
selectedSectorId
, 
setSelectedSectorId
] = 
useState
(sectors[0].id);
  const [
investmentAmountUSD
, 
setInvestmentAmountUSD
] = 
useState
(
1000000); // 1 
Million
 default
  const [
localPartner
, 
setLocalPartner
] = 
useState
(false);
  // Find the selected sector to get its rules
  const 
selectedSector
 = 
useMemo
(
() => {
    return 
sectors.find
(sector => sector.id === 
selectedSectorId
);
  }, [
selectedSectorId
]);
  // Simplified calculation logic
  const 
calculatedIncentives
 = 
useMemo
(
() => {
    if 
(!
selectedSector
) return null;
    // Use reduced IRPC for agriculture/infrastructure, base for others
    
const
 
finalIrpc
 = 
selectedSector.irpc
;
    
const
 
irpcSavings
 = ((32 - 
finalIrpc
) / 100) * 
investmentAmountUSD
; // Estimativa simplificada do impacto da redução da taxa
    
// Assume some standard VAT/Customs exemptions for capital investment
    
const
 
vatStatus
 = 'Isenção sob Bens de Capital (Classe K)';
    
const
 
customsStatus
 = 'Isenção sob Bens de Capital (Classe K)';
    
return {
      
irpc
: 
finalIrpc
,
      
irpcSavingsUSD
: 
irpcSavings
,
      
vatStatus
,
      
customsStatus
,
      
repatriationGuarantee
: true, // Example: automatically granted for compliant investment
    };
  }, [
selectedSector
, 
investmentAmountUSD
])
;
  return (
    <div 
className
="min-h-screen bg-slate-50 p-6 text-slate-800">
      <header 
className
="mb-8 flex items-center justify-between rounded-xl 
bg
-white p-4 shadow-
sm
 border border-slate-200">
        <div 
className
="flex items-center space-x-3">
          <div 
className
="h-10 w-10 rounded-lg bg-red-600 flex items-center justify-center text-white font-bold text-xl">
MZ
</div>
          
<div>
            <h1 
className
="
text-lg
 
font
-bold">Simulador de Incentivos Fiscais</h1>
            <p 
className
="
text-xs
 text-slate-500">República de Moçambique</p>
          
</div>
        </div>
      </header>
      <main 
className
="max-w-7xl mx-auto space-y-8">
        <div 
className
="grid grid-
cols
-1 
lg:grid
-cols-3 gap-8">
          
          {/* Inputs Section 
*/}
          <div 
className
="
lg:col
-span-1 
bg
-white p-6 rounded-xl shadow-
sm
 border
 border-slate-200 space-y-6">
            
<h2 
className
="
text
-base 
font
-bold text-slate-900 
border
-b pb-2">Parâmetros do Investimento</h2>
            
            {/* Sector Selector */}
            <div>
              <
label
 
htmlFor
="sector" 
className
="
block
 
text-sm
 
font-medium
 text-slate-700">Sector de 
Atividade
</
label
>
              <
select
 
                id="sector" 
                
value={
selectedSectorId
}
                
onChange
={(
e) => 
setSelectedSectorId
(
e.target
.
value
)}
                
className
="mt-1 block w-full border border-slate-300 rounded-lg p-2.5 text-
sm
 shadow-
sm
"
              >
                {
sectors.map
(
sector => (
                  <option key={sector.id} value={sector.id}>{
sector.name}<
/option>
                
))}
              </select>
            </div>
            {/* Investment Amount 
*/}
            <div>
              <label 
htmlFor
="amount" 
className
="block text-
sm
 font-medium text-slate-700">Montante de Investimento (USD)</label>
              <input 
                id="amount"
                type="range"
                min="100000" // 100k
                max="100000000" // 100M
                step="100000"
                value={
investmentAmountUSD
}
                
onChange
={(
e) => 
setInvestmentAmountUSD
(
Number(
e.target
.value
))}
                
className
="mt-1 w-full h-2 bg-slate-200 rounded-lg appearance-
none
 cursor-pointer accent-red-600"
              />
              <p 
className
="text-center font-bold text-emerald-700 text-lg mt-1">
                ${
investmentAmountUSD.toLocaleString
()}
 USD
              </p>
            </div>
             {/* Local Partner Toggle 
*/}
            <div 
className
="flex items-center justify-between bg-slate-50 px-4 py-3 rounded-lg border border-slate-200">
              <span 
className
="text-
sm
 font-medium text-slate-700">Tem 
parceiro
 
local?<
/span>
              <label 
className
="relative inline-flex items-center cursor-pointer">
                <input 
                  type="checkbox" 
                  checked={
localPartner
}
                  
onChange
={(
e) => 
setLocalPartner
(
e.target
.
checked
)}
                  
className
="
sr
-only peer"
                />
                <div 
className
="w-11 h-6 bg-slate-200 
peer-focus:outline-none
 peer-focus:ring-4 peer-focus:ring-emerald-100 rounded-full peer 
peer-checked:after:translate-x-full
 
peer-checked:after:border-white
 
after:content
-[''] 
after:absolute
 
after:top
-[2px] 
after:left
-[2px] 
after:bg-white
 after:border-slate-300 
after:border
 
after:rounded-full
 after:h-5 after:w-5 
after:transition-all
 peer-checked:bg-emerald-600"></div>
              
</
label
>
            </div>
            
            <p 
className
="
text-xs
 text-slate-500 mt-2">Esta simulação é uma estimativa baseada nas regras gerais 
atuais
 e não substitui a confirmação final da APIEX e da Autoridade 
Tributária.<
/p>
          
</div>
          {/* Results Section 
*/}
          <div 
className
="
lg:col
-span-2 space-y-8">
            {
calculatedIncentives
 && (
              <>
                {/* Result Cards Grid 
*/}
                <div 
className
="grid grid-
cols
-1 
md:grid
-cols-2 gap-6">
                  {/* Card: IRPC 
*/}
                  <div 
className
="
bg
-white p-6 rounded-xl shadow-
sm
 border border-slate-200 flex flex-col items-center text-center">
                    <span 
className
="text-
xs
 font-semibold text-slate-400 uppercase tracking-wider mb-2">
Imposto
 
sobre
 
Rendimento
 das 
Pessoas
 
Colectivas
 (IRPC)</span>
                    
<p 
className
="text-slate-500 
text-xs
 mb-3">Redução para sector de {
selectedSector?.name}<
/p>
                    
<p 
className
="text-5xl font-extrabold text-emerald-600 bg-emerald-50 px-3 py-1 rounded-lg">
                      {
calculatedIncentives.irpc
}%
                    </p>
                    <p 
className
="text-
xs
 text-slate-500 mt-2 line-through">Taxa Base: 32%</p>
                  </div>
                  {/* Card: Savings Estimate 
*/}
                  <div 
className
="
bg
-white p-6 rounded-xl shadow-
sm
 border
 border-slate-
200 flex
 flex-col items-center text-center justify-between">
                    <span 
className
="text-
xs
 font-semibold text-slate-400 uppercase tracking-wider mb-2">Impacto Fiscal 
Estimado
 (Primeiro 
Ano)<
/span>
                    <p 
className
="text-4xl font-extrabold text-slate-900 mt-2">
                      ${
calculatedIncentives.irpcSavingsUSD.toLocaleString
(undefined, 
{ 
maximumFractionDigits
: 
0 }
)} USD
                    
</p>
                    <p 
className
="text-slate-500 
text-xs
 mt-3">Poupança potencial de IRPC com a taxa reduzida de {
calculatedIncentives.irpc
}%
.</p>
                  
</div>
                </div>
                {/* Additional Benefits List 
*/}
                <div 
className
="
bg
-white p-6 rounded-xl shadow-
sm
 border border-slate-200">
                  
<h3 
className
="
text
-base 
font
-bold text-slate-900 
border
-b pb-2 mb-4">Outros Benefícios e Garantias</h3>
                  
<ul 
className
="space-y-4 text-
sm
">
                    <li 
className
="flex items-center space-x-3 text-
xs
 bg-slate-50 px-3 py-2.5 rounded-lg border border-slate-200">
                      <span 
className
="text-lg">✓</span>
                      <div>
                        <span 
className
="font-semibold text-slate-800">
Isenção
 de IVA:</span>
                        <span 
className
="ml-2 font-medium text-slate-600">{
calculatedIncentives.vatStatus
}<
/span>
                      </div>
                    </li>
                    <li 
className
="flex items-center space-x-3 text-
xs
 bg-slate-50 px-3 py-2.5 rounded-lg border border-slate-200">
                      <span 
className
="text-lg">✓</span>
                      
<div>
                        <
span
 
className
="
font-semibold
 text-slate-800">Isenção de Direitos Aduaneiros:</
span
>
                        
<span 
className
="ml-2 font-medium text-slate-600">{
calculatedIncentives.customsStatus
}<
/span>
                      </div>
                    </li>
                    <li 
className
="flex items-center space-x-3 text-
xs
 bg-slate-50 px-3 py-2.5 rounded-lg border border-slate-200">
                      <span 
className
="text-lg">✓</span>
                      
<div>
                        <
span
 
className
="
font-semibold
 text-slate-800">Registo Cambial (Banco de 
Moçambique):<
/
span
>
                        <
span
 
className
="ml-2 
font-medium
 text-slate-600">Garantia legal de repatriamento de 
dividendos.<
/
span
>
                      
</div>
                    </li>
                    {
localPartner
 && (
                      <li 
className
="flex items-center space-x-3 text-
xs
 bg-emerald-50 text-emerald-800 px-3 py-2.5 rounded-lg border border-emerald-200">
                        <span 
className
="text-lg">
★
</span>
                        
<p><
strong
>Parceria Local:</
strong
> A elegibilidade para incentivos específicos pode ser reforçada pela presença de parceiros locais em determinados sectores estratégicos do 
PAE.<
/p>
                      
</li>
                    )}
                  </ul>
                </div>
              </>
            )}
            {/* Quick Actions Bar 
*/}
            <div 
className
="
bg
-white p-4 rounded-xl shadow-
sm
 border border-slate-200 flex gap-3">
              <button 
className
="bg-red-600 hover:bg-red-700 text-white text-
xs
 font-semibold px-4 py-2.5 rounded-lg shadow-
sm
 transition flex items-center space-x-2">
                
<
span
>+ Submeter Novo Projeto com estes dados</
span
>
              
</button>
              <button 
className
="bg-slate-800 hover:bg-slate-900 text-white text-
xs
 font-semibold px-4 py-2.5 rounded-lg shadow-
sm
 transition">
                
Consultar Código dos Benefícios Fiscais (PDF)
              
</button>
            </div>
          </div>
        </div>
      </main>
    
</div>
  
);
}