Create inventory__stock_movement append-only ledger table CREATE TABLE inventory__stock_movement ( id uuid PRIMARY KEY, item_code varchar(64) NOT NULL, location_id uuid NOT NULL REFERENCES inventory__location(id), delta numeric(18,4) NOT NULL, reason varchar(32) NOT NULL, reference varchar(128), occurred_at timestamptz 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 inventory__stock_movement_nonzero CHECK (delta <> 0) ); CREATE INDEX inventory__stock_movement_item_idx ON inventory__stock_movement (item_code); CREATE INDEX inventory__stock_movement_loc_idx ON inventory__stock_movement (location_id); CREATE INDEX inventory__stock_movement_item_loc_idx ON inventory__stock_movement (item_code, location_id); CREATE INDEX inventory__stock_movement_reference_idx ON inventory__stock_movement (reference); CREATE INDEX inventory__stock_movement_occurred_idx ON inventory__stock_movement (occurred_at); DROP TABLE inventory__stock_movement;