# Accounting Reporting Map

Date: 2026-05-05

## 1. Typologie du reporting

Le repository contient quatre familles de reporting comptable:

1. Reports imprimables standards:
   - `ir.action.report`;
   - classe Python `Report`;
   - template `.fodt`.
2. Reporting UI SQL:
   - modeles `ModelSQL, ModelView`;
   - `table_query()`;
   - `ir.action.act_window` avec `context_model`.
3. Documents business lies a la comptabilite:
   - factures, prepayments, CN/DN, payment order, packing list;
   - resolution dynamique des templates via `purchase_trade.configuration`.
4. Reporting de gestion Tradon:
   - PnL, valuation, fees, credit risk, forex, invoice padding, dashboards.

Pour une comparaison avec un standard, il faut donc comparer a la fois les
rapports imprimables et les vues SQL qui servent de reporting operationnel.

## 2. Reporting standard `account`

### Statement par type de compte

- Action: `report_account_type_statement`
- Model: `account.account.type`
- Report name: `account.account.type.statement`
- Template: `account/type_statement.fodt`
- Source Python: `AccountTypeStatement`

But:

- imprimer un etat par type de compte;
- utilise les montants calcules des account types.

### General Ledger

- Action report: `report_general_ledger`
- Model report: `account.general_ledger.account`
- Report name: `account.general_ledger`
- Template: `account/general_ledger.fodt`
- Action UI: `act_general_ledger_account_form`
- Context model: `account.general_ledger.account.context`
- Lignes: `account.general_ledger.line`

Filtres/contexte:

- fiscal year obligatoire;
- start/end period ou from/to date, mutuellement exclusifs;
- company;
- posted only;
- journal optionnel.

Regles de calcul:

- `account.general_ledger.account` part des comptes non fermes avec type;
- les montants de debut utilisent les periodes/dates avant la borne de debut;
- les mouvements de la periode sont calcules par difference entre debut et fin;
- `line_count != 0` filtre les comptes affiches dans l'action principale;
- une vue par party existe via `account.general_ledger.account.party`;
- le drill-down ouvre `account.general_ledger.line`.

Points de comparaison standard:

- presence des colonnes start debit/credit, debit/credit, end debit/credit,
  start/end balance;
- support du filtre journal;
- support posted only;
- drill-down compte -> party -> lignes.

### Trial Balance

- Action report: `report_trial_balance`
- Model report: `account.general_ledger.account`
- Report name: `account.trial_balance`
- Template: `account/trial_balance.fodt`
- Source Python: `TrialBalance`

Regles:

- reutilise le modele de Grand Livre;
- expose les cumuls via fonctions `sum`;
- depend du meme contexte que le Grand Livre.

Points de comparaison standard:

- verifier les totaux debit/credit;
- verifier traitement des comptes sans mouvement;
- verifier posted only et bornes periode/date.

### Balance Sheet

- Action UI: `act_account_balance_sheet_tree`
- Model: `account.account.type`
- Context: `account.balance_sheet.comparison.context`
- Pas de `ir.action.report` dedie dans le XML standard observe.

Filtres/contexte:

- date;
- company;
- posted only;
- option comparison;
- date comparaison par defaut = date - 1 an.

Regles:

- affiche les account types selon leur categorie de bilan;
- montants calcules a la date;
- comparaison optionnelle.

Point important:

- c'est une vue UI analytique, pas un report FODT standard dans ce module.

### Income Statement

- Action UI: `act_account_income_statement_tree`
- Model: `account.account.type`
- Context: `account.income_statement.context`

Filtres/contexte:

- fiscal year;
- start/end period ou from/to date;
- company;
- posted only;
- comparison optionnelle avec fiscal year/periodes/dates de comparaison.

Regles:

- affiche les account types de resultat;
- calcule sur intervalle, pas seulement a date;
- comparaison optionnelle.

### Aged Balance

- Action UI: `act_aged_balance_list`
- Action report: `report_aged_balance`
- Model: `account.aged_balance`
- Context: `account.aged_balance.context`
- Report name: `account.aged_balance`
- Template: `account/aged_balance.fodt`

Filtres/contexte:

- type: customers, suppliers, customers and suppliers;
- date;
- termes 1/2/3;
- unite: day, week, month, year;
- company;
- posted only;
- currency;
- detail.

Regles de calcul:

- source: `account.move.line` joint a `account.move`, `account.account`,
  `account.account.type`, reconciliation et company;
- inclut les lignes avec party;
- inclut les comptes receivable/payable selon type demande;
- exclut les lignes reconciliees avant ou a la date, garde celles non
  reconciliees ou reconciliees apres la date;
- utilise `maturity_date`, sinon `move.date`;
- en mode detail, groupe par `move.origin`;
- calcule `balance` en devise societe et `balance_curr` en devise seconde;
- peut filtrer par devise.

