Files
tradon/notes/accounting/reporting.md
2026-05-05 20:14:42 +02:00

485 lines
14 KiB
Markdown

# 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.