// Allocazione Capitali const Allocazione = () => { const A = window.REGULA_EXT.allocation; const [selected, setSelected] = React.useState(A.proposals[0].id); const current = A.proposals.find(p => p.id === selected); return (

Allocazione Capitali

Proposte di movimento infragruppo · AI + manuali · workflow di approvazione
Proposte attive
2 pending
{A.proposals.map((p, i) => { const isSelected = p.id === selected; return (
setSelected(p.id)} style={{ padding: '12px 16px', borderBottom: i < A.proposals.length - 1 ? '1px solid var(--border)' : 'none', borderLeft: isSelected ? '2px solid var(--ink)' : '2px solid transparent', background: isSelected ? 'var(--surface-2)' : 'transparent', cursor: 'pointer' }}>
{p.id} {p.status === 'approved' ? '✓ Approvato' : p.status === 'pending' ? '⏱ Pending' : p.status}
{p.from} {p.to} {p.amount.toFixed(1)} M€
{p.reason}
{p.generator === 'AI' && (
AI · confidenza {p.confidence}%
)}
); })}
{current.id}
{current.generator === 'AI' ? 'Generata da Regula AI' : 'Proposta manuale'}
{current.status === 'approved' ? '✓ Approvato' : '⏱ Pending'}
Sorgente
{current.from}
Impatto cash
{current.impactFrom.cash.toFixed(1)} M€
{current.impactFrom.dscr !== 0 && (
DSCR {current.impactFrom.dscr.toFixed(2)}×
)}
{current.amount.toFixed(1)} M€
Trasferimento
Destinazione
{current.to}
Impatto cash
+{current.impactTo.cash.toFixed(1)} M€
{current.impactTo.dscr !== 0 && (
DSCR +{current.impactTo.dscr.toFixed(2)}×
)}
Motivazione
{current.reason}
Workflow di approvazione
{current.approvers.map((a, i) => { const approved = a.includes('✓'); return (
{approved ? '✓' : i + 1}
{a.replace(' ✓', '')} {approved ? 'Approvato' : 'In attesa'}
); })}
{current.status === 'pending' && (
)}
); }; Object.assign(window, { Allocazione });