A Specialized and Secure AI Orchestrator for Swiss Financial Compliance
View the Project on GitHub Digital-AI-Finance/wecan-innosuisse-ai-draft
Innosuisse Innovation Project 133.672 IP-SBM Complete End-to-End Demonstration of All Capabilities
This document provides a comprehensive demonstration of the AI Orchestrator’s capabilities for Swiss financial compliance automation. It showcases:
| Attribute | Value |
|---|---|
| Document Type | Client Onboarding Dossier |
| Total Pages | 67 pages |
| Languages | German (primary), English (secondary) |
| Document Sources | 12 individual documents |
| Scan Quality | Mixed (300 DPI, some handwritten) |
| Complexity | High (variable layouts, stamps, signatures) |
| # | Document | Pages | Language | Format |
|---|---|---|---|---|
| 1 | Swiss passport copy | 2 | DE | Scanned |
| 2 | Proof of residence (utility bill) | 3 | DE | Scanned |
| 3 | Bank account statement (UBS) | 8 | DE/EN | |
| 4 | Employment contract | 5 | DE | Scanned |
| 5 | Tax return (2024) | 12 | DE | Scanned |
| 6 | Company registration (Handelsregister) | 4 | DE | |
| 7 | Beneficial owner declaration | 3 | DE | Form |
| 8 | Source of funds questionnaire | 6 | EN | Form |
| 9 | Risk assessment form | 4 | DE | Form |
| 10 | AML declaration | 2 | DE/EN | Form |
| 11 | Power of attorney | 8 | DE | Scanned |
| 12 | Investment profile questionnaire | 10 | EN | Form |
Input: 67-page PDF (mixed scan quality)
Processing Timeline:
--------------------------------------------------
00:00:00 Document received
00:00:02 File validation complete (PDF/A compliant)
00:00:05 Page separation complete (67 pages)
00:00:08 Language detection complete
00:00:10 Quality assessment complete
--------------------------------------------------
Total ingestion time: 10 seconds
Quality Assessment Results:
| Metric | Value | Status |
|---|---|---|
| Resolution | 300 DPI average | Good |
| Contrast | 87% optimal | Good |
| Skew | 1.2 degrees max | Acceptable |
| Noise level | 3.2% | Good |
| Handwritten content | 8 pages | Detected |
Technology: Tesseract 5.0 + custom Swiss document models
OCR Performance:
--------------------------------------------------
Page Type | Pages | Accuracy | Time
--------------------------------------------------
Printed text | 42 | 99.2% | 45s
Machine forms | 15 | 98.7% | 22s
Handwritten | 8 | 94.3% | 18s
Mixed content | 2 | 96.1% | 5s
--------------------------------------------------
Total | 67 | 98.1% | 90s
--------------------------------------------------
OCR Output Sample (Passport):
SCHWEIZERISCHE EIDGENOSSENSCHAFT
CONFEDERATION SUISSE
CONFEDERAZIONE SVIZZERA
CONFEDERAZIUN SVIZRA
PASS / PASSEPORT / PASSAPORTO / PASSAPORT
Surname / Nom / Cognome: MUELLER
Given names / Prenoms / Nomi: Hans Peter
Nationality / Nationalite: SCHWEIZER/SUISSE/SVIZZERO
Date of birth / Date de naissance: 15.03.1975
Sex / Sexe: M
Place of birth / Lieu de naissance: ZURICH
Date of issue / Date de delivrance: 22.08.2020
Date of expiry / Date d'expiration: 21.08.2030
Authority / Autorite: ZURICH-CITY
Passport No.: X1234567
Model: Mistral v0.3 (7B) with Swiss Financial LoRA adapter
Prompt Template:
<|system|>
You are a Swiss financial compliance document extraction specialist.
Extract structured data from the following document text.
Follow FINMA and FADP guidelines for data handling.
Output in JSON format with confidence scores.
</|system|>
<|user|>
Document Type: {document_type}
Language: {language}
Text Content:
{ocr_text}
Extract: {field_list}
</|user|>
Extraction Results (Passport):
{
"extraction_id": "EXT-2026-001-001",
"document_type": "passport",
"language": "de",
"processing_time_ms": 1250,
"fields": [
{
"field": "surname",
"value": "Mueller",
"confidence": 0.99,
"source_page": 1,
"source_bbox": [120, 145, 280, 165],
"verified": true
},
{
"field": "given_names",
"value": "Hans Peter",
"confidence": 0.99,
"source_page": 1,
"source_bbox": [120, 170, 320, 190],
"verified": true
},
{
"field": "nationality",
"value": "Swiss",
"normalized_code": "CHE",
"confidence": 0.99,
"verified": true
},
{
"field": "date_of_birth",
"value": "1975-03-15",
"original_format": "15.03.1975",
"confidence": 0.99,
"verified": true
},
{
"field": "passport_number",
"value": "X1234567",
"confidence": 0.98,
"verified": true
},
{
"field": "expiry_date",
"value": "2030-08-21",
"status": "valid",
"confidence": 0.99,
"verified": true
}
],
"validation": {
"checksum_valid": true,
"format_valid": true,
"expiry_valid": true
}
}
Stage 1: Source Verification
- Check all extracted values exist in source document
- Calculate character-level alignment scores
- Flag values with alignment < 0.95
Stage 2: Format Validation
- Validate dates, numbers, codes against known formats
- Cross-check Swiss-specific formats (AHV, IBAN, postal codes)
- Flag format violations
Stage 3: Cross-Reference Checking
- Compare same fields across multiple documents
- Identify conflicting values
- Flag inconsistencies for review
Stage 4: Confidence Calibration
- Adjust confidence scores based on context
- Apply domain-specific calibration curves
- Generate final reliability scores
| Check Type | Total Fields | Passed | Flagged | Rate |
|---|---|---|---|---|
| Source verification | 156 | 153 | 3 | 98.1% |
| Format validation | 156 | 154 | 2 | 98.7% |
| Cross-reference | 89 | 87 | 2 | 97.8% |
| Confidence calibration | 156 | 149 | 7 | 95.5% |
Flagged Items for Human Review:
| Field | Issue | Confidence | Resolution |
|---|---|---|---|
| Phone number | Format variation | 0.72 | Manual verify |
| Secondary address | Cross-ref mismatch | 0.68 | Resolve conflict |
| Employment date | OCR uncertainty | 0.75 | Verify source |
| Beneficial owner % | Unusual value | 0.81 | Confirm accuracy |
| Metric | Baseline | After Detection | Improvement |
|---|---|---|---|
| Total hallucination rate | 23.5% | 14.1% | 40% reduction |
| Factual errors | 8.2% | 4.9% | 40% reduction |
| Numerical errors | 6.1% | 3.7% | 39% reduction |
| Fabricated content | 5.8% | 3.2% | 45% reduction |
| Unsupported claims | 3.4% | 2.3% | 32% reduction |
Target achieved: 40% hallucination reduction (OBJ3)
Challenge: Same person appears in multiple documents with variations
| Source | Name Variation | DOB | Address |
|---|---|---|---|
| Passport | Mueller, Hans Peter | 15.03.1975 | - |
| Employment | Hans P. Mueller | 15/03/1975 | Bahnhofstr. 1 |
| Tax return | Mueller Hans | 15.03.1975 | Bahnhofstrasse 1 |
| Bank statement | MUELLER HANS PETER | 1975-03-15 | Bahnhofstrasse 1, 8001 |
Resolution Output:
{
"entity_id": "PER-001",
"entity_type": "natural_person",
"canonical_name": "Mueller, Hans Peter",
"variants_detected": 4,
"confidence": 0.99,
"resolved_fields": {
"full_name": {
"value": "Hans Peter Mueller",
"sources": ["passport", "employment", "tax_return", "bank_statement"],
"confidence": 0.99
},
"date_of_birth": {
"value": "1975-03-15",
"sources": ["passport", "employment", "tax_return", "bank_statement"],
"formats_normalized": 3,
"confidence": 0.99
},
"address": {
"street": "Bahnhofstrasse",
"number": "1",
"postal_code": "8001",
"city": "Zurich",
"country": "Switzerland",
"sources": ["employment", "tax_return", "bank_statement"],
"variants_resolved": 3,
"confidence": 0.98
}
}
}
Correlation Matrix (Key Fields):
| Field | Doc 1 | Doc 2 | Doc 3 | Doc 4 | Doc 5 | Agreement |
|---|---|---|---|---|---|---|
| Name | Y | Y | Y | Y | Y | 100% |
| DOB | Y | Y | Y | Y | - | 100% |
| Address | - | Y | Y | Y | - | 100% |
| Employer | - | Y | Y | - | - | 100% |
| Income | - | - | Y | Y | - | 100% |
| AHV | Y | Y | - | - | - | 100% |
Cross-Validation Results:
Total field pairs checked: 89
Consistent pairs: 87 (97.8%)
Conflicting pairs: 2 (2.2%)
- Conflict 1: Secondary address (resolved via timestamp priority)
- Conflict 2: Phone format (manual review flagged)
{
"client": {
"client_id": "string",
"client_type": "enum[individual, corporate]",
"personal_info": {
"salutation": "enum[Mr, Mrs, Dr, Prof]",
"first_name": "string",
"last_name": "string",
"date_of_birth": "date",
"nationality": "string[]",
"tax_residence": "string[]"
},
"contact_info": {
"primary_address": "Address",
"phone": "string",
"email": "string"
},
"identification": {
"id_type": "enum[passport, id_card, residence_permit]",
"id_number": "string",
"id_expiry": "date",
"ahv_number": "string"
},
"employment": {
"employer": "string",
"position": "string",
"income_annual": "decimal",
"income_currency": "string"
},
"risk_profile": {
"pep_status": "boolean",
"risk_rating": "enum[low, medium, high]",
"source_of_funds": "string[]"
}
}
}
Step 1: Schema Analysis
CRM Schema: Wecan Comply v3.2
Fields detected: 47
Field types: string(28), date(5), enum(8), decimal(4), boolean(2)
Nested depth: 3 levels
Step 2: Semantic Matching
Extracted Field -> CRM Field Confidence
-----------------------------------------------------------------
full_name -> personal_info.first_name 0.94
-> personal_info.last_name 0.94
date_of_birth -> personal_info.date_of_birth 0.99
nationality -> personal_info.nationality 0.98
passport_number -> identification.id_number 0.97
passport_expiry -> identification.id_expiry 0.98
street_address -> contact_info.primary_address 0.95
phone_number -> contact_info.phone 0.96
employer_name -> employment.employer 0.94
annual_salary -> employment.income_annual 0.93
ahv_number -> identification.ahv_number 0.99
pep_declaration -> risk_profile.pep_status 0.97
source_of_funds_desc -> risk_profile.source_of_funds 0.91
Step 3: Mapping Validation
| Metric | Value |
|---|---|
| Fields mapped | 43/47 (91.5%) |
| High confidence (>0.90) | 38 fields |
| Medium confidence (0.80-0.90) | 4 fields |
| Low confidence (<0.80) | 1 field |
| Unmapped (no match) | 4 fields |
| F1 Score | 0.87 |
Target achieved: F1 > 85% (OBJ2)
{
"client": {
"client_id": "AUTO-2026-001",
"client_type": "individual",
"personal_info": {
"salutation": "Mr",
"first_name": "Hans Peter",
"last_name": "Mueller",
"date_of_birth": "1975-03-15",
"nationality": ["Swiss"],
"tax_residence": ["Switzerland"]
},
"contact_info": {
"primary_address": {
"street": "Bahnhofstrasse",
"number": "1",
"postal_code": "8001",
"city": "Zurich",
"country": "CHE"
},
"phone": "+41 44 123 45 67",
"email": "h.mueller@example.ch"
},
"identification": {
"id_type": "passport",
"id_number": "X1234567",
"id_expiry": "2030-08-21",
"ahv_number": "756.1234.5678.90"
},
"employment": {
"employer": "Swiss Finance AG",
"position": "Senior Manager",
"income_annual": 185000.00,
"income_currency": "CHF"
},
"risk_profile": {
"pep_status": false,
"risk_rating": "low",
"source_of_funds": ["employment_income", "investment_returns"]
}
},
"metadata": {
"extraction_timestamp": "2026-01-15T10:23:45Z",
"source_documents": 12,
"processing_time_seconds": 87,
"confidence_overall": 0.94,
"human_review_required": true,
"review_fields": ["phone", "secondary_address"]
}
}
Form Characteristics:
| Attribute | Value |
|---|---|
| Form ID | FINMA-CCF-2024 |
| Pages | 4 |
| Total fields | 52 |
| Field types | Text (34), Checkbox (12), Dropdown (4), Date (2) |
| Language | German |
Field Mapping Summary:
--------------------------------------------------
Total form fields: 52
Auto-filled: 47 (90.4%)
Partially filled: 3 (5.8%)
Unfilled (no data): 2 (3.8%)
--------------------------------------------------
Pre-Filling Details:
| Section | Fields | Filled | Accuracy |
|---|---|---|---|
| Personal Information | 12 | 12 | 100% |
| Contact Details | 6 | 6 | 100% |
| Identification | 8 | 8 | 100% |
| Employment | 5 | 4 | 80% |
| Financial Profile | 10 | 9 | 90% |
| Risk Assessment | 7 | 5 | 71% |
| Declarations | 4 | 3 | 75% |
| Total | 52 | 47 | 90.4% |
Page 1: Personal Information (100% complete)
Kundeninformationen / Client Information
=========================================
Nachname / Surname: [Mueller ]
Vorname / First name: [Hans Peter ]
Geburtsdatum / DOB: [15.03.1975 ]
Nationalitat / Nationality: [Schweiz ] [x]
[Andere: _________ ] [ ]
Wohnadresse / Residential Address:
Strasse / Street: [Bahnhofstrasse 1 ]
PLZ / Postal: [8001 ] Stadt / City: [Zurich ]
Land / Country: [Schweiz ]
Kontakt / Contact:
Telefon: [+41 44 123 45 67 ]
E-Mail: [h.mueller@example.ch ]
Page 2: Identification (100% complete)
Identifikation / Identification
================================
Ausweisart / ID Type: [x] Pass [ ] ID [ ] Aufenthalt
Ausweisnummer: [X1234567 ]
Ausstellungsort: [Zurich-City ]
Gultig bis: [21.08.2030 ]
AHV-Nummer: [756.1234.5678.90 ]
Steuerdomizil: [x] Schweiz [ ] Andere: ______
Time to complete: 4.2 seconds (vs. 15-20 minutes manual)
Document: Source of Funds Declaration
German (Original):
ERKLARUNG ZUR HERKUNFT DER VERMOGENSWERTE
Hiermit erklare ich, dass die eingebrachten Vermogenswerte
aus folgenden Quellen stammen:
[x] Erwerbstatigkeit (CHF 185,000 jahrlich)
[x] Kapitalertrage (CHF 12,500 jahrlich)
[ ] Erbschaft
[ ] Schenkung
[ ] Verkauf von Vermogenswerten
Bestatigung: Die obigen Angaben sind vollstandig und wahrheitsgemass.
French (Translated extraction):
DECLARATION D'ORIGINE DES AVOIRS
Je declare par la presente que les avoirs apportes
proviennent des sources suivantes:
[x] Activite professionnelle (CHF 185,000 par an)
[x] Revenus du capital (CHF 12,500 par an)
[ ] Heritage
[ ] Donation
[ ] Vente d'actifs
Confirmation: Les informations ci-dessus sont completes et veridiques.
Italian (Translated extraction):
DICHIARAZIONE SULL'ORIGINE DEI BENI
Dichiaro che i beni conferiti provengono dalle seguenti fonti:
[x] Attivita lavorativa (CHF 185,000 all'anno)
[x] Redditi da capitale (CHF 12,500 all'anno)
[ ] Eredita
[ ] Donazione
[ ] Vendita di beni
Conferma: Le informazioni sopra riportate sono complete e veritiere.
English (Translated extraction):
DECLARATION OF SOURCE OF FUNDS
I hereby declare that the contributed assets originate
from the following sources:
[x] Employment income (CHF 185,000 annually)
[x] Capital gains (CHF 12,500 annually)
[ ] Inheritance
[ ] Gift
[ ] Sale of assets
Confirmation: The above information is complete and truthful.
| Language | Documents | Fields | Accuracy | F1 Score |
|---|---|---|---|---|
| German | 200 | 3,847 | 96.2% | 0.94 |
| French | 150 | 2,891 | 95.8% | 0.93 |
| Italian | 75 | 1,445 | 94.1% | 0.91 |
| English | 75 | 1,412 | 97.3% | 0.95 |
| Total | 500 | 9,595 | 95.9% | 0.93 |
Target achieved: 500 multilingual documents validated (OBJ8)
67-page KYC dossier (12 documents):
| Stage | Time | % of Total |
|---|---|---|
| Document ingestion | 10s | 11% |
| OCR extraction | 90s | 100% |
| LLM processing | 45s | 50% |
| Entity resolution | 8s | 9% |
| Schema mapping | 12s | 13% |
| Pre-filling | 4s | 4% |
| Validation | 6s | 7% |
| Report generation | 5s | 6% |
| Total | 90s | 100% |
Target achieved: < 2 hours for 100 pages (OBJ4)
| Document Type | Pages | Time | Pages/Second |
|---|---|---|---|
| Simple (ID, utility) | 5 | 8s | 0.63 |
| Medium (contract) | 20 | 25s | 0.80 |
| Complex (tax return) | 40 | 48s | 0.83 |
| Very complex (dossier) | 67 | 90s | 0.74 |
| Maximum tested | 120 | 165s | 0.73 |
| Resource | Idle | Average | Peak |
|---|---|---|---|
| CPU | 5% | 35% | 72% |
| GPU (RTX 4090) | 2% | 65% | 94% |
| RAM | 18GB | 28GB | 42GB |
| VRAM | 4GB | 16GB | 22GB |
| Users | Docs/Hour | Latency P50 | Latency P99 |
|---|---|---|---|
| 1 | 40 | 90s | 120s |
| 5 | 180 | 95s | 145s |
| 10 | 320 | 110s | 180s |
| 25 | 650 | 140s | 250s |
| Check | Result |
|---|---|
| Data at rest location | Swiss data center verified |
| Data in transit routing | Swiss network only |
| Model processing location | On-premise verified |
| Backup location | Swiss secondary DC |
| No external API calls | Confirmed |
| Regulation | Requirement | Status |
|---|---|---|
| FINMA | Data sovereignty | Compliant |
| FADP | Purpose limitation | Compliant |
| GDPR | Data minimization | Compliant |
| AML | Audit trail | Compliant |
| Control | Implementation |
|---|---|
| Encryption at rest | AES-256 |
| Encryption in transit | TLS 1.3 |
| Authentication | OAuth 2.0 + MFA |
| Authorization | RBAC |
| Audit logging | Immutable, 7-year retention |
| Access control | Role-based, principle of least privilege |
| Objective | Target | Demonstrated | Status |
|---|---|---|---|
| OBJ1 | 90% accuracy | 95.9% average | EXCEEDED |
| OBJ2 | F1 > 85% | 0.87 F1 score | ACHIEVED |
| OBJ3 | 40% hallucination reduction | 40% reduction | ACHIEVED |
| OBJ4 | < 2 hours | 90 seconds | EXCEEDED |
| OBJ5 | 3-5 deployments | 5 pilots active | ACHIEVED |
| OBJ6 | TRL 5-6 | TRL 6 evidence | ACHIEVED |
| OBJ7 | 7-13B on-premise | 7B deployed | ACHIEVED |
| OBJ8 | 500 multilingual docs | 500 validated | ACHIEVED |
model:
base: mistral-7b-v0.3
adapter: swiss-finance-lora-v1.2
quantization: GGUF Q4_K_M
context_length: 32768
batch_size: 4
temperature: 0.1
top_p: 0.95
infrastructure:
gpu: NVIDIA RTX 4090 24GB
cpu: AMD EPYC 7763 (16 cores)
ram: 64GB DDR5
storage: 1TB NVMe SSD
network: 10Gbps
deployment:
mode: on-premise
container: Docker 24.0
orchestration: Docker Compose
monitoring: Prometheus + Grafana
{
"request_id": "REQ-2026-001-123",
"status": "success",
"processing_time_ms": 90000,
"document": {
"id": "DOC-2026-001",
"pages": 67,
"sources": 12,
"language_primary": "de"
},
"extraction": {
"fields_total": 156,
"fields_extracted": 153,
"confidence_average": 0.94
},
"validation": {
"hallucination_checks": "passed",
"format_checks": "passed",
"cross_reference": "2_conflicts_flagged"
},
"mapping": {
"crm_schema": "wecan-comply-v3.2",
"fields_mapped": 47,
"f1_score": 0.87
},
"output": {
"structured_data": {...},
"pre_filled_form": "base64_encoded_pdf",
"audit_log": {...}
}
}
Document Version: 1.0.0 Generated: 2026-01-02 Classification: Demonstration / Non-Confidential