KyvShield

Plateforme d'administration

{{ loginError }}

KyvShield © 2024 — Verification d'identite

Dashboard

Vue d'ensemble des sessions actives (derniere 2h)

{{ stat.value }}

{{ stat.label }}

Sessions recentes

Session App Flow Resultat Steps Duree Platform Date TTL
{{ session.session_id?.substring(0, 12) }}... {{ session.app_id }} {{ session.status }} {{ session.result?.status || session.final_result?.overall_status }} - {{ session.steps_order?.join(', ') || '-' }} {{ session.total_duration_ms ? (session.total_duration_ms / 1000).toFixed(1) + 's' : '-' }} {{ session.client?.platform || '-' }} {{ formatDate(session.created_at) }} {{ sessionTTL(session) }}
Aucune session dans les 2 dernieres heures

Statistiques d'utilisation

{{ statsData.summary.total_sessions || 0 }}
Sessions
{{ (statsData.summary.success_rate || 0).toFixed(1) }}%
Taux succes
{{ statsData.summary.total_failed || 0 }}
Echecs
{{ statsData.summary.avg_duration_ms ? (statsData.summary.avg_duration_ms / 1000).toFixed(1) + 's' : '-' }}
Duree moy.

Sessions par jour

{{ day.date?.substring(5) }}
Succes Echec

Consommation du mois (toutes applications)

Sessions

Rechercher et explorer les sessions de verification

{{ sessionTotal }} session(s) trouvee(s)

Session App Flow Resultat Steps Duree Platform Date TTL
{{ s.session_id?.substring(0, 12) }}... {{ s.app_id }} {{ s.status }} {{ s.result?.status || s.final_result?.overall_status }} - {{ s.steps_order?.join(', ') || '-' }} {{ s.total_duration_ms ? (s.total_duration_ms / 1000).toFixed(1) + 's' : '-' }} {{ s.client?.platform || '-' }} {{ formatDate(s.created_at) }} {{ sessionTTL(s.created_at) }}
Page {{ sessionPage }} / {{ sessionPages }} ({{ sessionTotal }} resultats)

Applications

Gerer les applications et cles API

{{ app.name }}

{{ app.app_id }}
{{ app.status }}
Cles API
{{ app.api_keys?.length || 0 }}
Webhook
{{ app.settings?.webhook_url || 'Non configure' }}
Plan
{{ app.billing?.plan || 'free' }}

Aucune application

{{ detailApp.name }}

{{ detailApp.status }} {{ detailApp.billing?.plan || 'free' }} {{ detailApp.billing.billing_mode === 'per_session' ? 'Par session' : 'Par operation' }} Fixe: {{ formatCurrency(detailApp.billing.monthly_fixed_fee) }} XOF/mois

{{ detailApp.app_id }}

Informations generales

Types de documents & options

Documents autorises

Cles API

Nom Cle (masquee) Status Creee Actions
{{ k.name }} {{ maskApiKey(k.api_key) }} {{ k.status }} {{ formatDate(k.created_at) }}
Aucune cle API

Cle regeneree avec succes — Copiez-la maintenant, elle ne sera plus affichee

{{ rotatedNewKey }}

Utilisation par cle API

Cle Requetes totales Derniere utilisation Ce mois
{{ k.name }} {{ k.usage_stats?.total_requests || 0 }} {{ k.usage_stats?.last_used_at ? formatDate(k.usage_stats.last_used_at) : 'Jamais' }} -

Quotas par type de session

Securite — {{ selectedKey.name }}

Restrictions d'acces pour cette cle

Cles temporaires

{{ tempKeysTotal }} cle(s)
Cle Nom Expire Utilisations Status
{{ tk.temp_key?.substring(0, 12) }}... {{ tk.name || '-' }} {{ formatDate(tk.expires_at) }} {{ tk.used_count || 0 }} revoque expire active
Page {{ tempKeysPage }} / {{ tempKeysPages }}
Aucune cle temporaire

Echecs Webhook (24h)

{{ webhookFailuresTotal }} echec(s)
Event Session URL Tentatives Erreur Date
{{ wf.event }} {{ wf.session_id?.substring(0, 10) }}... {{ wf.webhook_url }} {{ wf.attempts }} {{ wf.last_error }} {{ formatDate(wf.created_at) }}
Page {{ webhookFailuresPage }} / {{ webhookFailuresPages }}
Aucun echec webhook dans les 24 dernieres heures

Utilisateurs de cette application