Points de comparaison standard:

- definition des buckets;
- traitement de reconciliation apres date;
- source maturity date vs move date;
- detail par origine;
- devise seconde.

## 3. Reporting standard `account_invoice`

### Invoice

- Action: `report_invoice`
- Model: `account.invoice`
- Report name: `account.invoice`
- Template: `account_invoice/invoice.fodt`
- Classe: `InvoiceReport`

Regles:

- report single;
- rendu en contexte `address_with_party=True`;
- cache possible via `invoice_report_cache` uniquement pour le template standard
  `account_invoice/invoice.fodt`;
- revisions conservees dans `account.invoice.report.revision`;
- contexte expose `invoice`, `record`, `today`.

### Prepayment

- Action: `report_prepayment`
- Model: `account.invoice`
- Report name: `account.invoice`
- Template: `account_invoice/prepayment.fodt`

Point important:

- utilise le meme report name que la facture; dans ce repository,
  `purchase_trade` evite que le cache standard masque le template alternatif.

### CN/DN

- Action: `report_invoice_ict_final`
- Model: `account.invoice`
- Report name: `account.invoice`
- Template: `account_invoice/invoice_ict_final.fodt`

Regles locales:

- cote sale/out: montant negatif = Credit Note, montant positif = Debit Note;
- cote purchase/in: logique inverse conservee;
- les quantites et poids suivent les regles `purchase_trade` documentees.

## 4. Reporting standard `account_statement`

- Report class: `StatementReport`
- Report name: `account.statement`
- Source: `modules/account_statement/statement.py`

Fonction:

- impression d'un statement bancaire/caisse;
- base operationnelle: statements, lignes, origines, moves generes.

Points de comparaison:

- formats d'import supportes par modules `account_statement_*`;
- validations solde/montant/nombre de lignes;
- reconciliation apres posting.

## 5. Reporting fiscal/localisation

Modules pertinents:

- `account_es`: `reporting_tax.xml`, SII via `account_es_sii`;
- `account_fr_chorus`: e-document Chorus;
- `account_eu`: taxes/operations UE;
- `account_tax_cash`: cash basis tax groups;
- `account_export`, `account_export_winbooks`: exports comptables.

Comparaison:

- ces modules doivent etre compares pays par pays;
- ne pas les melanger avec le reporting financier general.

## 6. Reporting comptable `purchase_trade`

### Dynamic Document Templates

Source: `modules/purchase_trade/invoice.py`, `configuration.py`.

Mecanisme:

- `ReportTemplateMixin` intercepte `_execute`;
- le chemin du template est resolu depuis `purchase_trade.configuration`;
- si le champ est vide, erreur explicite `No template found`;
- si le champ ne contient pas `/`, prefixe automatique:
  `account_invoice/`, `sale/`, `purchase/`, `stock/`.

Facture:

- Invoice standard -> `invoice_report_template`;
- Prepayment -> `invoice_prepayment_report_template`;
- CN/DN -> `invoice_cndn_report_template`;
- Payment Order -> `invoice_payment_order_report_template`;
- Packing List -> `invoice_packing_list_report_template`.

Vente:

- Sale -> `sale_report_template`;
- Bill -> `sale_bill_report_template`;
- Sale final -> `sale_final_report_template`.

Achat:

- Purchase -> `purchase_report_template`.

Shipment:

- Shipping -> `shipment_shipping_report_template`;
- Insurance -> `shipment_insurance_report_template`;
- Packing List -> `shipment_packing_list_report_template`;
- COO -> `shipment_coo_report_template`.

Point de comparaison standard:

- un standard Tryton a des actions report statiques; Tradon a une resolution de
  template configurable par action.

### Documents facture ajoutes

Actions:

- `report_invoice_packing_list`
  - model `account.invoice`;
  - report name `account.invoice`;
  - template `account_invoice/packing_list.fodt`.
- `report_payment_order`
  - model `account.invoice`;
  - report name `account.invoice`;
  - template `account_invoice/payment_order.fodt`.

Regles:

- les deux passent par le meme moteur `account.invoice`;
- ils doivent bypasser le cache standard de facture;
- ils utilisent des proprietes Python `report_*`.

### Invoice Padding Report

- Model: `invoice.padding.report`
- Context: `invoice.padding.context`
- Source: `modules/purchase_trade/invoice.py`

Champs:

- party, sale, sale line, lot, product, currency, unit;
- padding quantity, unit price, padding amount;
- provisional invoice/date/state;
- final invoice/date/state;
- padding status: active/reversed.

Regles de calcul:

