Module Lettrage

Réconciliation de transactions bancaires contre les données contrats/factures — Ekwateur SA + PRO

Statut principal
Non lettrées
Transactions sans correspondance
Statut secondaire
Partielles
Correspondance incomplète (restant > 0)
Objectif
Lettrées
Confirmé par l'utilisateur
Entités
SA + PRO
Segmentation par banque mappée

Qu'est-ce que le lettrage ?

Le lettrage (en anglais "reconciliation" ou "matching") est le processus de rapprochement entre des transactions bancaires importées depuis un CSV et les données contractuelles/factures d'Ekwateur.

Chaque ligne importée représente un mouvement bancaire (débit ou crédit). L'équipe comptable doit confirmer que chaque transaction a bien été traitée (lettrée) ou la marquer comme non-lettrable, exclue, archivée.

La distinction SA / PRO est déterminée par la banque de la transaction, mappée dans l'administration.

Architecture technique

CoucheTechnologieRôle
BackendNestJS 11Controller + Service Lettrage
QueueBullMQImport CSV asynchrone
BDDPostgreSQL + Prisma 7Stockage lignes, imports, règles, prefs
FrontendReact 19 + TypeScriptTable virtuelle, filtres, dashboard
PermissionsRBAC customGranularité par action (voir/créer/modifier/supprimer)

Fichiers clés

apps/api/src/lettrage/
├── lettrage.controller.ts        ← 35 endpoints REST
├── lettrage.service.ts           ← Logique métier (500+ lignes)
├── lettrage-import.processor.ts  ← Processeur BullMQ CSV (400+ lignes)
└── lettrage.module.ts            ← Module NestJS

apps/web/src/
├── pages/
│   ├── LettragePage.tsx          ← Interface principale de traitement
│   ├── LettageDashboardPage.tsx  ← Dashboard 11 sections
│   └── LettrageHistoriquePage.tsx ← Timeline des événements
├── hooks/useLettrage.ts          ← 15+ hooks React Query
└── admin/
    ├── LettrageAdminTab.tsx      ← Config mapping/banques/colonnes
    ├── LettrageSeuilsTab.tsx     ← Seuils alertes
    └── ReglesExclusionTab.tsx    ← Constructeur de règles

Concepts & Terminologie

Vocabulaire métier et équivalences code/UI

Terme UIChamp BDDTypeSignification
Non lettré statutLettrage = 'non_lettre' Statut Transaction importée, pas encore traitée par l'équipe
Partiel statutLettrage = 'PARTIAL' Statut Correspondance partielle — le champ restant est > 0
Lettré traite = true Booléen Confirmé manuellement par un utilisateur. Historiquement "traité" dans le code
Exclue statutLettrage = 'exclue' Statut Ignorée par règle automatique ou action manuelle. Cachée par défaut
Archivée statutLettrage = 'archivee' Statut Clôturée, réouvrable si nécessaire
Non lettrable nonLettrable = true Flag Marquée comme impossible à lettrer (ne change pas le statut)
Réouverte reouvert = true Flag Était lettrée/archivée, réapparaît avec statut NL/Partiel dans un nouvel import
Restant restant Decimal(15,2) Montant Montant non encore réconcilié. 0 = totalement lettré
Sens sens ENUM Direction CRDT = Crédit entrant, DBIT = Débit sortant
Entité Via banque → LettrageBank.entite SA/PRO Déterminée par la banque de la ligne, pas stockée directement sur la ligne
Code lettrage codeLettrage String? Identifiant Code de regroupement de transactions liées (peut être null)
Seuil AppSetting.seuil_gros_montant_sa/pro Config Montant déclenchant les alertes "gros montants" dans le dashboard
⚠️
Le terme "Traité" dans le code BDD (champ traite, statut 'traite') s'affiche "Lettré" dans l'UI depuis la refonte de mai 2026. Ne pas confondre lors de la lecture du code.

Entité SA vs PRO

L'entité n'est pas stockée directement sur la ligne, mais déterminée via la table LettrageBank :

