Skip to Content

Reports & Dashboards / Nimex Solutions

Reliable processes first. Then dashboards you can decide on.

Your dashboards are only as accurate as the data behind them. We engineer both the business processes that produce reliable data and the reports that turn it into decisions.

  1. Processvalidations, approvals, dry-run imports
  2. Dataposted, reconciled, one record per event
  3. ReportKPIs defined once, drill-down to the record
  4. Decisionon figures that add up

Above: an executive dashboard of the kind we build, on sample data. Each figure moves only when the Odoo transaction behind it is confirmed, validated, posted or reconciled, in that order.

Reliable data first

A dashboard cannot be more accurate than the process that fed it.

Most "wrong report" problems are process problems: an import that ran twice, a draft counted as revenue, a rate typed by hand. So we start at the source. The controls below are the kind we build into Odoo before any chart is drawn.

1Controls at the source

  • Validation ruleTax number refusedVKN must be 10 digits, TCKN 11; placeholder numbers are rejected with a message, never guessed.
  • ApprovalDiscount 22% → waiting for approvalAbove the limit the quotation cannot be confirmed until a manager approves it.
  • Import with a test run248 rows · 3 errors · nothing writtenThe test run reports row 14, 87 and 201; the import runs only after they are fixed.
  • Unique keyPayment id already imported · skippedA collection fetched twice is recorded once.

2Records the report may count

RecordStateIn the report
INV/2026/00498PostedCounted
INV/2026/00501DraftNot yet
S00433 · 22% discountTo approveNot yet
Collection 7731-0042DuplicateSkipped
BNK1/2026/00218ReconciledCounted
  • Ledger checkΣ posted invoices = credit of 600 Domestic sales✓ 1,661,400
  • Completenessno draft, duplicate or unapproved record counted✓ 3 left out
  • CurrencyTCMB buying rate of each invoice date✓ automatic

One record per business event, in a state the report understands.

3The figure a manager sees

Revenue this month · posted invoices

1,661,400TRY

Agrees with the general ledger · drills down to 41 invoices

The same KPI on unreliable data

1,738,200+4.6%

  • an Excel import run twice+38,400
  • a draft invoice counted+31,200
  • one rate typed by hand+7,200
  • off by+76,800

Six signature dashboards

One control centre per function, each fed by the transactions it reports on.

Every dashboard below plays the events that move it: a manufacturing order closed, a delivery validated, an invoice posted, a payment reconciled. Each panel carries one of three labels, so you always know what Odoo ships, what we have built, and what we would build for you.

Built by Nimex · in our codeStandard Odoo reportingWhat we build · sample composition

01 · Manufacturing planning & operational performance

Output, load and missing material on one planning board.

A closed manufacturing order moves output, scrap and on-time performance; a validated receipt clears a shortage; a new order lands on a work centre's load and the planner moves it before the overload happens. The planned-versus-actual, scrap and material panels follow the reports of the production planning app we built.

Built by Nimex · in our codeStandard Odoo reportingWhat we build · sample composition

Reads fromManufacturing ordersWork ordersReceiptsBills of materialsScrap moves

Planned versus actual, scrap and material need come from the production planning app we built (batches capped by machine capacity, one approval releasing every order). The work-centre load uses Odoo's standard work orders. Finite-capacity scheduling and automatic machine assignment are not part of it; the planner decides.

02 · Sales, revenue & profitability

From pipeline to invoiced margin, down to the serial number.

A confirmed quotation leaves the pipeline and enters orders; the delivery fixes the cost of each serial from the receipt of that very unit; the posted invoice moves revenue and the customer's margin. Click a customer and you reach the order and the serial behind its figure.

  • Per-serial margin: the sales price of each delivered unit against its own purchase cost, in a display currency.
  • Promised stock on quotations, by product, salesperson and customer, with an Excel export.
  • Pipeline, orders and invoiced revenue from Odoo's standard CRM, Sales and Accounting data.

Built by Nimex · in our codeStandard Odoo reportingWhat we build · sample composition

Reads fromQuotationsSales ordersDeliveries · serialsReceiptsCustomer invoices

The per-serial margin report and the promised-stock dashboard exist in our code. The funnel and margin-by-customer composition is what we build on standard Odoo data for your definitions of pipeline and margin.

03 · Catering operations

The day's meals, tomorrow's answers and the week ahead.

