Accounting notes
This commit is contained in:
484
notes/accounting/reporting.md
Normal file
484
notes/accounting/reporting.md
Normal file
@@ -0,0 +1,484 @@
|
||||
# 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.
|
||||
|
||||
Reference in New Issue
Block a user