LettrageLigne.banque → LettrageBank.nom → LettrageBank.entite (SA | PRO | LES_DEUX)

L'admin peut reconfigurer à tout moment quel banque appartient à quelle entité via Admin → Banques SA/PRO.

Machine d'états

Cycle de vie d'une LettrageLigne

🔴 Non lettré
non_lettre
État initial à l'import
🟠 Partiel
PARTIAL ? casse
restant > 0
🟢 Lettré
traite = true
Confirmé par l'utilisateur
⚫ Exclue
exclue
Règle auto ou exclusion manuelle
🟣 Archivée
archivee
Clôturée (réouvrable)

Cliquer sur un état pour filtrer les transitions — recliquer pour réinitialiser

Transitions possibles

non_lettre traite=true Action : "Marquer lettré" (bulk ou individuel)
PARTIAL traite=true Action : "Marquer lettré" malgré restant > 0
non_lettre / PARTIAL archivee Action : "Archiver" + mémorise archivePar + archiveAt
non_lettre / PARTIAL exclue Import : règle d'exclusion active / Action : "Exclure" manuellement
archivee non_lettre (reouvert=true) Action : "Réouvrir" ou import avec statut NL sur une archivée
Tout statut nonLettrable=true Flag orthogonal au statut — indique l'impossibilité métier

Flag reouvert

Lors d'un import, si une ligne existante était dans l'état traite=true ou archivee et qu'elle réapparaît dans le fichier CSV avec statutLettrage='non_lettre' ou 'PARTIAL', le processeur positionne reouvert=true.

Cela signale à l'équipe que la transaction a "régressé" et mérite une attention particulière. Le filtre "Réouvertes" dans l'interface permet de les retrouver rapidement.

Workflow Import CSV

Pipeline complet de traitement d'un fichier CSV

1
Upload du fichier
POST /lettrage/import — Multer reçoit le fichier CSV. Un enregistrement LettrageImport est créé avec statut='pending'.
2
Mise en file BullMQ
Le buffer du fichier est encodé en base64 et envoyé dans la queue 'process-csv'. Le jobId est stocké sur l'import. Réponse immédiate : { importId, jobId }.
3
Détection du séparateur
Le processeur lit app_settings.csv_separator (défaut : ;). Configurable par l'admin.
4
Mapping des colonnes
Lecture de la table LettrageMapping (colonFichier → champQorvon) + auto-détection via CHAMPS_MAPPABLES. Chaque en-tête CSV est associé à un champ de LettrageLigne.
5
Parsing & conversion
Parser CSV custom (gestion des guillemets).
Conversions : booléens (t/true/1/oui), montants (virgule → point), dates (ISO ou JJ/MM/AAAA).
6
Détection des doublons
Vérification de l'unicité de idTransaction dans le fichier courant. Les doublons sont loggés comme erreurs mais n'interrompent pas le traitement.
7
Match avec les lignes existantes
Pour chaque ligne, vérifie si idTransaction existe déjà en BDD. Si oui : mise à jour + gestion du flag reouvert. Sinon : création. Les lignes en BDD absentes du fichier sont marquées "disparues".
8
Application des règles d'exclusion
Toutes les règles actives (LettrageRegleExclusion.actif=true) sont évaluées sur les nouvelles lignes. Les correspondances reçoivent exclueParRegle=true et statutLettrage='exclue'.
9
Création des snapshots
Stats par entité+sens stockées dans LettrageSnapshot : comptages (NL/Partiel/Traité) et montants. Utilisé pour l'évolution historique dans le dashboard.
10
Sauvegarde rollback data
Les états précédents des lignes modifiées sont sérialisés en JSON dans LettrageImport.rollbackData. Permet l'annulation complète de l'import.
11
Finalisation
statut='done', mise à jour des compteurs : nbLignes, nbNouvelles, nbMisesAJour, nbDisparues, finishedAt.

Rollback d'un import

POST /lettrage/imports/:importId/rollback — Nécessite que rollbackData soit présent sur l'import.

