Files
Investidor-V2/resources/js/components/acquisition-operation-link.tsx
T

21 lines
3.1 KiB
TypeScript

import {acquisitionOperationChoices,createAcquisitionRightLink,linkedOperationRight,linkedBeverageDeductionRight,type AcquisitionRightLink} from '@/lib/iva-acquisition-right';
import type {Acquisition} from '@/lib/iva-acquisitions';
export function AcquisitionOperationLink({draft,row,onChange}:{draft:Record<string,unknown>;row:Acquisition;onChange:(patch:Partial<Acquisition>)=>void}){
const choices=acquisitionOperationChoices(draft),link=row.deductionLink;
const adopt=(id:string)=>onChange({deductionLink:createAcquisitionRightLink(draft,id)});
const patch=(value:Partial<AcquisitionRightLink>)=>{if(link)onChange({deductionLink:{...link,...value}});};
const result=link?(row.bc?.expense==='beverages'&&row.bc.facts.beverageSpecial==='yes'&&['deduction','refund'].includes(row.bc.beveragePath)?linkedBeverageDeductionRight(draft,link,row.bc.facts.notCoastalFishing==='yes'):linkedOperationRight(draft,link)):null;
return <fieldset className="space-y-2 rounded border p-3"><legend>Aquisição → direito à dedução — L2-A</legend>
<p>Reutilize a classificação existente. A ligação conserva montantes, documento e escolhas da aquisição; não cria outra compra. Importações, despesas especiais e afectação parcial conservam enquadramento próprio.</p>
{choices.length===1&&!link?<button type="button" onClick={()=>adopt(choices[0].id)}>Reutilizar operação existente: {choices[0].label}</button>:<label>Operação de destino<select value={link?.operationId??''} onChange={e=>e.target.value?adopt(e.target.value):onChange({deductionLink:undefined})}><option value="">Sem vínculo L2-A</option>{choices.map(c=><option key={c.id} value={c.id}>{c.label}</option>)}</select></label>}
{!choices.length&&<p>Não há operação classificada nesta oportunidade. A compra e o histórico permanecem disponíveis.</p>}
{link&&<><p>{row.bc?.beveragePath==='refund'&&result?.status==='eligible'?'Condições da operação13(2) identificadas;via de restituição escolhida,sem dedução desta parcela.':result?.reason}</p><small>{result?.source}</small>
<label className="block">Afectação exclusiva à operação ligada<select value={link.scopeConfirmed} onChange={e=>patch({scopeConfirmed:e.target.value as AcquisitionRightLink['scopeConfirmed']})}><option value="">Por confirmar</option><option value="yes">Sim</option><option value="no">Não / por rever</option></select></label>
<label className="block">Motivo ou referência da afectação<input value={link.allocationRef} onChange={e=>patch({allocationRef:e.target.value})}/></label>
{result?.status==='eligible'&&<label className="block">Aquisição fora dos pagamentos excluídos15(6)(c)/19(2)<select value={link.noExcludedPayments} onChange={e=>patch({noExcludedPayments:e.target.value as AcquisitionRightLink['noExcludedPayments']})}><option value="">Por indicar</option><option value="yes">Sim</option><option value="no">Não</option></select></label>}
{result?.status==='indeterminate'&&choices.some(c=>c.id===link.operationId)&&<button type="button" onClick={()=>adopt(link.operationId)}>Adoptar explicitamente a classificação actual e rever afectação</button>}
</>}
</fieldset>;
}