{{ appUsers.length }} utilisateur(s)
Nom Email Role Status Actions
{{ u.name }} {{ u.email }} {{ u.role }} {{ u.status }}

Aucun utilisateur attache a cette application

Statut & Actions

{{ detailApp.status === 'active' ? 'Application active' : detailApp.status === 'suspended' ? 'Application suspendue' : 'Application revoquee' }}

{{ detailApp.status === 'active' ? 'Les cles API de cette application sont fonctionnelles.' : detailApp.status === 'suspended' ? 'Les cles API sont temporairement desactivees.' : 'Les cles API sont desactivees. Reactivez pour restaurer l\'acces.' }}

Configuration Tarifs

{{ editingApp?.app_name || editingApp?.name }} — {{ editingApp?.app_id }}

Quotas mensuels inclus

Operations gratuites par mois. Au-dela, le prix de depassement s'applique.

Prix de depassement (XOF)

Prix par operation au-dela du quota mensuel inclus.

XOF

Simulateur de cout

Entrez le volume prevu par jour ou par mois pour estimer le cout mensuel.

Saisie par :
Operation Volume {{ simMode === 'day' ? '/jour' : '/mois' }} Total/mois Inclus Depassement Cout
{{ field.label }} {{ simMonthly(field.key) }} {{ simIncluded(field.key) }} {{ simOverage(field.key) }} {{ formatCurrency(simCost(field.key)) }}
Cout mensuel estime {{ formatCurrency(totalSimulatedCost) }} XOF

Tarifs enregistres avec succes

Plan {{ pricingForm.plan }} — les nouveaux tarifs sont actifs immediatement.

Documents

Types de documents configures dans le systeme

{{ doc.doc_type }} {{ doc.enabled ? 'actif' : 'inactif' }}

{{ doc.name }}

{{ doc.country_name }} — {{ doc.document_category_label }}
Recto Verso {{ doc.recto?.fields?.length || 0 }} champs recto {{ doc.verso?.fields?.length || 0 }} champs verso

Aucun document configure

{{ selectedDocument.name || selectedDocument.doc_type }}

{{ selectedDocument.doc_type }}

Configuration complete

{{ JSON.stringify(selectedDocument, null, 2) }}

Plans

Gerer les plans tarifaires globaux

Chargement des plans...

{{ plan.plan_id }}

{{ plan.name }}

SLA {{ plan.sla }}

{{ plan.description }}

Quotas mensuels inclus
{{ formatNumber(plan.monthly_included?.total_sessions) }}
Total
{{ formatNumber(plan.monthly_included?.recto) }}
Recto
{{ formatNumber(plan.monthly_included?.verso) }}
Verso
{{ formatNumber(plan.monthly_included?.selfie) }}
Selfie
{{ formatNumber(plan.monthly_included?.face_verifications) }}
Face
Tarifs unitaires ({{ plan.currency || 'XOF' }})
{{ plan.pricing?.per_recto }}
Recto
{{ plan.pricing?.per_verso }}
Verso
{{ plan.pricing?.per_face_verification }}
Face
{{ plan.pricing?.per_selfie }}
Liveness
{{ f }}
Support: {{ plan.support || '-' }} {{ plan.auto_suspend_on_limit ? 'Auto-suspend' : 'Pas de suspension' }}

Aucun plan configure

{{ creatingNewPlan ? 'Nouveau Plan' : 'Modifier: ' + editingPlan.name }}

Identifiant unique (lowercase, underscores)

Quotas mensuels inclus

0 = pas de limite specifique pour ce type de session

Tarifs unitaires

Tarifs hors-forfait

Features

Utilisateurs

Gerer les comptes utilisateurs

Nom Email Role App Status Actions
{{ u.name }} {{ u.email }} {{ u.role }} {{ appName(u.app_id) }} ({{ u.app_id }}) - {{ u.status }}

Settings LLM

Configuration des providers IA et routage des requetes

Stats en temps reel (depuis redemarrage)

Route:Provider Requetes Succes Echecs API Tokens in Tokens out Latence moy.
{{ key }} {{ stat.total_requests }} {{ stat.successes }} {{ stat.api_failures }} {{ formatNumber(stat.total_input_tokens) }} {{ formatNumber(stat.total_output_tokens) }} {{ stat.total_requests > 0 ? Math.round(stat.total_latency_ms / stat.total_requests) + 'ms' : '-' }}

Historique par jour / provider