Ce que ça fait : restore les états précédents des lignes modifiées, supprime les nouvelles lignes créées par cet import, log un événement LettrageMasterRollback.

⚠️
Impossible si rollbackData est null. La suppression d'un import (DELETE) n'est possible que si nbLignes=0 ou statut='failed'.

Lignes "disparues"

Quand un import ne contient plus une transaction qui existait en BDD, cette ligne est marquée "disparue". L'endpoint POST /lettrage/lignes/:id/resolve permet de la résoudre en la réouvrant ou en l'archivant.

Schéma Base de Données

Modèles Prisma du module lettrage

LettrageLigne
LettrageImport
Autres tables
Enums

Table principale — LettrageLigne

ChampTypeNullableDescription
idUUIDNonClé primaire
idTransactionStringNonIdentifiant unique de la transaction (source CSV) — unicité
statutLettrageStatutLettrage enumNonStatut principal de la ligne
codeLettrageString?OuiCode de regroupement de transactions liées
dateOperationDateTime?OuiDate de la transaction
sensSensLettrage enumNonCRDT (crédit) ou DBIT (débit)
montantDecimal(15,2)?OuiMontant total de la transaction
restantDecimal(15,2)?OuiMontant restant à réconcilier
libelleString?OuiLibellé de la transaction
contratString?OuiRéférence contrat
factureString?OuiRéférence facture
banqueString?OuiNom de la banque → détermine l'entité SA/PRO
classe, consoString?OuiClassification interne
gestionnaireString?OuiResponsable
domaine, famille, sousFamille, natureString?OuiHiérarchie de classification
typeOperation, codeBank, entryErpFiString?OuiCodes techniques
ibanString?OuiIBAN associé
rejetBooleanNonTransaction en rejet
codeRejetString?OuiCode du rejet
traiteBooleanNonLettré (confirmé par l'utilisateur)
traiteParFK User?OuiUtilisateur ayant lettré
traiteAtDateTime?OuiDate/heure du lettrage
nonLettrableBooleanNonMarquée impossible à lettrer
nonLettrablePar/AtFK/DateTime?OuiAudit du marquage
exclueParRegleBooleanNonExclue automatiquement par une règle
exclueParUserBooleanNonExclue manuellement
exclueAtDateTime?OuiDate de l'exclusion
archivePar, archiveAtString?/DateTime?OuiAudit de l'archivage
reouvertBooleanNonRéapparue après lettrage/archivage
commentaireString?OuiNote libre de l'utilisateur
premiereVueAt, derniereVueAtDateTime?OuiTimestamps de première/dernière occurrence en import
createdAt, updatedAtDateTimeNonAudit standard Prisma

LettrageImport — Suivi des fichiers importés

ChampTypeDescription
idUUIDClé primaire
nomFichierStringNom du CSV uploadé
statutpending/processing/done/failedÉtat du traitement BullMQ
jobIdString?Référence du job BullMQ
nbLignesIntTotal de lignes dans le fichier
nbNouvellesIntLignes créées
nbMisesAJourIntLignes mises à jour
nbDisparuesIntLignes présentes avant, absentes du fichier
rollbackDataJSON?États précédents pour annulation
uploadedByFK UserUtilisateur ayant uploadé
finishedAtDateTime?Fin du traitement
snapshotsLettrageSnapshot[]Stats par entité de cet import

Tables de configuration & administration

LettrageBank — Mapping banque → entité

Associe un nom de banque à une entité (SA, PRO, LES_DEUX). Sans mapping, la banque n'est pas filtrée par entité.

ChampDescription
nomNom unique (clé de jointure avec LettrageLigne.banque)
entiteSA | PRO | LES_DEUX
nomAffichageLibellé affiché dans l'UI
LettrageMapping — Colonnes CSV

Associe un nom d'en-tête CSV au champ correspondant dans LettrageLigne. Si champQorvon est null, la colonne est ignorée.

Champs mappables : id_transaction, statut_lettrage, code_lettrage,
date_operation, sens, montant, restant, libelle, contrat, facture,
banque, classe, conso, gestionnaire, type_operation, entry_erp_fi,
code_bank, domaine, famille, sous_famille, nature, iban, rejet,
code_rejet, cree_par, annee
LettrageRegleExclusion — Règles d'exclusion automatiques

Règles déclaratives appliquées automatiquement à chaque import.

conditions: [
  { champ: "domaine", type: "equals", valeur: "SPAM" },
  { champ: "montant", type: "gt", valeur: "100000" }
]
actif: true/false

L'endpoint POST /admin/regles-exclusion/preview permet de tester une règle sur le dataset actuel avant de l'activer.

LettrageEvent — Journal d'audit

Toutes les actions sont loggées : action, fromStatut, toStatut, diff (JSON), isBulk.

UserPreferencesLettrage — Préférences par utilisateur

Persistance par utilisateur des préférences UI : ordre des colonnes, largeurs, visibilité, filtres actifs.

Enums Prisma

StatutLettrage

non_lettre PARTIAL traite exclue archivee

SensLettrage

CRDT — Crédit (entrée)
DBIT — Débit (sortie)

EntiteLettrage

SA PRO LES_DEUX

API Endpoints

35 endpoints REST — NestJS 11 — Base : /lettrage

Import & Gestion des fichiers

MéthodeRoutePermissionDescription
POST/lettrage/importlettrage.creerUpload d'un CSV — crée un job BullMQ
GET/lettrage/import/:importIdlettrage.voirStatut & progression d'un import
GET/lettrage/importslettrage.voirListe de tous les imports
DELETE/lettrage/imports/:importIdlettrage.supprimerSuppression (uniquement si nbLignes=0 ou failed)
POST/lettrage/imports/:importId/rollbacklettrage.supprimerAnnulation d'un import (nécessite rollbackData)

Données & Filtres

MéthodeRoutePermissionDescription
GET/lettrage/ligneslettrage.voirLignes avec 30+ paramètres de filtre, pagination, tri
GET/lettrage/exportlettrage.exporterExport CSV avec les filtres courants
GET/lettrage/filtres-valeurslettrage.voirValeurs distinctes pour tous les menus déroulants
GET/lettrage/banqueslettrage.voirListe des banques avec leur entité
PUT/lettrage/banques/:nomlettrage.modifierCréer ou mettre à jour le mapping banque → entité

Actions sur les lignes

MéthodeRoutePermissionDescription
PATCH/lettrage/lignes/:idlettrage.modifierModifier une ligne (commentaire, statut)
POST/lettrage/lignes/:id/resolvelettrage.modifierRésoudre une ligne "disparue" (réouvrir/archiver)
POST/lettrage/lignes/bulklettrage.modifierAction en masse : mark-traite, archive, exclude, reopen, mark-non-lettrable
GET/lettrage/lignes/:id/eventslettrage.voirHistorique des événements d'une ligne

Préférences utilisateur

MéthodeRouteDescription
GET/lettrage/preferencesRécupérer préférences colonnes + filtres de l'utilisateur
PUT/lettrage/preferencesSauvegarder toutes les préférences
PATCH/lettrage/preferencesMise à jour partielle des préférences

Administration

MéthodeRoutePermissionDescription
GET/lettrage/admin/colonnesadministration.lettrage.voirConfiguration globale des colonnes
PUT/lettrage/admin/colonnesadministration.lettrage.modifierModifier visibilité/ordre des colonnes globalement
GET/lettrage/admin/mappingadministration.lettrage.voirMapping colonnes CSV
PUT/lettrage/admin/mappingadministration.lettrage.modifierCréer/modifier un mapping
DELETE/lettrage/admin/mapping/:idadministration.lettrage.supprimerSupprimer un mapping
GET/lettrage/admin/regles-exclusionlettrage.voirListe des règles d'exclusion
POST/lettrage/admin/regles-exclusionlettrage.modifierCréer une règle
PATCH/lettrage/admin/regles-exclusion/:idlettrage.modifierModifier une règle
DELETE/lettrage/admin/regles-exclusion/:idlettrage.modifierSupprimer une règle
POST/lettrage/admin/regles-exclusion/previewlettrage.voirPrévisualiser l'impact d'une règle
POST/lettrage/admin/regles-exclusion/appliquerlettrage.modifierRe-appliquer toutes les règles actives

KPIs & Dashboard

MéthodeRoutePermissionDescription
GET/lettrage/kpisdashboard.lettrage.voirKPIs rapides (6 compteurs, refresh 30s)
GET/lettrage/dashboarddashboard.lettrage.voirStats complètes dashboard (filtrables)
GET/lettrage/snapshotsdashboard.lettrage.voirHistorique des snapshots par import

Règles métier

Contraintes, calculs et comportements clés

Calcul des KPIs

KPIRègle de calcul
Non lettréesstatutLettrage = 'non_lettre' AND traite = false
PartiellesstatutLettrage = 'PARTIAL' AND traite = false
Lettrées (traite)traite = true (quel que soit le statut)
Non lettrablesnonLettrable = true AND statutLettrage IN [non_lettre, PARTIAL]
Réouvertesreouvert = true
NouvellespremiereVueAt >= lastImport.finishedAt
Mises à jourderniereVueAt >= lastImport.finishedAt AND premiereVueAt < lastImport.finishedAt
Délai moyen traitement(traiteAt - premiereVueAt) / 3600000 en heures

Règles de suppression/rollback

Suppression d'un import : uniquement si nbLignes = 0 (import vide) ou statut = 'failed'.

Rollback : uniquement si rollbackData est présent (non null) sur l'import.

Modification d'une ligne : un PATCH génère automatiquement un événement LettrageLignePatched avec l'ancien et le nouveau statut.

Règles d'exclusion automatiques

Les règles sont évaluées à chaque import. Elles peuvent être réappliquées manuellement via POST /admin/regles-exclusion/appliquer sur l'ensemble du dataset.

Une règle contient un tableau de conditions JSON. Toutes les conditions doivent être vraies (AND logique) pour déclencher l'exclusion.

{
  "conditions": [
    { "champ": "domaine", "type": "equals", "valeur": "INTERNE" },
    { "champ": "montant",  "type": "lt",     "valeur": "10" }
  ],
  "actif": true
}

Entité SA/PRO : règle de résolution

L'entité d'une ligne n'est jamais stockée directement sur LettrageLigne. Elle est résolue dynamiquement :

SELECT lb.entite
FROM lettrage_banque lb
WHERE lb.nom = ligne.banque

Si la banque n'est pas dans LettrageBank, la ligne n'apparaît dans aucun filtre entité (ni SA, ni PRO).

⚠️
Toujours mapper les banques dans Admin → Banques SA/PRO après l'apparition d'une nouvelle banque dans les imports.

Unicité des transactions

Le champ idTransaction est unique en base. Deux imports du même fichier créeront des doublons détectés et loggés, mais pas persistés.

Lors d'une mise à jour (même idTransaction), les champs sont mis à jour et derniereVueAt est refreshé.

Filtres disponibles

30+ paramètres sur GET /lettrage/lignes

Statut & Flags
Montants & Dates
Identifiants
Catégories
Tri & Pagination
ParamètreTypeDescription
statutStatutLettrage[]Filtre multi-statuts (non_lettre, PARTIAL, traite, exclue, archivee)
entiteSA | PROEntité via mapping banque (JOIN LettrageBank)
banqueStringBanque exacte
sensCRDT | DBITDirection débit/crédit
traitebooleanLettré ou non
nonLettrablebooleanMarqué comme impossible à lettrer
reouvertbooleanRéapparu après lettrage/archivage
rejetbooleanTransaction en rejet
traiteParString (userId)Filtrer par utilisateur ayant lettré
consoStringValeur de consolidation
ParamètreTypeDescription
montantMin / montantMaxDecimalPlage sur le montant total
restantMin / restantMaxDecimalPlage sur le montant restant
restantNegatifbooleanLignes avec restant < 0
sansContratbooleanLignes sans référence contrat
sansFacturebooleanLignes sans référence facture
dateDebut / dateFinDateTimePlage sur dateOperation
anneenumberAnnée de dateOperation
fichierIdUUIDFiltrer par import spécifique
ParamètreTypeDescription
searchStringRecherche OR sur libelle + contrat + facture
codeLettrageStringCode de regroupement exact
idTransactionStringTransaction ID exacte
contratStringRéférence contrat exacte
factureStringRéférence facture exacte
ibanStringRecherche contains sur IBAN
ParamètreDescription
typeOperationType d'opération
codeBankCode banque
domaineDomaine de classification
familleFamille
sousFamilleSous-famille
natureNature
creeParCréateur de la transaction (source)
codeRejetCode du rejet
ParamètreValeur par défautDescription
sortByderniereVueAt24 champs triables (date, montants, libelle, statut...)
sortOrderdescasc | desc
limit50Lignes par page
offset0Pagination offset
ℹ️
La réponse inclut toujours total (count) et montantTotal (sum des montants filtrés).

Permissions

Système RBAC — granularité par action

Permissions opérateurs

lettrage.voir
Lecture des lignes, KPIs, dashboard, filtres, snapshots, événements
lettrage.creer
Upload d'un fichier CSV (création d'import)
lettrage.modifier
Patch individuel, actions bulk, gestion banques, règles exclusion, colonnes admin
lettrage.exporter
Export CSV des données filtrées
lettrage.supprimer
Suppression d'imports, rollback
dashboard.lettrage.voir
Accès aux KPIs rapides, dashboard complet, snapshots