This one runs in production. It is the operations dashboard of the catering platform we built on Odoo: customers answer tomorrow's order from a link on their phone, deliveries are validated as vans leave, and one invoice per customer bundles the delivered days of the week.

  • Today's and tomorrow's meals, customers still to answer and cancellations, as tiles that open the list behind them.
  • The week's load with closed days and public holidays.
  • Delivered days waiting for the weekly invoice run, per customer.

Nimex dashboard · in production on Odoo 18

Reads fromContractsDaily ordersMeal deliveriesWeekly invoices

Tiles, the week and the delivery tables are the platform's own dashboard. The delivered-not-invoiced panel shows what the weekly invoice run will bundle; its layout here is a sample composition. Customers answer through a token link, not a portal login.

04 · Financial reporting & receivables

Receivables, cash and e-documents that agree with each other.

An e-Fatura leaves through Nilvera and its status comes back; a bank collection arrives as a statement line and raises cash; reconciliation then lowers the overdue bucket it belonged to. Balances in euro and dollar are converted at the TCMB buying rate, so the cash total means one thing.

Built by Nimex · in our codeStandard Odoo reportingWhat we build · sample composition

Reads fromCustomer invoicesBank statement linesReconciliationsCurrency ratese-Document statuses

The aged receivable report and reconciliation are standard Odoo Accounting. The e-Fatura suite with its status sync, the Bulut Tahsilat collection import and the TCMB buying-rate provider are built by Nimex. "Successful" is Nilvera's delivery status, not a commercial acceptance. The combined screen is a sample composition.

05 · Inventory & purchasing analytics

What is promised, what is free, and what is on its way.

A salesperson promises stock on a quotation without touching the warehouse; confirming turns the promise into Odoo's reservation; the reorder rule asks for more, the purchase order is placed in the vendor's currency and the receipt records whether the vendor kept its lead time.

  • Free stock = on hand − reserved − promised, per product, with over-promised products flagged.
  • Route-created requests for quotation split into one per vendor currency.
  • Stock value, reordering and vendor lead times from standard Odoo Inventory and Purchase.

Built by Nimex · in our codeStandard Odoo reportingWhat we build · sample composition

Reads fromQuotation promisesReservationsReorder rulesPurchase ordersReceiptsValuation layers

The stock promise on quotations and the multi-currency RFQ split are built by Nimex. The promise does not trigger replenishment; Odoo's reorder rule reacts to the real reservation. Stock value, reordering and vendor lead times are standard Odoo data, composed here as a sample.

06 · Project profitability & timesheets

One margin per project, and every hour and expense behind it.

One declared basis for every bar: committed. Validated timesheets add their cost; an approved site expense is counted once, and the purchase order created from it stays out of Purchases; a posted vendor bill moves billed against not yet billed without touching the margin; a change order raises the sales side. The waterfall, the budget lines and the hours chart read the same records.

  • Margin tab: confirmed sales − confirmed purchase orders (orders created from expenses left out) − approved expenses, untaxed, each document converted at its own date into a display currency.
  • Expenses with phone photos, approved by accounting, turned into linked purchase orders.
  • Timesheet cost (validated hours × cost rate), billed versus not yet billed, and analytic budgets from standard Odoo Project, Purchase and Accounting.

Built by Nimex · in our codeStandard Odoo reportingWhat we build · sample composition

Reads fromSales ordersPurchase ordersVendor billsProject expensesTimesheetsAnalytic budgets

Built by Nimex: the project margin tab (confirmed sales − confirmed purchase orders without an expense link − approved expenses, the "Before labour" bar) and project expenses that become purchase orders. The margin tab does not include timesheet cost: that bar comes from Odoo's standard project profitability, as does the billed / not yet billed split of purchases. Budgets are Odoo's analytic budgets. Combining them in one waterfall on one committed basis is a sample composition of what we build.

What Odoo gives you, what we engineer

Start with standard Odoo reporting. Engineer only what it cannot answer.

Odoo already reports well: every list groups, filters and pivots, and spreadsheet dashboards read live data. We configure that first. Custom engineering starts where a question needs its own definition, several applications at once, or a document in your format.