Date Route Provider Modele Requetes Succes Echecs Tokens in Tokens out Latence moy.
{{ stat.date }} {{ stat.route }} {{ stat.provider }} {{ stat.model?.split('/').pop() }} {{ stat.total_requests }} {{ stat.successes }} {{ stat.api_failures }} {{ formatNumber(stat.total_input_tokens) }} {{ formatNumber(stat.total_output_tokens) }} {{ stat.avg_latency_ms ? Math.round(stat.avg_latency_ms) + 'ms' : '-' }}

Routage des requetes

{{ i + 1 }}

Tarification LLM (USD / million tokens)

Provider/ModeleInput $/MOutput $/M
{{ key }}

Providers & Cles API

Fallback automatique

Analyse & Prompts

Face Identification (1:N)

Chargement...

Tarification LLM (USD / 1M tokens)

Provider / Modele Input $/M Output $/M
{{ key }}

{{ Object.keys(llmSettings.llm.pricing || {}).length }} entree(s) — Les prix sont utilises pour calculer le cout par session (total_cost_usd)

Chargement des settings...

Configuration

Edition JSON des documents Elasticsearch — 50 derniers changements conserves

Chargement de la configuration...

{{ rawConfigTab }}
{{ rawConfigError }} JSON valide

Historique des versions

v{{ v.version }}
{{ new Date(v.updated_at).toLocaleString('fr-FR') }}
par {{ v.updated_by || 'inconnu' }}
{{ computeJsonDiff(configHistory[i+1]?.document || {}, v.document || {}).length }} changement(s)
~ {{ d.path }}: {{ typeof d.from === 'object' ? JSON.stringify(d.from) : d.from }} → {{ typeof d.to === 'object' ? JSON.stringify(d.to) : d.to }} + {{ d.path }}: {{ typeof d.value === 'object' ? JSON.stringify(d.value) : d.value }} - {{ d.path }}: {{ typeof d.value === 'object' ? JSON.stringify(d.value) : d.value }}
Pas de diff disponible
Aucun historique — les versions seront enregistrees apres le premier changement.

Restaurer la version {{ restoreVersion.version }} ?

Du {{ new Date(restoreVersion.updated_at).toLocaleString('fr-FR') }} par {{ restoreVersion.updated_by || 'inconnu' }}.
Entrez votre mot de passe pour confirmer.

{{ restoreError }}

Selectionnez un document a modifier

Registre d'Identites

Personnes identifiees par KYC (recto+verso PASS)

Migrations

Historique des migrations Elasticsearch

ID Description Statut Duree Execute le
{{ m.migration_id }} {{ m.description }} {{ m.status === 'completed' ? 'OK' : 'FAILED' }} DESTRUCTIVE {{ m.duration_ms ? m.duration_ms + 'ms' : '—' }} {{ m.executed_at ? new Date(m.executed_at).toLocaleString('fr-FR') : '—' }}
Aucune migration executee. Lancez python3 migrate.py pour initialiser.

python3 migrate.py --status pour voir les migrations en attente. python3 migrate.py pour executer les migrations.

Analyse des couts

Suivi des couts LLM par provider, modele et route

a
${{ costTotals.total_cost_usd?.toFixed(4) || '0' }}
{{ formatCurrency(Math.round((costTotals.total_cost_usd || 0) * 561.5)) }} FCFA

Cout total

{{ formatNumber(costTotals.total_requests || 0) }}

Requetes totales

{{ formatNumber((costTotals.total_input_tokens || 0) + (costTotals.total_output_tokens || 0)) }}

Tokens totaux

${{ costTotals.total_requests > 0 ? (costTotals.total_cost_usd / costTotals.total_requests).toFixed(5) : '0' }}

Cout moyen / requete

{{ costMostUsedProvider }}

Provider le + utilise

{{ costMostExpensiveProvider }}

Provider le + cher

Evolution des couts par jour

Repartition par provider

Provider Modele Route Requetes {{ costProviderSort === 'requests' ? '▲' : costProviderSort === '-requests' ? '▼' : '' }} Tokens in Tokens out Cout USD {{ costProviderSort === 'cost' ? '▲' : costProviderSort === '-cost' ? '▼' : '' }} Cout FCFA Latence moy. Echecs
{{ p.provider }} {{ p.model?.split('/').pop() }} {{ p.route }} {{ formatNumber(p.total_requests) }} {{ formatNumber(p.total_input_tokens) }} {{ formatNumber(p.total_output_tokens) }} ${{ p.total_cost_usd?.toFixed(4) }} {{ formatCurrency(Math.round((p.total_cost_usd || 0) * 561.5)) }} {{ p.avg_latency_ms ? Math.round(p.avg_latency_ms) + 'ms' : '-' }} {{ p.api_failures || 0 }}
Aucune donnee pour cette periode