Permissions administration

administration.lettrage.voir
Consulter mapping colonnes CSV, colonnes globales
administration.lettrage.modifier
Créer/modifier mapping, banques, colonnes globales
administration.lettrage.supprimer
Supprimer un mapping de colonne CSV
ℹ️
Les règles d'exclusion utilisent lettrage.voir pour la lecture et le preview, et lettrage.modifier pour la création/modification/application — pas les permissions administration.*.

Pages & Composants Frontend

Architecture React 19 — apps/web/src/

📄 LettragePage.tsx — Interface principale de traitement

Table virtuelle avec 24 colonnes configurables. C'est la page principale utilisée au quotidien par l'équipe.

Colonnes visibles par défaut

_flags traiteParNom statutLettrage dateOperation contrat facture libelle commentaire montant restant banque sens

Colonnes masquées par défaut

codeLettrage idTransaction classe conso typeOperation codeBank domaine famille sousFamille nature iban rejet codeRejet creePar entryErpFi

Actions disponibles

NiveauActions
Ligne individuelleÉditer commentaire, Marquer lettré, Marquer non-lettrable, Archiver, Exclure, Réouvrir, Voir historique
Bulk (sélection multiple)Toutes les actions ci-dessus sur la sélection
ExportCSV avec les filtres courants

