Skip to main content

Data dictionary

Generated from the views' own descriptions in putki-odoo-dwh (tools/generate/data_dictionary.py), so it matches the views on odoo.putki.io.

Consumers read these views in the datamart database (odoo_datamarts by default), never the tables behind them. Conventions:

  • *_key columns join to the dimension views: the version of the customer, product, ... that was valid on the fact's date. Keys 0 and -1 are Unknown and Not applicable.
  • *_id columns are Odoo record ids.
  • Amounts without a suffix are in the document's currency, *_company_ccy in the company's own currency (adds up within one company), *_reporting_ccy in the reporting currency (adds up across companies).
  • Dates are local dates in DW_TIMEZONE. Overdue, expired, late and aging are measured against the as-of date (conformed.v_as_of): AS_OF_DATE, or today.
  • Every view's description gives its grain and which measures add up.

conformed​

conformed.v_as_of​

The date the views report as of: overdue, expired, aging and late are measured against it. The AS_OF_DATE setting when one is set (is_fixed), else today in DW_TIMEZONE.

ColumnTypeDescription
as_of_datedateThe date the views report as of: AS_OF_DATE, or today in DW_TIMEZONE.
is_fixedbooleanTrue when AS_OF_DATE sets the date, false when it is today.
timezonetextDW_TIMEZONE: the time zone of the dates.

conformed.v_company​

Odoo companies, with their own currency. Amounts in *_company_ccy columns are in this currency; *_reporting_ccy columns are in the reporting currency of the whole warehouse.

ColumnTypeDescription
company_keybigintSurrogate key of this view: one per version of the record.
company_idintegerOdoo id: res.company id.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
currency_nametextCurrency code: the company's own currency (v_company), or the document's (facts).
partner_idintegerOdoo id: res.partner id of the company itself.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

conformed.v_customer​

Customers: the commercial partner (company, or an individual without one). One row per version; is_current marks today's values. Keys 0 and -1 are Unknown and Not applicable. Country and is_company keep history, the rest is today's value. is_intercompany: the customer is one of the Odoo companies.

