Skip to content

Commit 9df3606

Browse files
Add interactive features and data structures to AML paper
1 parent d04b154 commit 9df3606

File tree

1 file changed

+239
-0
lines changed

1 file changed

+239
-0
lines changed

research/academic_papers/AML_Fraud_and_Global_Civicsystems.html

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,245 @@ <h3 class="text-2xl font-semibold text-teal-700 mb-4">${content.title}</h3>
537537

538538
});
539539
</script>
540+
<script>
541+
document.addEventListener('DOMContentLoaded', () => {
542+
543+
// --- Data Store ---
544+
const pillarData = {
545+
p1: {
546+
title: "1. Epistemic Hold",
547+
description: "An enforced, time-bound pause on a transaction or decision when material uncertainty or a systemic risk threshold is breached. This is the core 'circuit-breaker' mechanism. It defines clear SLAs, trigger logic (based on ensemble checks), and human/operator escalation rules, moving the system from 'fail-safe' to 'safe-fail' by pausing for verification."
548+
},
549+
p2: {
550+
title: "2. Immutable Ledger",
551+
description: "A verifiable, cross-jurisdiction decision chain of 'what happened.' Unlike a typical blockchain, its primary role is 'proof-only' anchoring, not asset transfer. It ensures that the final 'Forensic Packet' of a decision (especially one released from a hold) is non-repudiable and can be verified by any authorized party, even across sovereign borders."
552+
},
553+
p3: {
554+
title: "3. Goukassian Principle",
555+
description: "The core philosophical and technical rule: the system must be able to prove *what it knew, and when it knew it.* This is implemented via 'Lantern' (a hash of all available data inputs at time T), 'Signature' (the system's non-repudiable sign-off), and 'License' (proof of the system's authority to act)."
556+
},
557+
p4: {
558+
title: "4. Decision Logs",
559+
description: "The granular, machine-readable forensic trace of *why* a decision was made. This log includes all model inputs, risk scores, ensemble check results, and the specific reasoning (e.g., 'watchilist hit + anomalous amount'). This is the primary artifact reviewed by an auditor or an operator during an Epistemic Hold."
560+
},
561+
p5: {
562+
title: "5. Economic Rights & Transparency Mandate",
563+
description: "Aligns TL's function with existing institutional transparency regimes (e.g., FATF, SEC, IFRS, Basel, FDA). It mandates that the *evidence* of compliance (not just the claim) is available to authorized auditors, creating a 'show, don't tell' framework for regulatory reporting and economic rights."
564+
},
565+
p6: {
566+
title: "6. Sustainable Capital Allocation Mandate",
567+
description: "Applies TL's evidentiary proof to non-financial but systemically critical data, such as planetary and societal obligations. This is crucial in crime detection (e.g., proving the 'green' in a green bond) and capital flows (e.g., verifying ESG claims or supply chain provenance)."
568+
},
569+
p7: {
570+
title: "7. Hybrid Shield",
571+
description: "A dual-layer protection model. Layer 1 (Cryptographic): Uses Ephemeral Key Rotation (EKR) and pseudonymization to protect trade secrets and data privacy. Layer 2 (Institutional): Gated disclosure protocols ensure that decrypted data is only revealed via lawful warrant or multi-party quorum, with all access attempts logged."
572+
},
573+
p8: {
574+
title: "8. Anchors",
575+
description: "A multi-chain notarization strategy for sovereign-grade permanence. Instead of one chain, TL batches and anchors Merkle roots of Decision Logs across multiple, diverse, high-security public ledgers. This makes the evidence trail as permanent as the most secure public record, resilient to any single point of failure."
576+
}
577+
};
578+
579+
const workflowData = {
580+
aml: {
581+
title: "Trade-Based Money Laundering",
582+
flowchart: [
583+
"Transaction Ingested (Invoice, B/L, Customs Data)",
584+
"Ensemble Check (Price, Quantity, Route, Vessel, Counterparty)",
585+
"Anomaly Detected (e.g., 5x Price Variance) -> Epistemic Hold",
586+
"Human Review (FIU/Compliance Officer)",
587+
"Decision: Commit (Release) or Refuse (Block/Report)",
588+
"Forensic Packet (Decision Log) Logged & Anchored"
589+
],
590+
evidence: [
591+
"Transaction Metadata (SWIFT MT103)",
592+
"Hashed KYC Record",
593+
"Scanned Invoice (Hashed)",
594+
"Bill of Lading (Hashed)",
595+
"Customs Declaration (Oracle Attestation)",
596+
"Vessel Location (Oracle Attestation)"
597+
]
598+
},
599+
device: {
600+
title: "Medical Device Approval (AI Diagnostic)",
601+
flowchart: [
602+
"Submission Ingested (Clinical Trial Data, Model, Attestations)",
603+
"Ensemble Check (Dataset Provenance, Model Bias, Statistical Significance)",
604+
"Uncertainty Detected (e.g., Biased Trial Dataset) -> Epistemic Hold",
605+
"Human Review (Regulatory Committee)",
606+
"Decision: Approve, Reject, or Request for Information (RFI)",
607+
"Forensic Packet (Decision Log) Logged & Anchored"
608+
],
609+
evidence: [
610+
"Manufacturer Attestation",
611+
"Clinical Trial Dataset (Hashed)",
612+
"AI Model (Hashed)",
613+
"3rd Party Validator Report (Attestation)",
614+
"Patient Cohort Demographics (Pseudonymized)"
615+
]
616+
},
617+
theft: {
618+
title: "Cross-Chain Asset Theft",
619+
flowchart: [
620+
"Bridge Transaction Ingested (Burn/Lock Event)",
621+
"Ensemble Check (Volume, Velocity, Address Age, Origin Chain)",
622+
"High-Risk Anomaly (e.g., Known Exploiter Address) -> Epistemic Hold",
623+
"Autonomous Hold on Mint/Unlock (e.g., 10 min)",
624+
"Hold Expires (Commit) or Human Intervention (Freeze)",
625+
"Forensic Packet (Decision Log) Logged & Anchored"
626+
],
627+
evidence: [
628+
"Origin Chain Txn Hash",
629+
"Destination Chain Address",
630+
"Address Risk Score (Oracle Attestation)",
631+
"Asset Type & Amount",
632+
"Cross-Chain Message Packet (Hashed)"
633+
]
634+
}
635+
};
636+
637+
// --- Smooth Scrolling ---
638+
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
639+
anchor.addEventListener('click', function (e) {
640+
e.preventDefault();
641+
const targetId = this.getAttribute('href');
642+
const targetElement = document.querySelector(targetId);
643+
if (targetElement) {
644+
targetElement.scrollIntoView({
645+
behavior: 'smooth'
646+
});
647+
}
648+
});
649+
});
540650