Detail quotidien

Date Provider Modele Route Requetes Succes Echecs Tokens in Tokens out Cout USD Cout FCFA Latence moy.
{{ rec.date }} {{ rec.provider }} {{ rec.model?.split('/').pop() }} {{ rec.route }} {{ rec.total_requests }} {{ rec.successes }} {{ rec.api_failures || 0 }} {{ formatNumber(rec.total_input_tokens) }} {{ formatNumber(rec.total_output_tokens) }} ${{ (rec.estimated_cost_usd || 0).toFixed(4) }} {{ formatCurrency(Math.round((rec.estimated_cost_usd || 0) * 561.5)) }} {{ rec.avg_latency_ms ? Math.round(rec.avg_latency_ms) + 'ms' : '-' }}
Aucune donnee pour cette periode

Taux de change : 1 USD = 561,50 FCFA. Les couts sont estimes a partir du pricing configure dans Settings LLM. Les donnees sont issues de l'index kyvshield_llm_stats.

Liste personnalisee

Entrees personnalisees verifiees lors du screening AML

Chargement...

Nom Date naiss. Nationalite Risque Raison Ajoute par Date Actif Actions
{{ entry.full_name || (entry.first_name + ' ' + entry.last_name) }} {{ entry.birth_date || '-' }} {{ entry.nationality || '-' }} {{ entry.risk_level }} {{ entry.reason }} {{ entry.added_by }} {{ entry.added_at ? new Date(entry.added_at).toLocaleDateString('fr-FR') : '-' }} {{ entry.is_active ? 'Oui' : 'Non' }}
{{ watchlistTotal }} entree(s) - Page {{ watchlistPage }}/{{ watchlistPages }}

Aucune entree dans la liste personnalisee

Ajoutez des personnes a surveiller lors du screening AML

{{ editWatchlistEntry ? 'Modifier l\'entree' : 'Nouvelle entree' }}

Verification AML

Screening AML/Sanctions manuel et historique

Screening manuel
{{ amlScreeningResult.status }} Risque: {{ amlScreeningResult.risk_level }} {{ amlScreeningResult.processing_time_ms }}ms {{ amlScreeningResult.total_matches }} correspondance(s)
Nom Score Sources Topics
{{ m.name }} {{ (m.score * 100).toFixed(0) }}% {{ (m.datasets || []).join(', ') }} {{ (m.topics || []).join(', ') }}
JSON brut
{{ JSON.stringify(amlScreeningResult, null, 2) }}
Historique des screenings
Nom Nationalite Statut Risque Matches Source Duree Date
{{ item.query?.full_name || '-' }} {{ item.query?.nationality || '-' }} {{ item.result?.status }} {{ item.result?.risk_level }} {{ item.result?.total_matches || 0 }} {{ item.source || 'standalone' }} {{ item.duration_ms }}ms {{ item.created_at ? new Date(item.created_at).toLocaleString('fr-FR') : '-' }}
{{ JSON.stringify(amlHistoryDetail, null, 2) }}
{{ amlHistoryTotal }} screening(s) - Page {{ amlHistoryPage }}/{{ amlHistoryPages }}

Aucun screening AML enregistre

Facturation

Consommation et couts par application

{{ formatCurrency(billingData.global_total) }} XOF
{{ selectedMonthData.usage.recto + selectedMonthData.usage.verso }}
Documents
{{ selectedMonthData.usage.liveness_sessions }}
Sessions
{{ formatCurrency(selectedAppBilling.monthly_fixed_fee) }}
Abonnement fixe
{{ formatCurrency(selectedMonthData.costs.total) }}
Operations {{ selectedMonthData.currency }}
{{ formatCurrency((selectedAppBilling?.monthly_fixed_fee || 0) + selectedMonthData.costs.total) }}
Total {{ selectedMonthData.currency }}
{{ selectedMonthData.payment_status === 'paid' ? 'Paye' : 'Impaye' }} Paye le {{ formatDate(selectedMonthData.paid_at) }}
Paiement confirme
Operation Utilise Inclus Depassement Prix unit. Cout
{{ row.label }} {{ row.used }} {{ row.included }} {{ row.overage }} {{ row.unitPrice }} XOF {{ formatCurrency(row.cost) }}
Abonnement fixe {{ formatCurrency(selectedAppBilling.monthly_fixed_fee) }}
Sous-total operations {{ formatCurrency(selectedMonthData.costs.total) }}
Total {{ formatCurrency((selectedAppBilling?.monthly_fixed_fee || 0) + selectedMonthData.costs.total) }} XOF

