=== H0 colonnes match === [1] Field=rowid | Type=int | Null=NO | Key=PRI | Default=NULL | Extra=auto_increment [2] Field=entity | Type=int | Null=NO | Key=MUL | Default=1 | Extra= [3] Field=fk_intake | Type=int | Null=YES | Key=MUL | Default=NULL | Extra= [4] Field=fk_bank_account | Type=int | Null=YES | Key=MUL | Default=NULL | Extra= [5] Field=bank_line_date | Type=date | Null=YES | Key= | Default=NULL | Extra= [6] Field=bank_line_label | Type=varchar(500) | Null=YES | Key= | Default=NULL | Extra= [7] Field=bank_line_amount | Type=decimal(12,2) | Null=YES | Key= | Default=NULL | Extra= [8] Field=bank_line_ref | Type=varchar(100) | Null=YES | Key= | Default=NULL | Extra= [9] Field=fk_bank_line | Type=int | Null=YES | Key=MUL | Default=NULL | Extra= [10] Field=target_type | Type=varchar(30) | Null=YES | Key=MUL | Default=NULL | Extra= [11] Field=fk_target | Type=int | Null=YES | Key= | Default=NULL | Extra= [12] Field=target_label | Type=varchar(255) | Null=YES | Key= | Default=NULL | Extra= [13] Field=grouped_targets | Type=text | Null=YES | Key= | Default=NULL | Extra= [14] Field=match_score | Type=decimal(5,4) | Null=YES | Key= | Default=NULL | Extra= [15] Field=match_reason | Type=text | Null=YES | Key= | Default=NULL | Extra= [16] Field=is_partial | Type=tinyint(1) | Null=YES | Key= | Default=0 | Extra= [17] Field=suggested_amount | Type=decimal(12,2) | Null=YES | Key= | Default=NULL | Extra= [18] Field=status | Type=varchar(20) | Null=NO | Key= | Default=proposed | Extra= [19] Field=fk_user_decided | Type=int | Null=YES | Key= | Default=NULL | Extra= [20] Field=date_decided | Type=datetime | Null=YES | Key= | Default=NULL | Extra= [21] Field=date_creation | Type=datetime | Null=YES | Key= | Default=NULL | Extra= [22] Field=tms | Type=timestamp | Null=NO | Key= | Default=CURRENT_TIMESTAMP | Extra=DEFAULT_GENERATED on update CURRENT_TIMESTAMP [23] Field=fk_payment | Type=int | Null=YES | Key= | Default=NULL | Extra= === H1 match sur bank 126/453 === ERREUR: Unknown column 'fk_bank' in 'where clause' === H2 match orphelins (bank disparue) === ERREUR: Unknown column 'm.fk_bank' in 'field list' === H3 nb match === [1] nb=99 === H4 colonnes log === [1] Field=rowid | Type=int | Null=NO | Key=PRI | Default=NULL | Extra=auto_increment [2] Field=entity | Type=int | Null=NO | Key=MUL | Default=1 | Extra= [3] Field=date_call | Type=datetime | Null=NO | Key= | Default=NULL | Extra= [4] Field=operation | Type=varchar(50) | Null=NO | Key= | Default=NULL | Extra= [5] Field=fk_intake | Type=int | Null=YES | Key=MUL | Default=NULL | Extra= [6] Field=related_object | Type=varchar(50) | Null=YES | Key= | Default=NULL | Extra= [7] Field=related_id | Type=int | Null=YES | Key= | Default=NULL | Extra= [8] Field=model | Type=varchar(50) | Null=YES | Key= | Default=NULL | Extra= [9] Field=prompt_excerpt | Type=text | Null=YES | Key= | Default=NULL | Extra= [10] Field=response_excerpt | Type=text | Null=YES | Key= | Default=NULL | Extra= [11] Field=tokens_input | Type=int | Null=YES | Key= | Default=0 | Extra= [12] Field=tokens_output | Type=int | Null=YES | Key= | Default=0 | Extra= [13] Field=cost_eur | Type=decimal(8,4) | Null=YES | Key= | Default=0.0000 | Extra= [14] Field=duration_ms | Type=int | Null=YES | Key= | Default=NULL | Extra= [15] Field=status | Type=varchar(20) | Null=YES | Key=MUL | Default=NULL | Extra= [16] Field=error_message | Type=text | Null=YES | Key= | Default=NULL | Extra= [17] Field=fk_user | Type=int | Null=YES | Key= | Default=NULL | Extra= === H5 derniers logs === [1] rowid=535 | entity=1 | date_call=2026-10-21 18:15:15 | operation=classify_document | fk_intake=435 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[SYS] Tu es un classifieur de documents comptables. Tu peux voir le document ci-dessous (PDF/image scanné(e) ou CSV textuel). Identifie le type de document en examinant visuellement et/ou le contenu textuel. Utilise aussi le nom du fichier comme indice. Retourne UNIQUEMENT un bloc ```json ... ``` avec : { "type": "invoice_supplier|bl_supplier|purchase_order|quote_supplier|bank_csv|invoice_customer|other", "confidence": 0.95, "reason": "courte justification (max 80 car.)" } Dé | response_excerpt=```json { "type": "other", "confidence": 0.98, "reason": "Compte rendu de réunion de chantier (CR n°2) avec ordres de travail, planning et listes de présents. Pas de facture, BL, BC, devis ou extrait bancaire." } ``` | tokens_input=12453 | tokens_output=87 | cost_eur=0.0119 | duration_ms=1925 | status=ok | error_message=NULL | fk_user=NULL [2] rowid=534 | entity=1 | date_call=2026-10-21 18:15:13 | operation=classify_document | fk_intake=434 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[SYS] Tu es un classifieur de documents comptables. Tu peux voir le document ci-dessous (PDF/image scanné(e) ou CSV textuel). Identifie le type de document en examinant visuellement et/ou le contenu textuel. Utilise aussi le nom du fichier comme indice. Retourne UNIQUEMENT un bloc ```json ... ``` avec : { "type": "invoice_supplier|bl_supplier|purchase_order|quote_supplier|bank_csv|invoice_customer|other", "confidence": 0.95, "reason": "courte justification (max 80 car.)" } Dé | response_excerpt=```json { "type": "other", "confidence": 0.95, "reason": "CRCT (Compte Rendu de Contrôle Technique) - rapport de contrôle technique de chantier par Bureau Veritas, pas une pièce comptable" } ``` | tokens_input=5005 | tokens_output=77 | cost_eur=0.0050 | duration_ms=3158 | status=ok | error_message=NULL | fk_user=NULL [3] rowid=533 | entity=1 | date_call=2026-10-21 17:45:48 | operation=extract_invoice | fk_intake=433 | related_object=NULL | related_id=NULL | model=claude-sonnet-4-6 | prompt_excerpt=[SYS] Tu es un assistant comptable expert. On te fournit le texte OCRisé d'une facture fournisseur française (TVA française, format européen). Extrais STRICTEMENT les données suivantes en JSON valide. Si une information est absente ou illisible, mets `null`. Ne jamais inventer. Retourne UNIQUEMENT un bloc ```json ... ``` (aucun autre texte avant ou après). Schéma attendu : { "extraction_schema": 2, "supplier": { "name": "raison sociale", "siret": "14 chiffres ou null", "vat_nu | response_excerpt=```json { "extraction_schema": 2, "supplier": { "name": "SAS Tekni-pli", "siret": "92959174100012", "vat_number": "FR15929591741", "iban": "FR7616606050118489487333640", "email": "contact@tekni-pli.com", "address": "15 Delle du Poirier, 14320 SAINT ANDRE SUR ORNE" }, "invoice": { "ref": "FA2608-0352", "date": "2026-08-31", "due_date": "2026-09-01", "currency": "EUR", "total_ht": 2428.89, "total_tva": 485.78, "total_ttc": 2914.67, "p | tokens_input=14793 | tokens_output=993 | cost_eur=0.0549 | duration_ms=21162 | status=ok | error_message=NULL | fk_user=NULL [4] rowid=532 | entity=1 | date_call=2026-10-21 17:45:27 | operation=classify_document | fk_intake=433 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[SYS] Tu es un classifieur de documents comptables. Tu peux voir le document ci-dessous (PDF/image scanné(e) ou CSV textuel). Identifie le type de document en examinant visuellement et/ou le contenu textuel. Utilise aussi le nom du fichier comme indice. Retourne UNIQUEMENT un bloc ```json ... ``` avec : { "type": "invoice_supplier|bl_supplier|purchase_order|quote_supplier|bank_csv|invoice_customer|other", "confidence": 0.95, "reason": "courte justification (max 80 car.)" } Dé | response_excerpt=```json { "type": "invoice_supplier", "confidence": 0.98, "reason": "Document contient 3 factures (FA2608-0352, FA2608-0353, FA2610-0390) émises par SAS Tekni-pli à SARL MAC avec numéros, dates, totaux HT/TTC, TVA et n° TVA (FR15929591741)." } ``` | tokens_input=15473 | tokens_output=113 | cost_eur=0.0149 | duration_ms=2942 | status=ok | error_message=NULL | fk_user=NULL [5] rowid=531 | entity=1 | date_call=2026-10-21 17:00:31 | operation=extract_purchase_order | fk_intake=432 | related_object=NULL | related_id=NULL | model=claude-sonnet-4-6 | prompt_excerpt=[SYS] Tu es un assistant comptable expert. On te fournit un BON DE COMMANDE fournisseur ou sa confirmation : notre bon de commande envoyé au fournisseur, OU l'ARC (accusé de réception de commande) / la confirmation de commande renvoyé(e) par le fournisseur, OU un devis signé « bon pour accord » qui vaut commande. Extrais STRICTEMENT les données suivantes en JSON valide. Si une information est absente ou illisible, mets `null`. Ne jamais inventer. Retourne UNIQUEMENT un bloc ```json ... ``` (au | response_excerpt=```json { "extraction_schema": 2, "supplier": { "name": "ArcelorMittal Distribution Solutions France", "siret": null, "vat_number": "FR39469500961", "iban": "FR7630004005150002230349607", "email": "melanie.vasnier@arcelormittal.com", "address": "9 et 11 Delle du Poirier, ZAC Porte de la Suisse Normande, 14320 SAINT ANDRE SUR ORNE, France" }, "invoice": { "ref": "5471652", "date": "2026-10-21", "due_date": "2026-10-22", "currency": "EUR", "total | tokens_input=2589 | tokens_output=763 | cost_eur=0.0178 | duration_ms=15228 | status=ok | error_message=NULL | fk_user=NULL [6] rowid=530 | entity=1 | date_call=2026-10-21 17:00:16 | operation=classify_document | fk_intake=432 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[SYS] Tu es un classifieur de documents comptables. Tu peux voir le document ci-dessous (PDF/image scanné(e) ou CSV textuel). Identifie le type de document en examinant visuellement et/ou le contenu textuel. Utilise aussi le nom du fichier comme indice. Retourne UNIQUEMENT un bloc ```json ... ``` avec : { "type": "invoice_supplier|bl_supplier|purchase_order|quote_supplier|bank_csv|invoice_customer|other", "confidence": 0.95, "reason": "courte justification (max 80 car.)" } Dé | response_excerpt=```json { "type": "purchase_order", "confidence": 0.98, "reason": "Document intitulé 'Confirmation de commande', n° 5471652, date 21.10.2026, date de livraison 22.10.2026, quantités et prix. C'est une confirmation de commande fournisseur (ARC)." } ``` | tokens_input=3275 | tokens_output=101 | cost_eur=0.0035 | duration_ms=1940 | status=ok | error_message=NULL | fk_user=NULL [7] rowid=529 | entity=1 | date_call=2026-10-21 13:45:41 | operation=match_bank_line | fk_intake=0 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[user] Tu es un expert rapprochement bancaire français. On te donne UNE ligne d'extrait bancaire et une liste de factures candidates ouvertes. Propose le meilleur appariement. Retourne UNIQUEMENT un bloc ```json ... ``` : { "best_match": { "target_type": "facture_fourn|facture_client|salaire|urssaf|tva|virement_interne|frais_bancaires|prelevement_recurrent|inconnu", "target_id": 12345, "score": 0.92, "reason": "courte justification (montant exact + libellé contient n | response_excerpt=```json { "best_match": { "target_type": "inconnu", "target_id": 0, "score": 0.35, "reason": "Montant 264.48 EUR ne correspond à aucune facture candidate (toutes > 830 EUR). Libellé mentionne 'SWAGELOK PARIS' et 'TEKNIPLI' mais aucune facture de ces fournisseurs en liste. Probablement acompte ou facture non encore reçue.", "is_partial": false, "suggested_amount": null }, "alternatives": [ { "target_type": "facture_fourn", "target_id": 506, "sco | tokens_input=941 | tokens_output=270 | cost_eur=0.0021 | duration_ms=2986 | status=ok | error_message=NULL | fk_user=NULL [8] rowid=528 | entity=1 | date_call=2026-10-21 12:00:19 | operation=classify_document | fk_intake=431 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[SYS] Tu es un classifieur de documents comptables. Tu peux voir le document ci-dessous (PDF/image scanné(e) ou CSV textuel). Identifie le type de document en examinant visuellement et/ou le contenu textuel. Utilise aussi le nom du fichier comme indice. Retourne UNIQUEMENT un bloc ```json ... ``` avec : { "type": "invoice_supplier|bl_supplier|purchase_order|quote_supplier|bank_csv|invoice_customer|other", "confidence": 0.95, "reason": "courte justification (max 80 car.)" } Dé | response_excerpt=```json { "type": "other", "confidence": 0.98, "reason": "Document non comptable : photo de chantier avec croquis technique manuscrit d'installation. Aucun élément de facture, BL, commande ou devis." } ``` | tokens_input=2305 | tokens_output=75 | cost_eur=0.0025 | duration_ms=1799 | status=ok | error_message=NULL | fk_user=NULL [9] rowid=527 | entity=1 | date_call=2026-10-21 12:00:17 | operation=classify_document | fk_intake=430 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[SYS] Tu es un classifieur de documents comptables. Tu peux voir le document ci-dessous (PDF/image scanné(e) ou CSV textuel). Identifie le type de document en examinant visuellement et/ou le contenu textuel. Utilise aussi le nom du fichier comme indice. Retourne UNIQUEMENT un bloc ```json ... ``` avec : { "type": "invoice_supplier|bl_supplier|purchase_order|quote_supplier|bank_csv|invoice_customer|other", "confidence": 0.95, "reason": "courte justification (max 80 car.)" } Dé | response_excerpt=```json { "type": "other", "confidence": 0.98, "reason": "Rapport d'expertise technique bâtiment (AFF22857-2606-PT) analysant des défauts de construction (gouttière). Document non comptable." } ``` | tokens_input=28393 | tokens_output=74 | cost_eur=0.0266 | duration_ms=2802 | status=ok | error_message=NULL | fk_user=NULL [10] rowid=526 | entity=1 | date_call=2026-10-21 12:00:15 | operation=classify_document | fk_intake=429 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[SYS] Tu es un classifieur de documents comptables. Tu peux voir le document ci-dessous (PDF/image scanné(e) ou CSV textuel). Identifie le type de document en examinant visuellement et/ou le contenu textuel. Utilise aussi le nom du fichier comme indice. Retourne UNIQUEMENT un bloc ```json ... ``` avec : { "type": "invoice_supplier|bl_supplier|purchase_order|quote_supplier|bank_csv|invoice_customer|other", "confidence": 0.95, "reason": "courte justification (max 80 car.)" } Dé | response_excerpt=```json { "type": "other", "confidence": 0.98, "reason": "Document d'architecture/plans techniques (PCMI) pour projet de construction maison, pas pièce comptable" } ``` | tokens_input=9923 | tokens_output=61 | cost_eur=0.0095 | duration_ms=2201 | status=ok | error_message=NULL | fk_user=NULL [11] rowid=525 | entity=1 | date_call=2026-10-21 11:15:27 | operation=extract_invoice | fk_intake=428 | related_object=NULL | related_id=NULL | model=claude-sonnet-4-6 | prompt_excerpt=[SYS] Tu es un assistant comptable expert. On te fournit le texte OCRisé d'une facture fournisseur française (TVA française, format européen). Extrais STRICTEMENT les données suivantes en JSON valide. Si une information est absente ou illisible, mets `null`. Ne jamais inventer. Retourne UNIQUEMENT un bloc ```json ... ``` (aucun autre texte avant ou après). Schéma attendu : { "extraction_schema": 2, "supplier": { "name": "raison sociale", "siret": "14 chiffres ou null", "vat_nu | response_excerpt=```json { "extraction_schema": 2, "supplier": { "name": "PARIS FLUIDES SYSTEMES TECHNOLOGIES (Swagelok Paris)", "siret": "34325551900047", "vat_number": "FR19343255519", "iban": "FR7610096185050002281760106", "email": "commandes@swagelokparis.fr", "address": "24 Avenue de la Baltique, 91140 Villebon-sur-Yvette" }, "invoice": { "ref": "2069147", "date": "2026-10-21", "due_date": null, "currency": "EUR", "total_ht": 220.40, "total_tva": 44.08 | tokens_input=2459 | tokens_output=920 | cost_eur=0.0196 | duration_ms=17151 | status=ok | error_message=NULL | fk_user=NULL [12] rowid=524 | entity=1 | date_call=2026-10-21 11:15:09 | operation=classify_document | fk_intake=428 | related_object=NULL | related_id=NULL | model=claude-haiku-4-5-20251001 | prompt_excerpt=[SYS] Tu es un classifieur de documents comptables. Tu peux voir le document ci-dessous (PDF/image scanné(e) ou CSV textuel). Identifie le type de document en examinant visuellement et/ou le contenu textuel. Utilise aussi le nom du fichier comme indice. Retourne UNIQUEMENT un bloc ```json ... ``` avec : { "type": "invoice_supplier|bl_supplier|purchase_order|quote_supplier|bank_csv|invoice_customer|other", "confidence": 0.95, "reason": "courte justification (max 80 car.)" } Dé | response_excerpt=```json { "type": "quote_supplier", "confidence": 0.85, "reason": "Facture pro forma de Swagelok Paris avec n° 2069147, montant TTC 264,48€, conditions de paiement à la commande sur proforma, pas encore commandé/facturisé" } ``` | tokens_input=3139 | tokens_output=90 | cost_eur=0.0033 | duration_ms=2087 | status=ok | error_message=NULL | fk_user=NULL === H6 colonnes ventil_log === [1] Field=rowid | Type=int | Null=NO | Key=PRI | Default=NULL | Extra=auto_increment [2] Field=entity | Type=int | Null=NO | Key=MUL | Default=1 | Extra= [3] Field=sens | Type=varchar(6) | Null=NO | Key= | Default=NULL | Extra= [4] Field=fk_ligne | Type=int | Null=NO | Key= | Default=NULL | Extra= [5] Field=ancien_code | Type=int | Null=NO | Key= | Default=0 | Extra= [6] Field=nouveau_code | Type=int | Null=NO | Key= | Default=0 | Extra= [7] Field=compte | Type=varchar(20) | Null=YES | Key= | Default=NULL | Extra= [8] Field=fk_user | Type=int | Null=YES | Key= | Default=NULL | Extra= [9] Field=date_creation | Type=datetime | Null=YES | Key= | Default=NULL | Extra= === H7 ventil_log 126/453 === ERREUR: Unknown column 'fk_bank' in 'where clause' === H8 ventil_log orphelins === ERREUR: Unknown column 'v.fk_bank' in 'field list' === H9 colonnes intake === [1] Field=rowid | Type=int | Null=NO | Key=PRI | Default=NULL | Extra=auto_increment [2] Field=entity | Type=int | Null=NO | Key=MUL | Default=1 | Extra= [3] Field=filename | Type=varchar(255) | Null=NO | Key= | Default=NULL | Extra= [4] Field=file_path | Type=varchar(500) | Null=NO | Key= | Default=NULL | Extra= [5] Field=file_hash | Type=varchar(64) | Null=NO | Key= | Default=NULL | Extra= [6] Field=file_size | Type=int | Null=YES | Key= | Default=NULL | Extra= [7] Field=mime_type | Type=varchar(100) | Null=YES | Key= | Default=NULL | Extra= [8] Field=doc_type | Type=varchar(30) | Null=YES | Key= | Default=NULL | Extra= [9] Field=confidence | Type=decimal(5,4) | Null=YES | Key= | Default=NULL | Extra= [10] Field=fk_target_type | Type=varchar(50) | Null=YES | Key= | Default=NULL | Extra= [11] Field=fk_target_id | Type=int | Null=YES | Key= | Default=NULL | Extra= [12] Field=status | Type=varchar(20) | Null=NO | Key= | Default=new | Extra= [13] Field=error_message | Type=text | Null=YES | Key= | Default=NULL | Extra= [14] Field=extracted_data | Type=longtext | Null=YES | Key= | Default=NULL | Extra= [15] Field=tokens_input | Type=int | Null=YES | Key= | Default=0 | Extra= [16] Field=tokens_output | Type=int | Null=YES | Key= | Default=0 | Extra= [17] Field=api_cost_eur | Type=decimal(8,4) | Null=YES | Key= | Default=0.0000 | Extra= [18] Field=date_intake | Type=datetime | Null=YES | Key=MUL | Default=NULL | Extra= [19] Field=date_processed | Type=datetime | Null=YES | Key= | Default=NULL | Extra= [20] Field=date_validated | Type=datetime | Null=YES | Key= | Default=NULL | Extra= [21] Field=fk_user_validate | Type=int | Null=YES | Key= | Default=NULL | Extra= [22] Field=tms | Type=timestamp | Null=NO | Key= | Default=CURRENT_TIMESTAMP | Extra=DEFAULT_GENERATED on update CURRENT_TIMESTAMP === H10 intake INPI === ERREUR: Unknown column 'statut' in 'field list'