ColumnTypeDescription
customer_keybigintSurrogate key of this view: one per version of the record.
customer_idintegerOdoo id: res.partner id of the customer (the commercial partner).
customer_nametextName of the customer.
is_companybooleanTrue for a company, false for an individual.
emailtextEmail address.
phonetextPhone number.
citytextCity.
ziptextPostal code.
state_nametextRegion (state or province).
country_nametextCountry.
industry_nametextIndustry.
customer_rankintegerHow often the partner was a customer (Odoo's counter).
supplier_rankintegerHow often the partner was a supplier (Odoo's counter).
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.
is_intercompanybooleanTrue when the customer is one of the Odoo companies.

conformed.v_date​

Calendar, 2000-2050. date_key = yyyymmdd; 0 = Unknown, -1 = Not applicable. Sort months by month_key.

ColumnTypeDescription
date_keyintegerThe day as yyyymmdd; 0 = Unknown, -1 = Not applicable.
full_datedateThe calendar day.
day_of_monthintegerDay of the month.
day_of_weekintegerISO day of the week: 1 = Monday.
day_nametextName of the day.
is_weekendbooleanTrue on Saturday and Sunday.
iso_weekintegerISO week number.
iso_yearintegerISO week-numbering year.
month_numberintegerMonth, 1-12.
month_nametextName of the month.
month_shorttextShort name of the month.
month_keyintegerMonth as yyyymm; sorts chronologically.
year_monthtextMonth as 'yyyy-mm'.
quarterintegerQuarter, 1-4.
quarter_nametextQuarter, 'Q1'-'Q4'.
yearintegerYear.

conformed.v_employee​

Employees who book timesheets. One row per version (department and job title keep history).

ColumnTypeDescription
employee_keybigintSurrogate key of this view: one per version of the record.
employee_idintegerOdoo id: hr.employee id.
employee_nametextName of the employee.
department_nametextDepartment of the employee.
job_titletextJob title.
user_idintegerOdoo id: res.users id.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

conformed.v_product​

Product variants. One row per version; is_current marks today's values.

ColumnTypeDescription
product_keybigintSurrogate key of this view: one per version of the record.
product_idintegerOdoo id: product.product id.
product_tmpl_idintegerOdoo id: product.template id.
product_nametextName of the product (template).
variant_nametextName of the variant, with its attribute values.
default_codetextInternal reference of the product.
category_nametextProduct category (full path).
product_typetextOdoo product type: consu (goods), service or combo.
list_pricenumericSales price on the product.
standard_pricenumericCost on the product.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.
is_storablebooleanTrue when Odoo keeps the product in stock (tracks its quantity); empty unless the inventory data mart is on.
unit_of_measuretextThe product's unit of measure: the unit its quantities are counted in.

conformed.v_project​

Projects, with how they are billed and the sales order they were sold on (if any).

ColumnTypeDescription
project_keybigintSurrogate key of this view: one per version of the record.
project_idintegerOdoo id: project.project id.
project_nametextName of the project.
manager_nametextName of the project manager.
privacy_visibilitytextWho can see the project (Odoo's setting).
date_startdateStart date of the project.
date_enddateEnd date of the project.
is_billablebooleanTrue when the hours (or the project's tasks) are billed to the customer.
billing_typetextHow Odoo bills it: on timesheets, fixed price, milestones, manually, or not at all.
project_statustextStatus of the project's last update: On track, At risk, Off track, On hold, Done, Not set.
allocated_hoursnumericHours planned.
sales_order_idintegerOdoo id: sale.order id.
sales_order_nametextOrder reference, e.g. S00042.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

conformed.v_task_stage​

Task stages; sort by stage_sequence.

ColumnTypeDescription
stage_keybigintSurrogate key of this view: one per version of the record.
stage_idintegerOdoo id: project.task.type id.
stage_nametextName of the stage.
stage_sequenceintegerOrder of the stage: sort on it.
is_foldedbooleanTrue for stages folded in Odoo's kanban view, usually closing ones.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

conformed.v_user​

Odoo users: salespeople, project managers and task assignees.

ColumnTypeDescription
user_keybigintSurrogate key of this view: one per version of the record.
user_idintegerOdoo id: res.users id.
user_nametextName of the user.
logintextLogin of the user.
job_titletextJob title.
work_emailtextWork email of the user (from their employee).
is_internalbooleanTrue for internal users, false for portal and public users.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

sales​

sales.v_crm_stages​

Pipeline stages; sort by stage_sequence. is_won marks the stage of won opportunities.

ColumnTypeDescription
crm_stage_keybigintSurrogate key of this view: one per version of the record.
crm_stage_idintegerOdoo id: crm.stage id.
stage_nametextName of the stage.
stage_sequenceintegerOrder of the stage: sort on it.
is_wonbooleanTrue for the pipeline stage of won opportunities.
is_foldedbooleanTrue for stages folded in Odoo's kanban view, usually closing ones.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

sales.v_invoice_lines​

Grain: one product line of a posted customer invoice or credit note. Quantities and amounts are negative on credit notes, so sums give net invoiced revenue. sales_order_id links the line to the order it invoices. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
invoice_line_idintegerOdoo id: account.move.line id.
invoice_idintegerOdoo id: account.move id.
invoice_nametextInvoice number, e.g. INV/2026/00042.
document_typetextInvoice or Credit note.
payment_statetextOdoo's payment state: not_paid, in_payment, paid, partial, reversed.
invoice_datedateDate of the invoice date, in DW_TIMEZONE.
invoice_month_keyintegerMonth of the invoice date, as yyyymm.
invoice_year_monthtextMonth of the invoice date, as 'yyyy-mm'.
invoice_yearintegerYear of the invoice date.
customer_keybigintKey to conformed.v_customer: the version valid on the fact's date.
customer_idintegerOdoo id: res.partner id of the customer (the commercial partner).
customer_nametextName of the customer.
customer_countrytextCountry of the customer, as of the fact's date.
product_keybigintKey to conformed.v_product: the version valid on the fact's date.
product_idintegerOdoo id: product.product id.
product_nametextName of the product (template).
product_categorytextProduct category (full path).
salesperson_keybigintKey to conformed.v_user (the salesperson): the version valid on the fact's date.
salesperson_nametextName of the salesperson.
sales_team_keybigintKey to sales.v_sales_teams: the version valid on the fact's date.
sales_team_nametextName of the sales team.
sales_line_idintegerOdoo id: sale.order.line id.
sales_order_idintegerOdoo id: sale.order id.
sales_order_nametextOrder reference, e.g. S00042.
currency_nametextCurrency code: the company's own currency (v_company), or the document's (facts).
quantitynumericQuantity, in the product's unit (unit_of_measure; negative on credit notes).
price_unitnumericUnit price, per the line's own unit (order_unit or invoiced_unit; not additive).
discount_pctnumericDiscount percentage (not additive).
amount_untaxednumericUntaxed amount, in the document's currency.
amount_totalnumericTotal amount, tax included, in the document's currency.
amount_untaxed_company_ccynumericUntaxed amount, in the company's own currency: adds up within one company only.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
customer_is_intercompanybooleanTrue when the customer is one of the Odoo companies: a sale between companies.
amount_untaxed_reporting_ccynumericUntaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
unit_of_measuretextThe product's unit of measure: the unit its quantities are counted in.
invoiced_quantitynumericQuantity as on the invoice line, in invoiced_unit (price_unit is per invoiced_unit; negative on credit notes).
invoiced_unittextThe unit the line was invoiced in.

sales.v_invoices​

Grain: one posted customer invoice or credit note. Amounts in the company currency, negative for credit notes, so sums give net figures. amount_residual_company_ccy is what is still to be paid today; is_overdue, days_overdue and aging_bucket are relative to today. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
invoice_idintegerOdoo id: account.move id.
invoice_nametextInvoice number, e.g. INV/2026/00042.
move_typetextout_invoice (invoice) or out_refund (credit note).
document_typetextInvoice or Credit note.
payment_statetextOdoo's payment state: not_paid, in_payment, paid, partial, reversed.
is_openbooleanTrue when the task is open.
is_overduebooleanTrue when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of).
days_overdueintegerDays past the deadline or due date, as of the as-of date; empty when not overdue.
aging_buckettextPaid, Not due, 1-30 days, 31-60 days, 61-90 days or Over 90 days past due, as of the as-of date.
invoice_datedateDate of the invoice date, in DW_TIMEZONE.
invoice_month_keyintegerMonth of the invoice date, as yyyymm.
invoice_year_monthtextMonth of the invoice date, as 'yyyy-mm'.
invoice_yearintegerYear of the invoice date.
due_datedateDate of the payment due date, in DW_TIMEZONE.
customer_keybigintKey to conformed.v_customer: the version valid on the fact's date.
customer_idintegerOdoo id: res.partner id of the customer (the commercial partner).
customer_nametextName of the customer.
customer_countrytextCountry of the customer, as of the fact's date.
salesperson_keybigintKey to conformed.v_user (the salesperson): the version valid on the fact's date.
salesperson_nametextName of the salesperson.
sales_team_keybigintKey to sales.v_sales_teams: the version valid on the fact's date.
sales_team_nametextName of the sales team.
invoice_origintextSource document, e.g. the order reference.
reversed_invoice_idintegerOdoo id: account.move id of the invoice a credit note reverses.
currency_nametextCurrency code: the company's own currency (v_company), or the document's (facts).
line_countintegerNumber of lines.
amount_untaxed_company_ccynumericUntaxed amount, in the company's own currency: adds up within one company only.
amount_total_company_ccynumericTotal amount, tax included, in the company's own currency: adds up within one company only.
amount_residual_company_ccynumericAmount still to be paid (at the invoice date's rate in the reporting currency), in the company's own currency: adds up within one company only.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
customer_is_intercompanybooleanTrue when the customer is one of the Odoo companies: a sale between companies.
amount_untaxed_reporting_ccynumericUntaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_total_reporting_ccynumericTotal amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_residual_reporting_ccynumericAmount still to be paid (at the invoice date's rate in the reporting currency), in the reporting currency (REPORTING_CURRENCY): adds up across companies.

sales.v_opportunities​

Grain: one lead or opportunity (lead_type), archived ones included. status: Open, Won, Lost or Archived. expected_revenue is additive; probability is not. Win rate = Won / (Won + Lost). ordered_amount_company_ccy is the untaxed total of the confirmed orders linked to it. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
opportunity_idintegerOdoo id: crm.lead id.
opportunity_nametextName of the lead or opportunity.
lead_typetextlead or opportunity.
statustextOpen, Won, Lost (archived with probability 0) or Archived.
is_overduebooleanTrue when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of).
crm_stage_keybigintKey to sales.v_crm_stages: the version valid on the fact's date.
stage_nametextName of the stage.
stage_sequenceintegerOrder of the stage: sort on it.
created_datedateDate of creation, in DW_TIMEZONE.
created_month_keyintegerMonth of creation, as yyyymm.
created_year_monthtextMonth of creation, as 'yyyy-mm'.
conversion_datedateDate of the conversion from lead to opportunity, in DW_TIMEZONE.
closed_datedateDate of closing, in DW_TIMEZONE.
closed_month_keyintegerMonth of closing, as yyyymm.
closed_year_monthtextMonth of closing, as 'yyyy-mm'.
deadline_datedateDate of the deadline, in DW_TIMEZONE.
last_stage_change_datedateDate of the last stage change, in DW_TIMEZONE.
customer_keybigintKey to conformed.v_customer: the version valid on the fact's date.
customer_idintegerOdoo id: res.partner id of the customer (the commercial partner).
customer_nametextName of the customer.
customer_countrytextCountry of the customer, as of the fact's date.
salesperson_keybigintKey to conformed.v_user (the salesperson): the version valid on the fact's date.
salesperson_nametextName of the salesperson.
sales_team_keybigintKey to sales.v_sales_teams: the version valid on the fact's date.
sales_team_nametextName of the sales team.
lost_reasontextWhy the opportunity was lost.
source_nametextMarketing source (UTM).
medium_nametextMarketing medium (UTM).
campaign_nametextMarketing campaign (UTM).
prioritytextOdoo's priority (0 = normal, higher = more urgent).
is_activebooleanFalse for records archived in Odoo.
probabilitynumericProbability of winning, in % (not additive).
expected_revenuenumericExpected revenue, in the company's currency.
prorated_revenuenumericExpected revenue times probability, in the company's currency.
days_to_closenumericDays from creation to won or lost (not additive: average it).
quotation_countintegerNumber of quotations it led to.
order_countintegerNumber of confirmed orders it led to.
ordered_amount_company_ccynumericUntaxed total of the confirmed orders it led to, in the company's own currency: adds up within one company only.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
customer_is_intercompanybooleanTrue when the customer is one of the Odoo companies: a sale between companies.
expected_revenue_reporting_ccynumericExpected revenue, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
prorated_revenue_reporting_ccynumericExpected revenue times probability, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
ordered_amount_reporting_ccynumericUntaxed total of the confirmed orders it led to, in the reporting currency (REPORTING_CURRENCY): adds up across companies.

sales.v_sales_order_lines​

Grain: one confirmed sales order line with a product. Additive: quantities and amounts (amount_* in the order currency, *_company_ccy in the company currency; add up the company currency across orders). Not additive: price_unit, discount_pct. Attributes are as of the order date; join conformed views on *_key for other versions. project_id and task_id link to the Projects mart. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
sales_line_idintegerOdoo id: sale.order.line id.
order_idintegerOdoo id: sale.order id.
order_nametextOrder reference, e.g. S00042.
order_date_keyintegerKey to conformed.v_date: the order date (for a quotation: empty until confirmed), as yyyymmdd (-1 = none).
order_datedateDate of the order date (for a quotation: empty until confirmed), in DW_TIMEZONE.
order_month_keyintegerMonth of the order date (for a quotation: empty until confirmed), as yyyymm.
order_year_monthtextMonth of the order date (for a quotation: empty until confirmed), as 'yyyy-mm'.
order_quartertextQuarter of the order date, 'Q1'-'Q4'.
order_yearintegerYear of the order date.
commitment_datedateDate of the delivery date promised to the customer, in DW_TIMEZONE.
customer_keybigintKey to conformed.v_customer: the version valid on the fact's date.
customer_idintegerOdoo id: res.partner id of the customer (the commercial partner).
customer_nametextName of the customer.
customer_countrytextCountry of the customer, as of the fact's date.
customer_is_companybooleanTrue when the customer is a company.
product_keybigintKey to conformed.v_product: the version valid on the fact's date.
product_idintegerOdoo id: product.product id.
product_nametextName of the product (template).
variant_nametextName of the variant, with its attribute values.
product_categorytextProduct category (full path).
product_typetextOdoo product type: consu (goods), service or combo.
salesperson_keybigintKey to conformed.v_user (the salesperson): the version valid on the fact's date.
salesperson_nametextName of the salesperson.
sales_team_nametextName of the sales team.
currency_nametextCurrency code: the company's own currency (v_company), or the document's (facts).
quantitynumericQuantity, in the product's unit (unit_of_measure; negative on credit notes).
quantity_deliverednumericQuantity delivered, in the product's unit.
quantity_invoicednumericQuantity invoiced, in the product's unit.
price_unitnumericUnit price, per the line's own unit (order_unit or invoiced_unit; not additive).
discount_pctnumericDiscount percentage (not additive).
discount_amountnumericDiscount, in the document's currency.
amount_untaxednumericUntaxed amount, in the document's currency.
amount_taxnumericTax, in the document's currency.
amount_totalnumericTotal amount, tax included, in the document's currency.
marginnumericMargin (price minus cost), in the document's currency.
amount_untaxed_company_ccynumericUntaxed amount, in the company's own currency: adds up within one company only.
amount_total_company_ccynumericTotal amount, tax included, in the company's own currency: adds up within one company only.
margin_company_ccynumericMargin (price minus cost), in the company's own currency: adds up within one company only.
sales_team_keybigintKey to sales.v_sales_teams: the version valid on the fact's date.
customer_industrytextIndustry of the customer.
invoice_statustextOdoo's invoicing status: no, to invoice, invoiced or upselling.
quantity_to_invoicenumericQuantity still to invoice, in the product's unit.
amount_invoiced_company_ccynumericUntaxed amount invoiced so far, in the company's own currency: adds up within one company only.
amount_to_invoice_company_ccynumericUntaxed amount still to invoice, in the company's own currency: adds up within one company only.
is_servicebooleanTrue for a service product line.
opportunity_idintegerOdoo id: crm.lead id.
project_idintegerOdoo id: project.project id.
task_idintegerOdoo id: project.task id.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
customer_is_intercompanybooleanTrue when the customer is one of the Odoo companies: a sale between companies.
amount_untaxed_reporting_ccynumericUntaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_total_reporting_ccynumericTotal amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
margin_reporting_ccynumericMargin (price minus cost), in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_invoiced_reporting_ccynumericUntaxed amount invoiced so far, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_to_invoice_reporting_ccynumericUntaxed amount still to invoice, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
unit_of_measuretextThe product's unit of measure: the unit its quantities are counted in.
order_quantitynumericQuantity as on the order line, in order_unit (price_unit is per order_unit).
order_unittextThe unit the line was ordered in, e.g. a pack of 6 of a product counted in units.

sales.v_sales_orders​

Grain: one quotation or order, in every state (order_status: Quotation, Quotation sent, Sales order, Cancelled). Additive: amounts, line_count. Not additive: days_to_confirm, days_to_invoice (average them). order_date is empty until the quotation is confirmed; filter on quotation_date for the funnel and on order_date for sales. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
order_idintegerOdoo id: sale.order id.
order_nametextOrder reference, e.g. S00042.
statetextOdoo's state: draft, sent, sale (confirmed) or cancel.
order_statustextQuotation, Quotation sent, Sales order or Cancelled.
invoice_statustextOdoo's invoicing status: no, to invoice, invoiced or upselling.
is_confirmedbooleanTrue for a confirmed order.
is_cancelledbooleanTrue for a cancelled order.
is_open_quotationbooleanTrue for a quotation not confirmed or cancelled yet.
is_expiredbooleanTrue for an open quotation past its expiry date, as of the as-of date.
quotation_datedateDate of the date the quotation was created, in DW_TIMEZONE.
quotation_month_keyintegerMonth of the date the quotation was created, as yyyymm.
quotation_year_monthtextMonth of the date the quotation was created, as 'yyyy-mm'.
order_datedateDate of the order date (for a quotation: empty until confirmed), in DW_TIMEZONE.
order_month_keyintegerMonth of the order date (for a quotation: empty until confirmed), as yyyymm.
order_year_monthtextMonth of the order date (for a quotation: empty until confirmed), as 'yyyy-mm'.
validity_datedateDate of the date the quotation expires, in DW_TIMEZONE.
commitment_datedateDate of the delivery date promised to the customer, in DW_TIMEZONE.
first_invoice_datedateDate of the first posted invoice, in DW_TIMEZONE.
customer_keybigintKey to conformed.v_customer: the version valid on the fact's date.
customer_idintegerOdoo id: res.partner id of the customer (the commercial partner).
customer_nametextName of the customer.
customer_countrytextCountry of the customer, as of the fact's date.
customer_industrytextIndustry of the customer.
salesperson_keybigintKey to conformed.v_user (the salesperson): the version valid on the fact's date.
salesperson_nametextName of the salesperson.
sales_team_keybigintKey to sales.v_sales_teams: the version valid on the fact's date.
sales_team_nametextName of the sales team.
opportunity_idintegerOdoo id: crm.lead id.
project_idintegerOdoo id: project.project id.
source_nametextMarketing source (UTM).
medium_nametextMarketing medium (UTM).
campaign_nametextMarketing campaign (UTM).
payment_term_nametextPayment terms.
currency_nametextCurrency code: the company's own currency (v_company), or the document's (facts).
line_countintegerNumber of lines.
amount_untaxednumericUntaxed amount, in the document's currency.
amount_totalnumericTotal amount, tax included, in the document's currency.
amount_untaxed_company_ccynumericUntaxed amount, in the company's own currency: adds up within one company only.
amount_total_company_ccynumericTotal amount, tax included, in the company's own currency: adds up within one company only.
margin_company_ccynumericMargin (price minus cost), in the company's own currency: adds up within one company only.
amount_invoiced_company_ccynumericUntaxed amount invoiced so far, in the company's own currency: adds up within one company only.
amount_to_invoice_company_ccynumericUntaxed amount still to invoice, in the company's own currency: adds up within one company only.
days_to_confirmnumericDays from quotation to confirmation (not additive: average it).
days_to_invoicenumericDays from confirmation to the first invoice (not additive: average it).
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
customer_is_intercompanybooleanTrue when the customer is one of the Odoo companies: a sale between companies.
amount_untaxed_reporting_ccynumericUntaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_total_reporting_ccynumericTotal amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
margin_reporting_ccynumericMargin (price minus cost), in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_invoiced_reporting_ccynumericUntaxed amount invoiced so far, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_to_invoice_reporting_ccynumericUntaxed amount still to invoice, in the reporting currency (REPORTING_CURRENCY): adds up across companies.

sales.v_sales_teams​

Sales teams (crm.team).

ColumnTypeDescription
sales_team_keybigintSurrogate key of this view: one per version of the record.
sales_team_idintegerOdoo id: crm.team id.
sales_team_nametextName of the sales team.
team_leader_nametextName of the sales team's leader.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

projects​

projects.v_milestones​

Grain: one project milestone. is_late: reached after its deadline, or not reached and past it. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
milestone_idintegerOdoo id: project.milestone id.
milestone_nametextName of the milestone.
project_keybigintKey to conformed.v_project: the version valid on the fact's date.
project_nametextName of the project.
deadline_datedateDate of the deadline, in DW_TIMEZONE.
reached_datedateDate of the date the milestone was reached, in DW_TIMEZONE.
is_reachedbooleanTrue when the milestone is reached.
is_latebooleanTrue when reached after its deadline, or not reached and past it (as of the as-of date).
days_lateintegerDays the milestone is or was late.
sales_line_idintegerOdoo id: sale.order.line id.
sales_order_idintegerOdoo id: sale.order id.
quantity_pctnumericShare of the sales line invoiced at this milestone, in %.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.

projects.v_project_profitability​

Grain: one project, all time. revenue_* from the sales lines delivered in it, hours and timesheet_cost from its timesheets, all in the reporting currency; margin = revenue_sold - timesheet_cost. Not additive: margin_pct, billable_pct.

ColumnTypeDescription
project_keybigintKey to conformed.v_project: the version valid on the fact's date.
project_idintegerOdoo id: project.project id.
project_nametextName of the project.
project_managertextName of the project manager.
is_billablebooleanTrue when the hours (or the project's tasks) are billed to the customer.
billing_typetextHow Odoo bills it: on timesheets, fixed price, milestones, manually, or not at all.
project_statustextStatus of the project's last update: On track, At risk, Off track, On hold, Done, Not set.
sales_order_nametextOrder reference, e.g. S00042.
is_activebooleanFalse for records archived in Odoo.
revenue_soldnumericUntaxed amount of the sales lines delivered in the project, reporting currency.
revenue_invoicednumericOf which invoiced, reporting currency.
revenue_to_invoicenumericOf which still to invoice, reporting currency.
hoursnumericHours worked.
billable_hoursnumericBillable hours.
non_billable_hoursnumericNon-billable hours.
timesheet_costnumericCost of the hours, reporting currency.
marginnumericMargin (price minus cost), in the document's currency.
margin_pctnumericMargin as a share of revenue, in % (not additive).
billable_pctnumericBillable hours as a share of all hours, in % (not additive).
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.

projects.v_project_sales​

Grain: one sales order line delivered in a project (the project it created, or the project of the task it created). Amounts untaxed, company currency. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
sales_line_idintegerOdoo id: sale.order.line id.
project_keybigintKey to conformed.v_project: the version valid on the fact's date.
project_nametextName of the project.
sales_order_idintegerOdoo id: sale.order id.
sales_order_nametextOrder reference, e.g. S00042.
order_datedateDate of the order date (for a quotation: empty until confirmed), in DW_TIMEZONE.
customer_keybigintKey to conformed.v_customer: the version valid on the fact's date.
customer_nametextName of the customer.
product_keybigintKey to conformed.v_product: the version valid on the fact's date.
product_nametextName of the product (template).
task_idintegerOdoo id: project.task id.
invoice_statustextOdoo's invoicing status: no, to invoice, invoiced or upselling.
quantitynumericQuantity, in the product's unit (unit_of_measure; negative on credit notes).
quantity_deliverednumericQuantity delivered, in the product's unit.
quantity_invoicednumericQuantity invoiced, in the product's unit.
amount_untaxed_company_ccynumericUntaxed amount, in the company's own currency: adds up within one company only.
amount_invoiced_company_ccynumericUntaxed amount invoiced so far, in the company's own currency: adds up within one company only.
amount_to_invoice_company_ccynumericUntaxed amount still to invoice, in the company's own currency: adds up within one company only.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
amount_untaxed_reporting_ccynumericUntaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_invoiced_reporting_ccynumericUntaxed amount invoiced so far, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_to_invoice_reporting_ccynumericUntaxed amount still to invoice, in the reporting currency (REPORTING_CURRENCY): adds up across companies.

projects.v_task_assignees​

Grain: one task and assignee. Task measures repeat per assignee: use the *_weighted columns (measure x weight) to split them without double counting.

ColumnTypeDescription
task_idintegerOdoo id: project.task id.
user_keybigintKey to conformed.v_user: the version valid on the fact's date.
assignee_nametextName of the assignee.
weightnumeric1 / the number of assignees of the task.
task_nametextName of the task.
project_nametextName of the project.
is_closedbooleanTrue when the task is closed.
is_activebooleanFalse for records archived in Odoo.
deadline_datedateDate of the deadline, in DW_TIMEZONE.
is_overduebooleanTrue when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of).
allocated_hoursnumericHours planned.
effective_hoursnumericHours spent (from timesheets).
allocated_hours_weightednumericPlanned hours times weight: adds up per assignee without double counting.
effective_hours_weightednumericHours spent times weight: adds up per assignee without double counting.

projects.v_task_backlog​

Grain: one project per snapshot day (the days the load ran). Semi-additive: add up across projects, never across days. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
snapshot_datedateDate of the snapshot (the day the load ran, or AS_OF_DATE), in DW_TIMEZONE.
snapshot_date_keyintegerKey to conformed.v_date: the snapshot (the day the load ran, or AS_OF_DATE), as yyyymmdd (-1 = none).
project_keybigintKey to conformed.v_project: the version valid on the fact's date.
project_nametextName of the project.
open_tasksbigintNumber of open tasks on that day.
overdue_tasksbigintNumber of overdue tasks on that day.
open_remaining_hoursnumericRemaining hours of the open tasks on that day.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.

projects.v_tasks​

Grain: one task (tasks that belong to a project; archived ones have is_active = false). Hours are Odoo's per-task totals and add up across tasks. is_overdue and days_overdue are relative to today. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
task_idintegerOdoo id: project.task id.
task_nametextName of the task.
parent_task_idintegerOdoo id: project.task id of the parent task.
project_keybigintKey to conformed.v_project: the version valid on the fact's date.
project_nametextName of the project.
project_managertextName of the project manager.
customer_keybigintKey to conformed.v_customer: the version valid on the fact's date.
customer_nametextName of the customer.
stage_keybigintKey to conformed.v_task_stage: the version valid on the fact's date.
stage_nametextName of the stage.
stage_sequenceintegerOrder of the stage: sort on it.
statetextOdoo's task state, e.g. 01_in_progress, 1_done, 1_canceled.
prioritytextOdoo's priority (0 = normal, higher = more urgent).
milestone_nametextName of the milestone.
is_closedbooleanTrue when the task is closed.
is_activebooleanFalse for records archived in Odoo.
created_datedateDate of creation, in DW_TIMEZONE.
created_month_keyintegerMonth of creation, as yyyymm.
created_year_monthtextMonth of creation, as 'yyyy-mm'.
assigned_datedateDate of the first assignment, in DW_TIMEZONE.
deadline_datedateDate of the deadline, in DW_TIMEZONE.
closed_datedateDate of closing, in DW_TIMEZONE.
last_stage_change_datedateDate of the last stage change, in DW_TIMEZONE.
is_overduebooleanTrue when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of).
days_overdueintegerDays past the deadline or due date, as of the as-of date; empty when not overdue.
assignee_countintegerNumber of assignees.
assignee_namestextNames of the assignees, comma-separated.
allocated_hoursnumericHours planned.
effective_hoursnumericHours spent (from timesheets).
remaining_hoursnumericHours planned minus hours spent.
total_hours_spentnumericHours spent, sub-tasks included.
overtimenumericHours spent beyond the planned hours.
rating_avgnumericAverage customer rating (not additive).
rating_countintegerNumber of customer ratings.
rating_satisfaction_pctnumericShare of satisfied ratings, in % (not additive).
is_billablebooleanTrue when the hours (or the project's tasks) are billed to the customer.
sales_line_idintegerOdoo id: sale.order.line id.
sales_order_idintegerOdoo id: sale.order id.
sales_order_nametextOrder reference, e.g. S00042.
closed_month_keyintegerMonth of closing, as yyyymm.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.

projects.v_timesheets​

Grain: one timesheet line (employee, task, day). hours and cost_amount are additive in every direction; this is the source for hours worked per person. company_name is the Odoo company; *_reporting_ccy amounts add up across companies.

ColumnTypeDescription
timesheet_line_idintegerOdoo id: account.analytic.line id.
work_date_keyintegerKey to conformed.v_date: the day the hours were worked, as yyyymmdd (-1 = none).
work_datedateDate of the day the hours were worked, in DW_TIMEZONE.
work_month_keyintegerMonth of the day the hours were worked, as yyyymm.
work_year_monthtextMonth of the day the hours were worked, as 'yyyy-mm'.
iso_yearintegerISO week-numbering year.
iso_weekintegerISO week number.
employee_keybigintKey to conformed.v_employee: the version valid on the fact's date.
employee_nametextName of the employee.
department_nametextDepartment of the employee.
project_keybigintKey to conformed.v_project: the version valid on the fact's date.
project_nametextName of the project.
customer_keybigintKey to conformed.v_customer: the version valid on the fact's date.
customer_nametextName of the customer.
task_idintegerOdoo id: project.task id.
task_nametextName of the task.
descriptiontextDescription entered on the timesheet line.
hoursnumericHours worked.
cost_amountnumericCost of the hours, in the company's currency.
billing_typetextHow Odoo bills it: on timesheets, fixed price, milestones, manually, or not at all.
is_billablebooleanTrue when the hours (or the project's tasks) are billed to the customer.
is_invoicedbooleanTrue when the hours were invoiced.
sales_line_idintegerOdoo id: sale.order.line id.
sales_order_idintegerOdoo id: sale.order id.
sales_order_nametextOrder reference, e.g. S00042.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
cost_reporting_ccynumericCost of the hours, in the reporting currency (REPORTING_CURRENCY): adds up across companies.

accounting​

accounting.v_account_balances​

Grain: one company, account and month with movement. net_change adds up across months; closing_balance is the cumulative balance at the end of the month (semi-additive: never add it up across months).

ColumnTypeDescription
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
account_keybigintKey to accounting.v_accounts: the version valid on the fact's date.
account_codetextAccount code (in the ETL user's company: Odoo 19 keeps one per company).
account_nametextAccount name.
account_typetextOdoo's account type, e.g. asset_receivable, income, expense.
account_grouptextAsset, Liability, Equity, Income, Expense or Off-balance (from the account type).
statementtextBalance sheet or Profit and loss.
month_keyintegerMonth as yyyymm; sorts chronologically.
year_monthtextThe month, as 'yyyy-mm'.
month_startdateFirst day of the month: filter on it for a period.
debit_company_ccynumericDebit, in the company's own currency: adds up within one company only.
credit_company_ccynumericCredit, in the company's own currency: adds up within one company only.
net_change_company_ccynumericMovement in the month (debit - credit), in the company's own currency: adds up within one company only.
net_change_reporting_ccynumericMovement in the month (debit - credit), in the reporting currency (REPORTING_CURRENCY): adds up across companies.
closing_balance_company_ccynumericBalance at the end of the month (debit - credit, cumulative; never add it up across months), in the company's own currency: adds up within one company only.
closing_balance_reporting_ccynumericBalance at the end of the month (debit - credit, cumulative; never add it up across months), in the reporting currency (REPORTING_CURRENCY): adds up across companies.

accounting.v_accounts​

The chart of accounts, with each account's group (Asset, Liability, Equity, Income, Expense, Off-balance) and statement (Balance sheet, Profit and loss).

ColumnTypeDescription
account_keybigintSurrogate key of this view: one per version of the record.
account_idintegerOdoo id: account.account id.
account_codetextAccount code (in the ETL user's company: Odoo 19 keeps one per company).
account_nametextAccount name.
account_typetextOdoo's account type, e.g. asset_receivable, income, expense.
account_type_labeltextThe account type, readable.
account_grouptextAsset, Liability, Equity, Income, Expense or Off-balance (from the account type).
statementtextBalance sheet or Profit and loss.
is_reconcilablebooleanTrue when Odoo matches the account's lines (receivables, payables).
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

accounting.v_journal_items​

Grain: one line of a posted journal entry (the general ledger). Additive: debit, credit and balance (debit - credit); *_company_ccy within one company, *_reporting_ccy across companies. Every entry balances: debits equal credits.

ColumnTypeDescription
gl_line_idintegerOdoo id: account.move.line id.
move_idintegerOdoo id: account.move id of the journal entry.
move_nametextNumber of the journal entry, e.g. INV/2026/00042.
move_typetextentry, out_invoice, out_refund, in_invoice, in_refund, out_receipt, in_receipt.
move_reftextReference of the journal entry.
line_labeltextLabel of the journal item.
entry_date_keyintegerKey to conformed.v_date: the journal entry (its accounting date), as yyyymmdd (-1 = none).
entry_datedateDate of the journal entry (its accounting date), in DW_TIMEZONE.
entry_month_keyintegerMonth of the journal entry (its accounting date), as yyyymm.
entry_year_monthtextMonth of the journal entry (its accounting date), as 'yyyy-mm'.
entry_yearintegerYear of the entry date.
maturity_datedateDate of the due date of a receivable or payable line, in DW_TIMEZONE.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
account_keybigintKey to accounting.v_accounts: the version valid on the fact's date.
account_codetextAccount code (in the ETL user's company: Odoo 19 keeps one per company).
account_nametextAccount name.
account_typetextOdoo's account type, e.g. asset_receivable, income, expense.
account_grouptextAsset, Liability, Equity, Income, Expense or Off-balance (from the account type).
statementtextBalance sheet or Profit and loss.
journal_keybigintKey to accounting.v_journals: the version valid on the fact's date.
journal_codetextJournal code.
journal_nametextJournal name.
journal_typetextsale, purchase, bank, cash, credit or general.
partner_keybigintKey to conformed.v_customer (the partner: customer, supplier, employee, ...): the version valid on the fact's date.
partner_nametextName of the partner.
partner_is_intercompanybooleanTrue when the partner is one of the Odoo companies.
currency_nametextCurrency of the line's amount_currency.
debit_company_ccynumericDebit, in the company's own currency: adds up within one company only.
credit_company_ccynumericCredit, in the company's own currency: adds up within one company only.
balance_company_ccynumericBalance (debit - credit), in the company's own currency: adds up within one company only.
balance_reporting_ccynumericBalance (debit - credit), in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_currencynumericAmount in the line's own currency (currency_name).
amount_residual_company_ccynumericOpen amount of a receivable or payable line, company currency.
is_reconciledbooleanTrue when the line is fully matched (e.g. an invoice with its payment).

accounting.v_journals​

Journals: sale, purchase, bank, cash, credit, general.

ColumnTypeDescription
journal_keybigintSurrogate key of this view: one per version of the record.
journal_idintegerOdoo id: account.journal id.
journal_codetextJournal code.
journal_nametextJournal name.
journal_typetextsale, purchase, bank, cash, credit or general.
company_idintegerOdoo id: res.company id of the journal's company.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

accounting.v_profit_and_loss​

Grain: one company, profit-and-loss account and month. amount: income and expenses as positive amounts; profit: their effect on profit (income positive, expenses negative), so sum(profit) is the net profit.

ColumnTypeDescription
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
month_keyintegerMonth as yyyymm; sorts chronologically.
year_monthtextThe month, as 'yyyy-mm'.
month_startdateFirst day of the month: filter on it for a period.
yearintegerYear of the month.
account_keybigintKey to accounting.v_accounts: the version valid on the fact's date.
account_codetextAccount code (in the ETL user's company: Odoo 19 keeps one per company).
account_nametextAccount name.
account_typetextOdoo's account type, e.g. asset_receivable, income, expense.
sectiontextIncome or Expense.
amount_company_ccynumericIncome or expense as a positive amount, in the company's own currency: adds up within one company only.
amount_reporting_ccynumericIncome or expense as a positive amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
profit_company_ccynumericEffect on profit: income positive, expenses negative, in the company's own currency: adds up within one company only.
profit_reporting_ccynumericEffect on profit: income positive, expenses negative, in the reporting currency (REPORTING_CURRENCY): adds up across companies.

accounting.v_vendor_bills​

Grain: one posted vendor bill or refund. Amounts positive for bills, negative for refunds. amount_residual is what is still to be paid; is_overdue, days_overdue and aging_bucket are measured against the as-of date.

ColumnTypeDescription
bill_idintegerOdoo id: account.move id of the vendor bill.
bill_nametextNumber of the vendor bill.
move_typetextin_invoice (vendor bill) or in_refund (vendor refund).
document_typetextVendor bill or Vendor refund.
payment_statetextOdoo's payment state: not_paid, in_payment, paid, partial, reversed.
supplier_reftextThe supplier's own reference for the bill.
is_openbooleanTrue when the task is open.
is_overduebooleanTrue when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of).
days_overdueintegerDays past the deadline or due date, as of the as-of date; empty when not overdue.
aging_buckettextPaid, Not due, 1-30 days, 31-60 days, 61-90 days or Over 90 days past due, as of the as-of date.
bill_datedateDate of the vendor bill, in DW_TIMEZONE.
bill_month_keyintegerMonth of the vendor bill, as yyyymm.
bill_year_monthtextMonth of the vendor bill, as 'yyyy-mm'.
due_datedateDate of the payment due date, in DW_TIMEZONE.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
supplier_keybigintKey to conformed.v_customer (the supplier): the version valid on the fact's date.
supplier_nametextName of the supplier.
supplier_countrytextCountry of the supplier.
currency_nametextCurrency code: the company's own currency (v_company), or the document's (facts).
amount_untaxed_company_ccynumericUntaxed amount, in the company's own currency: adds up within one company only.
amount_total_company_ccynumericTotal amount, tax included, in the company's own currency: adds up within one company only.
amount_residual_company_ccynumericAmount still to be paid (at the invoice date's rate in the reporting currency), in the company's own currency: adds up within one company only.
amount_untaxed_reporting_ccynumericUntaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_total_reporting_ccynumericTotal amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_residual_reporting_ccynumericAmount still to be paid (at the invoice date's rate in the reporting currency), in the reporting currency (REPORTING_CURRENCY): adds up across companies.

purchase​

purchase.v_purchase_order_lines​

Grain: one line of a confirmed purchase order. Additive: quantities and amounts; *_company_ccy within one company, *_reporting_ccy across companies.

ColumnTypeDescription
purchase_line_idintegerOdoo id: purchase.order.line id.
order_idintegerOdoo id: purchase.order id.
order_nametextPurchase order reference, e.g. P00042.
order_date_keyintegerKey to conformed.v_date: the order date (for a quotation: empty until confirmed), as yyyymmdd (-1 = none).
order_datedateDate of the order date (for a quotation: empty until confirmed), in DW_TIMEZONE.
order_month_keyintegerMonth of the order date (for a quotation: empty until confirmed), as yyyymm.
order_year_monthtextMonth of the order date (for a quotation: empty until confirmed), as 'yyyy-mm'.
order_yearintegerYear of the order date.
planned_datedateDate of the expected arrival, in DW_TIMEZONE.
supplier_keybigintKey to conformed.v_customer (the supplier): the version valid on the fact's date.
supplier_nametextName of the supplier.
supplier_countrytextCountry of the supplier.
product_keybigintKey to conformed.v_product: the version valid on the fact's date.
product_nametextName of the product (template).
default_codetextInternal reference of the product.
category_nametextProduct category (full path).
buyer_keybigintKey to conformed.v_user (the buyer): the version valid on the fact's date.
buyer_nametextName of the buyer (the purchase representative).
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
descriptiontextDescription on the order line.
currency_nametextCurrency code: the company's own currency (v_company), or the document's (facts).
quantitynumericQuantity ordered, in the product's unit (unit_of_measure).
quantity_receivednumericQuantity received so far, in the product's unit.
quantity_to_receivenumericQuantity ordered that is not received yet, in the product's unit.
quantity_billednumericQuantity the supplier billed so far, in the product's unit.
quantity_to_billnumericQuantity received (or ordered) that is not billed yet, in the product's unit.
price_unitnumericUnit price, per the line's own unit (order_unit or invoiced_unit; not additive).
discount_pctnumericDiscount percentage (not additive).
amount_untaxednumericUntaxed amount, in the document's currency.
amount_totalnumericTotal amount, tax included, in the document's currency.
amount_untaxed_company_ccynumericUntaxed amount, in the company's own currency: adds up within one company only.
amount_total_company_ccynumericTotal amount, tax included, in the company's own currency: adds up within one company only.
amount_received_company_ccynumericUntaxed amount of the quantity received so far, in the company's own currency: adds up within one company only.
amount_untaxed_reporting_ccynumericUntaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_total_reporting_ccynumericTotal amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_received_reporting_ccynumericUntaxed amount of the quantity received so far, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
unit_of_measuretextThe product's unit of measure: the unit its quantities are counted in.
order_quantitynumericQuantity as on the order line, in order_unit (price_unit is per order_unit).
order_unittextThe unit the line was ordered in, e.g. a pack of 6 of a product counted in units.

purchase.v_purchase_orders​

Grain: one request for quotation or purchase order, every status (filter on is_confirmed for orders). days_late: first receipt after the planned day; is_overdue: not fully received and the planned day is before the as-of date.

ColumnTypeDescription
order_idintegerOdoo id: purchase.order id.
order_nametextPurchase order reference, e.g. P00042.
statetextOdoo's state: draft (RFQ), sent, to approve, purchase (confirmed) or cancel.
order_statustextRFQ, RFQ sent, To approve, Purchase order or Cancelled.
billing_statustextNothing to bill, To bill or Fully billed (Odoo's billing status).
receipt_statustextNot received, Partially received, Received, or Not applicable (no goods to receive, or the inventory data mart is off).
rfq_datedateDate of the request for quotation (its creation), in DW_TIMEZONE.
rfq_year_monthtextMonth of the request for quotation (its creation), as 'yyyy-mm'.
order_datedateDate the order was confirmed, in DW_TIMEZONE; empty for an RFQ.
order_month_keyintegerMonth of the order date (for a quotation: empty until confirmed), as yyyymm.
order_year_monthtextMonth of the order date (for a quotation: empty until confirmed), as 'yyyy-mm'.
planned_datedateDate of the expected arrival, in DW_TIMEZONE.
received_datedateDate of the first receipt, in DW_TIMEZONE.
supplier_keybigintKey to conformed.v_customer (the supplier): the version valid on the fact's date.
supplier_nametextName of the supplier.
supplier_countrytextCountry of the supplier.
buyer_keybigintKey to conformed.v_user (the buyer): the version valid on the fact's date.
buyer_nametextName of the buyer (the purchase representative).
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
supplier_reftextThe supplier's own reference for the order.
origintextSource document, e.g. the sales order that caused it.
currency_nametextCurrency code: the company's own currency (v_company), or the document's (facts).
line_countintegerNumber of lines.
amount_untaxednumericUntaxed amount, in the document's currency.
amount_totalnumericTotal amount, tax included, in the document's currency.
amount_untaxed_company_ccynumericUntaxed amount, in the company's own currency: adds up within one company only.
amount_total_company_ccynumericTotal amount, tax included, in the company's own currency: adds up within one company only.
amount_untaxed_reporting_ccynumericUntaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
amount_total_reporting_ccynumericTotal amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
days_to_confirmnumericDays from the RFQ to the confirmation (not additive: average it).
days_to_receivenumericDays from the confirmation to the first receipt (not additive: average it).
days_lateintegerDays the first receipt came after the planned day; 0 when on time, empty when nothing was received.
is_latebooleanTrue when the first receipt came after the planned day.
is_overduebooleanTrue for a confirmed order not fully received whose planned day is before the as-of date.
is_confirmedbooleanTrue for a confirmed order.
is_cancelledbooleanTrue for a cancelled order.

inventory​

inventory.v_locations​

Stock locations and their warehouse. is_stock: an internal location, whose contents count as stock on hand.

ColumnTypeDescription
location_keybigintSurrogate key of this view: one per version of the record.
location_idintegerOdoo id: stock.location id.
location_nametextName of the location.
complete_nametextFull name of the location, e.g. WH/Stock/Shelf 1.
usagetextOdoo's location type: internal, supplier, customer, inventory, production, transit or view.
usage_labeltextThe location type, readable: Internal, Vendor, Customer, Inventory loss, Production, Transit, Virtual.
is_stockbooleanTrue for internal locations: what is there counts as stock on hand.
warehouse_idintegerOdoo id: stock.warehouse id.
warehouse_nametextName of the warehouse (for a move or transfer: the one whose stock changed).
warehouse_codetextShort code of the warehouse, e.g. WH.
company_idintegerOdoo id: res.company id.
is_activebooleanFalse for records archived in Odoo.
versionintegerVersion of the record: 1, 2, ... A new version starts when a history-keeping attribute changes.
valid_fromtimestamp with time zoneStart of this version: Odoo's write_date of the change (the first version starts in 1900).
valid_totimestamp with time zoneEnd of this version (the current one ends in 2199).
is_currentbooleanTrue for the current version: filter on it for today's values.

inventory.v_stock_flows​

Grain: one done stock move of a product kept in stock, per stock location it touched: + into the location, - out of it. A move between two stock locations has two rows. Sum quantity_change per warehouse or location. value_change_*_ccy: at the cost Odoo gave the move; value_change_at_cost: at the product's current cost, which is how Odoo values stock under standard and average costing.

ColumnTypeDescription
stock_move_idintegerOdoo id: stock.move id.
move_typetextout_invoice (invoice) or out_refund (credit note).
move_date_keyintegerKey to conformed.v_date: the stock move (the day it was done), as yyyymmdd (-1 = none).
move_datedateDate of the stock move (the day it was done), in DW_TIMEZONE.
move_month_keyintegerMonth of the stock move (the day it was done), as yyyymm.
move_year_monthtextMonth of the stock move (the day it was done), as 'yyyy-mm'.
product_keybigintKey to conformed.v_product: the version valid on the fact's date.
product_nametextName of the product (template).
default_codetextInternal reference of the product.
category_nametextProduct category (full path).
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
location_keybigintKey to inventory.v_locations: the version valid on the fact's date.
locationtextFull name of the stock location.
warehouse_nametextName of the warehouse (for a move or transfer: the one whose stock changed).
quantity_changenumericQuantity in (+) or out (-) of this location.
value_change_company_ccynumericValue of the move for this location, at the move's cost: + in, - out, in the company's own currency: adds up within one company only.
value_change_reporting_ccynumericValue of the move for this location, at the move's cost: + in, - out, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
value_change_at_costnumericquantity_change at the product's current cost: how Odoo values stock under standard and average costing.

inventory.v_stock_levels_monthly​

Grain: one company, warehouse, product and month with movement. net_change adds up across months; closing_quantity and closing_value_* are the stock at the end of the month (semi-additive: never add them up across months). closing_value_at_cost: at the product's current cost.

ColumnTypeDescription
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
warehouse_nametextName of the warehouse (for a move or transfer: the one whose stock changed).
product_keybigintKey to conformed.v_product: the version valid on the fact's date.
product_nametextName of the product (template).
category_nametextProduct category (full path).
month_keyintegerMonth as yyyymm; sorts chronologically.
year_monthtextMonth as 'yyyy-mm'.
month_startdateFirst day of the month: filter on it for a period.
net_changenumericQuantity in minus out in the month.
value_change_company_ccynumericValue of the move for this location, at the move's cost: + in, - out, in the company's own currency: adds up within one company only.
value_change_reporting_ccynumericValue of the move for this location, at the move's cost: + in, - out, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
closing_quantitynumericStock at the end of the month (cumulative; never add it up across months).
closing_value_company_ccynumericStock value at the end of the month, at the moves' costs (cumulative; never add it up across months), in the company's own currency: adds up within one company only.
closing_value_reporting_ccynumericStock value at the end of the month, at the moves' costs (cumulative; never add it up across months), in the reporting currency (REPORTING_CURRENCY): adds up across companies.
closing_value_at_costnumericclosing_quantity at the product's current cost (never add it up across months).

inventory.v_stock_moves​

Grain: one done stock move. quantity and value are positive; quantity_signed and value_signed_* are + into stock, - out of it, 0 between two stock locations and for consumables (not kept in stock), so summing them gives the change in stock.

ColumnTypeDescription
stock_move_idintegerOdoo id: stock.move id.
move_typetextReceipt, Delivery, Customer return, Supplier return, Inventory adjustment, Scrap or loss, Production, Internal or Other (from the locations).
move_date_keyintegerKey to conformed.v_date: the stock move (the day it was done), as yyyymmdd (-1 = none).
move_datedateDate of the stock move (the day it was done), in DW_TIMEZONE.
move_month_keyintegerMonth of the stock move (the day it was done), as yyyymm.
move_year_monthtextMonth of the stock move (the day it was done), as 'yyyy-mm'.
move_yearintegerYear of the move date.
product_keybigintKey to conformed.v_product: the version valid on the fact's date.
product_nametextName of the product (template).
default_codetextInternal reference of the product.
category_nametextProduct category (full path).
is_storablebooleanTrue when Odoo keeps the product in stock; consumables are not.
unit_costnumericThe product's current cost in the company of the move or stock.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
partner_keybigintKey to conformed.v_customer (the partner: customer, supplier, employee, ...): the version valid on the fact's date.
partner_nametextName of the partner.
source_location_keybigintKey to inventory.v_locations (where the goods came from): the version valid on the fact's date.
source_locationtextFull name of the location the goods came from.
destination_location_keybigintKey to inventory.v_locations (where the goods went): the version valid on the fact's date.
destination_locationtextFull name of the location the goods went to.
warehouse_nametextName of the warehouse (for a move or transfer: the one whose stock changed).
picking_idintegerOdoo id: stock.picking id (the transfer).
referencetextReference of the move, e.g. the transfer's name.
origintextSource document, e.g. the sales order that caused it.
quantitynumericQuantity moved, in the product's unit of measure (positive).
quantity_signednumericQuantity moved: + into stock, - out of it, 0 between two stock locations and for consumables.
value_company_ccynumericValue of the move as Odoo recorded it (positive both ways), in the company's own currency: adds up within one company only.
value_signed_company_ccynumericValue of the move: + into stock, - out of it, 0 when the stock did not change, in the company's own currency: adds up within one company only.
value_reporting_ccynumericValue of the move as Odoo recorded it (positive both ways), in the reporting currency (REPORTING_CURRENCY): adds up across companies.
value_signed_reporting_ccynumericValue of the move: + into stock, - out of it, 0 when the stock did not change, in the reporting currency (REPORTING_CURRENCY): adds up across companies.
sales_line_idintegerOdoo id: sale.order.line id.
purchase_line_idintegerOdoo id: purchase.order.line id.

inventory.v_stock_on_hand​

Grain: one quant (product, location, lot) now. value_at_cost: quantity at the product's current cost in the quant's company, as Odoo values stock under standard and average costing.

ColumnTypeDescription
quant_idintegerOdoo id: stock.quant id.
product_keybigintKey to conformed.v_product: the version valid on the fact's date.
product_nametextName of the product (template).
default_codetextInternal reference of the product.
category_nametextProduct category (full path).
is_storablebooleanTrue when Odoo keeps the product in stock; consumables are not.
location_keybigintKey to inventory.v_locations: the version valid on the fact's date.
locationtextFull name of the stock location.
warehouse_nametextName of the warehouse (for a move or transfer: the one whose stock changed).
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
in_datedateDate of the oldest arrival of this stock in its location, in DW_TIMEZONE.
lot_nametextLot or serial number.
quantitynumericQuantity on hand, in the product's unit of measure.
reserved_quantitynumericOf which reserved for transfers.
available_quantitynumericQuantity on hand minus reserved.
unit_costnumericThe product's current cost in the company of the move or stock.
value_at_costnumericQuantity at the product's current cost in the stock's company.

inventory.v_transfers​

Grain: one transfer (receipt, delivery or internal transfer), every status. days_late: done after the scheduled day; is_overdue: not done and the scheduled day is before the as-of date.

ColumnTypeDescription
picking_idintegerOdoo id: stock.picking id (the transfer).
picking_nametextReference of the transfer, e.g. WH/OUT/00042.
transfer_typetextReceipt, Delivery or Internal transfer.
operation_typetextName of Odoo's operation type.
statetextOdoo's state: draft, waiting, confirmed, assigned (ready), done or cancel.
statustextDraft, Waiting another operation, Waiting, Ready, Done or Cancelled.
created_datedateDate of creation, in DW_TIMEZONE.
scheduled_datedateDate of the day the transfer is scheduled for, in DW_TIMEZONE.
scheduled_month_keyintegerMonth of the day the transfer is scheduled for, as yyyymm.
scheduled_year_monthtextMonth of the day the transfer is scheduled for, as 'yyyy-mm'.
deadline_datedateDate of the deadline, in DW_TIMEZONE.
done_datedateDate of the day the transfer was done, in DW_TIMEZONE.
done_year_monthtextMonth of the day the transfer was done, as 'yyyy-mm'.
partner_keybigintKey to conformed.v_customer (the partner: customer, supplier, employee, ...): the version valid on the fact's date.
partner_nametextName of the partner.
company_keybigintKey to conformed.v_company: the version valid on the fact's date.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
source_locationtextFull name of the location the goods came from.
destination_locationtextFull name of the location the goods went to.
warehouse_nametextName of the warehouse (for a move or transfer: the one whose stock changed).
origintextSource document, e.g. the sales order that caused it.
sales_order_idintegerOdoo id: sale.order id.
is_backorderbooleanTrue for a backorder: what was left of a partly done transfer.
is_returnbooleanTrue for a return of an earlier transfer.
move_countintegerNumber of stock moves (products) in it.
quantitynumericQuantity of its moves (not cancelled), in the products' units of measure.
days_lateintegerDays it was done after its scheduled day; 0 when on time, empty when not done.
is_latebooleanTrue when it was done after its scheduled day.
is_on_timebooleanTrue when it was done on or before its scheduled day.
is_overduebooleanTrue when not done or cancelled and the scheduled day is before the as-of date.
days_overdueintegerDays past the scheduled day, as of the as-of date; empty when not overdue.
is_donebooleanTrue when done.
is_cancelledbooleanTrue for a cancelled transfer.

data_quality​

data_quality.v_checks​

Grain: one check of Odoo's data. open_issues: the issues it finds now.

ColumnTypeDescription
rule_codetextCode of the check (stable; DATA_ISSUES in tools/generate/hop_files.py).
areatextWhat the check is about: Customers, Products, Sales, Pipeline, Invoicing, Projects, Purchase or Inventory.
severitytextError (wrong figures for sure), Warning (figures probably wrong) or Info (incomplete or stale).
severity_rankinteger1 = Error, 2 = Warning, 3 = Info: to sort by.
check_nametextWhat the check looks for.
whytextWhy it matters, and what to do about it in Odoo.
odoo_modeltextThe Odoo model of the records the check finds.
open_issuesbigintIssues found by the latest load (a state: never add it up across days).

data_quality.v_issues​

Grain: one issue: a record a check found, from the load that first found it until the load that no longer did. The worklist is WHERE is_open; odoo_link opens the record in Odoo.

ColumnTypeDescription
rule_codetextCode of the check (stable; DATA_ISSUES in tools/generate/hop_files.py).
areatextWhat the check is about: Customers, Products, Sales, Pipeline, Invoicing, Projects, Purchase or Inventory.
severitytextError (wrong figures for sure), Warning (figures probably wrong) or Info (incomplete or stale).
severity_rankinteger1 = Error, 2 = Warning, 3 = Info: to sort by.
check_nametextWhat the check looks for.
odoo_modeltextThe Odoo model of the records the check finds.
record_idintegerOdoo id of the record, in odoo_model.
record_nametextName of the record in Odoo, as of the latest load that found it.
detailtextWhat the check found on the record, e.g. the date or amount.
company_keybigintKey to conformed.v_company: the record's company now; -1 for records without one (customers, products).
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
first_seen_datedateThe day a load first found the issue (again, if it was resolved in between).
last_seen_datedateThe day of the latest load that found it.
resolved_datedateThe day of the first load that no longer found it; empty while open.
is_openbooleanTrue while the latest load still finds it.
days_openintegerDays from first seen to resolved, or to the as-of date while open.
odoo_linktextOpens the record in Odoo (ODOO_WEB_URL); empty when the address is not known.

data_quality.v_issues_daily​

Grain: one day, check and company. open_issues is a state (never add it up across days); new_issues and resolved_issues add up.

ColumnTypeDescription
snapshot_datedateThe day of the load, in DW_TIMEZONE (the as-of date when AS_OF_DATE is set).
rule_codetextCode of the check (stable; DATA_ISSUES in tools/generate/hop_files.py).
areatextWhat the check is about: Customers, Products, Sales, Pipeline, Invoicing, Projects, Purchase or Inventory.
severitytextError (wrong figures for sure), Warning (figures probably wrong) or Info (incomplete or stale).
check_nametextWhat the check looks for.
company_keybigintKey to conformed.v_company: the records' company now; -1 for records without one.
company_nametextName of the Odoo company; 'Not applicable' for records shared by the companies.
open_issuesintegerIssues found by the latest load (a state: never add it up across days).
new_issuesintegerIssues first found that day.
resolved_issuesintegerIssues no longer found that day.