Skip to main content
POS Analytic Config — A build-to-order Odoo module that forces every POS order to post against the analytic account defined o — 1/1Illustrative preview

A build-to-order Odoo module that forces every POS order to post against the analytic account defined on its POS

configuration, so shop, till, and channel-level analytic reporting reconciles automatically.

ECOSIRE scopes, builds, installs, and supports it for your database.

What is POS Analytic Config?

A build-to-order Odoo module that forces every POS order to post against the analytic account defined on its POS configuration, so shop, till, and channel-level analytic reporting reconciles automatically. ECOSIRE scopes, builds, installs, and supports it for your database. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Adds an `analytic_account_id` / `analytic_distribution` field to `pos.config` so each terminal owns its analytic mapping
Overrides the POS session-to-accounting bridge so posted `account.move.line` records inherit the config's analytic account
Propagates the analytic account onto generated `account.analytic.line` records for correct per-shop cost/revenue reporting
Version-aware implementation: single `analytic_account_id` on 17.0 vs JSON `analytic_distribution` on 18.0/19.0 move lines
Optional fallback chain — POS config analytic account first, then product/income-account default
Optional analytic distribution splits across multiple analytic plans (e.g. location + business unit)
Clean inheriting module using `models.Model` extension and targeted super-calls — no core file edits
Field surfaced on the POS configuration form via XML view under the Accounting section
Access controlled through `ir.model.access.csv`; multi-company record rules where isolation is required
Compatible with invoiced and non-invoiced POS orders (session close journal entries and per-order invoices)
Cashier-facing flow untouched — receipts, payments, and session close behave identically
Analytic account exposed via the ORM and XML-RPC/JSON-RPC API for downstream BI/Power BI pulls
Automated tests around the accounting-hook override where the posting logic warrants regression cover
Built and pinned in `__manifest__.py` to your exact Odoo edition (Community/Enterprise) and release

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Finance teams that run multiple points of sale in Odoo hit the same wall the moment they try to report profitability per shop, per till, or per sales channel. Out of the box, POS order lines and their journal entries inherit analytic distribution from the product or the income account default — not from the POS terminal that actually rang the sale. That means a downtown shop and an airport kiosk selling the same SKU land on the same analytic account, and your account.analytic.line records can no longer tell you which location earned the margin. The usual workaround — manual analytic re-tagging after each session close, or per-product analytic rules that ignore where the sale happened — is slow, error-prone, and collapses under real transaction volume.

POS Analytic Config closes that gap by making the analytic account a first-class property of the POS configuration itself. We extend pos.config (and, where your version requires it, pos.session) with an analytic account / analytic distribution field, then hook the order-to-accounting bridge so that when a session is posted, every generated account.move.line and the resulting account.analytic.line carry the analytic account defined on the originating terminal. The implementation is a clean inheriting module: a small models.Model extension with the new analytic_account_id (or analytic_distribution) field, a compute/@api.depends override or a targeted super-call on the POS accounting-entry preparation method (_prepare_line, _create_account_move / _prepare_invoice_line, depending on 17.0/18.0/19.0), plus XML views that surface the field on the POS configuration form under Accounting. Security is wired through ir.model.access.csv and, where multi-company isolation matters, record rules so a company only sees and sets its own terminals' analytic accounts. Nothing in the payment or receipt flow is touched — the cashier experience is unchanged; the intelligence lives entirely in the backend posting logic.

Because this is version-sensitive core-accounting territory, we build against your exact Odoo edition and release. The analytic model changed materially across recent versions (single analytic_account_id gave way to JSON analytic_distribution on move lines), and Community vs Enterprise differ in how POS sessions post to accounting, so we pin the __manifest__.py dependencies and the override strategy to what your database actually runs (17.0, 18.0, or 19.0). We validate the posting on staging with real session data, confirm the analytic lines reconcile against your existing analytic plans, and hand over automated tests where the accounting hooks warrant them. Optional extensions we frequently scope in the same engagement include fallback logic (config account first, then product default), analytic distribution splits across plans, and exposing the terminal's analytic account through the XML-RPC/JSON-RPC API for downstream BI.

This is a made-to-order engagement, not an off-the-shelf download. After a short scoping call we confirm your version, edition, chart-of-analytic setup, and any multi-company rules, then quote a fixed price and build it. Typical delivery is one working week from confirmed scope, and you receive the installable source, documentation, UAT on staging, and a post-go-live support window. Pricing starts from $999 (indicative, single-company base scope); multi-company analytic isolation, analytic distribution splits across multiple plans, and migration of historical POS entries to the new analytic mapping increase the quoted scope.

