Créer un pivot financier structuré depuis les preuves et observations bancaires #110
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Labfy Investigation dispose déjà de plusieurs briques historiques liées aux
coordonnées bancaires :
bank_proposal;iban_analyzer;rib_ocr;Ces composants ont été développés à différentes étapes du projet et peuvent
faire double emploi ou ne plus correspondre au modèle de traçabilité actuel.
Le besoin opérationnel est désormais plus large : une preuve peut contenir
plusieurs coordonnées bancaires, plusieurs titulaires déclarés et plusieurs
transactions observées. Une même coordonnée peut également apparaître dans
plusieurs preuves.
Le logiciel doit permettre de construire un pivot financier traçable sans
confondre :
Aucune de ces associations ne doit être déduite automatiquement.
Objectif
Créer un pivot financier structuré, centré sur les preuves, permettant :
incomplètes ou ambiguës ;
propriétaire réel ;
créditeur ;
transaction et la preuve ;
Audit préalable obligatoire
Avant toute modification, inventorier intégralement :
include/core/bank_proposal.hsrc/core/bank_proposal.cinclude/core/iban_analyzer.hsrc/core/iban_analyzer.cinclude/core/rib_ocr.hsrc/core/rib_ocr.capplication.c;Produire une matrice :
Les validateurs bas niveau corrects, notamment MOD-97 et validation BIC,
peuvent être conservés.
À la fin du ticket, il ne doit pas rester deux API concurrentes accomplissant
la même fonction ni deux parcours GTK différents pour promouvoir un IBAN.
Aucune suppression ne doit intervenir avant :
Principes métier
Observation bancaire
Une observation bancaire correspond à ce qui est réellement visible ou
extractible dans une preuve.
Elle doit pouvoir conserver séparément :
Une observation invalide ne doit pas être détruite.
Exemple : un IBAN incomplet ou comportant un caractère douteux reste une
observation exploitable avec un statut
invalid,ambiguousouunverifiable.Validation technique
Prévoir des états distincts :
validinvalidambiguousunverifiableLa validation technique ne constitue ni une confirmation du titulaire, ni une
preuve d’utilisation du compte, ni une preuve d’identité.
Décision humaine
Prévoir des états de traitement distincts :
proposedconfirmedrejectedLe passage à
confirmedexige une action explicite.Le rejet ne supprime pas l’observation brute.
Compte bancaire structuré
Un compte bancaire structuré ne peut être créé qu’à partir :
Le compte doit être intégré au système d’entités canonique du graphe, avec une
extension métier dédiée plutôt qu’un second système d’entités parallèle.
Prévoir au minimum :
entity_idcanonique ;L’IBAN normalisé doit être unique dans une enquête pour les comptes confirmés.
Lorsqu’il existe déjà, l’interface propose sa réutilisation sans l’imposer.
Titulaire déclaré
Le nom voisin d’un IBAN dans une capture ou un document constitue un
titulaire déclaré, pas une identité vérifiée.
L’utilisateur doit pouvoir :
Le logiciel ne doit jamais fusionner deux personnes parce que leurs noms sont
identiques.
Le logiciel ne doit jamais attribuer automatiquement le compte à
Auteur présumé.Transactions financières observées
Permettre de représenter une transaction observée dans une preuve, notamment
un virement affiché par une application bancaire.
Champs attendus, selon disponibilité :
Une transaction affichée comme « envoyée », « exécutée » ou « reçue » doit
être enregistrée comme statut observé dans la preuve, sans transformer
l’affichage en certification bancaire indépendante.
Utiliser le système d’événements ou de chronologie canonique lorsqu’il est
compatible. Ne pas créer un second moteur de chronologie.
Extraction depuis les preuves
Prendre en charge au minimum :
Une preuve doit pouvoir produire zéro, une ou plusieurs propositions.
Ne jamais limiter le résultat au premier IBAN trouvé.
L’association automatique par proximité entre un IBAN, un BIC et un nom
constitue uniquement une proposition modifiable.
Chaque bloc proposé doit pouvoir être séparé, fusionné ou corrigé par
l’utilisateur avant confirmation.
Interface GTK
Ajouter depuis la fiche de preuve une action claire :
Analyser les données bancairesL’interface doit proposer :
Aucune case de création d’entité, relation, personne ou transaction ne doit
être cochée par défaut.
Les opérations longues doivent être asynchrones, annulables et protégées
contre :
Consultation
Depuis la fiche d’une preuve, afficher :
Depuis la fiche d’un compte, afficher :
Depuis la fiche d’une personne, afficher uniquement les liens factuels
explicitement créés.
Depuis une transaction, permettre de remonter aux comptes, participants
déclarés et preuves.
Provenance et intégrité
Pour chaque donnée confirmée, conserver :
human;Les valeurs brutes doivent être append-only.
Les corrections et confirmations ne doivent jamais écraser la valeur brute.
Aucun fichier original ne doit être modifié.
Transactions SQLite
La confirmation finale doit être atomique pour :
En cas d’échec :
Migration
Le schéma courant étant V20, créer une migration V21 si le modèle nécessite de
nouvelles tables.
Vérifier :
database/schema_v21.sql;database/schema_current.sqlautonome ;Les observations bancaires historiques ne doivent pas être supprimées.
Lorsqu’une migration automatique vers le nouveau modèle est sûre, la réaliser.
Lorsqu’elle est ambiguë, conserver les données historiques lisibles avec une
origine
legacy, sans créer automatiquement un compte ou une relation.Suppression de l’ancien socle
Après mise en place du nouveau parcours :
La suppression porte sur le code obsolète, jamais sur les preuves ou
observations historiques.
Automatismes interdits
Ne jamais créer automatiquement :
Les propositions automatiques doivent rester clairement identifiées comme
propositions.
Tests obligatoires
Utiliser exclusivement des fixtures
SPECIMENsynthétiques.Couvrir au minimum :
Les tests GTK finaux doivent être exécutés sous Wayland/Sway réel avec :
Aucun test GTK final ne doit être SKIP.
Exécuter également une matrice ASan/UBSan ciblée avec les binaires sous
/tmp.Ne pas revendiquer LeakSanitizer lorsqu’il est désactivé.
Contraintes d’architecture
make -j8pour les compilations parallélisables ;.csupérieur à 2 000 lignes ;application.c;Sécurité des données de développement
Codex et les agents locaux travaillent uniquement avec :
/tmp.Ils ne doivent jamais consulter :
Enquete.sqliteréel ;enquête test;La validation sur la copie de l’enquête réelle sera effectuée manuellement par
le propriétaire du projet après validation des tests synthétiques.
Documentation
Mettre à jour au minimum :
README.mdCHANGELOG.mddocs/ARCHITECTURE.mddocs/DEVELOPMENT.mddocs/ROADMAP.mddocs/database/DATABASE_ARCHITECTURE.mddocs/database/SCHEMA_AUDIT_CURRENT.mdDocumenter :
Critères d’acceptation
Le ticket est terminé lorsque :
make check-source-sizepasse ;Validation finale
Exécuter :
Ne créer aucun commit et ne pousser aucune modification avant validation
manuelle.