Persistance : Largeur, ordre et visibilité des colonnes sont sauvegardés en BDD via UserPreferencesLettrage.

📊 LettageDashboardPage.tsx — Dashboard 11 sections

Dashboard hardcodé (refonte mai 2026). Filtres globaux : Année, Banque, Période, Entité (SA/PRO), Sens (Débit/Crédit).

#SectionContenu
1Statut global4 tuiles cliquables : Total / NL / Partiels / Lettrés. Grille 2×2 SA/PRO × Débit/Crédit
2AlertesNL critiques (90j + gros montant), Doublons, Sans contrat anciens
3Évolution vs fichier précédent4 tuiles delta % (NL, Partiels, Lettrés, Total)
4Qualité donnéesSans contrat, Sans facture, Doublons, Gros montants SA/PRO (seuil configurable)
5Ancienneté NLBarres : ≤30j, 31-60j, 61-90j, >90j
6Activité équipeLettrage aujourd'hui/semaine/mois + taux, délai moyen, utilisateurs actifs
7Évolution montantsGraphe linéaire 6 séries (SA/PRO × NL/Partiels/Lettrés)
8Détail par banqueCarte par banque : tableau Débit/Crédit/Total + barre progression
9Détail par utilisateurCarte par user : comptages + montant + dernière activité
10Détail par fichierCarte par import : décomposition Débit/Crédit
11Imports récentsListe des derniers imports avec statut
ℹ️
Les tuiles cliquables naviguent vers /lettrage avec les query params pré-remplis pour filtrer directement.
📋 LettrageHistoriquePage.tsx — Journal d'audit

