From fe47f814665c6814bb4bedc6f4789f2ee2c0831a Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Tue, 5 May 2026 19:45:54 +0200 Subject: [PATCH] Add Tradon accounting report notes --- Tradon/general_ledger_gap_analysis.md | 292 ++++++++++++++++++++++++++ 1 file changed, 292 insertions(+) create mode 100644 Tradon/general_ledger_gap_analysis.md diff --git a/Tradon/general_ledger_gap_analysis.md b/Tradon/general_ledger_gap_analysis.md new file mode 100644 index 0000000..293568b --- /dev/null +++ b/Tradon/general_ledger_gap_analysis.md @@ -0,0 +1,292 @@ +# General Ledger Gap Analysis + +Date: 2026-05-05 + +Comparison scope: + +- Ideal target: `C:/DataS/OpenSquared/Tradon/Source/Accounting_report/accounting_report/Reports/GL/GL_001_general_ledger.md` +- Standards: `Docs/reporting_standards.md`, `Docs/reporting_parameters.md`, + `Docs/reporting_fields_catalog.md` +- Current Tryton/Tradon source: + - `modules/account/account.py` + - `modules/account/account.xml` + - `modules/account/view/general_ledger_account_list.xml` + - `modules/account/view/general_ledger_line_list.xml` + - `notes/accounting/reporting.md` + +## 1. Executive Summary + +Tryton already has a strong General Ledger foundation: + +- account-level opening, movement and closing balances; +- date or period filtering; +- journal filtering; +- posted-only option; +- drill-down from accounts to detailed move lines; +- running balance at line level; +- party drill-down for party-required accounts. + +The main gap is that the ideal `GL-001` is specified as a complete detail +report, grouped by account and transaction currency, with explicit opening and +closing rows and a rich audit column set. Tryton's current standard General +Ledger is split between: + +- an account summary view/report (`account.general_ledger.account`); +- a line drill-down view (`account.general_ledger.line`). + +It does not expose the ideal output as one flat, export-ready report. + +## 2. Parameters + +### Covered by Tryton + +Ideal parameter | Tryton current support +--- | --- +`date_from` | supported as `from_date` +`date_to` | supported as `to_date` +`journal` | supported in `account.general_ledger.account.context` +`entity` | supported through current `company` context + +### Partial or missing + +Ideal parameter | Gap +--- | --- +`account` | Tryton opens all non-closed typed accounts in the GL account view; account selection is possible via UI/domain/drill-down, but not a first-class explicit report parameter in the context model. +`currency` | missing as an explicit GL parameter. Tryton exposes company currency and line `second_currency`, but the GL context has no transaction-currency filter. +`entity` | supported as current company, but no explicit multi-entity selector. This may be acceptable because the ideal spec says current entity unless ERP supports more. +`document number or voucher number` | not a first-class filter in the General Ledger context. + +Out-of-scope ideal parameters (`counterparty`, `analytic_account`, +`profit_center`) are also not part of the current Tryton GL context. That aligns +with the ideal scope, except party drill-down exists as an extra Tryton feature. + +## 3. Filtering Gaps + +Ideal filter | Tryton status +--- | --- +Posting date between `date_from` and `date_to` | covered via `from_date` / `to_date`, though Tryton also supports period range. +Account or account range | partial. Account range is not visible as a standard context parameter. +Currency | gap. No explicit transaction-currency filter. +Journal | covered. +Entity | covered by company context, not explicit user-facing parameter. +Document/voucher number | gap in context; can likely be searched on line/move fields, but not a report parameter. +Posted/non-posted scope | Tryton supports `posted` boolean; ideal treats `posting_status` as output information, not default filter. + +## 4. Sorting Gaps + +Ideal default sorting: + +1. account +2. transaction currency +3. posting date +4. document number + +Tryton current behavior: + +- `account.general_ledger.account` sorts by account. +- `account.general_ledger.line` sorts by date ascending. +- running balance window orders by `move.date`, then line id. + +Gaps: + +- no primary transaction-currency sort; +- no document-number sort in default GL line ordering; +- account grouping happens one level above the line view, not as a single flat + ordered export; +- document number is not clearly mapped to `move.number` vs `move.post_number`. + +## 5. Grouping and Balance Presentation + +Ideal: + +- group by account and transaction currency; +- display opening balance row per account/currency; +- display detailed movement lines; +- display closing balance row per account/currency; +- show balances in both transaction currency and base currency; +- calculate running balances line by line. + +Tryton: + +- account summary has `start_balance`, `debit`, `credit`, `end_balance`; +- line view has `debit`, `credit`, `amount_second_currency`, `balance`; +- line running balance exists in base currency via `internal_balance` plus + start balance; +- no explicit opening/closing rows in the line report; +- no grouped transaction-currency balance presentation; +- second currency amount is a single signed amount, not split debit/credit and + running balance. + +Gaps: + +- missing account/currency opening and closing rows; +- missing transaction-currency running balance; +- missing debit/credit split in transaction currency; +- missing transaction-currency totals; +- current printable General Ledger is account-driven, not the full ideal + detailed layout. + +## 6. Output Column Gaps + +### Covered or mostly mappable + +Ideal column | Tryton source candidate +--- | --- +`entity` | `company` +`account` | `account.account.code` via ledger account +`account_name` | `account.account.name` +`base_currency` | company currency +`posting_date` | `account.move.date` / line date +`journal` | `account.move.journal` +`journal_entry_number` | likely `account.move.number` or `post_number` +`document_number` | likely `account.move.number` or invoice number depending definition +`posting_status` | `account.move.state` +`counterparty` | `account.move.line.party` +`description` | line `description_used` / move description +`reference` | move `origin`, `ext_ref`, invoice reference depending mapping +`debit_base_currency` | line `debit` +`credit_base_currency` | line `credit` +`balance_base_currency` | line `balance` +`entered_date` | line/move `create_date` +`modified_date` | line/move `write_date` + +### Gaps or mapping questions + +Ideal column | Gap +--- | --- +`transaction_currency` | Tryton has `second_currency`, but base-currency lines may have no transaction currency. Need convention: use `second_currency` else company currency? +`document_date` | not exposed in current GL line view. Could map to invoice date for invoice origins, move date otherwise. +`document_type` | not exposed. Needs mapping from origin model or journal/type. +`supplier_invoice_number` | not exposed. Could map to supplier invoice `reference` for AP invoice origins, but requires origin-specific logic. +`voucher_number` | not exposed; need decide whether `move.number`, `post_number`, `ext_ref` or another internal ref is voucher. +`payable_qty` | not in standard GL. Tradon may map from lot/invoice/fee/trade links on move lines, but requires custom logic. +`uom` | same as payable quantity. +`debit_transaction_currency` | missing as explicit split; Tryton stores signed `amount_second_currency`. +`credit_transaction_currency` | missing as explicit split. +`balance_transaction_currency` | missing as running balance. +`entered_by` | not exposed in GL view; can be mapped from `create_uid`. +`modified_by` | not exposed in GL view; can be mapped from `write_uid`. + +## 7. Sign Convention Gaps + +Ideal GL convention: + +- debit amounts positive; +- credit amounts negative; +- running balances use debit-positive and credit-negative convention. + +Tryton: + +- base debit and credit are stored/displayed as positive numeric columns; +- balance uses `debit - credit`; +- second currency is signed in `amount_second_currency`. + +Gaps: + +- ideal asks `credit_transaction_currency` and `credit_base_currency` as + negative amounts, but Tryton displays credit column as positive amount; +- need decide whether exports should preserve Tryton UI convention or transform + credits to negative for the ideal GL layout. + +## 8. Audit Trail Gaps + +Ideal requires enough audit references to trace: + +- accounting document; +- source document; +- AP supplier invoice number when available; +- creation/modification user and dates. + +Tryton has the raw ingredients: + +- move; +- line origin; +- move origin; +- invoice origin in many generated flows; +- `create_uid`, `create_date`, `write_uid`, `write_date`. + +But current GL output does not expose: + +- source document number/date/type in normalized columns; +- supplier invoice number; +- entered/modified user labels; +- voucher/reference mapping; +- payable quantity/uom for commodity postings. + +## 9. Export Gaps + +Ideal: + +- CSV; +- XLSX; +- PDF including all detail columns. + +Tryton: + +- standard UI list export may cover CSV-like exports depending client; +- printable report is `.fodt` -> usually PDF/ODT; +- the standard PDF is not designed to include all ideal detail columns; +- no dedicated XLSX export is identified for General Ledger. + +Gaps: + +- dedicated XLSX export; +- wide detailed PDF; +- one export-ready flat GL dataset. + +## 10. Controls and Reconciliation + +Ideal controls: + +- debit/credit reconcile by selected period, account and transaction currency; +- opening + movements = closing by account/currency; +- base total reconciles with trial balance; +- line audit references preserved. + +Tryton: + +- move posting enforces balanced moves in company currency; +- GL account start/debit/credit/end balances support reconciliation in base + currency; +- Trial Balance reuses the same account model, which helps base-currency + reconciliation. + +Gaps: + +- transaction-currency reconciliation by account/currency is not explicit; +- opening/movement/closing by transaction currency not implemented in current + GL model; +- audit reference completeness depends on origin mapping not present in GL + report. + +## 11. Prioritized Gaps + +Priority | Gap +--- | --- +High | Build or expose a flat detailed GL dataset matching `GL-001`, not only account summary + drill-down. +High | Add transaction currency grouping/filtering and running balances. +High | Add opening and closing rows by account and transaction currency. +High | Define mapping for `document_number`, `journal_entry_number`, `voucher_number`, `reference`. +High | Normalize source document metadata: document type, document date, supplier invoice number. +Medium | Split `amount_second_currency` into debit/credit transaction-currency columns. +Medium | Decide and implement GL sign convention transformation for credit columns. +Medium | Add audit columns `entered_by`, `entered_date`, `modified_by`, `modified_date`. +Medium | Add dedicated CSV/XLSX export target. +Low/Trade-specific | Add `payable_qty` and `uom` for commodity-related postings, probably using Tradon lot/invoice/fee links. + +## 12. Open Questions + +- In Tryton mapping, should `document_number` be `account.move.number`, + `account.move.post_number`, invoice `number`, or a context-dependent value? +- Should `journal_entry_number` be `move.number` and `document_number` be the + business document number? +- Is `voucher_number` distinct in Tradon, or should it remain blank? +- Should `transaction_currency` default to company currency when + `second_currency` is empty? +- Should credit columns be exported as negative values to match the ideal GL, + even though Tryton UI displays credit as positive? +- Which origin models should feed `document_date` and `document_type` in the + first implementation? +- Can payable quantity/uom be derived reliably from `account.move.line.lot`, + `fee`, or invoice line origin for all commodity postings? +