dodil/erp-brick-sales-order
DODIL ERP brick: sales order
src/brick_sales_order/schema.sql
CREATE TABLE IF NOT EXISTS so_access_sequence (
access_sequence_code VARCHAR NOT NULL,
step INTEGER NOT NULL,
key_fields VARCHAR,
exclusive BOOLEAN,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (access_sequence_code, step)
);
CREATE TABLE IF NOT EXISTS so_billing_milestone (
sales_order_id VARCHAR NOT NULL,
line_no INTEGER NOT NULL,
milestone_no INTEGER NOT NULL,
pct NUMERIC(19,4),
event VARCHAR,
name VARCHAR,
due_on DATE,
released_on DATE,
released_by VARCHAR,
amount NUMERIC(18,2),
billed_request_no INTEGER,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, line_no, milestone_no)
);
CREATE TABLE IF NOT EXISTS so_block_reason (
block_reason_code VARCHAR NOT NULL,
kind VARCHAR,
name VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (block_reason_code)
);
CREATE TABLE IF NOT EXISTS so_condition_record (
condition_type_code VARCHAR NOT NULL,
key_fields VARCHAR NOT NULL,
key_value VARCHAR NOT NULL,
valid_from DATE NOT NULL,
valid_to DATE,
bp_id BIGINT,
price_group VARCHAR,
product_id VARCHAR,
category_code VARCHAR,
ship_to_country VARCHAR,
rate NUMERIC(19,4),
minimum NUMERIC(18,2),
scale_json VARCHAR,
currency VARCHAR,
set_by VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (condition_type_code, key_fields, key_value, valid_from)
);
CREATE TABLE IF NOT EXISTS so_condition_type (
condition_type_code VARCHAR NOT NULL,
calculation VARCHAR,
level VARCHAR,
header_spread VARCHAR,
sign VARCHAR,
access_sequence_code VARCHAR,
manual_allowed BOOLEAN,
manual_limit_pct NUMERIC(19,4),
statistical BOOLEAN,
scale_basis VARCHAR,
account_purpose VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (condition_type_code)
);
CREATE TABLE IF NOT EXISTS so_credit_claim (
claim_key VARCHAR NOT NULL,
seq INTEGER NOT NULL,
kind VARCHAR,
sales_order_id VARCHAR,
request_no INTEGER,
amount NUMERIC(18,2),
quantity NUMERIC(19,4),
claimed_at TIMESTAMP,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (claim_key, seq)
);
CREATE TABLE IF NOT EXISTS so_customer_partner (
sold_to_bp_id BIGINT NOT NULL,
function VARCHAR NOT NULL,
partner_bp_id BIGINT NOT NULL,
valid_from DATE NOT NULL,
is_default BOOLEAN,
transit_days_json VARCHAR,
status VARCHAR,
set_by VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sold_to_bp_id, function, partner_bp_id, valid_from)
);
CREATE TABLE IF NOT EXISTS so_customer_policy (
bp_id BIGINT NOT NULL,
valid_from DATE NOT NULL,
po_required BOOLEAN,
deposit_pct NUMERIC(19,4),
delivery_terms VARCHAR,
set_by VARCHAR,
price_group VARCHAR,
partial_delivery VARCHAR,
max_partials INTEGER,
under_tolerance_pct NUMERIC(19,4),
over_tolerance_pct NUMERIC(19,4),
combine_allowed BOOLEAN,
min_shelf_life_days INTEGER,
deposit_deduction_mode VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (bp_id, valid_from)
);
CREATE TABLE IF NOT EXISTS so_delivery (
sales_order_id VARCHAR NOT NULL,
line_no INTEGER NOT NULL,
delivery_ref VARCHAR NOT NULL,
quantity NUMERIC(19,4),
kind VARCHAR,
corrects_ref VARCHAR,
delivered_on DATE,
recorded_by VARCHAR,
source VARCHAR,
quantity_base NUMERIC(19,4),
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, line_no, delivery_ref)
);
CREATE TABLE IF NOT EXISTS so_deposit_deduction (
deposit_invoice_id VARCHAR NOT NULL,
seq INTEGER NOT NULL,
kind VARCHAR,
sales_order_id VARCHAR,
request_no INTEGER,
amount NUMERIC(18,2),
tax_category VARCHAR,
claimed_at TIMESTAMP,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (deposit_invoice_id, seq)
);
CREATE TABLE IF NOT EXISTS so_header_condition (
sales_order_id VARCHAR NOT NULL,
condition_type_code VARCHAR NOT NULL,
revision INTEGER NOT NULL,
step INTEGER,
rate NUMERIC(19,4),
amount NUMERIC(18,2),
source VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, condition_type_code, revision)
);
CREATE TABLE IF NOT EXISTS so_incompletion_rule (
order_type_code VARCHAR NOT NULL,
field VARCHAR NOT NULL,
valid_from DATE NOT NULL,
blocks VARCHAR,
condition VARCHAR,
reason_text VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (order_type_code, field, valid_from)
);
CREATE TABLE IF NOT EXISTS so_invoice_request (
sales_order_id VARCHAR NOT NULL,
request_no INTEGER NOT NULL,
kind VARCHAR,
lines_json VARCHAR,
invoice_id VARCHAR,
requested_at TIMESTAMP,
requested_by VARCHAR,
amount NUMERIC(18,2),
deducted NUMERIC(18,2),
status VARCHAR,
deductions_json VARCHAR,
source_ref VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, request_no)
);
CREATE TABLE IF NOT EXISTS so_item_category (
item_category_code VARCHAR NOT NULL,
fulfilment VARCHAR,
billing_relevant BOOLEAN,
pricing VARCHAR,
schedule_lines BOOLEAN,
returns BOOLEAN,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (item_category_code)
);
CREATE TABLE IF NOT EXISTS so_item_category_rule (
order_type_code VARCHAR NOT NULL,
product_type_code VARCHAR NOT NULL,
usage VARCHAR NOT NULL,
valid_from DATE NOT NULL,
item_category_code VARCHAR,
allowed_alternatives VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (order_type_code, product_type_code, usage, valid_from)
);
CREATE TABLE IF NOT EXISTS so_line (
sales_order_id VARCHAR NOT NULL,
line_no INTEGER NOT NULL,
product_id VARCHAR,
description VARCHAR,
unit_code VARCHAR,
quantity NUMERIC(19,4),
unit_numerator BIGINT,
unit_denominator BIGINT,
list_price NUMERIC(19,4),
unit_price NUMERIC(19,4),
discount_pct NUMERIC(19,4),
priced_on DATE,
priced_from VARCHAR,
tax_category VARCHAR,
tax_code VARCHAR,
net_amount NUMERIC(18,2),
tax_amount NUMERIC(18,2),
invoicing_policy VARCHAR,
billing_kind VARCHAR,
billing_plan VARCHAR,
quote_ref VARCHAR,
odoo_line_id VARCHAR,
pricing_quantity BIGINT,
pricing_unit_code VARCHAR,
pricing_numerator BIGINT,
pricing_denominator BIGINT,
stocked BOOLEAN,
reserved_base NUMERIC(19,4),
short_base NUMERIC(19,4),
category_code VARCHAR,
product_type_code VARCHAR,
usage VARCHAR,
item_category_code VARCHAR,
gross_weight NUMERIC(19,6),
weight_unit_code VARCHAR,
measure_valid_from DATE,
procedural BOOLEAN,
ref_sales_order_id VARCHAR,
ref_line_no INTEGER,
ref_delivery_ref VARCHAR,
ref_invoice_id VARCHAR,
ref_invoice_line_no INTEGER,
instalments INTEGER,
statistical_value NUMERIC(18,2),
purchase_request_id VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, line_no)
);
CREATE TABLE IF NOT EXISTS so_line_condition (
sales_order_id VARCHAR NOT NULL,
line_no INTEGER NOT NULL,
step INTEGER NOT NULL,
revision INTEGER NOT NULL,
condition_type_code VARCHAR,
rate NUMERIC(19,4),
amount NUMERIC(18,2),
basis NUMERIC(18,2),
source VARCHAR,
statistical BOOLEAN,
header_share_of VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, line_no, step, revision)
);
CREATE TABLE IF NOT EXISTS so_migration_map (
odoo_db VARCHAR NOT NULL,
odoo_model VARCHAR NOT NULL,
odoo_id BIGINT NOT NULL,
sales_order_id VARCHAR,
line_no INTEGER,
delivery_ref VARCHAR,
migrated_at TIMESTAMP,
amount NUMERIC(18,2),
tax_amount NUMERIC(18,2),
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (odoo_db, odoo_model, odoo_id)
);
CREATE TABLE IF NOT EXISTS so_number_series (
series_id VARCHAR NOT NULL,
high_water_mark INTEGER,
version INTEGER,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (series_id)
);
CREATE TABLE IF NOT EXISTS so_number_series_versions (
series_id VARCHAR NOT NULL,
version INTEGER NOT NULL,
saved_at TIMESTAMP,
PRIMARY KEY (series_id, version)
);
CREATE TABLE IF NOT EXISTS so_order (
sales_order_id VARCHAR NOT NULL,
order_no VARCHAR,
bp_id BIGINT,
owner VARCHAR,
currency VARCHAR,
price_list_id VARCHAR,
lifecycle VARCHAR,
revision INTEGER,
customer_po_ref VARCHAR,
ordered_on DATE,
confirmed_at TIMESTAMP,
delivery_terms VARCHAR,
payment_terms_id VARCHAR,
deposit_pct NUMERIC(19,4),
subtotal NUMERIC(18,2),
tax_total NUMERIC(18,2),
total NUMERIC(18,2),
source_kind VARCHAR,
source_id VARCHAR,
version INTEGER,
created_at TIMESTAMP,
updated_at TIMESTAMP,
confirmed_on DATE,
credit_override_by VARCHAR,
credit_override_reason VARCHAR,
cancel_reason VARCHAR,
order_type_code VARCHAR,
ship_to_bp_id BIGINT,
ship_to_country VARCHAR,
price_group VARCHAR,
ref_sales_order_id VARCHAR,
ref_line_no INTEGER,
ref_invoice_id VARCHAR,
warnings_json VARCHAR,
freight_unknown VARCHAR,
bill_to_bp_id BIGINT,
payer_bp_id BIGINT,
requested_delivery_on DATE,
priority VARCHAR,
partial_delivery VARCHAR,
max_partials INTEGER,
under_tolerance_pct NUMERIC(19,4),
over_tolerance_pct NUMERIC(19,4),
combine_allowed BOOLEAN,
min_shelf_life_days INTEGER,
return_reason VARCHAR,
deposit_deduction_mode VARCHAR,
owner_sub VARCHAR,
approved_by_email VARCHAR,
approved_by_sub VARCHAR,
approved_at TIMESTAMP,
ship_to_address_lines VARCHAR,
ship_to_address_city VARCHAR,
ship_to_address_postcode VARCHAR,
ship_to_address_region VARCHAR,
PRIMARY KEY (sales_order_id)
);
CREATE TABLE IF NOT EXISTS so_order_block (
sales_order_id VARCHAR NOT NULL,
block_no INTEGER NOT NULL,
kind VARCHAR,
reason_code VARCHAR,
event VARCHAR,
note VARCHAR,
by_email VARCHAR,
by_sub VARCHAR,
at TIMESTAMP,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, block_no)
);
CREATE TABLE IF NOT EXISTS so_order_no_claim (
order_no VARCHAR NOT NULL,
sales_order_id VARCHAR,
claimed_at TIMESTAMP,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (order_no)
);
CREATE TABLE IF NOT EXISTS so_order_type (
order_type_code VARCHAR NOT NULL,
valid_from DATE NOT NULL,
name VARCHAR,
series_id VARCHAR,
direction VARCHAR,
billing VARCHAR,
delivery_relevant BOOLEAN,
reference VARCHAR,
default_block VARCHAR,
pricing_procedure_code VARCHAR,
workflow VARCHAR,
priority VARCHAR,
credit_check BOOLEAN,
special_stock VARCHAR,
approval_limit VARCHAR,
status VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (order_type_code, valid_from)
);
CREATE TABLE IF NOT EXISTS so_order_versions (
sales_order_id VARCHAR NOT NULL,
version INTEGER NOT NULL,
saved_at TIMESTAMP,
PRIMARY KEY (sales_order_id, version)
);
CREATE TABLE IF NOT EXISTS so_posting (
document_id VARCHAR NOT NULL,
event VARCHAR NOT NULL,
journal_id VARCHAR,
status VARCHAR,
reason VARCHAR,
attempts INTEGER,
rebate_agreement_id VARCHAR,
payload_json VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (document_id, event)
);
CREATE TABLE IF NOT EXISTS so_pricing_procedure (
pricing_procedure_code VARCHAR NOT NULL,
step INTEGER NOT NULL,
condition_type_code VARCHAR,
from_step INTEGER,
to_step INTEGER,
subtotal_name VARCHAR,
required BOOLEAN,
statistical BOOLEAN,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (pricing_procedure_code, step)
);
CREATE TABLE IF NOT EXISTS so_rebate_accrual (
rebate_agreement_id VARCHAR NOT NULL,
document_id VARCHAR NOT NULL,
line_no INTEGER NOT NULL,
kind VARCHAR,
issue_date DATE,
basis_amount NUMERIC(18,2),
accrual_amount NUMERIC(18,2),
tax_category VARCHAR,
journal_id VARCHAR,
posting_status VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (rebate_agreement_id, document_id, line_no)
);
CREATE TABLE IF NOT EXISTS so_rebate_agreement (
rebate_agreement_id VARCHAR NOT NULL,
bp_id BIGINT,
price_group VARCHAR,
basis VARCHAR,
basis_values_json VARCHAR,
valid_from DATE,
valid_to DATE,
scale_json VARCHAR,
retroactive BOOLEAN,
accrual_rate_pct NUMERIC(19,4),
currency VARCHAR,
lifecycle VARCHAR,
set_by_email VARCHAR,
set_by_sub VARCHAR,
version INTEGER,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (rebate_agreement_id)
);
CREATE TABLE IF NOT EXISTS so_rebate_agreement_versions (
rebate_agreement_id VARCHAR NOT NULL,
version INTEGER NOT NULL,
saved_at TIMESTAMP,
PRIMARY KEY (rebate_agreement_id, version)
);
CREATE TABLE IF NOT EXISTS so_rebate_claim (
rebate_agreement_id VARCHAR NOT NULL,
seq INTEGER NOT NULL,
operation VARCHAR,
claimed_at TIMESTAMP,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (rebate_agreement_id, seq)
);
CREATE TABLE IF NOT EXISTS so_rebate_settlement (
rebate_agreement_id VARCHAR NOT NULL,
settlement_no INTEGER NOT NULL,
kind VARCHAR,
basis_amount NUMERIC(18,2),
rate_pct NUMERIC(19,4),
earned_amount NUMERIC(18,2),
settled_before NUMERIC(18,2),
amount NUMERIC(18,2),
true_up_amount NUMERIC(18,2),
requested_by_email VARCHAR,
requested_by_sub VARCHAR,
approved_by_email VARCHAR,
approved_by_sub VARCHAR,
credit_id VARCHAR,
status VARCHAR,
reason VARCHAR,
lines_json VARCHAR,
requested_on DATE,
approved_on DATE,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (rebate_agreement_id, settlement_no)
);
CREATE TABLE IF NOT EXISTS so_return_inspection (
sales_order_id VARCHAR NOT NULL,
line_no INTEGER NOT NULL,
inspection_ref VARCHAR NOT NULL,
received_quantity NUMERIC(19,4),
accepted_quantity NUMERIC(19,4),
rejected_quantity NUMERIC(19,4),
decision VARCHAR,
reason VARCHAR,
inspected_on DATE,
recorded_at TIMESTAMP,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, line_no, inspection_ref)
);
CREATE TABLE IF NOT EXISTS so_return_reason (
return_reason_code VARCHAR NOT NULL,
name VARCHAR,
inspect BOOLEAN,
restocking_fee_pct NUMERIC(19,4),
credit_on VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (return_reason_code)
);
CREATE TABLE IF NOT EXISTS so_revision (
sales_order_id VARCHAR NOT NULL,
revision INTEGER NOT NULL,
reason VARCHAR,
changed_lines_json VARCHAR,
approved_by VARCHAR,
approved_at TIMESTAMP,
status VARCHAR,
proposed_by VARCHAR,
proposed_at TIMESTAMP,
proposed_sub VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, revision)
);
CREATE TABLE IF NOT EXISTS so_schedule_line (
sales_order_id VARCHAR NOT NULL,
line_no INTEGER NOT NULL,
schedule_version INTEGER NOT NULL,
seq INTEGER NOT NULL,
requested_on DATE,
requested_quantity NUMERIC(19,6),
confirmed_on DATE,
material_available_on DATE,
confirmed_quantity NUMERIC(19,6),
confirmed_base NUMERIC(19,6),
reason VARCHAR,
at TIMESTAMP,
trigger_key VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, line_no, schedule_version, seq)
);
CREATE TABLE IF NOT EXISTS so_send (
sales_order_id VARCHAR NOT NULL,
sent_at TIMESTAMP NOT NULL,
channel VARCHAR,
address VARCHAR,
revision INTEGER,
sent_by VARCHAR,
schedule_version INTEGER,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, sent_at)
);
CREATE TABLE IF NOT EXISTS so_settings (
setting_key VARCHAR NOT NULL,
valid_from DATE NOT NULL,
value VARCHAR,
set_by VARCHAR,
set_at TIMESTAMP,
changes VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (setting_key, valid_from)
);
CREATE TABLE IF NOT EXISTS so_suggestion (
sales_order_id VARCHAR NOT NULL,
step VARCHAR NOT NULL,
suggestion_no INTEGER NOT NULL,
model VARCHAR,
inputs_ref VARCHAR,
output_json VARCHAR,
decision VARCHAR,
decided_by VARCHAR,
decided_at TIMESTAMP,
decisions_json VARCHAR,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, step, suggestion_no)
);
CREATE TABLE IF NOT EXISTS so_task (
sales_order_id VARCHAR NOT NULL,
kind VARCHAR NOT NULL,
raised_on DATE NOT NULL,
owner VARCHAR,
text VARCHAR,
closed_by VARCHAR,
closed_at TIMESTAMP,
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (sales_order_id, kind, raised_on)
);