lumnik. / scénarios Tous les scénarios · English

La balance âgée prisonnière d'un fichier d'impression

Objectif Transformer un fichier d'impression comptable paginé en créances par facture, en conservant le bon client malgré les changements de page et en écartant les en-têtes et les totaux.

La compta imprime sa balance âgée dans un fichier spool.

Le recouvrement veut chaque facture avec son client.

BALAGEE_20261023.lst
DEMO DISTRIBUTION SA          BALANCE AGEE CLIENTS AU 23/10/2026        PAGE   1
CLIENT    RAISON SOCIALE / PIECE   DATE FACT  ECHEANCE       SOLDE  RETARD
--------------------------------------------------------------------------------
411TILL   BOULANGERIE DES TILLEULS
          FA26-0731   28/07/2026 27/08/2026     1 840,20     57
          FA26-0802   11/08/2026 10/09/2026       612,00     43
          FA26-0915   15/09/2026 15/10/2026     2 310,75      8
          TOTAL 411TILL                             4 762,95

411ANSE   BISCUITERIE DE L'ANSE
          FA26-0644   30/06/2026 30/07/2026     4 120,00     85
          FA26-0708   08/07/2026 07/08/2026       985,40     77

DEMO DISTRIBUTION SA          BALANCE AGEE CLIENTS AU 23/10/2026        PAGE   2
CLIENT    RAISON SOCIALE / PIECE   DATE FACT  ECHEANCE       SOLDE  RETARD
--------------------------------------------------------------------------------
          FA26-0810   14/08/2026 13/09/2026     1 276,30     40
          FA26-0901   03/09/2026 03/10/2026       530,00     20
          FA26-0930   30/09/2026 30/10/2026     2 045,60      0
          TOTAL 411ANSE                             8 957,30

… 9 lignes de plus

manifests/20-receivable.yaml
kind: Entityname: receivable_blabel: Créance clientdescription: "One line of the printed aged balance: a client's header, or one of its open invoices with its due date, balance and days late."match: [line]scopes: [credit-b]columns:  line: { label: "Ligne" }  client_code: { label: "Compte" }  client_name: { label: "Client" }  piece: { label: "Pièce" }  invoice_date: { label: "Date facture" }  due_date: { label: "Échéance" }  balance: { label: "Solde" }  days_late: { label: "Retard (j)" }sources:  - table: t_scenario_agedbal_b    map: { line: line, client_code: client_code, client_name: client_name, piece: piece, invoice_date: invoice_date,           due_date: due_date, balance: balance, days_late: days_late }
$ lm entity get receivable_b
LINE                                                             CLIENT_CODE  CLIENT_NAME               PIECE      INVOICE_DATE  DUE_DATE    BALANCE  DAYS_LATE  _CONFLICTS
411ANSE   BISCUITERIE DE L'ANSE                                  411ANSE      BISCUITERIE DE L'ANSE                                                              {}
411AULN   MOULIN DES AULNES                                      411AULN      MOULIN DES AULNES                                                                  {}
411TILL   BOULANGERIE DES TILLEULS                               411TILL      BOULANGERIE DES TILLEULS                                                           {}
          FA26-0644   30/06/2026 30/07/2026     4 120,00     85  411ANSE      BISCUITERIE DE L'ANSE     FA26-0644  2026-06-30    2026-07-30  4120     85         {}
          FA26-0708   08/07/2026 07/08/2026       985,40     77  411ANSE      BISCUITERIE DE L'ANSE     FA26-0708  2026-07-08    2026-08-07  985.4    77         {}
          FA26-0731   28/07/2026 27/08/2026     1 840,20     57  411TILL      BOULANGERIE DES TILLEULS  FA26-0731  2026-07-28    2026-08-27  1840.2   57         {}
          FA26-0755   31/07/2026 30/08/2026     3 300,00     54  411AULN      MOULIN DES AULNES         FA26-0755  2026-07-31    2026-08-30  3300     54         {}
          FA26-0802   11/08/2026 10/09/2026       612,00     43  411TILL      BOULANGERIE DES TILLEULS  FA26-0802  2026-08-11    2026-09-10  612      43         {}
          FA26-0810   14/08/2026 13/09/2026     1 276,30     40  411ANSE      BISCUITERIE DE L'ANSE     FA26-0810  2026-08-14    2026-09-13  1276.3   40         {}
          FA26-0822   22/08/2026 21/09/2026       742,15     32  411AULN      MOULIN DES AULNES         FA26-0822  2026-08-22    2026-09-21  742.15   32         {}
          FA26-0901   03/09/2026 03/10/2026       530,00     20  411ANSE      BISCUITERIE DE L'ANSE     FA26-0901  2026-09-03    2026-10-03  530      20         {}
          FA26-0911   11/09/2026 11/10/2026     1 508,90     12  411AULN      MOULIN DES AULNES         FA26-0911  2026-09-11    2026-10-11  1508.9   12         {}
          FA26-0915   15/09/2026 15/10/2026     2 310,75      8  411TILL      BOULANGERIE DES TILLEULS  FA26-0915  2026-09-15    2026-10-15  2310.75  8          {}
          FA26-0930   30/09/2026 30/10/2026     2 045,60      0  411ANSE      BISCUITERIE DE L'ANSE     FA26-0930  2026-09-30    2026-10-30  2045.6   0          {}
          FA26-1003   03/10/2026 02/11/2026       264,00      0  411AULN      MOULIN DES AULNES         FA26-1003  2026-10-03    2026-11-02  264      0          {}

Limites

  • Une ligne écartée par filter-where ne reporte rien: le filtre doit garder les lignes client.
  • L'entité a pour clé la ligne imprimée: une facture réimprimée à l'identique est la même ligne.
  • Fichier synthétique, clients et factures fictifs.

Recouvrement · état imprimé

À quel client est cette facture?

La balance âgée existe, mais seulement imprimée.

Un fichier spool: en-têtes de page, clients, factures, totaux.

Fichier synthétique, clients fictifs

Le problème

Le saut de page coupe un client en deux.

  • Page 1: le client et deux factures.
  • Page 2: trois factures, sans le client.
  • Le recouvrement ressaisit l'état.

Rien n'est modifié

L'état reste tel qu'imprimé.

  • lumnik lit chaque ligne.
  • Il écarte mise en page et totaux.
  • Il reporte le client sur ses factures.

Ce qu'il a fallu écrire

- fill-down:
    columns: [client_code, client_name]

Le client descend sur ses factures.

Le scénario complet tient en 2 fichiers de déclaration, 46 lignes.

Le résultat

12 factures, chacune avec son client.

  • 411ANSE: 5 factures sur 2 pages, 8 957,30.
  • Les totaux imprimés retrouvés.
  • FA26-0644: 85 jours de retard.

La limite

Le filtre doit garder les lignes client.

  • Une ligne écartée ne reporte rien.
  • Une facture réimprimée à l'identique est la même ligne.

Essayer

Le scénario se rejoue de bout en bout.

Un connecteur, une entité: chaque étape est publiée avec sa sortie.

Ce scénario tourne sur lumnik Open, gratuit et open source.

Essayer lumnik Open →