Detail journalier - {{ selectedBillingMonth }}

Historique mensuel

Aucune donnee de facturation

Identification

Identification faciale (1:N) et verification faciale (1:1)

Identification faciale (1:N) POST /api/v1/identify

Rechercher une personne parmi les identites KYC existantes a partir d'une photo de visage.

Glissez ou cliquez pour charger une photo

1 a 10, defaut 3

0.0 a 1.0, defaut 0.6

{{ idIdentifyResult.results_count > 0 ? idIdentifyResult.results_count + ' correspondance(s)' : 'Aucune correspondance' }} {{ idIdentifyResult.processing_time_ms }}ms
Nom Score Document N° Identite Pays
{{ m.full_name || '-' }} {{ (m.score * 100).toFixed(1) }}% {{ m.document_type || '-' }} {{ m.identifier_value || '-' }} {{ m.country || '-' }}
JSON brut
{{ JSON.stringify(idIdentifyResult, null, 2) }}
Verification faciale (1:1) POST /api/v1/verify/face

Comparer deux visages pour verifier s'il s'agit de la meme personne.

Visage de reference

Selfie ou photo

{{ fvResult.best_match?.is_match ? 'MATCH' : 'NO MATCH' }} {{ (fvResult.best_match.similarity_score * 100).toFixed(1) }}% {{ fvResult.processing_time_ms }}ms
JSON brut
{{ JSON.stringify(fvResult, null, 2) }}
Historique des recherches
Date Type App Resultats / Match Score Duree
{{ item.created_at ? new Date(item.created_at).toLocaleString('fr-FR') : '-' }} {{ item.type || (item.results_count != null ? 'identify' : 'face_verify') }} {{ item.app_id || '-' }} {{ (item.top_score * 100).toFixed(1) }}% {{ (item.similarity_score * 100).toFixed(1) }}% - {{ item.duration_ms }}ms
{{ idHistoryTotal }} recherche(s) - Page {{ idHistoryPage }}/{{ idHistoryPages }}

Aucune recherche enregistree

Detail de la recherche

Search ID

{{ idHistoryDetailItem.search_id }}

Type

{{ idHistoryDetailItem.type }}

App

{{ idHistoryDetailItem.app_id || '-' }}

Date

{{ idHistoryDetailItem.created_at ? new Date(idHistoryDetailItem.created_at).toLocaleString('fr-FR') : '-' }}

Duree

{{ idHistoryDetailItem.duration_ms }}ms

Source

{{ idHistoryDetailItem.source || '-' }}

Resultats

{{ idHistoryDetailItem.results_count || 0 }}

Top Score

{{ idHistoryDetailItem.top_score ? (idHistoryDetailItem.top_score * 100).toFixed(1) + '%' : '-' }}

Match

{{ idHistoryDetailItem.is_match ? 'MATCH' : 'NO MATCH' }}

Similarite

{{ idHistoryDetailItem.similarity_score != null ? (idHistoryDetailItem.similarity_score * 100).toFixed(1) + '%' : '-' }}

Correspondances
Nom Score Document N° Identite Pays
{{ m.full_name || '-' }} {{ (m.score * 100).toFixed(1) }}% {{ m.document_type || '-' }} {{ m.identifier_value || '-' }} {{ m.country || '-' }}
Detection Model

{{ idHistoryDetailItem.detection_model }}

Recognition Model

{{ idHistoryDetailItem.recognition_model }}

Images

Photo soumise

Image cible

Image source

JSON brut
{{ JSON.stringify(Object.fromEntries(Object.entries(idHistoryDetailItem).filter(([k]) => !k.endsWith('_image'))), null, 2) }}

Nouvel Utilisateur

Nouvelle Application

Configuration personnalisee

0 = pas de limite specifique

{{ newApp.allowed_document_types.length }} doc(s) selectionne(s)

Tous autorises

Nouvelle Cle API

Cle creee avec succes — Copiez-la maintenant, elle ne sera plus affichee

{{ generatedKey }}

{{ identityDetail.identifier_value }}

{{ identityDetail.document_type }} Cree par {{ identityDetail.created_by_app }} le {{ formatDate(identityDetail.created_at) }}

