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