651+
// --- Pillar Interaction ---
652+
const pillarButtons = document.querySelectorAll('.pillar-button');
653+
const detailsContainer = document.getElementById('pillar-details-container');
654+
655+
pillarButtons.forEach(button => {
656+
button.addEventListener('click', () => {
657+
const pillarKey = button.dataset.pillar;
658+
const data = pillarData[pillarKey];
659+
660+
detailsContainer.innerHTML = `
661+
<h3 class="text-2xl font-bold text-slate-900 mb-2">${data.title}</h3>
662+
<p class="text-slate-700">${data.description}</p>
663+
`;
664+
665+
pillarButtons.forEach(btn => btn.classList.remove('active'));
666+
button.classList.add('active');
667+
});
668+
});
669+
670+
if (pillarButtons.length > 0) {
671+
pillarButtons[0].click();
672+
}
673+
674+
// --- Workflow Interaction ---
675+
const workflowSelector = document.getElementById('workflow-selector');
676+
const workflowTitle = document.getElementById('workflow-title');
677+
const flowchartContainer = document.getElementById('workflow-flowchart');
678+
const evidenceList = document.getElementById('workflow-evidence-list');
679+
680+
function updateWorkflow(workflowKey) {
681+
const data = workflowData[workflowKey];
682+
if (!data) return;
683+
684+
workflowTitle.innerText = data.title;
685+
686+
flowchartContainer.innerHTML = data.flowchart
687+
.map(step => `<div class="flow-step">${step}</div>`)
688+
.join('');
689+
690+
evidenceList.innerHTML = data.evidence
691+
.map(item => `<li class="relative pl-2"><span class="absolute left-[-1.25rem] top-1.5 text-blue-700">▪</span>${item}</li>`)
692+
.join('');
693+
}
694+
695+
if (workflowSelector) {
696+
workflowSelector.addEventListener('change', (e) => updateWorkflow(e.target.value));
697+
updateWorkflow(workflowSelector.value);
698+
}
699+
700+
// --- Tab Interaction ---
701+
const tabButtons = document.querySelectorAll('.tab-button');
702+
const tabContents = document.querySelectorAll('.tab-content');
703+
704+
tabButtons.forEach(button => {
705+
button.addEventListener('click', () => {
706+
const tabId = button.dataset.tab;
707+
708+
tabButtons.forEach(btn => btn.classList.remove('active'));
709+
button.classList.add('active');
710+
711+
tabContents.forEach(content => {
712+
if (content.id === `tab-content-${tabId}`) {
713+
content.classList.remove('hidden');
714+
} else {
715+
content.classList.add('hidden');
716+
}
717+
});
718+
});
719+
});
720+
721+
// --- Chart.js Latency Chart ---
722+
const ctx = document.getElementById('latencyChart');
723+
if (ctx) {
724+
new Chart(ctx.getContext('2d'), {
725+
type: 'bar',
726+
data: {
727+
labels: ['Ensemble Check', 'Hold Logic', 'Signing', 'Validation'],
728+
datasets: [{
729+
label: 'Latency (ms)',
730+
data: [75, 40, 50, 60],
731+
backgroundColor: [
732+
'rgba(59, 130, 246, 0.7)',
733+
'rgba(239, 68, 68, 0.7)',
734+
'rgba(16, 185, 129, 0.7)',
735+
'rgba(245, 158, 11, 0.7)'
736+
],
737+
borderColor: [
738+
'rgba(59, 130, 246, 1)',
739+
'rgba(239, 68, 68, 1)',
740+
'rgba(16, 185, 129, 1)',
741+
'rgba(245, 158, 11, 1)'
742+
],
743+
borderWidth: 1
744+
}]
745+
},
746+
options: {
747+
indexAxis: 'y',
748+
responsive: true,
749+
maintainAspectRatio: false,
750+
plugins: {
751+
legend: {
752+
display: false
753+
},
754+
tooltip: {
755+
callbacks: {
756+
label: function(context) {
757+
return `${context.dataset.label}: ${context.raw} ms`;
758+
}
759+
}
760+
}
761+
},
762+
scales: {
763+
x: {
764+
beginAtZero: true,
765+
title: {
766+
display: true,
767+
text: 'Time (ms)'
768+
},
769+
stacked: true,
770+
},
771+
y: {
772+
stacked: true
773+
}
774+
}
775+
}
776+
});
777+
}
778+
});
779+
</script>
541780
</body>
542781
</html>

0 commit comments

Comments
 (0)