- source principale: `lot.lot.sale_invoice_padding`;
- joint sale line, sale, invoice lines provisoire/finale et factures;
- ne retient que les lots avec padding > 0 et facture provisoire;
- statut reversed si facture finale existe et n'est ni draft ni cancelled;
- filtres: date, party, currency, status, sale, lot.

Utilite:

- audit comptable des provisions de padding et de leur extourne.

### Fee Report

- Model: `fee.report`
- Context: `fee.context`
- Source: `modules/purchase_trade/fee.py`
- Action UI: `Fee report`

Champs:

- purchase line, sale line, shipment in/out/internal;
- type de fee, counterparty;
- type ordered/budgeted/actual;
- pay status PAY/REC;
- mode;
- quantity/unit/amount calcules depuis `fee.fee`;
- invoice liee;
- state invoiced/not invoiced;
- currency/price.

Regles:

- vue SQL sur `fee.fee`, join purchase line/purchase;
- filtres par counterparty, fee type, purchase, sale, shipment, dates;
- quantity et amount recalcules par les methodes metier du fee.

Point de comparaison:

- ce n'est pas un rapport Tryton comptable standard; c'est un reporting de
  charges/produits attendus et factures par contrats/lots/shipments.

### Valuation / PnL

- Models: `valuation.valuation`, `valuation.report`,
  `valuation.report.context`;
- Action UI: `Valuation`;
- Source: `modules/purchase_trade/valuation.py`.

Regles metier importantes:

- couvre purchase et sale;
- une sale non matchee doit avoir une valuation sale-first;
- types stockes: `pur. priced`, `sale priced`, `pur. fee`, `sale fee`,
  `derivative`, etc.;
- MTM uniquement sur prix et derivatives, jamais sur fees;
- lots ouverts finis ignores selon `Mark as finished`, mais lots physiques et
  derivatives restent valorises;
- PnL fees suit les lots effectifs: virtuel tant qu'il n'y a que lui, puis
  physiques.

Point de comparaison:

- reporting de gestion/IFRS metier, pas reporting comptable general Tryton.

### Invoicing Report

- Model: `purchase.invoice.report` dans `purchase_trade.purchase`;
- Action UI: `Invoicing Report`;
- Lie aux factures, lignes de facture, paiements et moves.

Utilite:

- vue metier achat/facturation/paiements;
- a comparer plutot a un reporting AP/AR operationnel qu'a un Grand Livre.

### Credit Risk Overview

- Model UI: `party.credit_risk_report`;
- Report: `account_credit_risk.credit_risk_overview`;
- Template: `credit_risk_templates.xml`;
- Source: `modules/purchase_trade/credit_risk.py`.

Regles:

- calcule l'exposition via lignes `account.move.line` receivable/payable selon
  logique metier;
- croise limites internes, limites assurance, devises et conditions de
  paiement.

### Forex Report / FX Revaluation

- Models: `forex.forex`, `forex.bi`;
- Wizard/action: `forex.report`;
- Source: `modules/purchase_trade/forex.py`;
- Revaluation wizard: `account.revaluate` dans `purchase_trade.stock`.

Regles:

- les contrats forex peuvent creer une facture fournisseur de frais et/ou un
  move comptable;
- les comptes avec `fx_eval` sont revalues;
- mode detail: revaluation ligne par ligne avec lien `account.move.line.revaluate`;
- mode global: revaluation par devise;
- comptes de change et journal depuis `account.configuration`.

### Physical Trade IFRS Adjustment

- Model: `account.physical_trade_ifrs`;
- Action: `Physical Trade - IFRS Adjustment`;
- Source: `modules/purchase_trade/account.py`.

Champs:

- date, comment, currency, amount.

Utilite:

- saisie/reporting d'ajustements IFRS physiques.

### Dashboard comptable

Source: `modules/purchase_trade/dashboard.py`, `dashboard.xml`.

Actions:

- Invoices not validated -> `account.invoice`;
- Invoices not paid -> `account.invoice`;
- Payments not received -> `account.payment`;
- Payments not done -> `account.payment`.

Utilite:

- reporting operationnel temps reel, non imprimable.

## 7. Ecarts structurants vs standard

- `account.invoice` est fortement enrichi par des proprietes `report_*` pour
  documents trade.
- Plusieurs actions de facture partagent `report_name = account.invoice`;
  le cache standard doit donc etre controle.
- Les templates ne sont pas seulement statiques: ils sont parametrables par
  `Document Templates`.
- Des reports de gestion metier utilisent des vues SQL (`fee.report`,
  `invoice.padding.report`, `valuation.report`) et non des reports FODT.
- La devise seconde et le taux stocke sont plus presents que dans un standard
  Tryton pur.
- Le reporting comptable standard doit etre compare separement du reporting
  PnL/valuation/frais, qui est propre au negoce physique.