Timeline de tous les événements sur les lignes de lettrage. Filtrables par ligne, date, type d'action, utilisateur.

Source : table LettrageEvent. Endpoint : GET /lettrage/lignes/:id/events ? endpoint

⚙️ Administration — Onglets Admin
ComposantOngletDescription
LettrageAdminTabMapping colonnesAssocier en-têtes CSV aux champs LettrageLigne
LettrageAdminTabBanques SA/PROAssigner chaque banque à SA/PRO/LES_DEUX
LettrageAdminTabColonnes globalesVisibilité/ordre par défaut pour tous les utilisateurs
LettrageSeuilsTabSeuils alertesMontants déclenchant les alertes "gros montants" SA/PRO
ReglesExclusionTabRègles exclusionConstructeur de règles avec prévisualisation + application

Hooks React Query

HookCache keyDescription
useLettrageLignes(params)['lettrage','lignes',params]Données paginées de la table principale
useLettrageKpis()['lettrage','kpis']6 compteurs, rafraîchissement toutes les 30s
useLettrageImports()['lettrage','imports']Liste de tous les imports
useLettrageImportStatus(id)['lettrage','import-status',id]Polling du statut d'un import en cours
useLettragesDashboard(params)['lettrage','dashboard',params]Stats complètes dashboard filtrables
useLettrageSnapshots()['lettrage','snapshots']Historique par import pour l'évolution
useLettragesFiltresValeurs()['lettrage','filtres-valeurs']Valeurs pour les selects de filtres
useLettragePatched()Mutation PATCH ligne individuelle
useBulkLettrage()Mutation action en masse
useLettrageUpload()Mutation upload CSV

