# malak-od/automatisation_facture architecture

> Architecture diagram of the GitHub repository malak-od/automatisation_facture, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-23). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/malak-od/automatisation_facture
- Repository: https://github.com/malak-od/automatisation_facture

## Overview

This repository turns carrier-specific monthly billing files into standardized ERP imports, reconciles calculated totals against official invoices, and produces carrier-specific Excel workbooks. The web server is the runtime entry point: it accepts uploads, selects an adapter, and coordinates output generation. The README documents broad carrier coverage and Python/Excel finalization; sampled adapters confirm varied input handling and PDF reconciliation. Some carrier implementations and server wiring were not sampled, so uncertain internal calls are omitted.

Main entry points: [`facturation-app/server.js`](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/server.js) (Web server), [`facturation-app/src/carriers`](https://github.com/malak-od/automatisation_facture/tree/main/facturation-app/src/carriers) (Carrier adapters), [`facturation-app/src/core/upsApi.js`](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/upsApi.js) (UPS API helper), [`automatisation`](https://github.com/malak-od/automatisation_facture/tree/main/automatisation) (Excel finalizers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_intake["Web intake"]
  node_server["Web server<br/>[server.js]"]
  node_registry["Carrier registry<br/>[registry.js]"]
  node_history[("Run history<br/>[server.js]")]
end

subgraph group_processing["Carrier processing"]
  node_adapters["Carrier adapters"]
  node_ups["UPS adapter<br/>[index.js]"]
  node_fedex["FedEx adapter<br/>[index.js]"]
  node_chronopost["Chronopost adapter<br/>[index.js]"]
  node_bls["BLS adapter<br/>[index.js]"]
  node_reclass["Charge reclassification<br/>[reclass.js]"]
  node_validation["Import validation<br/>[validate.js]"]
  node_reconcile["PDF reconciliation"]
  node_upsapi["UPS API helper<br/>[upsApi.js]"]
end

subgraph group_outputs["ERP outputs"]
  node_importcsv["ERP import CSV<br/>[csv.js]"]
  node_importxlsx["ERP import XLSX<br/>[excelOut.js]"]
  node_brutexport["Raw export<br/>[exportBrut.js]"]
end

subgraph group_workbooks["Workbook finalization"]
  node_finalizers["Excel finalizers"]
  node_workbook["Carrier workbook"]
end

node_operator(("Operations user"))
node_rawfiles["Monthly source files"]
node_upsservice{{"UPS service"}}

node_operator -->|"uploads files"| node_server
node_rawfiles -->|"supplies inputs"| node_server
node_server -->|"lists or selects"| node_registry
node_server -->|"dispatches carrier"| node_adapters
node_server -->|"reads and writes"| node_history
node_adapters -->|"reclassifies charges"| node_reclass
node_adapters -->|"validates import"| node_validation
node_adapters -->|"compares invoice totals"| node_reconcile
node_ups -.->|"requests shipment data"| node_upsapi
node_upsapi -.->|"queries"| node_upsservice
node_fedex -->|"extracts PDF supplements"| node_reconcile
node_chronopost -->|"reconciles invoice totals"| node_reconcile
node_bls -->|"reconciles invoice totals"| node_reconcile
node_server -->|"writes import"| node_importcsv
node_server -->|"writes import"| node_importxlsx
node_server -->|"exports source data"| node_brutexport
node_server -->|"runs finalizer"| node_finalizers
node_finalizers -->|"produces workbook"| node_workbook

click node_server "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/server.js"
click node_registry "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/registry.js"
click node_history "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/server.js"
click node_adapters "https://github.com/malak-od/automatisation_facture/tree/main/facturation-app/src/carriers"
click node_ups "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/carriers/ups/index.js"
click node_fedex "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/carriers/fedex/index.js"
click node_chronopost "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/carriers/chronopost/index.js"
click node_bls "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/carriers/bls/index.js"
click node_reclass "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/reclass.js"
click node_validation "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/validate.js"
click node_reconcile "https://github.com/malak-od/automatisation_facture/tree/main/facturation-app/src/carriers"
click node_importcsv "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/csv.js"
click node_importxlsx "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/excelOut.js"
click node_brutexport "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/exportBrut.js"
click node_finalizers "https://github.com/malak-od/automatisation_facture/tree/main/automatisation"
click node_workbook "https://github.com/malak-od/automatisation_facture/tree/main/automatisation"
click node_upsapi "https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/upsApi.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_registry,node_history,node_operator toneBlue
class node_adapters,node_ups,node_fedex,node_chronopost,node_bls,node_reclass,node_validation,node_reconcile,node_upsapi toneAmber
class node_importcsv,node_importxlsx,node_brutexport toneMint
class node_finalizers,node_workbook toneRose
class node_rawfiles,node_upsservice toneIndigo
```

## Components

### Web intake

- [Web server](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/server.js): `facturation-app/server.js`
- [Carrier registry](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/registry.js): `facturation-app/src/registry.js`
- [Run history](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/server.js): `facturation-app/server.js`

### Carrier processing

- [Carrier adapters](https://github.com/malak-od/automatisation_facture/tree/main/facturation-app/src/carriers): `facturation-app/src/carriers`
- [UPS adapter](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/carriers/ups/index.js): `facturation-app/src/carriers/ups/index.js`
- [FedEx adapter](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/carriers/fedex/index.js): `facturation-app/src/carriers/fedex/index.js`
- [Chronopost adapter](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/carriers/chronopost/index.js): `facturation-app/src/carriers/chronopost/index.js`
- [BLS adapter](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/carriers/bls/index.js): `facturation-app/src/carriers/bls/index.js`
- [Charge reclassification](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/reclass.js): `facturation-app/src/core/reclass.js`
- [Import validation](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/validate.js): `facturation-app/src/core/validate.js`
- [PDF reconciliation](https://github.com/malak-od/automatisation_facture/tree/main/facturation-app/src/carriers): `facturation-app/src/carriers`
- [UPS API helper](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/upsApi.js): `facturation-app/src/core/upsApi.js`

### ERP outputs

- [ERP import CSV](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/csv.js): `facturation-app/src/core/csv.js`
- [ERP import XLSX](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/excelOut.js): `facturation-app/src/core/excelOut.js`
- [Raw export](https://github.com/malak-od/automatisation_facture/blob/main/facturation-app/src/core/exportBrut.js): `facturation-app/src/core/exportBrut.js`

### Workbook finalization

- [Excel finalizers](https://github.com/malak-od/automatisation_facture/tree/main/automatisation): `automatisation`
- [Carrier workbook](https://github.com/malak-od/automatisation_facture/tree/main/automatisation): `automatisation`

### Other components

- **Operations user**
- **Monthly source files**
- **UPS service**

## Connections

- Operations user → Web server: uploads files
- Monthly source files → Web server: supplies inputs
- Web server → Carrier registry: lists or selects
- Web server → Carrier adapters: dispatches carrier
- Web server → Run history: reads and writes
- Carrier adapters → Charge reclassification: reclassifies charges
- Carrier adapters → Import validation: validates import
- Carrier adapters → PDF reconciliation: compares invoice totals
- UPS adapter → UPS API helper: requests shipment data
- UPS API helper → UPS service: queries
- FedEx adapter → PDF reconciliation: extracts PDF supplements
- Chronopost adapter → PDF reconciliation: reconciles invoice totals
- BLS adapter → PDF reconciliation: reconciles invoice totals
- Web server → ERP import CSV: writes import
- Web server → ERP import XLSX: writes import
- Web server → Raw export: exports source data
- Web server → Excel finalizers: runs finalizer
- Excel finalizers → Carrier workbook: produces workbook
