This module extends the functionality of the point of sale by allowing a better control at the closing of the session.
- Show differences for all statements chosen (see config part)
- Allow user to control each statement. (not only the cash statement, by default) and change his starting and ending balance
The cashbox lines are recorded and can be found later.
- Quickly solve differences (we can set an absolute limit), thanks to pos_move_reason
See this gif where where we set ending balance with difference, solve it and close session :
As the verification is more complete, allow the user to reopen a new session, if the first one is in a closed state.
Extra checks are done, to prevent user errors:
- It is not possible to click on the button 'Close Session' if there are some draft orders.
auto_awesome What this module does
AI-generated from the code · Odoo 12.0Extends Point of Sale session closing so every payment journal marked for control must have a matching counted balance before the session can be validated, with a cash-count wizard and an automatic difference solver.
This module strengthens the closing of a Point of Sale session. On each bank or cash journal you can tick "POS Journal Control" so that its statement is checked at closing; a default cashbox pattern can also be set on the journal.
On the session form you get a summary table of all statements, showing opening balance, transactions, real closing balance and the difference. Buttons let you set the opening and ending balance through a cash-count wizard where you enter the number of coins and bills; the counted cashbox is saved on the statement for later reference.
Business rules added: - You cannot close a session while draft orders remain. - You cannot validate a session if a controlled journal still shows a non-zero difference; you must correct its starting or ending balance. - Only one active session per user and per point of sale is allowed.
If the difference is small enough (below the limit set on the POS configuration) and a move reason is configured, an "automatic solve" button appears to book the difference as income or expense. Once a session is closed, a "New Session" button lets you reopen one directly.
Depends on
Required by other modules
Models and fields (9)
- pos.config · extends an existing modelautosolve_limit (Autosolve limit), autosolve_pos_move_reason (Autosolve pos move reason)
- pos.session · extends an existing modelstatement_ids, control_statement_ids (Control statements), summary_statement_ids (Summary statements), control_register_balance (Real Closing Balances), control_register_difference (Total difference), control_register_balance_end (Theoretical Closing Balances), control_register_balance_start (Opening Balances), control_register_total_entry_encoding (Transactions)
- account.journal · extends an existing modelpos_control (POS Journal Control), cashbox_default (Cashbox Defaut)
- account.cashbox.line · extends an existing modelnumber, balance_moment (Balance moment)
- wizard.update.cashbox · new modeltotal (Total), cashbox_lines_ids (Cashbox Lines)
- account.bank.statement · extends an existing modelcashbox_ending (Cashbox end), is_pos_control (Pos control Bank statement), control_balance (Controled Balance), cashbox_starting (Cashbox start), display_autosolve (Display autosolve), pos_session_state (Pos session state), control_difference (Control Difference)
- wizard.update.cashbox.line · new modelnumber (Number of Coins/Bills), wiz_id (Wizard), subtotal (Subtotal), cashbox_id (Cashbox), coin_value (Coin/Bill Value), currency_id, balance_moment (Balance moment)
- wizard.update.bank.statement · new modelname, journal_id, session_id (Current Session), balance_end (Computed Balance), currency_id, statement_id, balance_start (Starting Balance), cashbox_lines, balance_moment (Balance moment), balance_end_real (Real End Balance), balance_start_real (Real Start Balance), total_entry_encoding
- account.bank.statement.cashbox · extends an existing modelname (Name), is_pattern (Is a selectable pattern)
Text generated by AI (DeepSeek) from reading the Odoo 12.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 1 confirmed, 8 with no information of 9 versions.
Sources · Odoo 12.0
Confirmed on 2026-11-03 in branch 12.0 of OCA/pos.
terminal Installation and usage
OCA documentation · Odoo 12.0Configuration
Source · Odoo 12.0To configure this module, you need to:
Configure the journals you want to control in your point of sale (POS)
- Go to Invoicing / Configuration / Journals / Journals
- Check the box 'POS Journal Control' if you want to enable this feature for this journal
- Unchecked journal will be in grey
- Configure a Cashbox default if you want Odoo give by default lines when changing balance
Configure your POS configuration
- Go to Point of Sale / Configuration / Point of Sale /
- Choose your Payments methods (1)
- Check Cash Control (2)
- (optional) Choose a "pos move reason" to ausolve difference (3) (see pos_move_reason module for more details)
- (optional) Choose a limit to allow or not the user to autosolve control difference in pos - Set 0 if you don't want any limit. (4)
No verified information in OCA: Installation, Usage.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.