001-orders-purchase-init.xml
4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.27.xsd">
<!--
pbc-orders-purchase initial schema (P5.6).
Owns: orders_purchase__purchase_order, orders_purchase__purchase_order_line.
Mirror of pbc-orders-sales — same shape, same conventions.
NEITHER table has a foreign key to:
• partners__partner (cross-PBC reference enforced by PartnersApi)
• catalog__item (cross-PBC reference enforced by CatalogApi)
A database FK across PBCs would couple their schemas at the
storage level, defeating the bounded-context rule.
-->
<changeSet id="orders-purchase-init-001" author="vibe_erp">
<comment>Create orders_purchase__purchase_order table (header)</comment>
<sql>
CREATE TABLE orders_purchase__purchase_order (
id uuid PRIMARY KEY,
code varchar(64) NOT NULL,
partner_code varchar(64) NOT NULL,
status varchar(16) NOT NULL,
order_date date NOT NULL,
expected_date date,
currency_code varchar(3) NOT NULL,
total_amount numeric(18,4) NOT NULL DEFAULT 0,
ext jsonb NOT NULL DEFAULT '{}'::jsonb,
created_at timestamptz NOT NULL,
created_by varchar(128) NOT NULL,
updated_at timestamptz NOT NULL,
updated_by varchar(128) NOT NULL,
version bigint NOT NULL DEFAULT 0
);
CREATE UNIQUE INDEX orders_purchase__purchase_order_code_uk
ON orders_purchase__purchase_order (code);
CREATE INDEX orders_purchase__purchase_order_partner_idx
ON orders_purchase__purchase_order (partner_code);
CREATE INDEX orders_purchase__purchase_order_status_idx
ON orders_purchase__purchase_order (status);
CREATE INDEX orders_purchase__purchase_order_date_idx
ON orders_purchase__purchase_order (order_date);
CREATE INDEX orders_purchase__purchase_order_ext_gin
ON orders_purchase__purchase_order USING GIN (ext jsonb_path_ops);
</sql>
<rollback>
DROP TABLE orders_purchase__purchase_order;
</rollback>
</changeSet>
<changeSet id="orders-purchase-init-002" author="vibe_erp">
<comment>Create orders_purchase__purchase_order_line table (FK to header, no FK to catalog__item)</comment>
<sql>
CREATE TABLE orders_purchase__purchase_order_line (
id uuid PRIMARY KEY,
purchase_order_id uuid NOT NULL REFERENCES orders_purchase__purchase_order(id) ON DELETE CASCADE,
line_no integer NOT NULL,
item_code varchar(64) NOT NULL,
quantity numeric(18,4) NOT NULL,
unit_price numeric(18,4) NOT NULL,
currency_code varchar(3) NOT NULL,
created_at timestamptz NOT NULL,
created_by varchar(128) NOT NULL,
updated_at timestamptz NOT NULL,
updated_by varchar(128) NOT NULL,
version bigint NOT NULL DEFAULT 0,
CONSTRAINT orders_purchase__purchase_order_line_qty_pos CHECK (quantity > 0),
CONSTRAINT orders_purchase__purchase_order_line_price_nonneg CHECK (unit_price >= 0)
);
CREATE UNIQUE INDEX orders_purchase__purchase_order_line_order_lineno_uk
ON orders_purchase__purchase_order_line (purchase_order_id, line_no);
CREATE INDEX orders_purchase__purchase_order_line_item_idx
ON orders_purchase__purchase_order_line (item_code);
</sql>
<rollback>
DROP TABLE orders_purchase__purchase_order_line;
</rollback>
</changeSet>
</databaseChangeLog>