The questionStandard OdooNimex engineering
Group, filter and pivot any listorders by month, invoices by customer, stock by locationPivot, graph and list views · Excel exportWe configure saved views and favourites
A live dashboard per teamKPIs on one screenSpreadsheet dashboards · Knowledge pages with embedded viewsWe build the spreadsheets on your data
Financial statementsP&L, balance sheet, aged receivable, partner ledgerAccounting reports (Odoo Enterprise)Multi-currency customer statements with payment allocations
A KPI with your own definition across appson-time, promised vs free, margin per serialPartly, with spreadsheet formulasComputed KPIs in the data model, as an Odoo screen
An operations screen people work fromtiles that open the records behind themSpreadsheet dashboards, read-onlyCustom dashboards, like the catering overview
A document in your layout and languagebilingual PDFs, formatted ExcelStandard layouts, plain list exportsPDF and Excel reports with your columns and both languages
The report comes to youevery Saturday, to the right contactPeriodic KPI digest e-mailsScheduled e-mails with your own tables, per contact and language
Data that can be trustedimports, duplicates, approvalsImport with a test button, one model at a time; large sheets time outBackground import pipelines with templates, test runs, unique keys and logs

How we build reporting

A KPI is written down before it is drawn.

Each figure gets a definition: its formula, its source records, its period, who may see it and how fast it must load. That definition is what we build, test against your ledger, and hand over.

KPI definitionon-time-delivery · v3

KPI
On-time delivery rate
Formula
deliveries done on or before the scheduled date ÷ deliveries done
Source
stock.picking · outgoing type · state Done
Grain
per day, warehouse and customer; month = sum of days
Excludes
returns, cancelled transfers, internal moves
Access
sales managers and above · record rules per company
Performance
stored, indexed fields · grouped reads · loads under 1 s on 2 years of data
Delivery
dashboard tile · Excel export · Monday 07:00 e-mail
Verified
matches the delivery list for September · 46 of 52
  1. 01Fix the process

    Where does each number start? We close the gaps first: validations, approvals, imports with test runs.

  2. 02Model the data

    Stored fields and links so a figure is computed once, in the database, not in a spreadsheet.

  3. 03Define the KPIs

    Formula, source, grain and exclusions agreed with the people who will be judged by them.

  4. 04Set access rights

    Privileges enforced in the data layer, not only by hiding a menu.

  5. 05Make it fast

    Indexes, stored computations and grouped queries, tested on realistic volumes.

  6. 06Deliver and verify

    Dashboard, Excel, PDF or scheduled e-mail, reconciled with your ledger before go-live.

Report library

Documents and reports we have already built in Odoo.

Not every report is a dashboard. These are documents our code generates today, each from the record it belongs to, shown here with sample content.

  • PDFEN · TRPROFORMA INVOICE S00148Work table 1800 · 4 × 3,600.0014,400.00VAT 20% on 14,400.002,880.00Delivery · EXW · 30 daysTotal EUR 17,280.00

    Bilingual quotations and pro-formasCompany layout, tax-by-tax breakdown, dimensions on lines

  • PDFA4 landscapePACKING LIST WH/OUT/00042CaseSize cmkg01 · Work table184 × 84 × 226102 · Shelving120 × 80 × 952122 cases · 273 kg · 1.03 m³

    Export packing listOne row per move with case, brand and packed size, from the delivery

  • PDFTRY · EURCUSTOMER STATEMENTDocumentPaidBalanceINV/2026/0043185,000.000.00INV/2026/00476—127,400.00Balance TRY 127,400.00 · EUR 0.00

    Multi-currency customer statementPer-invoice payment allocations and running balances; yearly partner ledger

  • XLSXkitchenMeal list · 15.10.2026CustomerMenuMealsKuzey Gıda A.Ş.Öğle40Marmara LojistikDiyet34Total 124 meals · 4 deliveries

    Daily kitchen meal listExcel for the kitchen from the next day's orders

  • E-MAILTR · ENWeekly meal summaryDayMenuMealsMon · Tue · Wed · FriÖğle40 · 36 · 40 · 40Thuday off—Week total 156 · Saturday 06:00

    Weekly bilingual meal summarySent per contract to the customer's contact, copy kept in the chatter

  • XLSXsame filtersSales reportProductSoldAmountHydraulic valve DN501,2402,108,000Ball valve DN253,120936,000Grouped by product type

    Sales and promised-stock exportThe dashboard's data in Excel, with the dashboard's filters

  • PDFTRY · EUR · USDCHEQUE MATURITYDueDrawerAmount18.10.2026Ege Ambalaj50,000.0002.11.2026Trakya Paket32,500.00Maturing in 7 days: 1 · in 30 days: 4

    Cheque reports and maturity listReceived and issued cheques, portfolio by state and currency

  • XLSXafter importMissing itemsRowItemReason14KZ-SH-3198unknown product87BOM-0412no route3 rows not created · 1,197 created

    Import result reportAfter a catalogue or bill-of-materials import: what was not created, and why

Chat with us