Antiriciclaggio

Sentinella sanzioni mondiali · KYC on-demand · valutazioni rischio · registro operazioni (D.Lgs. 231/2007)
Autovalutazione studio (artt. 15-16 D.Lgs. 231/2007)
Caricamento…
`; const w = window.open('', '_blank'); w.document.write(html); w.document.close(); setTimeout(() => w.print(), 500); } // ════════════ OPERAZIONE COMPOSER ════════════ function openOperazioneComposer() { ['op-cli-search','op-cli-id','op-dettagli'].forEach(id => document.getElementById(id).value=''); document.getElementById('op-evento').value = 'operazione_sospetta'; document.getElementById('op-msg').textContent = ''; document.getElementById('op-composer').classList.remove('hidden'); loadClients(); if (window.lucide) lucide.createIcons(); } function closeOperazioneComposer() { document.getElementById('op-composer').classList.add('hidden'); } async function cliSearchOp(q) { await loadClients(); _renderCliResults('op-cli-results','op-cli-id','op-cli-search', q, 'pickCliOp'); } function pickCliOp(id, name) { document.getElementById('op-cli-id').value = id; document.getElementById('op-cli-search').value = name; document.getElementById('op-cli-results').classList.add('hidden'); } async function saveOperazione() { // Non c'è endpoint dedicato per inserimento operazioni log — usa SOS endpoint come fallback // oppure crea via segnalazione operazioni sospette const cid = document.getElementById('op-cli-id').value; const ev = document.getElementById('op-evento').value; const det = document.getElementById('op-dettagli').value; const msg = document.getElementById('op-msg'); const btn = document.getElementById('op-save-btn'); if (!cid) { msg.textContent = '⚠ Seleziona un cliente'; return; } if (!det) { msg.textContent = '⚠ Inserisci i dettagli'; return; } btn.disabled = true; msg.textContent = 'Registrazione…'; try { if (ev === 'operazione_sospetta') { await api('POST', '/api/aml/sos', { client_id: parseInt(cid), tipologia: 'riciclaggio', descrizione: det, note: '', }); msg.textContent = '✓ Segnalazione SOS registrata'; } else { // Fallback: nessun endpoint diretto — invita l'utente a passare dalla scheda cliente msg.textContent = '⚠ Evento non-SOS: registralo dalla scheda cliente AML (workflow specifico)'; } setTimeout(async () => { closeOperazioneComposer(); await loadMonit(); }, 900); } catch(e) { msg.textContent = '⚠ ' + e.message; } finally { btn.disabled = false; } } // ─── INIT ─── loadAll(); document.addEventListener('keydown', e => { if (e.key === 'Escape') { ['alert-detail','kyc-detail','kyc-composer','op-composer'].forEach(id => { const el = document.getElementById(id); if (el && !el.classList.contains('hidden')) el.classList.add('hidden'); }); } }); // Auto-tab via hash const h = (location.hash||'').replace('#',''); if (['alerts','kyc','valutazioni','monitoraggio'].includes(h)) setTimeout(() => setTab(h), 100); // Check stato autovalutazione studio (richiesto?) (async function checkStudioAutovalutazione() { try { const r = await fetch('/api/aml/studio/scadenza', { credentials:'same-origin' }); if (!r.ok) return; const j = await r.json(); if (j.richiesta_compilazione) { const badge = document.getElementById('av-badge'); if (badge) { badge.classList.remove('hidden'); badge.textContent = j.scaduta ? 'SCADUTA' : 'aggiornamento richiesto'; } } } catch(_){} })();