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:
*_keycolumns 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.*_idcolumns are Odoo record ids.- Amounts without a suffix are in the document's currency,
*_company_ccyin the company's own currency (adds up within one company),*_reporting_ccyin 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.
| Column | Type | Description |
|---|---|---|
as_of_date | date | The date the views report as of: AS_OF_DATE, or today in DW_TIMEZONE. |
is_fixed | boolean | True when AS_OF_DATE sets the date, false when it is today. |
timezone | text | DW_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.
| Column | Type | Description |
|---|---|---|
company_key | bigint | Surrogate key of this view: one per version of the record. |
company_id | integer | Odoo id: res.company id. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
currency_name | text | Currency code: the company's own currency (v_company), or the document's (facts). |
partner_id | integer | Odoo id: res.partner id of the company itself. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True 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.
| Column | Type | Description |
|---|---|---|
customer_key | bigint | Surrogate key of this view: one per version of the record. |
customer_id | integer | Odoo id: res.partner id of the customer (the commercial partner). |
customer_name | text | Name of the customer. |
is_company | boolean | True for a company, false for an individual. |
email | text | Email address. |
phone | text | Phone number. |
city | text | City. |
zip | text | Postal code. |
state_name | text | Region (state or province). |
country_name | text | Country. |
industry_name | text | Industry. |
customer_rank | integer | How often the partner was a customer (Odoo's counter). |
supplier_rank | integer | How often the partner was a supplier (Odoo's counter). |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True for the current version: filter on it for today's values. |
is_intercompany | boolean | True 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.
| Column | Type | Description |
|---|---|---|
date_key | integer | The day as yyyymmdd; 0 = Unknown, -1 = Not applicable. |
full_date | date | The calendar day. |
day_of_month | integer | Day of the month. |
day_of_week | integer | ISO day of the week: 1 = Monday. |
day_name | text | Name of the day. |
is_weekend | boolean | True on Saturday and Sunday. |
iso_week | integer | ISO week number. |
iso_year | integer | ISO week-numbering year. |
month_number | integer | Month, 1-12. |
month_name | text | Name of the month. |
month_short | text | Short name of the month. |
month_key | integer | Month as yyyymm; sorts chronologically. |
year_month | text | Month as 'yyyy-mm'. |
quarter | integer | Quarter, 1-4. |
quarter_name | text | Quarter, 'Q1'-'Q4'. |
year | integer | Year. |
conformed.v_employee
Employees who book timesheets. One row per version (department and job title keep history).
| Column | Type | Description |
|---|---|---|
employee_key | bigint | Surrogate key of this view: one per version of the record. |
employee_id | integer | Odoo id: hr.employee id. |
employee_name | text | Name of the employee. |
department_name | text | Department of the employee. |
job_title | text | Job title. |
user_id | integer | Odoo id: res.users id. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True 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.
| Column | Type | Description |
|---|---|---|
product_key | bigint | Surrogate key of this view: one per version of the record. |
product_id | integer | Odoo id: product.product id. |
product_tmpl_id | integer | Odoo id: product.template id. |
product_name | text | Name of the product (template). |
variant_name | text | Name of the variant, with its attribute values. |
default_code | text | Internal reference of the product. |
category_name | text | Product category (full path). |
product_type | text | Odoo product type: consu (goods), service or combo. |
list_price | numeric | Sales price on the product. |
standard_price | numeric | Cost on the product. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True for the current version: filter on it for today's values. |
is_storable | boolean | True when Odoo keeps the product in stock (tracks its quantity); empty unless the inventory data mart is on. |
unit_of_measure | text | The 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).
| Column | Type | Description |
|---|---|---|
project_key | bigint | Surrogate key of this view: one per version of the record. |
project_id | integer | Odoo id: project.project id. |
project_name | text | Name of the project. |
manager_name | text | Name of the project manager. |
privacy_visibility | text | Who can see the project (Odoo's setting). |
date_start | date | Start date of the project. |
date_end | date | End date of the project. |
is_billable | boolean | True when the hours (or the project's tasks) are billed to the customer. |
billing_type | text | How Odoo bills it: on timesheets, fixed price, milestones, manually, or not at all. |
project_status | text | Status of the project's last update: On track, At risk, Off track, On hold, Done, Not set. |
allocated_hours | numeric | Hours planned. |
sales_order_id | integer | Odoo id: sale.order id. |
sales_order_name | text | Order reference, e.g. S00042. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True for the current version: filter on it for today's values. |
conformed.v_task_stage
Task stages; sort by stage_sequence.
| Column | Type | Description |
|---|---|---|
stage_key | bigint | Surrogate key of this view: one per version of the record. |
stage_id | integer | Odoo id: project.task.type id. |
stage_name | text | Name of the stage. |
stage_sequence | integer | Order of the stage: sort on it. |
is_folded | boolean | True for stages folded in Odoo's kanban view, usually closing ones. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True for the current version: filter on it for today's values. |
conformed.v_user
Odoo users: salespeople, project managers and task assignees.
| Column | Type | Description |
|---|---|---|
user_key | bigint | Surrogate key of this view: one per version of the record. |
user_id | integer | Odoo id: res.users id. |
user_name | text | Name of the user. |
login | text | Login of the user. |
job_title | text | Job title. |
work_email | text | Work email of the user (from their employee). |
is_internal | boolean | True for internal users, false for portal and public users. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True 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.
| Column | Type | Description |
|---|---|---|
crm_stage_key | bigint | Surrogate key of this view: one per version of the record. |
crm_stage_id | integer | Odoo id: crm.stage id. |
stage_name | text | Name of the stage. |
stage_sequence | integer | Order of the stage: sort on it. |
is_won | boolean | True for the pipeline stage of won opportunities. |
is_folded | boolean | True for stages folded in Odoo's kanban view, usually closing ones. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True 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.
| Column | Type | Description |
|---|---|---|
invoice_line_id | integer | Odoo id: account.move.line id. |
invoice_id | integer | Odoo id: account.move id. |
invoice_name | text | Invoice number, e.g. INV/2026/00042. |
document_type | text | Invoice or Credit note. |
payment_state | text | Odoo's payment state: not_paid, in_payment, paid, partial, reversed. |
invoice_date | date | Date of the invoice date, in DW_TIMEZONE. |
invoice_month_key | integer | Month of the invoice date, as yyyymm. |
invoice_year_month | text | Month of the invoice date, as 'yyyy-mm'. |
invoice_year | integer | Year of the invoice date. |
customer_key | bigint | Key to conformed.v_customer: the version valid on the fact's date. |
customer_id | integer | Odoo id: res.partner id of the customer (the commercial partner). |
customer_name | text | Name of the customer. |
customer_country | text | Country of the customer, as of the fact's date. |
product_key | bigint | Key to conformed.v_product: the version valid on the fact's date. |
product_id | integer | Odoo id: product.product id. |
product_name | text | Name of the product (template). |
product_category | text | Product category (full path). |
salesperson_key | bigint | Key to conformed.v_user (the salesperson): the version valid on the fact's date. |
salesperson_name | text | Name of the salesperson. |
sales_team_key | bigint | Key to sales.v_sales_teams: the version valid on the fact's date. |
sales_team_name | text | Name of the sales team. |
sales_line_id | integer | Odoo id: sale.order.line id. |
sales_order_id | integer | Odoo id: sale.order id. |
sales_order_name | text | Order reference, e.g. S00042. |
currency_name | text | Currency code: the company's own currency (v_company), or the document's (facts). |
quantity | numeric | Quantity, in the product's unit (unit_of_measure; negative on credit notes). |
price_unit | numeric | Unit price, per the line's own unit (order_unit or invoiced_unit; not additive). |
discount_pct | numeric | Discount percentage (not additive). |
amount_untaxed | numeric | Untaxed amount, in the document's currency. |
amount_total | numeric | Total amount, tax included, in the document's currency. |
amount_untaxed_company_ccy | numeric | Untaxed amount, in the company's own currency: adds up within one company only. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
customer_is_intercompany | boolean | True when the customer is one of the Odoo companies: a sale between companies. |
amount_untaxed_reporting_ccy | numeric | Untaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
unit_of_measure | text | The product's unit of measure: the unit its quantities are counted in. |
invoiced_quantity | numeric | Quantity as on the invoice line, in invoiced_unit (price_unit is per invoiced_unit; negative on credit notes). |
invoiced_unit | text | The 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.
| Column | Type | Description |
|---|---|---|
invoice_id | integer | Odoo id: account.move id. |
invoice_name | text | Invoice number, e.g. INV/2026/00042. |
move_type | text | out_invoice (invoice) or out_refund (credit note). |
document_type | text | Invoice or Credit note. |
payment_state | text | Odoo's payment state: not_paid, in_payment, paid, partial, reversed. |
is_open | boolean | True when the task is open. |
is_overdue | boolean | True when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of). |
days_overdue | integer | Days past the deadline or due date, as of the as-of date; empty when not overdue. |
aging_bucket | text | Paid, Not due, 1-30 days, 31-60 days, 61-90 days or Over 90 days past due, as of the as-of date. |
invoice_date | date | Date of the invoice date, in DW_TIMEZONE. |
invoice_month_key | integer | Month of the invoice date, as yyyymm. |
invoice_year_month | text | Month of the invoice date, as 'yyyy-mm'. |
invoice_year | integer | Year of the invoice date. |
due_date | date | Date of the payment due date, in DW_TIMEZONE. |
customer_key | bigint | Key to conformed.v_customer: the version valid on the fact's date. |
customer_id | integer | Odoo id: res.partner id of the customer (the commercial partner). |
customer_name | text | Name of the customer. |
customer_country | text | Country of the customer, as of the fact's date. |
salesperson_key | bigint | Key to conformed.v_user (the salesperson): the version valid on the fact's date. |
salesperson_name | text | Name of the salesperson. |
sales_team_key | bigint | Key to sales.v_sales_teams: the version valid on the fact's date. |
sales_team_name | text | Name of the sales team. |
invoice_origin | text | Source document, e.g. the order reference. |
reversed_invoice_id | integer | Odoo id: account.move id of the invoice a credit note reverses. |
currency_name | text | Currency code: the company's own currency (v_company), or the document's (facts). |
line_count | integer | Number of lines. |
amount_untaxed_company_ccy | numeric | Untaxed amount, in the company's own currency: adds up within one company only. |
amount_total_company_ccy | numeric | Total amount, tax included, in the company's own currency: adds up within one company only. |
amount_residual_company_ccy | numeric | Amount 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_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
customer_is_intercompany | boolean | True when the customer is one of the Odoo companies: a sale between companies. |
amount_untaxed_reporting_ccy | numeric | Untaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_total_reporting_ccy | numeric | Total amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_residual_reporting_ccy | numeric | Amount 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.
| Column | Type | Description |
|---|---|---|
opportunity_id | integer | Odoo id: crm.lead id. |
opportunity_name | text | Name of the lead or opportunity. |
lead_type | text | lead or opportunity. |
status | text | Open, Won, Lost (archived with probability 0) or Archived. |
is_overdue | boolean | True when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of). |
crm_stage_key | bigint | Key to sales.v_crm_stages: the version valid on the fact's date. |
stage_name | text | Name of the stage. |
stage_sequence | integer | Order of the stage: sort on it. |
created_date | date | Date of creation, in DW_TIMEZONE. |
created_month_key | integer | Month of creation, as yyyymm. |
created_year_month | text | Month of creation, as 'yyyy-mm'. |
conversion_date | date | Date of the conversion from lead to opportunity, in DW_TIMEZONE. |
closed_date | date | Date of closing, in DW_TIMEZONE. |
closed_month_key | integer | Month of closing, as yyyymm. |
closed_year_month | text | Month of closing, as 'yyyy-mm'. |
deadline_date | date | Date of the deadline, in DW_TIMEZONE. |
last_stage_change_date | date | Date of the last stage change, in DW_TIMEZONE. |
customer_key | bigint | Key to conformed.v_customer: the version valid on the fact's date. |
customer_id | integer | Odoo id: res.partner id of the customer (the commercial partner). |
customer_name | text | Name of the customer. |
customer_country | text | Country of the customer, as of the fact's date. |
salesperson_key | bigint | Key to conformed.v_user (the salesperson): the version valid on the fact's date. |
salesperson_name | text | Name of the salesperson. |
sales_team_key | bigint | Key to sales.v_sales_teams: the version valid on the fact's date. |
sales_team_name | text | Name of the sales team. |
lost_reason | text | Why the opportunity was lost. |
source_name | text | Marketing source (UTM). |
medium_name | text | Marketing medium (UTM). |
campaign_name | text | Marketing campaign (UTM). |
priority | text | Odoo's priority (0 = normal, higher = more urgent). |
is_active | boolean | False for records archived in Odoo. |
probability | numeric | Probability of winning, in % (not additive). |
expected_revenue | numeric | Expected revenue, in the company's currency. |
prorated_revenue | numeric | Expected revenue times probability, in the company's currency. |
days_to_close | numeric | Days from creation to won or lost (not additive: average it). |
quotation_count | integer | Number of quotations it led to. |
order_count | integer | Number of confirmed orders it led to. |
ordered_amount_company_ccy | numeric | Untaxed total of the confirmed orders it led to, in the company's own currency: adds up within one company only. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
customer_is_intercompany | boolean | True when the customer is one of the Odoo companies: a sale between companies. |
expected_revenue_reporting_ccy | numeric | Expected revenue, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
prorated_revenue_reporting_ccy | numeric | Expected revenue times probability, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
ordered_amount_reporting_ccy | numeric | Untaxed 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.
| Column | Type | Description |
|---|---|---|
sales_line_id | integer | Odoo id: sale.order.line id. |
order_id | integer | Odoo id: sale.order id. |
order_name | text | Order reference, e.g. S00042. |
order_date_key | integer | Key to conformed.v_date: the order date (for a quotation: empty until confirmed), as yyyymmdd (-1 = none). |
order_date | date | Date of the order date (for a quotation: empty until confirmed), in DW_TIMEZONE. |
order_month_key | integer | Month of the order date (for a quotation: empty until confirmed), as yyyymm. |
order_year_month | text | Month of the order date (for a quotation: empty until confirmed), as 'yyyy-mm'. |
order_quarter | text | Quarter of the order date, 'Q1'-'Q4'. |
order_year | integer | Year of the order date. |
commitment_date | date | Date of the delivery date promised to the customer, in DW_TIMEZONE. |
customer_key | bigint | Key to conformed.v_customer: the version valid on the fact's date. |
customer_id | integer | Odoo id: res.partner id of the customer (the commercial partner). |
customer_name | text | Name of the customer. |
customer_country | text | Country of the customer, as of the fact's date. |
customer_is_company | boolean | True when the customer is a company. |
product_key | bigint | Key to conformed.v_product: the version valid on the fact's date. |
product_id | integer | Odoo id: product.product id. |
product_name | text | Name of the product (template). |
variant_name | text | Name of the variant, with its attribute values. |
product_category | text | Product category (full path). |
product_type | text | Odoo product type: consu (goods), service or combo. |
salesperson_key | bigint | Key to conformed.v_user (the salesperson): the version valid on the fact's date. |
salesperson_name | text | Name of the salesperson. |
sales_team_name | text | Name of the sales team. |
currency_name | text | Currency code: the company's own currency (v_company), or the document's (facts). |
quantity | numeric | Quantity, in the product's unit (unit_of_measure; negative on credit notes). |
quantity_delivered | numeric | Quantity delivered, in the product's unit. |
quantity_invoiced | numeric | Quantity invoiced, in the product's unit. |
price_unit | numeric | Unit price, per the line's own unit (order_unit or invoiced_unit; not additive). |
discount_pct | numeric | Discount percentage (not additive). |
discount_amount | numeric | Discount, in the document's currency. |
amount_untaxed | numeric | Untaxed amount, in the document's currency. |
amount_tax | numeric | Tax, in the document's currency. |
amount_total | numeric | Total amount, tax included, in the document's currency. |
margin | numeric | Margin (price minus cost), in the document's currency. |
amount_untaxed_company_ccy | numeric | Untaxed amount, in the company's own currency: adds up within one company only. |
amount_total_company_ccy | numeric | Total amount, tax included, in the company's own currency: adds up within one company only. |
margin_company_ccy | numeric | Margin (price minus cost), in the company's own currency: adds up within one company only. |
sales_team_key | bigint | Key to sales.v_sales_teams: the version valid on the fact's date. |
customer_industry | text | Industry of the customer. |
invoice_status | text | Odoo's invoicing status: no, to invoice, invoiced or upselling. |
quantity_to_invoice | numeric | Quantity still to invoice, in the product's unit. |
amount_invoiced_company_ccy | numeric | Untaxed amount invoiced so far, in the company's own currency: adds up within one company only. |
amount_to_invoice_company_ccy | numeric | Untaxed amount still to invoice, in the company's own currency: adds up within one company only. |
is_service | boolean | True for a service product line. |
opportunity_id | integer | Odoo id: crm.lead id. |
project_id | integer | Odoo id: project.project id. |
task_id | integer | Odoo id: project.task id. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
customer_is_intercompany | boolean | True when the customer is one of the Odoo companies: a sale between companies. |
amount_untaxed_reporting_ccy | numeric | Untaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_total_reporting_ccy | numeric | Total amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
margin_reporting_ccy | numeric | Margin (price minus cost), in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_invoiced_reporting_ccy | numeric | Untaxed amount invoiced so far, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_to_invoice_reporting_ccy | numeric | Untaxed amount still to invoice, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
unit_of_measure | text | The product's unit of measure: the unit its quantities are counted in. |
order_quantity | numeric | Quantity as on the order line, in order_unit (price_unit is per order_unit). |
order_unit | text | The 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.
| Column | Type | Description |
|---|---|---|
order_id | integer | Odoo id: sale.order id. |
order_name | text | Order reference, e.g. S00042. |
state | text | Odoo's state: draft, sent, sale (confirmed) or cancel. |
order_status | text | Quotation, Quotation sent, Sales order or Cancelled. |
invoice_status | text | Odoo's invoicing status: no, to invoice, invoiced or upselling. |
is_confirmed | boolean | True for a confirmed order. |
is_cancelled | boolean | True for a cancelled order. |
is_open_quotation | boolean | True for a quotation not confirmed or cancelled yet. |
is_expired | boolean | True for an open quotation past its expiry date, as of the as-of date. |
quotation_date | date | Date of the date the quotation was created, in DW_TIMEZONE. |
quotation_month_key | integer | Month of the date the quotation was created, as yyyymm. |
quotation_year_month | text | Month of the date the quotation was created, as 'yyyy-mm'. |
order_date | date | Date of the order date (for a quotation: empty until confirmed), in DW_TIMEZONE. |
order_month_key | integer | Month of the order date (for a quotation: empty until confirmed), as yyyymm. |
order_year_month | text | Month of the order date (for a quotation: empty until confirmed), as 'yyyy-mm'. |
validity_date | date | Date of the date the quotation expires, in DW_TIMEZONE. |
commitment_date | date | Date of the delivery date promised to the customer, in DW_TIMEZONE. |
first_invoice_date | date | Date of the first posted invoice, in DW_TIMEZONE. |
customer_key | bigint | Key to conformed.v_customer: the version valid on the fact's date. |
customer_id | integer | Odoo id: res.partner id of the customer (the commercial partner). |
customer_name | text | Name of the customer. |
customer_country | text | Country of the customer, as of the fact's date. |
customer_industry | text | Industry of the customer. |
salesperson_key | bigint | Key to conformed.v_user (the salesperson): the version valid on the fact's date. |
salesperson_name | text | Name of the salesperson. |
sales_team_key | bigint | Key to sales.v_sales_teams: the version valid on the fact's date. |
sales_team_name | text | Name of the sales team. |
opportunity_id | integer | Odoo id: crm.lead id. |
project_id | integer | Odoo id: project.project id. |
source_name | text | Marketing source (UTM). |
medium_name | text | Marketing medium (UTM). |
campaign_name | text | Marketing campaign (UTM). |
payment_term_name | text | Payment terms. |
currency_name | text | Currency code: the company's own currency (v_company), or the document's (facts). |
line_count | integer | Number of lines. |
amount_untaxed | numeric | Untaxed amount, in the document's currency. |
amount_total | numeric | Total amount, tax included, in the document's currency. |
amount_untaxed_company_ccy | numeric | Untaxed amount, in the company's own currency: adds up within one company only. |
amount_total_company_ccy | numeric | Total amount, tax included, in the company's own currency: adds up within one company only. |
margin_company_ccy | numeric | Margin (price minus cost), in the company's own currency: adds up within one company only. |
amount_invoiced_company_ccy | numeric | Untaxed amount invoiced so far, in the company's own currency: adds up within one company only. |
amount_to_invoice_company_ccy | numeric | Untaxed amount still to invoice, in the company's own currency: adds up within one company only. |
days_to_confirm | numeric | Days from quotation to confirmation (not additive: average it). |
days_to_invoice | numeric | Days from confirmation to the first invoice (not additive: average it). |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
customer_is_intercompany | boolean | True when the customer is one of the Odoo companies: a sale between companies. |
amount_untaxed_reporting_ccy | numeric | Untaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_total_reporting_ccy | numeric | Total amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
margin_reporting_ccy | numeric | Margin (price minus cost), in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_invoiced_reporting_ccy | numeric | Untaxed amount invoiced so far, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_to_invoice_reporting_ccy | numeric | Untaxed amount still to invoice, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
sales.v_sales_teams
Sales teams (crm.team).
| Column | Type | Description |
|---|---|---|
sales_team_key | bigint | Surrogate key of this view: one per version of the record. |
sales_team_id | integer | Odoo id: crm.team id. |
sales_team_name | text | Name of the sales team. |
team_leader_name | text | Name of the sales team's leader. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True 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.
| Column | Type | Description |
|---|---|---|
milestone_id | integer | Odoo id: project.milestone id. |
milestone_name | text | Name of the milestone. |
project_key | bigint | Key to conformed.v_project: the version valid on the fact's date. |
project_name | text | Name of the project. |
deadline_date | date | Date of the deadline, in DW_TIMEZONE. |
reached_date | date | Date of the date the milestone was reached, in DW_TIMEZONE. |
is_reached | boolean | True when the milestone is reached. |
is_late | boolean | True when reached after its deadline, or not reached and past it (as of the as-of date). |
days_late | integer | Days the milestone is or was late. |
sales_line_id | integer | Odoo id: sale.order.line id. |
sales_order_id | integer | Odoo id: sale.order id. |
quantity_pct | numeric | Share of the sales line invoiced at this milestone, in %. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name 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.
| Column | Type | Description |
|---|---|---|
project_key | bigint | Key to conformed.v_project: the version valid on the fact's date. |
project_id | integer | Odoo id: project.project id. |
project_name | text | Name of the project. |
project_manager | text | Name of the project manager. |
is_billable | boolean | True when the hours (or the project's tasks) are billed to the customer. |
billing_type | text | How Odoo bills it: on timesheets, fixed price, milestones, manually, or not at all. |
project_status | text | Status of the project's last update: On track, At risk, Off track, On hold, Done, Not set. |
sales_order_name | text | Order reference, e.g. S00042. |
is_active | boolean | False for records archived in Odoo. |
revenue_sold | numeric | Untaxed amount of the sales lines delivered in the project, reporting currency. |
revenue_invoiced | numeric | Of which invoiced, reporting currency. |
revenue_to_invoice | numeric | Of which still to invoice, reporting currency. |
hours | numeric | Hours worked. |
billable_hours | numeric | Billable hours. |
non_billable_hours | numeric | Non-billable hours. |
timesheet_cost | numeric | Cost of the hours, reporting currency. |
margin | numeric | Margin (price minus cost), in the document's currency. |
margin_pct | numeric | Margin as a share of revenue, in % (not additive). |
billable_pct | numeric | Billable hours as a share of all hours, in % (not additive). |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name 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.
| Column | Type | Description |
|---|---|---|
sales_line_id | integer | Odoo id: sale.order.line id. |
project_key | bigint | Key to conformed.v_project: the version valid on the fact's date. |
project_name | text | Name of the project. |
sales_order_id | integer | Odoo id: sale.order id. |
sales_order_name | text | Order reference, e.g. S00042. |
order_date | date | Date of the order date (for a quotation: empty until confirmed), in DW_TIMEZONE. |
customer_key | bigint | Key to conformed.v_customer: the version valid on the fact's date. |
customer_name | text | Name of the customer. |
product_key | bigint | Key to conformed.v_product: the version valid on the fact's date. |
product_name | text | Name of the product (template). |
task_id | integer | Odoo id: project.task id. |
invoice_status | text | Odoo's invoicing status: no, to invoice, invoiced or upselling. |
quantity | numeric | Quantity, in the product's unit (unit_of_measure; negative on credit notes). |
quantity_delivered | numeric | Quantity delivered, in the product's unit. |
quantity_invoiced | numeric | Quantity invoiced, in the product's unit. |
amount_untaxed_company_ccy | numeric | Untaxed amount, in the company's own currency: adds up within one company only. |
amount_invoiced_company_ccy | numeric | Untaxed amount invoiced so far, in the company's own currency: adds up within one company only. |
amount_to_invoice_company_ccy | numeric | Untaxed amount still to invoice, in the company's own currency: adds up within one company only. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
amount_untaxed_reporting_ccy | numeric | Untaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_invoiced_reporting_ccy | numeric | Untaxed amount invoiced so far, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_to_invoice_reporting_ccy | numeric | Untaxed 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.
| Column | Type | Description |
|---|---|---|
task_id | integer | Odoo id: project.task id. |
user_key | bigint | Key to conformed.v_user: the version valid on the fact's date. |
assignee_name | text | Name of the assignee. |
weight | numeric | 1 / the number of assignees of the task. |
task_name | text | Name of the task. |
project_name | text | Name of the project. |
is_closed | boolean | True when the task is closed. |
is_active | boolean | False for records archived in Odoo. |
deadline_date | date | Date of the deadline, in DW_TIMEZONE. |
is_overdue | boolean | True when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of). |
allocated_hours | numeric | Hours planned. |
effective_hours | numeric | Hours spent (from timesheets). |
allocated_hours_weighted | numeric | Planned hours times weight: adds up per assignee without double counting. |
effective_hours_weighted | numeric | Hours 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.
| Column | Type | Description |
|---|---|---|
snapshot_date | date | Date of the snapshot (the day the load ran, or AS_OF_DATE), in DW_TIMEZONE. |
snapshot_date_key | integer | Key to conformed.v_date: the snapshot (the day the load ran, or AS_OF_DATE), as yyyymmdd (-1 = none). |
project_key | bigint | Key to conformed.v_project: the version valid on the fact's date. |
project_name | text | Name of the project. |
open_tasks | bigint | Number of open tasks on that day. |
overdue_tasks | bigint | Number of overdue tasks on that day. |
open_remaining_hours | numeric | Remaining hours of the open tasks on that day. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name 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.
| Column | Type | Description |
|---|---|---|
task_id | integer | Odoo id: project.task id. |
task_name | text | Name of the task. |
parent_task_id | integer | Odoo id: project.task id of the parent task. |
project_key | bigint | Key to conformed.v_project: the version valid on the fact's date. |
project_name | text | Name of the project. |
project_manager | text | Name of the project manager. |
customer_key | bigint | Key to conformed.v_customer: the version valid on the fact's date. |
customer_name | text | Name of the customer. |
stage_key | bigint | Key to conformed.v_task_stage: the version valid on the fact's date. |
stage_name | text | Name of the stage. |
stage_sequence | integer | Order of the stage: sort on it. |
state | text | Odoo's task state, e.g. 01_in_progress, 1_done, 1_canceled. |
priority | text | Odoo's priority (0 = normal, higher = more urgent). |
milestone_name | text | Name of the milestone. |
is_closed | boolean | True when the task is closed. |
is_active | boolean | False for records archived in Odoo. |
created_date | date | Date of creation, in DW_TIMEZONE. |
created_month_key | integer | Month of creation, as yyyymm. |
created_year_month | text | Month of creation, as 'yyyy-mm'. |
assigned_date | date | Date of the first assignment, in DW_TIMEZONE. |
deadline_date | date | Date of the deadline, in DW_TIMEZONE. |
closed_date | date | Date of closing, in DW_TIMEZONE. |
last_stage_change_date | date | Date of the last stage change, in DW_TIMEZONE. |
is_overdue | boolean | True when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of). |
days_overdue | integer | Days past the deadline or due date, as of the as-of date; empty when not overdue. |
assignee_count | integer | Number of assignees. |
assignee_names | text | Names of the assignees, comma-separated. |
allocated_hours | numeric | Hours planned. |
effective_hours | numeric | Hours spent (from timesheets). |
remaining_hours | numeric | Hours planned minus hours spent. |
total_hours_spent | numeric | Hours spent, sub-tasks included. |
overtime | numeric | Hours spent beyond the planned hours. |
rating_avg | numeric | Average customer rating (not additive). |
rating_count | integer | Number of customer ratings. |
rating_satisfaction_pct | numeric | Share of satisfied ratings, in % (not additive). |
is_billable | boolean | True when the hours (or the project's tasks) are billed to the customer. |
sales_line_id | integer | Odoo id: sale.order.line id. |
sales_order_id | integer | Odoo id: sale.order id. |
sales_order_name | text | Order reference, e.g. S00042. |
closed_month_key | integer | Month of closing, as yyyymm. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name 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.
| Column | Type | Description |
|---|---|---|
timesheet_line_id | integer | Odoo id: account.analytic.line id. |
work_date_key | integer | Key to conformed.v_date: the day the hours were worked, as yyyymmdd (-1 = none). |
work_date | date | Date of the day the hours were worked, in DW_TIMEZONE. |
work_month_key | integer | Month of the day the hours were worked, as yyyymm. |
work_year_month | text | Month of the day the hours were worked, as 'yyyy-mm'. |
iso_year | integer | ISO week-numbering year. |
iso_week | integer | ISO week number. |
employee_key | bigint | Key to conformed.v_employee: the version valid on the fact's date. |
employee_name | text | Name of the employee. |
department_name | text | Department of the employee. |
project_key | bigint | Key to conformed.v_project: the version valid on the fact's date. |
project_name | text | Name of the project. |
customer_key | bigint | Key to conformed.v_customer: the version valid on the fact's date. |
customer_name | text | Name of the customer. |
task_id | integer | Odoo id: project.task id. |
task_name | text | Name of the task. |
description | text | Description entered on the timesheet line. |
hours | numeric | Hours worked. |
cost_amount | numeric | Cost of the hours, in the company's currency. |
billing_type | text | How Odoo bills it: on timesheets, fixed price, milestones, manually, or not at all. |
is_billable | boolean | True when the hours (or the project's tasks) are billed to the customer. |
is_invoiced | boolean | True when the hours were invoiced. |
sales_line_id | integer | Odoo id: sale.order.line id. |
sales_order_id | integer | Odoo id: sale.order id. |
sales_order_name | text | Order reference, e.g. S00042. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
cost_reporting_ccy | numeric | Cost 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).
| Column | Type | Description |
|---|---|---|
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
account_key | bigint | Key to accounting.v_accounts: the version valid on the fact's date. |
account_code | text | Account code (in the ETL user's company: Odoo 19 keeps one per company). |
account_name | text | Account name. |
account_type | text | Odoo's account type, e.g. asset_receivable, income, expense. |
account_group | text | Asset, Liability, Equity, Income, Expense or Off-balance (from the account type). |
statement | text | Balance sheet or Profit and loss. |
month_key | integer | Month as yyyymm; sorts chronologically. |
year_month | text | The month, as 'yyyy-mm'. |
month_start | date | First day of the month: filter on it for a period. |
debit_company_ccy | numeric | Debit, in the company's own currency: adds up within one company only. |
credit_company_ccy | numeric | Credit, in the company's own currency: adds up within one company only. |
net_change_company_ccy | numeric | Movement in the month (debit - credit), in the company's own currency: adds up within one company only. |
net_change_reporting_ccy | numeric | Movement in the month (debit - credit), in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
closing_balance_company_ccy | numeric | Balance 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_ccy | numeric | Balance 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).
| Column | Type | Description |
|---|---|---|
account_key | bigint | Surrogate key of this view: one per version of the record. |
account_id | integer | Odoo id: account.account id. |
account_code | text | Account code (in the ETL user's company: Odoo 19 keeps one per company). |
account_name | text | Account name. |
account_type | text | Odoo's account type, e.g. asset_receivable, income, expense. |
account_type_label | text | The account type, readable. |
account_group | text | Asset, Liability, Equity, Income, Expense or Off-balance (from the account type). |
statement | text | Balance sheet or Profit and loss. |
is_reconcilable | boolean | True when Odoo matches the account's lines (receivables, payables). |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True 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.
| Column | Type | Description |
|---|---|---|
gl_line_id | integer | Odoo id: account.move.line id. |
move_id | integer | Odoo id: account.move id of the journal entry. |
move_name | text | Number of the journal entry, e.g. INV/2026/00042. |
move_type | text | entry, out_invoice, out_refund, in_invoice, in_refund, out_receipt, in_receipt. |
move_ref | text | Reference of the journal entry. |
line_label | text | Label of the journal item. |
entry_date_key | integer | Key to conformed.v_date: the journal entry (its accounting date), as yyyymmdd (-1 = none). |
entry_date | date | Date of the journal entry (its accounting date), in DW_TIMEZONE. |
entry_month_key | integer | Month of the journal entry (its accounting date), as yyyymm. |
entry_year_month | text | Month of the journal entry (its accounting date), as 'yyyy-mm'. |
entry_year | integer | Year of the entry date. |
maturity_date | date | Date of the due date of a receivable or payable line, in DW_TIMEZONE. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
account_key | bigint | Key to accounting.v_accounts: the version valid on the fact's date. |
account_code | text | Account code (in the ETL user's company: Odoo 19 keeps one per company). |
account_name | text | Account name. |
account_type | text | Odoo's account type, e.g. asset_receivable, income, expense. |
account_group | text | Asset, Liability, Equity, Income, Expense or Off-balance (from the account type). |
statement | text | Balance sheet or Profit and loss. |
journal_key | bigint | Key to accounting.v_journals: the version valid on the fact's date. |
journal_code | text | Journal code. |
journal_name | text | Journal name. |
journal_type | text | sale, purchase, bank, cash, credit or general. |
partner_key | bigint | Key to conformed.v_customer (the partner: customer, supplier, employee, ...): the version valid on the fact's date. |
partner_name | text | Name of the partner. |
partner_is_intercompany | boolean | True when the partner is one of the Odoo companies. |
currency_name | text | Currency of the line's amount_currency. |
debit_company_ccy | numeric | Debit, in the company's own currency: adds up within one company only. |
credit_company_ccy | numeric | Credit, in the company's own currency: adds up within one company only. |
balance_company_ccy | numeric | Balance (debit - credit), in the company's own currency: adds up within one company only. |
balance_reporting_ccy | numeric | Balance (debit - credit), in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_currency | numeric | Amount in the line's own currency (currency_name). |
amount_residual_company_ccy | numeric | Open amount of a receivable or payable line, company currency. |
is_reconciled | boolean | True when the line is fully matched (e.g. an invoice with its payment). |
accounting.v_journals
Journals: sale, purchase, bank, cash, credit, general.
| Column | Type | Description |
|---|---|---|
journal_key | bigint | Surrogate key of this view: one per version of the record. |
journal_id | integer | Odoo id: account.journal id. |
journal_code | text | Journal code. |
journal_name | text | Journal name. |
journal_type | text | sale, purchase, bank, cash, credit or general. |
company_id | integer | Odoo id: res.company id of the journal's company. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True 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.
| Column | Type | Description |
|---|---|---|
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
month_key | integer | Month as yyyymm; sorts chronologically. |
year_month | text | The month, as 'yyyy-mm'. |
month_start | date | First day of the month: filter on it for a period. |
year | integer | Year of the month. |
account_key | bigint | Key to accounting.v_accounts: the version valid on the fact's date. |
account_code | text | Account code (in the ETL user's company: Odoo 19 keeps one per company). |
account_name | text | Account name. |
account_type | text | Odoo's account type, e.g. asset_receivable, income, expense. |
section | text | Income or Expense. |
amount_company_ccy | numeric | Income or expense as a positive amount, in the company's own currency: adds up within one company only. |
amount_reporting_ccy | numeric | Income or expense as a positive amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
profit_company_ccy | numeric | Effect on profit: income positive, expenses negative, in the company's own currency: adds up within one company only. |
profit_reporting_ccy | numeric | Effect 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.
| Column | Type | Description |
|---|---|---|
bill_id | integer | Odoo id: account.move id of the vendor bill. |
bill_name | text | Number of the vendor bill. |
move_type | text | in_invoice (vendor bill) or in_refund (vendor refund). |
document_type | text | Vendor bill or Vendor refund. |
payment_state | text | Odoo's payment state: not_paid, in_payment, paid, partial, reversed. |
supplier_ref | text | The supplier's own reference for the bill. |
is_open | boolean | True when the task is open. |
is_overdue | boolean | True when past its deadline or due date and still open, as of the as-of date (conformed.v_as_of). |
days_overdue | integer | Days past the deadline or due date, as of the as-of date; empty when not overdue. |
aging_bucket | text | Paid, Not due, 1-30 days, 31-60 days, 61-90 days or Over 90 days past due, as of the as-of date. |
bill_date | date | Date of the vendor bill, in DW_TIMEZONE. |
bill_month_key | integer | Month of the vendor bill, as yyyymm. |
bill_year_month | text | Month of the vendor bill, as 'yyyy-mm'. |
due_date | date | Date of the payment due date, in DW_TIMEZONE. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
supplier_key | bigint | Key to conformed.v_customer (the supplier): the version valid on the fact's date. |
supplier_name | text | Name of the supplier. |
supplier_country | text | Country of the supplier. |
currency_name | text | Currency code: the company's own currency (v_company), or the document's (facts). |
amount_untaxed_company_ccy | numeric | Untaxed amount, in the company's own currency: adds up within one company only. |
amount_total_company_ccy | numeric | Total amount, tax included, in the company's own currency: adds up within one company only. |
amount_residual_company_ccy | numeric | Amount 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_ccy | numeric | Untaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_total_reporting_ccy | numeric | Total amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_residual_reporting_ccy | numeric | Amount 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.
| Column | Type | Description |
|---|---|---|
purchase_line_id | integer | Odoo id: purchase.order.line id. |
order_id | integer | Odoo id: purchase.order id. |
order_name | text | Purchase order reference, e.g. P00042. |
order_date_key | integer | Key to conformed.v_date: the order date (for a quotation: empty until confirmed), as yyyymmdd (-1 = none). |
order_date | date | Date of the order date (for a quotation: empty until confirmed), in DW_TIMEZONE. |
order_month_key | integer | Month of the order date (for a quotation: empty until confirmed), as yyyymm. |
order_year_month | text | Month of the order date (for a quotation: empty until confirmed), as 'yyyy-mm'. |
order_year | integer | Year of the order date. |
planned_date | date | Date of the expected arrival, in DW_TIMEZONE. |
supplier_key | bigint | Key to conformed.v_customer (the supplier): the version valid on the fact's date. |
supplier_name | text | Name of the supplier. |
supplier_country | text | Country of the supplier. |
product_key | bigint | Key to conformed.v_product: the version valid on the fact's date. |
product_name | text | Name of the product (template). |
default_code | text | Internal reference of the product. |
category_name | text | Product category (full path). |
buyer_key | bigint | Key to conformed.v_user (the buyer): the version valid on the fact's date. |
buyer_name | text | Name of the buyer (the purchase representative). |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
description | text | Description on the order line. |
currency_name | text | Currency code: the company's own currency (v_company), or the document's (facts). |
quantity | numeric | Quantity ordered, in the product's unit (unit_of_measure). |
quantity_received | numeric | Quantity received so far, in the product's unit. |
quantity_to_receive | numeric | Quantity ordered that is not received yet, in the product's unit. |
quantity_billed | numeric | Quantity the supplier billed so far, in the product's unit. |
quantity_to_bill | numeric | Quantity received (or ordered) that is not billed yet, in the product's unit. |
price_unit | numeric | Unit price, per the line's own unit (order_unit or invoiced_unit; not additive). |
discount_pct | numeric | Discount percentage (not additive). |
amount_untaxed | numeric | Untaxed amount, in the document's currency. |
amount_total | numeric | Total amount, tax included, in the document's currency. |
amount_untaxed_company_ccy | numeric | Untaxed amount, in the company's own currency: adds up within one company only. |
amount_total_company_ccy | numeric | Total amount, tax included, in the company's own currency: adds up within one company only. |
amount_received_company_ccy | numeric | Untaxed amount of the quantity received so far, in the company's own currency: adds up within one company only. |
amount_untaxed_reporting_ccy | numeric | Untaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_total_reporting_ccy | numeric | Total amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_received_reporting_ccy | numeric | Untaxed amount of the quantity received so far, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
unit_of_measure | text | The product's unit of measure: the unit its quantities are counted in. |
order_quantity | numeric | Quantity as on the order line, in order_unit (price_unit is per order_unit). |
order_unit | text | The 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.
| Column | Type | Description |
|---|---|---|
order_id | integer | Odoo id: purchase.order id. |
order_name | text | Purchase order reference, e.g. P00042. |
state | text | Odoo's state: draft (RFQ), sent, to approve, purchase (confirmed) or cancel. |
order_status | text | RFQ, RFQ sent, To approve, Purchase order or Cancelled. |
billing_status | text | Nothing to bill, To bill or Fully billed (Odoo's billing status). |
receipt_status | text | Not received, Partially received, Received, or Not applicable (no goods to receive, or the inventory data mart is off). |
rfq_date | date | Date of the request for quotation (its creation), in DW_TIMEZONE. |
rfq_year_month | text | Month of the request for quotation (its creation), as 'yyyy-mm'. |
order_date | date | Date the order was confirmed, in DW_TIMEZONE; empty for an RFQ. |
order_month_key | integer | Month of the order date (for a quotation: empty until confirmed), as yyyymm. |
order_year_month | text | Month of the order date (for a quotation: empty until confirmed), as 'yyyy-mm'. |
planned_date | date | Date of the expected arrival, in DW_TIMEZONE. |
received_date | date | Date of the first receipt, in DW_TIMEZONE. |
supplier_key | bigint | Key to conformed.v_customer (the supplier): the version valid on the fact's date. |
supplier_name | text | Name of the supplier. |
supplier_country | text | Country of the supplier. |
buyer_key | bigint | Key to conformed.v_user (the buyer): the version valid on the fact's date. |
buyer_name | text | Name of the buyer (the purchase representative). |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
supplier_ref | text | The supplier's own reference for the order. |
origin | text | Source document, e.g. the sales order that caused it. |
currency_name | text | Currency code: the company's own currency (v_company), or the document's (facts). |
line_count | integer | Number of lines. |
amount_untaxed | numeric | Untaxed amount, in the document's currency. |
amount_total | numeric | Total amount, tax included, in the document's currency. |
amount_untaxed_company_ccy | numeric | Untaxed amount, in the company's own currency: adds up within one company only. |
amount_total_company_ccy | numeric | Total amount, tax included, in the company's own currency: adds up within one company only. |
amount_untaxed_reporting_ccy | numeric | Untaxed amount, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
amount_total_reporting_ccy | numeric | Total amount, tax included, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
days_to_confirm | numeric | Days from the RFQ to the confirmation (not additive: average it). |
days_to_receive | numeric | Days from the confirmation to the first receipt (not additive: average it). |
days_late | integer | Days the first receipt came after the planned day; 0 when on time, empty when nothing was received. |
is_late | boolean | True when the first receipt came after the planned day. |
is_overdue | boolean | True for a confirmed order not fully received whose planned day is before the as-of date. |
is_confirmed | boolean | True for a confirmed order. |
is_cancelled | boolean | True 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.
| Column | Type | Description |
|---|---|---|
location_key | bigint | Surrogate key of this view: one per version of the record. |
location_id | integer | Odoo id: stock.location id. |
location_name | text | Name of the location. |
complete_name | text | Full name of the location, e.g. WH/Stock/Shelf 1. |
usage | text | Odoo's location type: internal, supplier, customer, inventory, production, transit or view. |
usage_label | text | The location type, readable: Internal, Vendor, Customer, Inventory loss, Production, Transit, Virtual. |
is_stock | boolean | True for internal locations: what is there counts as stock on hand. |
warehouse_id | integer | Odoo id: stock.warehouse id. |
warehouse_name | text | Name of the warehouse (for a move or transfer: the one whose stock changed). |
warehouse_code | text | Short code of the warehouse, e.g. WH. |
company_id | integer | Odoo id: res.company id. |
is_active | boolean | False for records archived in Odoo. |
version | integer | Version of the record: 1, 2, ... A new version starts when a history-keeping attribute changes. |
valid_from | timestamp with time zone | Start of this version: Odoo's write_date of the change (the first version starts in 1900). |
valid_to | timestamp with time zone | End of this version (the current one ends in 2199). |
is_current | boolean | True 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.
| Column | Type | Description |
|---|---|---|
stock_move_id | integer | Odoo id: stock.move id. |
move_type | text | out_invoice (invoice) or out_refund (credit note). |
move_date_key | integer | Key to conformed.v_date: the stock move (the day it was done), as yyyymmdd (-1 = none). |
move_date | date | Date of the stock move (the day it was done), in DW_TIMEZONE. |
move_month_key | integer | Month of the stock move (the day it was done), as yyyymm. |
move_year_month | text | Month of the stock move (the day it was done), as 'yyyy-mm'. |
product_key | bigint | Key to conformed.v_product: the version valid on the fact's date. |
product_name | text | Name of the product (template). |
default_code | text | Internal reference of the product. |
category_name | text | Product category (full path). |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
location_key | bigint | Key to inventory.v_locations: the version valid on the fact's date. |
location | text | Full name of the stock location. |
warehouse_name | text | Name of the warehouse (for a move or transfer: the one whose stock changed). |
quantity_change | numeric | Quantity in (+) or out (-) of this location. |
value_change_company_ccy | numeric | Value 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_ccy | numeric | Value 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_cost | numeric | quantity_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.
| Column | Type | Description |
|---|---|---|
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
warehouse_name | text | Name of the warehouse (for a move or transfer: the one whose stock changed). |
product_key | bigint | Key to conformed.v_product: the version valid on the fact's date. |
product_name | text | Name of the product (template). |
category_name | text | Product category (full path). |
month_key | integer | Month as yyyymm; sorts chronologically. |
year_month | text | Month as 'yyyy-mm'. |
month_start | date | First day of the month: filter on it for a period. |
net_change | numeric | Quantity in minus out in the month. |
value_change_company_ccy | numeric | Value 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_ccy | numeric | Value of the move for this location, at the move's cost: + in, - out, in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
closing_quantity | numeric | Stock at the end of the month (cumulative; never add it up across months). |
closing_value_company_ccy | numeric | Stock 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_ccy | numeric | Stock 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_cost | numeric | closing_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.
| Column | Type | Description |
|---|---|---|
stock_move_id | integer | Odoo id: stock.move id. |
move_type | text | Receipt, Delivery, Customer return, Supplier return, Inventory adjustment, Scrap or loss, Production, Internal or Other (from the locations). |
move_date_key | integer | Key to conformed.v_date: the stock move (the day it was done), as yyyymmdd (-1 = none). |
move_date | date | Date of the stock move (the day it was done), in DW_TIMEZONE. |
move_month_key | integer | Month of the stock move (the day it was done), as yyyymm. |
move_year_month | text | Month of the stock move (the day it was done), as 'yyyy-mm'. |
move_year | integer | Year of the move date. |
product_key | bigint | Key to conformed.v_product: the version valid on the fact's date. |
product_name | text | Name of the product (template). |
default_code | text | Internal reference of the product. |
category_name | text | Product category (full path). |
is_storable | boolean | True when Odoo keeps the product in stock; consumables are not. |
unit_cost | numeric | The product's current cost in the company of the move or stock. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
partner_key | bigint | Key to conformed.v_customer (the partner: customer, supplier, employee, ...): the version valid on the fact's date. |
partner_name | text | Name of the partner. |
source_location_key | bigint | Key to inventory.v_locations (where the goods came from): the version valid on the fact's date. |
source_location | text | Full name of the location the goods came from. |
destination_location_key | bigint | Key to inventory.v_locations (where the goods went): the version valid on the fact's date. |
destination_location | text | Full name of the location the goods went to. |
warehouse_name | text | Name of the warehouse (for a move or transfer: the one whose stock changed). |
picking_id | integer | Odoo id: stock.picking id (the transfer). |
reference | text | Reference of the move, e.g. the transfer's name. |
origin | text | Source document, e.g. the sales order that caused it. |
quantity | numeric | Quantity moved, in the product's unit of measure (positive). |
quantity_signed | numeric | Quantity moved: + into stock, - out of it, 0 between two stock locations and for consumables. |
value_company_ccy | numeric | Value 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_ccy | numeric | Value 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_ccy | numeric | Value of the move as Odoo recorded it (positive both ways), in the reporting currency (REPORTING_CURRENCY): adds up across companies. |
value_signed_reporting_ccy | numeric | Value 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_id | integer | Odoo id: sale.order.line id. |
purchase_line_id | integer | Odoo 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.
| Column | Type | Description |
|---|---|---|
quant_id | integer | Odoo id: stock.quant id. |
product_key | bigint | Key to conformed.v_product: the version valid on the fact's date. |
product_name | text | Name of the product (template). |
default_code | text | Internal reference of the product. |
category_name | text | Product category (full path). |
is_storable | boolean | True when Odoo keeps the product in stock; consumables are not. |
location_key | bigint | Key to inventory.v_locations: the version valid on the fact's date. |
location | text | Full name of the stock location. |
warehouse_name | text | Name of the warehouse (for a move or transfer: the one whose stock changed). |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
in_date | date | Date of the oldest arrival of this stock in its location, in DW_TIMEZONE. |
lot_name | text | Lot or serial number. |
quantity | numeric | Quantity on hand, in the product's unit of measure. |
reserved_quantity | numeric | Of which reserved for transfers. |
available_quantity | numeric | Quantity on hand minus reserved. |
unit_cost | numeric | The product's current cost in the company of the move or stock. |
value_at_cost | numeric | Quantity 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.
| Column | Type | Description |
|---|---|---|
picking_id | integer | Odoo id: stock.picking id (the transfer). |
picking_name | text | Reference of the transfer, e.g. WH/OUT/00042. |
transfer_type | text | Receipt, Delivery or Internal transfer. |
operation_type | text | Name of Odoo's operation type. |
state | text | Odoo's state: draft, waiting, confirmed, assigned (ready), done or cancel. |
status | text | Draft, Waiting another operation, Waiting, Ready, Done or Cancelled. |
created_date | date | Date of creation, in DW_TIMEZONE. |
scheduled_date | date | Date of the day the transfer is scheduled for, in DW_TIMEZONE. |
scheduled_month_key | integer | Month of the day the transfer is scheduled for, as yyyymm. |
scheduled_year_month | text | Month of the day the transfer is scheduled for, as 'yyyy-mm'. |
deadline_date | date | Date of the deadline, in DW_TIMEZONE. |
done_date | date | Date of the day the transfer was done, in DW_TIMEZONE. |
done_year_month | text | Month of the day the transfer was done, as 'yyyy-mm'. |
partner_key | bigint | Key to conformed.v_customer (the partner: customer, supplier, employee, ...): the version valid on the fact's date. |
partner_name | text | Name of the partner. |
company_key | bigint | Key to conformed.v_company: the version valid on the fact's date. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
source_location | text | Full name of the location the goods came from. |
destination_location | text | Full name of the location the goods went to. |
warehouse_name | text | Name of the warehouse (for a move or transfer: the one whose stock changed). |
origin | text | Source document, e.g. the sales order that caused it. |
sales_order_id | integer | Odoo id: sale.order id. |
is_backorder | boolean | True for a backorder: what was left of a partly done transfer. |
is_return | boolean | True for a return of an earlier transfer. |
move_count | integer | Number of stock moves (products) in it. |
quantity | numeric | Quantity of its moves (not cancelled), in the products' units of measure. |
days_late | integer | Days it was done after its scheduled day; 0 when on time, empty when not done. |
is_late | boolean | True when it was done after its scheduled day. |
is_on_time | boolean | True when it was done on or before its scheduled day. |
is_overdue | boolean | True when not done or cancelled and the scheduled day is before the as-of date. |
days_overdue | integer | Days past the scheduled day, as of the as-of date; empty when not overdue. |
is_done | boolean | True when done. |
is_cancelled | boolean | True for a cancelled transfer. |
data_quality
data_quality.v_checks
Grain: one check of Odoo's data. open_issues: the issues it finds now.
| Column | Type | Description |
|---|---|---|
rule_code | text | Code of the check (stable; DATA_ISSUES in tools/generate/hop_files.py). |
area | text | What the check is about: Customers, Products, Sales, Pipeline, Invoicing, Projects, Purchase or Inventory. |
severity | text | Error (wrong figures for sure), Warning (figures probably wrong) or Info (incomplete or stale). |
severity_rank | integer | 1 = Error, 2 = Warning, 3 = Info: to sort by. |
check_name | text | What the check looks for. |
why | text | Why it matters, and what to do about it in Odoo. |
odoo_model | text | The Odoo model of the records the check finds. |
open_issues | bigint | Issues 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.
| Column | Type | Description |
|---|---|---|
rule_code | text | Code of the check (stable; DATA_ISSUES in tools/generate/hop_files.py). |
area | text | What the check is about: Customers, Products, Sales, Pipeline, Invoicing, Projects, Purchase or Inventory. |
severity | text | Error (wrong figures for sure), Warning (figures probably wrong) or Info (incomplete or stale). |
severity_rank | integer | 1 = Error, 2 = Warning, 3 = Info: to sort by. |
check_name | text | What the check looks for. |
odoo_model | text | The Odoo model of the records the check finds. |
record_id | integer | Odoo id of the record, in odoo_model. |
record_name | text | Name of the record in Odoo, as of the latest load that found it. |
detail | text | What the check found on the record, e.g. the date or amount. |
company_key | bigint | Key to conformed.v_company: the record's company now; -1 for records without one (customers, products). |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
first_seen_date | date | The day a load first found the issue (again, if it was resolved in between). |
last_seen_date | date | The day of the latest load that found it. |
resolved_date | date | The day of the first load that no longer found it; empty while open. |
is_open | boolean | True while the latest load still finds it. |
days_open | integer | Days from first seen to resolved, or to the as-of date while open. |
odoo_link | text | Opens 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.
| Column | Type | Description |
|---|---|---|
snapshot_date | date | The day of the load, in DW_TIMEZONE (the as-of date when AS_OF_DATE is set). |
rule_code | text | Code of the check (stable; DATA_ISSUES in tools/generate/hop_files.py). |
area | text | What the check is about: Customers, Products, Sales, Pipeline, Invoicing, Projects, Purchase or Inventory. |
severity | text | Error (wrong figures for sure), Warning (figures probably wrong) or Info (incomplete or stale). |
check_name | text | What the check looks for. |
company_key | bigint | Key to conformed.v_company: the records' company now; -1 for records without one. |
company_name | text | Name of the Odoo company; 'Not applicable' for records shared by the companies. |
open_issues | integer | Issues found by the latest load (a state: never add it up across days). |
new_issues | integer | Issues first found that day. |
resolved_issues | integer | Issues no longer found that day. |