import {useState} from 'react'; import {newCompositionBase,newCompositionPart,switchCompositionPart,compositionBook,compositionConditions,compositionCurrent,compositionReportRows,compositionBaseSource,compositionTreatments,recordCompositions,saveCompositionBook,type CompositionBook,type CompositionRow,type CompositionPart} from '@/lib/iva-composition-base'; export function SimulationCompositionBase({draft,onChange}:{draft:Record;onChange:(field:string,value:string)=>void}){ const[error,setError]=useState('');let book:CompositionBook; try{book=compositionBook(draft);}catch(cause){return

{String(cause)}

;} const save=(next:CompositionBook)=>{try{onChange('modelo_a_snapshot',saveCompositionBook(draft,next));setError('');}catch(cause){setError(String(cause));}}; const change=(id:string,patch:Partial)=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)}); return
Base tributável — impostos e despesas acessórias da contraprestação

Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Prepare uma composição por operação. Parta do montante sem próprio IVA e com as exclusões aplicáveis já consideradas. Identifique as parcelas e se já estão incluídas;acrescente apenas as que ainda não constam do montante inicial.

Impostos,direitos,taxas e outras imposições excluem o próprio IVA. Nas despesas acessórias,confirme que são debitadas por conta do cliente e relativas a comissões,embalagem,transporte ou seguros. Respeite as regras especiais da operação,incluindo a exclusão da TC nos combustíveis. Base e IVA são resultados distintos.

{compositionBaseSource}

{error&&

{error}

} {book.rows.map(row=>{const partChange=(id:string,patch:Partial)=>change(row.id,{parts:row.parts.map(p=>p.id===id?{...p,...patch}:p)});return
{row.description||'Operação por identificar'} — {row.period||'mês por indicar'}
{([['description','Operação identificada'],['operationRef','Referência da operação / pressuposto'],['initialAmount','Montante inicial sem próprio IVA (moeda indicada)'],['initialRef','Referência do montante inicial e da sua composição'],['documentRef','Documento da operação / referência da previsão'],['documentDate','Data do documento / prevista'],['period','Mês da operação'],['currency','Moeda de origem'],['compositionRef','Referência da composição e exclusões aplicáveis'],['evidence','Fundamento factual / pressupostos']] as const).map(([field,label])=>)}
Condições da composição{compositionConditions.map(([key,label])=>)}
{row.parts.map(part=>
{part.description||'Parcela por identificar'} {([['description','Descrição da parcela'],['amount','Montante da parcela sem próprio IVA (moeda indicada)'],['reference','Referência da parcela / pressuposto']] as const).map(([field,label])=>)} {part.treatment&&}

Mudar a natureza conserva os montantes e referências,mas exige rever a correspondência da parcela. Cada parcela será considerada uma única vez nesta operação.

)}
;})} {!!book.rows.length&&} {book.result&&<>

{compositionCurrent(draft,book)?'Composições correspondentes às entradas guardadas.':'Entradas alteradas;composições históricas conservadas. Reveja e determine novamente.'} {book.history?.length??0} versões anteriores. IVA e campo11 não são preenchidos por estas bases.

{compositionReportRows(draft).map(([,label,value,origin],index)=>
{label}
{value}{origin}
)}
}
; }