Selfie

Recto

Verso

Photo extraite

Attributs biometriques

Pays
{{ identityDetail.country }}
Age estime
{{ identityDetail.estimated_age }} ans
Genre predit
{{ identityDetail.predicted_gender === 'M' ? 'Masculin' : 'Feminin' }} ({{ (identityDetail.gender_confidence * 100).toFixed(0) }}%)
Face Embedding
{{ Array.isArray(identityDetail.face_embedding) ? identityDetail.face_embedding.length : '?' }}d vecteur [{{ Array.isArray(identityDetail.face_embedding) ? identityDetail.face_embedding.slice(0, 4).map(v => v.toFixed(3)).join(', ') + ', ...' : '?' }}]

Recto

{{ f.label }}
{{ f.value }}
{{ f.raw_value }}

Verso

{{ f.label }}
{{ f.value }}
{{ f.raw_value }}

Historique des soumissions ({{ identitySubTotal }})

App Session Face Match Date
{{ sub.app_id }} {{ sub.session_id }} {{ sub.face_match_score.toFixed(1) }}% - {{ formatDate(sub.submitted_at) }}
Premiere soumission (creation)
Page {{ identitySubPage }} / {{ identitySubPages }}

Detail de la session

Session ID

{{ sessionDetail.session_id }}

Flow

{{ sessionDetail.status }}

Resultat

{{ sessionDetail.result?.status || sessionDetail.final_result?.overall_status || '-' }}

App

{{ sessionDetail.app_id || '-' }}

KYC ID

{{ sessionDetail.kyc_identifier }}

Duree

{{ sessionDetail.total_duration_ms ? (sessionDetail.total_duration_ms / 1000).toFixed(1) + 's' : '-' }}

Platform

{{ sessionDetail.client?.platform || '-' }}

Date

{{ formatDate(sessionDetail.created_at) }}

Document

{{ sessionDetail.document_type }}-

Steps

{{ sessionDetail.steps_order?.join(', ') || '-' }}

TTL

{{ sessionTTL(sessionDetail.created_at) }}

Coût LLM total

${{ sessionDetail.total_cost_usd.toFixed(4) }} ({{ (sessionDetail.total_cost_usd * 561.50).toFixed(0) }} FCFA)

LLM Provider

{{ sessionMainProvider }}

Etapes

{{ idx + 1 }} {{ step.step_type }} {{ step.duration_ms ? (step.duration_ms/1000).toFixed(1) + 's' : '' }} {{ step.result.status }} {{ step.status === 'pending' ? 'Non execute' : step.status }}

Images

#{{ frame.frame_id }}
Score: {{ (step.result.score * 100).toFixed(0) }}% Live: {{ step.result.is_live ? 'Oui' : 'Non' }} Fraude: {{ step.result.fraud_indicators.join(', ') }}
Provider: {{ step.llm_call.provider }} Modele: {{ step.llm_call.model }} LLM: {{ (step.llm_call.duration_ms/1000).toFixed(1) }}s Tokens in: {{ step.llm_call.input_tokens }} Tokens out: {{ step.llm_call.output_tokens }} Coût: ${{ step.llm_call.cost_usd.toFixed(4) }} ({{ (step.llm_call.cost_usd * 561.50).toFixed(1) }} F)

Donnees extraites ({{ step.extraction.length }})

{{ field.label || field.key }}: {{ field.value || '-' }}

Resultat final

{{ JSON.stringify(sessionDetail.final_result, null, 2) }}

AML / Sanctions

{{ sessionDetail.aml_screening.status }} {{ sessionDetail.aml_screening.risk_level }}
Nom: {{ sessionDetail.aml_screening.query_name }} Naissance: {{ sessionDetail.aml_screening.query_birth_date }} Pays: {{ sessionDetail.aml_screening.query_country }} Provider: {{ sessionDetail.aml_screening.provider }} Duree: {{ sessionDetail.aml_screening.duration_ms }}ms Matches: {{ sessionDetail.aml_screening.total_matches }}
Erreur: {{ sessionDetail.aml_screening.error }}
Nom Score Datasets Topics Pays
{{ m.name }} {{ (m.score * 100).toFixed(0) }}% {{ (m.datasets || []).join(', ') }} {{ (m.topics || []).join(', ') }} {{ (m.countries || []).join(', ') }}

Modifier l'utilisateur

Generer une cle temporaire

Cle temporaire generee — Copiez-la maintenant

{{ generatedTempKey }}
{{ toast.message }}