Dashboard KPIs

Métriques exposées par GET /lettrage/dashboard et GET /lettrage/kpis

KPIs rapides (endpoint /kpis)

nonLettrées
Count
statut=non_lettre AND traite=false
partielles
Count
statut=PARTIAL AND traite=false
nonLettrables
Count
nonLettrable=true AND statut IN [NL,PARTIAL]
reouvertes
Count
reouvert=true
nouvelles
Count
premiereVueAt >= lastImport.finishedAt
misesAJour
Count
derniereVueAt >= lastImport ET premiereVueAt avant

Stats dashboard complètes

Comptages & Montants par statut

Tous retournés avec segmentation SA/PRO × Débit/Crédit :

total NL total Partiels total Lettrés total Exclus

Pour chaque statut : count + montant + restant

Qualité des données
MétriqueCalcul
Sans contratLignes actives où contrat IS NULL
Sans factureLignes actives où facture IS NULL
Restant négatifLignes où restant < 0
Gros montants SA/PROLignes NL/Partiel au-dessus du seuil configuré
Activité équipe
MétriqueDescription
traitéesAujourd'huiLignes lettrées aujourd'hui (traiteAt)
délaiMoyenTraitement(traiteAt − premiereVueAt) / 3600000 → heures
dernierTraitementISO date du dernier lettrage
parUtilisateurCount + montant + dernierTraitement par userId
Agrégations dimensionnelles

Tous disponibles dans /dashboard :

  • parBanque : count + montant par banque
  • parUtilisateur : count + montant + dernierTraitement par user
  • parFichier : count + montant par import (fichierId)
  • snapshots : évolution historique par import via LettrageSnapshot

Snapshots — Évolution historique

À chaque import, un LettrageSnapshot est créé par entité (SA, PRO) avec les comptages et montants cumulés au moment de l'import.

Endpoint dédié : GET /lettrage/snapshots?banque=optional

Utilisé dans la section "Évolution montants" du dashboard (graphe linéaire).