Romania - Stock Accounting
Project description
Romania - Stock Accounting
This module provides Romanian-specific stock accounting features that align with Romanian accounting standards and regulations. Below are the configuration options available.
Overview
The module extends Odoo’s standard stock accounting to meet Romanian accounting requirements, providing:
Location-specific accounting configurations
Romanian-specific stock valuation accounts
Product category stock account customization
Warehouse fiscal position management
Specialized accounts for stock operations
Per-location FIFO valuation (vs. Odoo’s default company-wide FIFO)
Automatic negative stock compensation for FIFO products
Per-location FIFO
For products with cost_method=fifo, the module values outgoing moves against the FIFO stack of the source location rather than the company-wide stack. Each outgoing move is automatically split into one stock.move per FIFO layer (e.g. an outgoing of 4 units from a location with IN 2@10 + IN 3@8 produces a 2x10 move + a 2x8 move).
Internal transfers (internal → internal or via transit) are treated as both is_in and is_out on the same move:
they consume from the FIFO stack of the source location,
they enter the FIFO stack of the destination location with the value pulled from the source,
they generate an accounting entry through the location’s valuation account (or the company-level transfer account if locations share an account).
Controlled by res.company.fifo_per_location (defaults to True for Romanian companies, computed from country_id, editable per company).
Negative stock compensation
When a FIFO outgoing move happens before the corresponding incoming move (i.e. the location FIFO stack is empty), the outgoing value falls back to the product’s standard_price. The pending quantity is tracked on the outgoing move via fifo_neg_pending_qty / fifo_neg_origin_value.
When the next matching incoming move is posted, the module:
allocates the new incoming value across pending outgoing moves (FIFO);
updates stock.move.value on the outgoing moves to reflect the real purchase price;
emits an account.move correction that debits the variation/COGS account and credits the stock valuation account for the delta;
links that correction back to the originating IN move via account.move.fifo_neg_origin_move_id for traceability.
Compensation is idempotent — if _set_value is re-invoked on the same IN move (e.g. when the supplier invoice is posted), the existing compensation is detected and not duplicated.
Controlled by res.company.fifo_location_negative_compensation (defaults to True for Romanian companies, editable per company).
Performance notes
Partial composite index on stock_move(product_id, location_dest_id, date DESC, id DESC) WHERE state='done' AND is_in=true powers the FIFO stack lookup with index-only scans on large histories.
Partial index on stock_move(...) WHERE fifo_neg_pending_qty > 0 keeps the compensation search constant-time even with millions of historical moves.
A request-scoped cache (context['fifo_stack_cache']) reuses the same _run_fifo_get_stack result across batched lookups in product._compute_value and stock.quant._compute_value — large Inventory Valuation reports drop from O(N) queries to O(distinct (product, location)) queries.
Table of contents
Changelog
19.0.0.19.1
Fix TypeError: '<' not supported between instances of 'bool' and 'str' in stock_move._compute_account when sorting the account move lines. A journal item without an account (or whose account has no code) returns False for account_id.code, which cannot be compared against the string codes of the other lines. The sort key now falls back to an empty string, and the subsequent code[0] check guards against an empty/falsy code.
Bug Tracker
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed feedback.
Do not contact contributors directly about support or help with technical issues.
Credits
Contributors
-
Fekete Mihai <feketemihai@nexterp.ro>
Alexandru Teodor <teodoralexandru@nexterp.ro>
-
Dorin Hongu <dhongu@gmail.com>
Do not contact contributors directly about support or help with technical issues.
Maintainers
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.
Current maintainers:
This module is part of the OCA/l10n-romania project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file odoo_addon_l10n_ro_stock_account-19.0.0.20.0-py3-none-any.whl.
File metadata
- Download URL: odoo_addon_l10n_ro_stock_account-19.0.0.20.0-py3-none-any.whl
- Upload date:
- Size: 89.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8e4f55be4a6a691e0e4e818be2df1318aea09c5653dd7d89efcffc21e6bf3b5
|
|
| MD5 |
2f4d9ff95a673ad366fb38ef1fda25bc
|
|
| BLAKE2b-256 |
da48073b61a72666884f73b4609211d4d0ec33ee211271aa9f0508162defa12f
|