import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newCommissionBase, switchCommissionDirection, commissionBaseBook, commissionBaseConditions, commissionBaseCurrent, commissionBaseReportRows, commissionBaseSource, commissionBaseTreatments, recordCommissionBases, saveCommissionBaseBook, type CommissionBaseBook, type CommissionBaseRow, } from '@/lib/iva-commission-base'; export function SimulationCommissionBase({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: CommissionBaseBook; try { book = commissionBaseBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: CommissionBaseBook) => { try { onChange('modelo_a_snapshot', saveCommissionBaseBook(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 — bens em comissão de venda ou compra

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. Prepare apenas transferências de bens entre comitente e comissário em execução do contrato de comissão, incluindo consignação quando aplicável. Não é o IVA de um serviço autónomo de intermediação nem uma regra para qualquer pagamento de comissão.

Comissão de venda: preço de venda acordado pelo comissário menos comissão. Comissão de compra: preço de compra acordado pelo comissário mais comissão. Indique valores sem IVA, antes deste ajuste, e as referências da operação; montantes em falta não são zero. Base não determina incidência, taxa ou imposto.

{commissionBaseSource}

{error &&

{error}

} {book.rows.map((row) => { const rule = commissionBaseTreatments.find( (item) => item.id === row.treatment, ); return (
{row.description || 'Transferência por identificar'}{' '} — {row.period || 'mês por indicar'}
{( [ [ 'description', 'Bens e operação identificados', ], ['principal', 'Comitente'], ['agent', 'Comissário'], [ 'agreementRef', 'Contrato de comissão / referência da previsã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 sem IVA — inclusões e exclusões aplicáveis', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {rule && ( <> )}

Mudar de sentido conserva os valores e referências, mas exige confirmar os papéis e o preço correspondente ao novo sentido antes de determinar a base. As versões anteriores mantêm-se.

{rule ? (
Condições próprias da base de comissão {commissionBaseConditions.map( ([key, label]) => ( ), )}
) : (

Escolha o sentido para apresentar o preço e as condições aplicáveis;os valores anteriores conservam-se.

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

{commissionBaseCurrent(draft, book) ? 'Bases de comissão correspondentes às entradas guardadas.' : 'Entradas alteradas;bases de comissão 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.

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