What you get

  • Installable source code for the module built against your exact Odoo version and edition
  • Installation and configuration on your staging environment, then production
  • Technical documentation (models, fields, override points, dependency notes)
  • End-user / admin guide plus a live training session for finance and POS admins
  • UAT on staging with real session data, plus a documented rollback plan
  • Post-go-live support window for defect fixes and configuration questions
  • Git repository handover with full commit history and tagged release
  • Automated tests covering the analytic posting hooks where applicable

Who this is for

Multi-location retail finance controller

Runs several shops or kiosks on Odoo POS and needs profitability and cost reporting per location. Requires every POS journal entry to land on the right analytic account automatically instead of being re-tagged by hand after each session.

Odoo ERP administrator / functional consultant

Owns the internal Odoo instance and wants a clean, upgrade-safe inheriting module rather than patched core files. Needs it pinned to their release, documented, and handed over as a git repo they can maintain.

Franchise / multi-company operations manager

Manages POS terminals across legal entities and needs analytic isolation so each company's terminals map only to its own analytic accounts, with record rules enforcing the boundary.

BI / analytics lead

Consumes analytic lines in dashboards and reporting tools and needs POS revenue and cost reliably attributed to the terminal that generated it, accessible via the ORM and JSON-RPC/XML-RPC API.

How POS Analytic Config Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Analytic sourcePOS config account applied automatically at postingWhatever you build; design burden on youFixed behavior, may map by product not terminalInherited from product/income default, not terminal
Version fitBuilt and pinned to your 17/18/19 + editionDepends on your team's version knowledgeGeneric build; version handling variesN/A — no per-terminal analytic concept
Multi-company isolationRecord rules scoped in the quoteYou implement and test the rulesRarely included out of the boxNo terminal-level analytic to isolate
Upgrade safetyClean inheriting module, no core editsQuality depends on developer disciplineVaries; may override broadlyNot applicable
Support modelPost-go-live window + git handoverIn-house onlyVendor ticket queue, no source ownershipCommunity forums / your own admins
TestingUAT on staging + automated hook testsWhatever you scheduleDepends on vendor QANone for this behavior
Fit to your dataScoped to your analytic plans and flowsFully bespoke if you have the timeOne-size-fits-all assumptionsGeneric defaults only
Time to valueone working week, fixed quote after scopingUnbounded — hiring/dev cycleInstant install but integration riskImmediate but does not solve the problem

Frequently Asked Questions about POS Analytic Config

Is this an existing app I can download and install today?

No. This is a build-to-order module. ECOSIRE builds it against your exact Odoo version and edition, installs it, and supports it. You are commissioning a productized development engagement, not buying an instant download.

How long does delivery take?

Typical delivery is one working week from confirmed scope. After the scoping call we agree on version, edition, and any multi-company or fallback requirements, then build, test on staging, and deploy. Complex multi-plan analytic distribution or historical data migration can extend the timeline, which we state up front in the quote.

How does pricing and scoping work?

Pricing starts from $999 as an indicative, single-company base-scope figure. It is not a fixed price — after a short scoping call we confirm requirements and send a fixed quote. Drivers such as multi-company analytic isolation, distribution splits across multiple analytic plans, and migrating historical POS entries increase the quoted scope.

Which Odoo versions and editions do you support?

We support Odoo 17.0, 18.0, and 19.0, in both Community and Enterprise. This matters here because the analytic model changed across versions (single `analytic_account_id` versus JSON `analytic_distribution`) and POS-to-accounting posting differs between editions, so we pin the implementation to what your database actually runs.

What about support and future updates?

Every engagement includes a post-go-live support window for defect fixes and configuration help. Because you receive the full git repository and source, your own team can maintain it. Version upgrades (for example moving the module to a newer Odoo release) can be quoted separately as a maintenance engagement.

Will this change the cashier or checkout experience?

No. The module operates entirely in the backend accounting-posting logic. Payments, receipts, and session close behave exactly as before — the only difference is that posted journal and analytic lines now carry the analytic account defined on the POS configuration.

Does it work for both invoiced and non-invoiced POS orders?

Yes. We hook the session-close journal entries for non-invoiced orders and the per-order invoice lines for invoiced orders, so the terminal's analytic account is applied consistently across both paths. We confirm both flows during UAT on staging.

Request a quote

POS Analytic Config

A build-to-order Odoo module that forces every POS order to post against the analytic account defined on its POS configuration, so shop, till, and channel-level analytic reporting reconciles automatically. ECOSIRE scopes, builds, installs, and supports it for your database.

  • Adds an `analytic_account_id` / `analytic_distribution` field to `pos.config` so each terminal owns its analytic mapping
  • Overrides the POS session-to-accounting bridge so posted `account.move.line` records inherit the config's analytic account
  • Propagates the analytic account onto generated `account.analytic.line` records for correct per-shop cost/revenue reporting
  • Version-aware implementation: single `analytic_account_id` on 17.0 vs JSON `analytic_distribution` on 18.0/19.0 move lines

Request a Quotation

Tell us about your POS Analytic Config requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.