import React, { useEffect, useState, useRef } from 'react'; import FiscalCoverage from './FiscalCoverage.jsx'; const fieldLabels = {currency:'Moeda',treatment:'Tratamento fiscal',price_mode:'Modo de preço',service_id:'Serviço',service_version:'Versão do serviço',valid_from:'Vigência desde',valid_until:'Vigência até',rate_percent:'Taxa de IVA',profile_proposal_id:'Proposta do perfil',draft_id:'Rascunho',draft_version:'Versão do rascunho',preparation_version:'Versão da preparação',reference_date:'Data de referência',reference_basis:'Fundamento da referência',period_start:'Início do período',period_end:'Fim do período',next_billing:'Próxima facturação prevista',event:'Acontecimento',event_date:'Data do acontecimento'}; const valueLabels = {domestic_normal:'Operação interna · regime normal',added:'Preço sem IVA · imposto acrescido',included:'Imposto incluído',pending:'Por determinar',invoice_in_time:'Emissão dentro do prazo fundamentado',invoice_deadline:'Termo do prazo de emissão fundamentado'}; function displayValue(key,value) { if(value===null || value===undefined || value==='') return 'Não indicado'; if(['valid_from','valid_until','reference_date','period_start','period_end','next_billing','event_date'].includes(key) && /^\d{4}-\d{2}-\d{2}$/.test(value)) return value.split('-').reverse().join('/'); if(key==='rate_percent') return `${value}%`; if(['service_id','draft_id','profile_proposal_id'].includes(key)) return `#${value}`; return valueLabels[value] || String(value); } function FiscalProposal({p,can,busy,reasons,setReasons,perform,api,load,listing,context}) { const d=p.definition, status=p.decision?.decision; const stateLabel=status==='approved'?'Validada':status==='refused'?'Recusada':'Aguarda validação'; const summary=p.kind==='profile'?['rate_percent','currency','price_mode','valid_from']:['period_start','period_end','event','event_date']; return

{p.kind==='profile'?'PERFIL FISCAL':'DECISÃO TEMPORAL'} · PROPOSTA #{p.id}

{p.kind==='profile'?`Enquadramento de IVA · serviço #${d.service_id}`:`Período e exigibilidade · rascunho #${d.draft_id}`}

{p.identifier} · Versão {p.version}

{stateLabel}{p.kind==='profile' && {p.active?'Activo para cálculo proposto':'Sem activação'}}
{summary.map(key=>
{fieldLabels[key]}
{displayValue(key,d[key])}
)}
{Object.entries(d).filter(([key])=>!summary.includes(key) && !['evidence','conditions','reference_basis'].includes(key)).map(([key,value])=>
{fieldLabels[key] || key}
{displayValue(key,value)}
)}
{d.conditions &&

Condições de aplicação

{d.conditions}

} {d.reference_basis &&

Fundamento da data de referência

{d.reference_basis}

} {d.evidence &&
Fontes e elementos de suporte

{d.evidence}

} {p.decision &&
Fundamento da decisão

{p.decision.reason}

} {!p.decision && can('service_fiscal.approve') &&

Validar esta versão

A decisão refere-se à versão {p.version}, na unidade seleccionada. Validar não activa o perfil nem emite uma factura.