-- CreateSchema CREATE SCHEMA IF NOT EXISTS "public"; -- CreateTable CREATE TABLE "roles" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(50) NOT NULL, "name" VARCHAR(100) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "roles_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "users" ( "id" BIGSERIAL NOT NULL, "role_id" BIGINT NOT NULL, "name" VARCHAR(150) NOT NULL, "username" VARCHAR(50), "email" VARCHAR(150), "email_verified_at" TIMESTAMP(3), "phone" VARCHAR(50), "password_hash" VARCHAR(255), "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "users_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "audit_trails" ( "id" BIGSERIAL NOT NULL, "user_id" BIGINT, "action" VARCHAR(100) NOT NULL, "entity_type" VARCHAR(100) NOT NULL, "entity_id" VARCHAR(100), "method" VARCHAR(10) NOT NULL, "pathname" VARCHAR(255) NOT NULL, "status_code" INTEGER NOT NULL, "summary" VARCHAR(255), "metadata" JSONB, "occurred_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "audit_trails_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "password_reset_tokens" ( "id" BIGSERIAL NOT NULL, "user_id" BIGINT NOT NULL, "token_hash" VARCHAR(255) NOT NULL, "purpose" VARCHAR(50) NOT NULL DEFAULT 'RESET_PASSWORD', "expires_at" TIMESTAMP(3) NOT NULL, "used_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "password_reset_tokens_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "email_verification_tokens" ( "id" BIGSERIAL NOT NULL, "user_id" BIGINT NOT NULL, "token_hash" VARCHAR(255) NOT NULL, "expires_at" TIMESTAMP(3) NOT NULL, "used_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "email_verification_tokens_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "buyers" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(50) NOT NULL, "name" VARCHAR(150) NOT NULL, "phone" VARCHAR(50), "email" VARCHAR(150), "bank_name" VARCHAR(100), "bank_account_number" VARCHAR(100), "address" TEXT, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "buyers_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "buyer_contact_people" ( "id" BIGSERIAL NOT NULL, "buyer_id" BIGINT NOT NULL, "name" VARCHAR(150) NOT NULL, "mobile_phone" VARCHAR(50), "email" VARCHAR(150), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "buyer_contact_people_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "employees" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(20) NOT NULL, "name" VARCHAR(150) NOT NULL, "email" VARCHAR(150), "mobile" VARCHAR(50), "position" VARCHAR(150) NOT NULL, "address" TEXT, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "employees_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "couriers" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(20) NOT NULL, "name" VARCHAR(150) NOT NULL, "address" TEXT, "phone" VARCHAR(50), "website" VARCHAR(255), "email" VARCHAR(150), "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "couriers_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "washing_places" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(20) NOT NULL, "name" VARCHAR(150) NOT NULL, "address" TEXT, "phone" VARCHAR(50), "website" VARCHAR(255), "email" VARCHAR(150), "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "washing_places_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "washing_place_contact_people" ( "id" BIGSERIAL NOT NULL, "washing_place_id" BIGINT NOT NULL, "name" VARCHAR(150) NOT NULL, "mobile_phone" VARCHAR(50), "email" VARCHAR(150), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "washing_place_contact_people_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "grades" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(20) NOT NULL, "legacy_code" VARCHAR(20), "is_mangkok" BOOLEAN NOT NULL DEFAULT false, "name" VARCHAR(150) NOT NULL, "description" TEXT, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "grades_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "grade_buy_price_standards" ( "id" BIGSERIAL NOT NULL, "grade_id" BIGINT NOT NULL, "start_date" DATE NOT NULL, "end_date" DATE, "min_price" DECIMAL(18,2) NOT NULL, "max_price" DECIMAL(18,2) NOT NULL, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "grade_buy_price_standards_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "grade_sell_price_standards" ( "id" BIGSERIAL NOT NULL, "grade_id" BIGINT NOT NULL, "start_date" DATE NOT NULL, "end_date" DATE, "min_price" DECIMAL(18,2) NOT NULL, "max_price" DECIMAL(18,2) NOT NULL, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "grade_sell_price_standards_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "warehouses" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(50) NOT NULL, "name" VARCHAR(100) NOT NULL, "address" TEXT, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "warehouses_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "units" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(20) NOT NULL, "name" VARCHAR(50) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "units_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "currencies" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(10) NOT NULL, "name" VARCHAR(100) NOT NULL, "description" TEXT, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "currencies_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "banks" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(3) NOT NULL, "name" VARCHAR(150) NOT NULL, "address" TEXT, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "banks_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "profit_share_schemes" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(20) NOT NULL, "name" VARCHAR(150) NOT NULL, "share_agent" DECIMAL(5,2) NOT NULL, "share_company" DECIMAL(5,2) NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "profit_share_schemes_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "agents" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(20) NOT NULL, "name" VARCHAR(150) NOT NULL, "identity_type" VARCHAR(20) NOT NULL, "identity_number" VARCHAR(100) NOT NULL, "mobile_phone" VARCHAR(50), "email" VARCHAR(150), "address" TEXT, "notes" TEXT, "join_date" DATE NOT NULL, "profit_share_scheme_id" BIGINT NOT NULL, "current_balance" DECIMAL(18,2) NOT NULL DEFAULT 0, "capital_balance" DECIMAL(18,2) NOT NULL DEFAULT 0, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "agents_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "agent_bank_accounts" ( "id" BIGSERIAL NOT NULL, "agent_id" BIGINT NOT NULL, "bank_id" BIGINT NOT NULL, "account_number" VARCHAR(100) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "agent_bank_accounts_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "agent_balance_mutations" ( "id" BIGSERIAL NOT NULL, "agent_id" BIGINT NOT NULL, "balance_type" VARCHAR(30) NOT NULL, "direction" VARCHAR(10) NOT NULL, "source" VARCHAR(50) NOT NULL, "amount" DECIMAL(18,2) NOT NULL, "balance_after" DECIMAL(18,2) NOT NULL, "occurred_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "effective_date" DATE, "reference_type" VARCHAR(50), "reference_id" VARCHAR(100), "reference_no" VARCHAR(100), "notes" TEXT, "metadata" JSONB, CONSTRAINT "agent_balance_mutations_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "fund_requests" ( "id" BIGSERIAL NOT NULL, "request_no" VARCHAR(50) NOT NULL, "reference_no" VARCHAR(100) NOT NULL, "transfer_type" VARCHAR(30) NOT NULL, "agent_id" BIGINT NOT NULL, "agent_bank_account_id" BIGINT NOT NULL, "company_bank_account_id" BIGINT, "agent_bank_name_snapshot" VARCHAR(150) NOT NULL, "agent_account_number_snapshot" VARCHAR(100) NOT NULL, "company_bank_name_snapshot" VARCHAR(150) NOT NULL, "company_account_number_snapshot" VARCHAR(100) NOT NULL, "amount" DECIMAL(18,2) NOT NULL, "currency_code" VARCHAR(10) NOT NULL DEFAULT 'IDR', "transferred_at" TIMESTAMP(3) NOT NULL, "transfer_proof_file_url" VARCHAR(255), "status" VARCHAR(20) NOT NULL DEFAULT 'SUBMITTED', "created_by" BIGINT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "fund_requests_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "sales" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(20) NOT NULL, "name" VARCHAR(150) NOT NULL, "identity_type" VARCHAR(20) NOT NULL, "identity_number" VARCHAR(100) NOT NULL, "mobile_phone" VARCHAR(50), "email" VARCHAR(150), "address" TEXT, "notes" TEXT, "join_date" DATE NOT NULL, "commission_balance" DECIMAL(18,2) NOT NULL DEFAULT 0, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "sales_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "sales_commission_mutations" ( "id" BIGSERIAL NOT NULL, "sales_id" BIGINT NOT NULL, "source" VARCHAR(50) NOT NULL, "direction" VARCHAR(10) NOT NULL, "amount" DECIMAL(18,2) NOT NULL, "balance_after" DECIMAL(18,2) NOT NULL, "occurred_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "effective_date" DATE, "reference_type" VARCHAR(50), "reference_id" VARCHAR(100), "reference_no" VARCHAR(100), "notes" TEXT, "metadata" JSONB, CONSTRAINT "sales_commission_mutations_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "sales_bank_accounts" ( "id" BIGSERIAL NOT NULL, "sales_id" BIGINT NOT NULL, "bank_id" BIGINT NOT NULL, "account_number" VARCHAR(100) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "sales_bank_accounts_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "warehouse_locations" ( "id" BIGSERIAL NOT NULL, "warehouse_id" BIGINT NOT NULL, "code" VARCHAR(50) NOT NULL, "name" VARCHAR(100) NOT NULL, "location_type" VARCHAR(50), "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "warehouse_locations_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "adjustment_reasons" ( "id" BIGSERIAL NOT NULL, "code" VARCHAR(50) NOT NULL, "name" VARCHAR(100) NOT NULL, "category" VARCHAR(50) NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "adjustment_reasons_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "purchases" ( "id" BIGSERIAL NOT NULL, "purchase_no" VARCHAR(50) NOT NULL, "purchase_type" VARCHAR(30) NOT NULL DEFAULT 'REGULAR', "purchase_date" DATE NOT NULL, "supplier_invoice_no" VARCHAR(100), "agent_id" BIGINT, "buyout_source_agent_id" BIGINT, "profit_share_scheme_id" BIGINT, "courier_id" BIGINT, "received_by_employee_id" BIGINT, "received_at" TIMESTAMP(3), "moisture_buy_percent" DECIMAL(7,2), "moisture_received_percent" DECIMAL(7,2), "above_average_ratio_percent" DECIMAL(7,2), "mk_share_percent" DECIMAL(7,2), "non_mk_share_percent" DECIMAL(7,2), "shipping_cost" DECIMAL(18,2), "incoming_operational_cost" DECIMAL(18,2), "after_arrival_operational_cost" DECIMAL(18,2), "status" VARCHAR(20) NOT NULL DEFAULT 'DRAFT', "notes" TEXT, "created_by" BIGINT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "purchases_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "purchase_lines" ( "id" BIGSERIAL NOT NULL, "purchase_id" BIGINT NOT NULL, "grade_id" BIGINT, "source_lot_id" BIGINT, "qty_ordered" DECIMAL(18,3) NOT NULL, "purchase_moisture_percent" DECIMAL(7,2), "qty_received" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_accepted" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_rejected" DECIMAL(18,3) NOT NULL, "moisture_received_percent" DECIMAL(7,2), "unit_id" BIGINT NOT NULL, "unit_price" DECIMAL(18,2) NOT NULL, "buyout_mal_unit_price_snapshot" DECIMAL(18,2), "buyout_agent_share_percent" DECIMAL(5,2), "buyout_profit_amount" DECIMAL(18,2), "buyout_agent_commission" DECIMAL(18,2), "market_reference_price" DECIMAL(18,2), "unit_cost" DECIMAL(18,2) NOT NULL DEFAULT 0, "mal_unit_price" DECIMAL(18,2), "subtotal" DECIMAL(18,2) NOT NULL, "classification_status" VARCHAR(20) NOT NULL DEFAULT 'FINAL', "warehouse_id" BIGINT, "warehouse_location_id" BIGINT, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "purchase_lines_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "receipts" ( "id" BIGSERIAL NOT NULL, "receipt_no" VARCHAR(50) NOT NULL, "purchase_id" BIGINT NOT NULL, "receipt_date" DATE NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'DRAFT', "notes" TEXT, "received_by" BIGINT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "receipts_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "receipt_lines" ( "id" BIGSERIAL NOT NULL, "receipt_id" BIGINT NOT NULL, "purchase_line_id" BIGINT NOT NULL, "grade_id" BIGINT, "qty_received" DECIMAL(18,3) NOT NULL, "qty_accepted" DECIMAL(18,3) NOT NULL, "qty_rejected" DECIMAL(18,3) NOT NULL DEFAULT 0, "moisture_percent" DECIMAL(7,2), "unit_id" BIGINT NOT NULL, "unit_cost" DECIMAL(18,2) NOT NULL, "warehouse_id" BIGINT NOT NULL, "warehouse_location_id" BIGINT, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "receipt_lines_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "inventory_lots" ( "id" BIGSERIAL NOT NULL, "lot_code" VARCHAR(100) NOT NULL, "parent_lot_id" BIGINT, "source_type" VARCHAR(30) NOT NULL, "source_ref_id" BIGINT, "purchase_id" BIGINT, "purchase_line_id" BIGINT, "receipt_id" BIGINT, "receipt_line_id" BIGINT, "grade_id" BIGINT, "warehouse_id" BIGINT NOT NULL, "warehouse_location_id" BIGINT, "original_qty" DECIMAL(18,3) NOT NULL, "available_qty" DECIMAL(18,3) NOT NULL, "reserved_qty" DECIMAL(18,3) NOT NULL DEFAULT 0, "damaged_qty" DECIMAL(18,3) NOT NULL DEFAULT 0, "shrinkage_qty" DECIMAL(18,3) NOT NULL DEFAULT 0, "final_moisture_percent" DECIMAL(7,2), "above_average_ratio_percent" DECIMAL(7,2), "unit_id" BIGINT NOT NULL, "unit_cost" DECIMAL(18,2) NOT NULL, "received_at" TIMESTAMP(3) NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', "qr_code_value" VARCHAR(255), "barcode_value" VARCHAR(255), "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "inventory_lots_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "consignments" ( "id" BIGSERIAL NOT NULL, "consignment_no" VARCHAR(50) NOT NULL, "consignment_date" DATE NOT NULL, "sales_id" BIGINT NOT NULL, "buyer_id" BIGINT NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'OPEN', "notes" TEXT, "created_by" BIGINT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "consignments_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "consignment_lines" ( "id" BIGSERIAL NOT NULL, "consignment_id" BIGINT NOT NULL, "lot_id" BIGINT NOT NULL, "qty_consigned" DECIMAL(18,3) NOT NULL, "available_qty_snapshot" DECIMAL(18,3) NOT NULL, "mal_unit_price_snapshot" DECIMAL(18,2), "agent_name_snapshot" VARCHAR(150), "agent_share_percent" DECIMAL(5,2), "status" VARCHAR(20) NOT NULL DEFAULT 'OPEN', "notes" TEXT, "close_date" DATE, "selling_price" DECIMAL(18,2), "qty_sold" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_returned" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_shrinkage" DECIMAL(18,3) NOT NULL DEFAULT 0, "sales_commission" DECIMAL(18,2) NOT NULL DEFAULT 0, "agent_commission" DECIMAL(18,2) NOT NULL DEFAULT 0, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "consignment_lines_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "regular_sales" ( "id" BIGSERIAL NOT NULL, "sale_no" VARCHAR(50) NOT NULL, "sale_date" DATE NOT NULL, "buyer_id" BIGINT NOT NULL, "buyer_currency_code" VARCHAR(10) NOT NULL, "company_currency_code" VARCHAR(10) NOT NULL, "exchange_rate" DECIMAL(18,6), "courier_id" BIGINT, "shipping_cost_buyer" DECIMAL(18,2) NOT NULL DEFAULT 0, "shipping_cost_company" DECIMAL(18,2) NOT NULL DEFAULT 0, "shipping_receipt_file_url" VARCHAR(255), "close_date" DATE, "total_nominal_buyer" DECIMAL(18,2) NOT NULL DEFAULT 0, "total_nominal_company" DECIMAL(18,2) NOT NULL DEFAULT 0, "total_agent_commission" DECIMAL(18,2) NOT NULL DEFAULT 0, "status" VARCHAR(20) NOT NULL DEFAULT 'IN_PROGRESS', "notes" TEXT, "created_by" BIGINT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "regular_sales_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "regular_sale_lines" ( "id" BIGSERIAL NOT NULL, "regular_sale_id" BIGINT NOT NULL, "lot_id" BIGINT NOT NULL, "available_qty_snapshot" DECIMAL(18,3) NOT NULL, "mal_unit_price_snapshot" DECIMAL(18,2), "agent_id" BIGINT, "agent_name_snapshot" VARCHAR(150), "agent_share_percent" DECIMAL(5,2), "qty_planned" DECIMAL(18,3) NOT NULL, "selling_price_planned" DECIMAL(18,2) NOT NULL, "qty_actual_sold" DECIMAL(18,3), "qty_returned" DECIMAL(18,3), "qty_shrinkage" DECIMAL(18,3), "selling_price_actual" DECIMAL(18,2), "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "regular_sale_lines_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "jit_sales" ( "id" BIGSERIAL NOT NULL, "sale_no" VARCHAR(50) NOT NULL, "sale_date" DATE NOT NULL, "buyer_id" BIGINT NOT NULL, "buyer_currency_code" VARCHAR(10) NOT NULL, "company_currency_code" VARCHAR(10) NOT NULL, "exchange_rate" DECIMAL(18,6), "courier_id" BIGINT, "shipping_cost_buyer" DECIMAL(18,2) NOT NULL DEFAULT 0, "shipping_cost_company" DECIMAL(18,2) NOT NULL DEFAULT 0, "shipping_receipt_file_url" VARCHAR(255), "close_date" DATE, "total_nominal_buyer" DECIMAL(18,2) NOT NULL DEFAULT 0, "total_nominal_company" DECIMAL(18,2) NOT NULL DEFAULT 0, "total_agent_commission" DECIMAL(18,2) NOT NULL DEFAULT 0, "status" VARCHAR(20) NOT NULL DEFAULT 'OPEN', "notes" TEXT, "created_by" BIGINT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "jit_sales_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "jit_sale_lines" ( "id" BIGSERIAL NOT NULL, "jit_sale_id" BIGINT NOT NULL, "grade_id" BIGINT NOT NULL, "qty_planned" DECIMAL(18,3) NOT NULL, "qty_actual_sold" DECIMAL(18,3), "mal_unit_price" DECIMAL(18,2) NOT NULL, "selling_price_planned" DECIMAL(18,2) NOT NULL, "selling_price_actual" DECIMAL(18,2), "agent_id" BIGINT, "agent_name_snapshot" VARCHAR(150), "profit_share_scheme_id" BIGINT, "profit_share_scheme_name" VARCHAR(150), "agent_share_percent" DECIMAL(5,2), "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "jit_sale_lines_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "stock_adjustments" ( "id" BIGSERIAL NOT NULL, "adjustment_no" VARCHAR(50) NOT NULL, "lot_id" BIGINT NOT NULL, "adjustment_reason_id" BIGINT NOT NULL, "adjustment_date" DATE NOT NULL, "qty_change" DECIMAL(18,3) NOT NULL, "available_qty_before" DECIMAL(18,3) NOT NULL, "available_qty_after" DECIMAL(18,3) NOT NULL, "notes" TEXT, "created_by" BIGINT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "stock_adjustments_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "lot_transformations" ( "id" BIGSERIAL NOT NULL, "transformation_no" VARCHAR(50) NOT NULL, "transformation_type" VARCHAR(30) NOT NULL DEFAULT 'MIX', "transformation_date" DATE NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'FINALIZED', "remainder_mode" VARCHAR(30), "remainder_qty" DECIMAL(18,3), "processing_loss_mode" VARCHAR(30), "processing_loss_qty" DECIMAL(18,3), "notes" TEXT, "created_by" BIGINT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "lot_transformations_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "lot_transformation_inputs" ( "id" BIGSERIAL NOT NULL, "transformation_id" BIGINT NOT NULL, "source_lot_id" BIGINT NOT NULL, "qty_used" DECIMAL(18,3) NOT NULL, "unit_cost_snapshot" DECIMAL(18,2) NOT NULL, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "lot_transformation_inputs_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "lot_transformation_outputs" ( "id" BIGSERIAL NOT NULL, "transformation_id" BIGINT NOT NULL, "result_lot_id" BIGINT NOT NULL, "qty_produced" DECIMAL(18,3) NOT NULL, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "lot_transformation_outputs_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "purchase_analyses" ( "id" BIGSERIAL NOT NULL, "purchase_id" BIGINT NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'DRAFT', "weight_buy" DECIMAL(18,3), "weight_received" DECIMAL(18,3), "weight_final" DECIMAL(18,3), "moisture_buy_percent" DECIMAL(7,2), "moisture_received_percent" DECIMAL(7,2), "moisture_final_percent" DECIMAL(7,2), "above_average_ratio_percent" DECIMAL(7,2), "average_price" DECIMAL(18,2), "modal_beli" DECIMAL(18,2), "modal_masuk" DECIMAL(18,2), "modal_jual" DECIMAL(18,2), "modal_barang" DECIMAL(18,2), "total_modal_beli" DECIMAL(18,2), "total_modal_mal" DECIMAL(18,2), "market_reference_price" DECIMAL(18,2), "market_valuation_total" DECIMAL(18,2), "agent_profit_share_total" DECIMAL(18,2) NOT NULL DEFAULT 0, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "purchase_analyses_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "purchase_analysis_cost_entries" ( "id" BIGSERIAL NOT NULL, "analysis_id" BIGINT NOT NULL, "cost_type" VARCHAR(50) NOT NULL, "description" VARCHAR(255), "amount" DECIMAL(18,2) NOT NULL, "proof_file_url" VARCHAR(255), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "purchase_analysis_cost_entries_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "lot_purchase_allocations" ( "id" BIGSERIAL NOT NULL, "lot_id" BIGINT NOT NULL, "purchase_id" BIGINT NOT NULL, "purchase_line_id" BIGINT, "source_type" VARCHAR(30) NOT NULL, "source_ref_id" BIGINT, "agent_id_snapshot" BIGINT, "profit_share_scheme_id_snapshot" BIGINT, "qty_allocated" DECIMAL(18,3) NOT NULL, "cost_total_allocated" DECIMAL(18,2) NOT NULL, "unit_cost_snapshot" DECIMAL(18,2) NOT NULL, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "lot_purchase_allocations_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "purchase_realization_entries" ( "id" BIGSERIAL NOT NULL, "purchase_id" BIGINT NOT NULL, "lot_id" BIGINT, "allocation_id" BIGINT, "event_type" VARCHAR(40) NOT NULL, "reference_type" VARCHAR(40) NOT NULL, "reference_id" BIGINT, "occurred_at" TIMESTAMP(3) NOT NULL, "qty_in" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_out" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_shrinkage" DECIMAL(18,3) NOT NULL DEFAULT 0, "amount_cost" DECIMAL(18,2) NOT NULL DEFAULT 0, "amount_revenue" DECIMAL(18,2) NOT NULL DEFAULT 0, "amount_expense" DECIMAL(18,2) NOT NULL DEFAULT 0, "amount_profit" DECIMAL(18,2) NOT NULL DEFAULT 0, "agent_share_percent_snapshot" DECIMAL(7,2), "agent_amount" DECIMAL(18,2) NOT NULL DEFAULT 0, "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "purchase_realization_entries_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "purchase_realization_summaries" ( "id" BIGSERIAL NOT NULL, "purchase_id" BIGINT NOT NULL, "status" VARCHAR(20) NOT NULL DEFAULT 'OPEN', "qty_opening" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_remaining" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_sold" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_returned" DECIMAL(18,3) NOT NULL DEFAULT 0, "qty_shrinkage" DECIMAL(18,3) NOT NULL DEFAULT 0, "cost_opening_total" DECIMAL(18,2) NOT NULL DEFAULT 0, "cost_additional_total" DECIMAL(18,2) NOT NULL DEFAULT 0, "revenue_total" DECIMAL(18,2) NOT NULL DEFAULT 0, "profit_loss_total" DECIMAL(18,2) NOT NULL DEFAULT 0, "agent_share_percent" DECIMAL(7,2), "agent_profit_total" DECIMAL(18,2) NOT NULL DEFAULT 0, "closed_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "purchase_realization_summaries_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "lot_washings" ( "id" BIGSERIAL NOT NULL, "washing_no" VARCHAR(50) NOT NULL, "lot_id" BIGINT NOT NULL, "washing_place_id" BIGINT NOT NULL, "washing_cost" DECIMAL(18,2) NOT NULL, "duration_hours" INTEGER NOT NULL, "receipt_file_url" VARCHAR(255), "status" VARCHAR(20) NOT NULL DEFAULT 'IN_PROGRESS', "started_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "expected_done_at" TIMESTAMP(3) NOT NULL, "completed_at" TIMESTAMP(3), "before_qty" DECIMAL(18,3) NOT NULL, "after_qty" DECIMAL(18,3), "shrinkage_qty" DECIMAL(18,3), "before_grade_name" VARCHAR(100), "after_grade_name" VARCHAR(100), "before_warehouse_name" VARCHAR(150) NOT NULL, "before_location_name" VARCHAR(150), "after_warehouse_name" VARCHAR(150), "after_location_name" VARCHAR(150), "created_by" BIGINT NOT NULL, "completed_by" BIGINT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "lot_washings_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "app_settings" ( "id" BIGSERIAL NOT NULL, "singleton_key" VARCHAR(30) NOT NULL DEFAULT 'SYSTEM', "company_name" VARCHAR(150), "company_email" VARCHAR(150), "company_phone" VARCHAR(50), "company_bank_name" VARCHAR(150), "company_bank_account_number" VARCHAR(80), "company_address" TEXT, "company_timezone" VARCHAR(80) NOT NULL DEFAULT 'Asia/Jakarta', "smtp_host" VARCHAR(150), "smtp_port" INTEGER, "smtp_secure" BOOLEAN NOT NULL DEFAULT true, "smtp_user" VARCHAR(150), "smtp_password" VARCHAR(255), "smtp_from_name" VARCHAR(150), "smtp_from_email" VARCHAR(150), "purchase_prefix" VARCHAR(20) NOT NULL DEFAULT 'PO', "receipt_prefix" VARCHAR(20) NOT NULL DEFAULT 'RCV', "lot_prefix" VARCHAR(20) NOT NULL DEFAULT 'LOT', "adjustment_prefix" VARCHAR(20) NOT NULL DEFAULT 'STA', "transformation_prefix" VARCHAR(20) NOT NULL DEFAULT 'MIX', "fund_request_prefix" VARCHAR(20) NOT NULL DEFAULT 'FR', "washing_prefix" VARCHAR(20) NOT NULL DEFAULT 'WSH', "regular_sale_prefix" VARCHAR(20) NOT NULL DEFAULT 'SRG', "jit_sale_prefix" VARCHAR(20) NOT NULL DEFAULT 'SJT', "consignment_prefix" VARCHAR(20) NOT NULL DEFAULT 'TJT', "default_locale" VARCHAR(10) NOT NULL DEFAULT 'id', "currency_code" VARCHAR(10) NOT NULL DEFAULT 'IDR', "date_format" VARCHAR(30) NOT NULL DEFAULT 'DD/MM/YYYY', "password_min_length" INTEGER NOT NULL DEFAULT 8, "session_timeout_minutes" INTEGER NOT NULL DEFAULT 720, "require_email_verification" BOOLEAN NOT NULL DEFAULT true, "audit_retention_days" INTEGER NOT NULL DEFAULT 365, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "app_settings_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "company_bank_accounts" ( "id" BIGSERIAL NOT NULL, "app_setting_id" BIGINT NOT NULL, "bank_id" BIGINT NOT NULL, "account_number" VARCHAR(100) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "company_bank_accounts_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE UNIQUE INDEX "roles_code_key" ON "roles"("code"); -- CreateIndex CREATE UNIQUE INDEX "users_username_key" ON "users"("username"); -- CreateIndex CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); -- CreateIndex CREATE INDEX "audit_trails_action_occurred_at_idx" ON "audit_trails"("action", "occurred_at"); -- CreateIndex CREATE INDEX "audit_trails_entity_type_occurred_at_idx" ON "audit_trails"("entity_type", "occurred_at"); -- CreateIndex CREATE INDEX "audit_trails_user_id_occurred_at_idx" ON "audit_trails"("user_id", "occurred_at"); -- CreateIndex CREATE UNIQUE INDEX "password_reset_tokens_token_hash_key" ON "password_reset_tokens"("token_hash"); -- CreateIndex CREATE UNIQUE INDEX "email_verification_tokens_token_hash_key" ON "email_verification_tokens"("token_hash"); -- CreateIndex CREATE UNIQUE INDEX "buyers_code_key" ON "buyers"("code"); -- CreateIndex CREATE UNIQUE INDEX "employees_code_key" ON "employees"("code"); -- CreateIndex CREATE UNIQUE INDEX "couriers_code_key" ON "couriers"("code"); -- CreateIndex CREATE UNIQUE INDEX "washing_places_code_key" ON "washing_places"("code"); -- CreateIndex CREATE UNIQUE INDEX "grades_code_key" ON "grades"("code"); -- CreateIndex CREATE UNIQUE INDEX "grades_legacy_code_key" ON "grades"("legacy_code"); -- CreateIndex CREATE UNIQUE INDEX "warehouses_code_key" ON "warehouses"("code"); -- CreateIndex CREATE UNIQUE INDEX "units_code_key" ON "units"("code"); -- CreateIndex CREATE UNIQUE INDEX "currencies_code_key" ON "currencies"("code"); -- CreateIndex CREATE UNIQUE INDEX "banks_code_key" ON "banks"("code"); -- CreateIndex CREATE UNIQUE INDEX "banks_name_key" ON "banks"("name"); -- CreateIndex CREATE UNIQUE INDEX "profit_share_schemes_code_key" ON "profit_share_schemes"("code"); -- CreateIndex CREATE UNIQUE INDEX "agents_code_key" ON "agents"("code"); -- CreateIndex CREATE UNIQUE INDEX "agents_identity_type_identity_number_key" ON "agents"("identity_type", "identity_number"); -- CreateIndex CREATE UNIQUE INDEX "agent_bank_accounts_agent_id_bank_id_account_number_key" ON "agent_bank_accounts"("agent_id", "bank_id", "account_number"); -- CreateIndex CREATE INDEX "agent_balance_mutations_agent_id_occurred_at_idx" ON "agent_balance_mutations"("agent_id", "occurred_at"); -- CreateIndex CREATE INDEX "agent_balance_mutations_agent_id_balance_type_occurred_at_idx" ON "agent_balance_mutations"("agent_id", "balance_type", "occurred_at"); -- CreateIndex CREATE UNIQUE INDEX "fund_requests_request_no_key" ON "fund_requests"("request_no"); -- CreateIndex CREATE INDEX "fund_requests_agent_id_transferred_at_idx" ON "fund_requests"("agent_id", "transferred_at"); -- CreateIndex CREATE INDEX "fund_requests_transfer_type_transferred_at_idx" ON "fund_requests"("transfer_type", "transferred_at"); -- CreateIndex CREATE UNIQUE INDEX "sales_code_key" ON "sales"("code"); -- CreateIndex CREATE UNIQUE INDEX "sales_identity_type_identity_number_key" ON "sales"("identity_type", "identity_number"); -- CreateIndex CREATE INDEX "sales_commission_mutations_sales_id_occurred_at_idx" ON "sales_commission_mutations"("sales_id", "occurred_at"); -- CreateIndex CREATE UNIQUE INDEX "sales_bank_accounts_sales_id_bank_id_account_number_key" ON "sales_bank_accounts"("sales_id", "bank_id", "account_number"); -- CreateIndex CREATE UNIQUE INDEX "warehouse_locations_warehouse_id_code_key" ON "warehouse_locations"("warehouse_id", "code"); -- CreateIndex CREATE UNIQUE INDEX "adjustment_reasons_code_key" ON "adjustment_reasons"("code"); -- CreateIndex CREATE UNIQUE INDEX "purchases_purchase_no_key" ON "purchases"("purchase_no"); -- CreateIndex CREATE UNIQUE INDEX "receipts_receipt_no_key" ON "receipts"("receipt_no"); -- CreateIndex CREATE UNIQUE INDEX "inventory_lots_lot_code_key" ON "inventory_lots"("lot_code"); -- CreateIndex CREATE UNIQUE INDEX "consignments_consignment_no_key" ON "consignments"("consignment_no"); -- CreateIndex CREATE UNIQUE INDEX "regular_sales_sale_no_key" ON "regular_sales"("sale_no"); -- CreateIndex CREATE UNIQUE INDEX "regular_sale_lines_regular_sale_id_lot_id_key" ON "regular_sale_lines"("regular_sale_id", "lot_id"); -- CreateIndex CREATE UNIQUE INDEX "jit_sales_sale_no_key" ON "jit_sales"("sale_no"); -- CreateIndex CREATE UNIQUE INDEX "stock_adjustments_adjustment_no_key" ON "stock_adjustments"("adjustment_no"); -- CreateIndex CREATE UNIQUE INDEX "lot_transformations_transformation_no_key" ON "lot_transformations"("transformation_no"); -- CreateIndex CREATE UNIQUE INDEX "lot_transformation_inputs_transformation_id_source_lot_id_key" ON "lot_transformation_inputs"("transformation_id", "source_lot_id"); -- CreateIndex CREATE UNIQUE INDEX "lot_transformation_outputs_result_lot_id_key" ON "lot_transformation_outputs"("result_lot_id"); -- CreateIndex CREATE UNIQUE INDEX "purchase_analyses_purchase_id_key" ON "purchase_analyses"("purchase_id"); -- CreateIndex CREATE INDEX "lot_purchase_allocations_lot_id_idx" ON "lot_purchase_allocations"("lot_id"); -- CreateIndex CREATE INDEX "lot_purchase_allocations_purchase_id_idx" ON "lot_purchase_allocations"("purchase_id"); -- CreateIndex CREATE INDEX "lot_purchase_allocations_purchase_line_id_idx" ON "lot_purchase_allocations"("purchase_line_id"); -- CreateIndex CREATE INDEX "lot_purchase_allocations_source_type_source_ref_id_idx" ON "lot_purchase_allocations"("source_type", "source_ref_id"); -- CreateIndex CREATE INDEX "purchase_realization_entries_purchase_id_occurred_at_idx" ON "purchase_realization_entries"("purchase_id", "occurred_at"); -- CreateIndex CREATE INDEX "purchase_realization_entries_lot_id_idx" ON "purchase_realization_entries"("lot_id"); -- CreateIndex CREATE INDEX "purchase_realization_entries_allocation_id_idx" ON "purchase_realization_entries"("allocation_id"); -- CreateIndex CREATE INDEX "purchase_realization_entries_reference_type_reference_id_idx" ON "purchase_realization_entries"("reference_type", "reference_id"); -- CreateIndex CREATE INDEX "purchase_realization_entries_event_type_occurred_at_idx" ON "purchase_realization_entries"("event_type", "occurred_at"); -- CreateIndex CREATE UNIQUE INDEX "purchase_realization_summaries_purchase_id_key" ON "purchase_realization_summaries"("purchase_id"); -- CreateIndex CREATE INDEX "purchase_realization_summaries_status_idx" ON "purchase_realization_summaries"("status"); -- CreateIndex CREATE INDEX "purchase_realization_summaries_closed_at_idx" ON "purchase_realization_summaries"("closed_at"); -- CreateIndex CREATE UNIQUE INDEX "lot_washings_washing_no_key" ON "lot_washings"("washing_no"); -- CreateIndex CREATE INDEX "lot_washings_lot_id_status_idx" ON "lot_washings"("lot_id", "status"); -- CreateIndex CREATE UNIQUE INDEX "app_settings_singleton_key_key" ON "app_settings"("singleton_key"); -- CreateIndex CREATE UNIQUE INDEX "company_bank_accounts_app_setting_id_bank_id_account_number_key" ON "company_bank_accounts"("app_setting_id", "bank_id", "account_number"); -- AddForeignKey ALTER TABLE "users" ADD CONSTRAINT "users_role_id_fkey" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "audit_trails" ADD CONSTRAINT "audit_trails_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "password_reset_tokens" ADD CONSTRAINT "password_reset_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "email_verification_tokens" ADD CONSTRAINT "email_verification_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "buyer_contact_people" ADD CONSTRAINT "buyer_contact_people_buyer_id_fkey" FOREIGN KEY ("buyer_id") REFERENCES "buyers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "washing_place_contact_people" ADD CONSTRAINT "washing_place_contact_people_washing_place_id_fkey" FOREIGN KEY ("washing_place_id") REFERENCES "washing_places"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "grade_buy_price_standards" ADD CONSTRAINT "grade_buy_price_standards_grade_id_fkey" FOREIGN KEY ("grade_id") REFERENCES "grades"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "grade_sell_price_standards" ADD CONSTRAINT "grade_sell_price_standards_grade_id_fkey" FOREIGN KEY ("grade_id") REFERENCES "grades"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "agents" ADD CONSTRAINT "agents_profit_share_scheme_id_fkey" FOREIGN KEY ("profit_share_scheme_id") REFERENCES "profit_share_schemes"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "agent_bank_accounts" ADD CONSTRAINT "agent_bank_accounts_agent_id_fkey" FOREIGN KEY ("agent_id") REFERENCES "agents"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "agent_bank_accounts" ADD CONSTRAINT "agent_bank_accounts_bank_id_fkey" FOREIGN KEY ("bank_id") REFERENCES "banks"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "agent_balance_mutations" ADD CONSTRAINT "agent_balance_mutations_agent_id_fkey" FOREIGN KEY ("agent_id") REFERENCES "agents"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "fund_requests" ADD CONSTRAINT "fund_requests_agent_id_fkey" FOREIGN KEY ("agent_id") REFERENCES "agents"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "fund_requests" ADD CONSTRAINT "fund_requests_agent_bank_account_id_fkey" FOREIGN KEY ("agent_bank_account_id") REFERENCES "agent_bank_accounts"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "fund_requests" ADD CONSTRAINT "fund_requests_company_bank_account_id_fkey" FOREIGN KEY ("company_bank_account_id") REFERENCES "company_bank_accounts"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "fund_requests" ADD CONSTRAINT "fund_requests_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "sales_commission_mutations" ADD CONSTRAINT "sales_commission_mutations_sales_id_fkey" FOREIGN KEY ("sales_id") REFERENCES "sales"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "sales_bank_accounts" ADD CONSTRAINT "sales_bank_accounts_sales_id_fkey" FOREIGN KEY ("sales_id") REFERENCES "sales"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "sales_bank_accounts" ADD CONSTRAINT "sales_bank_accounts_bank_id_fkey" FOREIGN KEY ("bank_id") REFERENCES "banks"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "warehouse_locations" ADD CONSTRAINT "warehouse_locations_warehouse_id_fkey" FOREIGN KEY ("warehouse_id") REFERENCES "warehouses"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchases" ADD CONSTRAINT "purchases_agent_id_fkey" FOREIGN KEY ("agent_id") REFERENCES "agents"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchases" ADD CONSTRAINT "purchases_buyout_source_agent_id_fkey" FOREIGN KEY ("buyout_source_agent_id") REFERENCES "agents"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchases" ADD CONSTRAINT "purchases_profit_share_scheme_id_fkey" FOREIGN KEY ("profit_share_scheme_id") REFERENCES "profit_share_schemes"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchases" ADD CONSTRAINT "purchases_courier_id_fkey" FOREIGN KEY ("courier_id") REFERENCES "couriers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchases" ADD CONSTRAINT "purchases_received_by_employee_id_fkey" FOREIGN KEY ("received_by_employee_id") REFERENCES "employees"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchases" ADD CONSTRAINT "purchases_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_lines" ADD CONSTRAINT "purchase_lines_purchase_id_fkey" FOREIGN KEY ("purchase_id") REFERENCES "purchases"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_lines" ADD CONSTRAINT "purchase_lines_grade_id_fkey" FOREIGN KEY ("grade_id") REFERENCES "grades"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_lines" ADD CONSTRAINT "purchase_lines_source_lot_id_fkey" FOREIGN KEY ("source_lot_id") REFERENCES "inventory_lots"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_lines" ADD CONSTRAINT "purchase_lines_unit_id_fkey" FOREIGN KEY ("unit_id") REFERENCES "units"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_lines" ADD CONSTRAINT "purchase_lines_warehouse_id_fkey" FOREIGN KEY ("warehouse_id") REFERENCES "warehouses"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_lines" ADD CONSTRAINT "purchase_lines_warehouse_location_id_fkey" FOREIGN KEY ("warehouse_location_id") REFERENCES "warehouse_locations"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "receipts" ADD CONSTRAINT "receipts_purchase_id_fkey" FOREIGN KEY ("purchase_id") REFERENCES "purchases"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "receipts" ADD CONSTRAINT "receipts_received_by_fkey" FOREIGN KEY ("received_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "receipt_lines" ADD CONSTRAINT "receipt_lines_receipt_id_fkey" FOREIGN KEY ("receipt_id") REFERENCES "receipts"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "receipt_lines" ADD CONSTRAINT "receipt_lines_purchase_line_id_fkey" FOREIGN KEY ("purchase_line_id") REFERENCES "purchase_lines"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "receipt_lines" ADD CONSTRAINT "receipt_lines_grade_id_fkey" FOREIGN KEY ("grade_id") REFERENCES "grades"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "receipt_lines" ADD CONSTRAINT "receipt_lines_unit_id_fkey" FOREIGN KEY ("unit_id") REFERENCES "units"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "receipt_lines" ADD CONSTRAINT "receipt_lines_warehouse_id_fkey" FOREIGN KEY ("warehouse_id") REFERENCES "warehouses"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "receipt_lines" ADD CONSTRAINT "receipt_lines_warehouse_location_id_fkey" FOREIGN KEY ("warehouse_location_id") REFERENCES "warehouse_locations"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_parent_lot_id_fkey" FOREIGN KEY ("parent_lot_id") REFERENCES "inventory_lots"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_purchase_id_fkey" FOREIGN KEY ("purchase_id") REFERENCES "purchases"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_purchase_line_id_fkey" FOREIGN KEY ("purchase_line_id") REFERENCES "purchase_lines"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_receipt_id_fkey" FOREIGN KEY ("receipt_id") REFERENCES "receipts"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_receipt_line_id_fkey" FOREIGN KEY ("receipt_line_id") REFERENCES "receipt_lines"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_grade_id_fkey" FOREIGN KEY ("grade_id") REFERENCES "grades"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_warehouse_id_fkey" FOREIGN KEY ("warehouse_id") REFERENCES "warehouses"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_warehouse_location_id_fkey" FOREIGN KEY ("warehouse_location_id") REFERENCES "warehouse_locations"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "inventory_lots" ADD CONSTRAINT "inventory_lots_unit_id_fkey" FOREIGN KEY ("unit_id") REFERENCES "units"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "consignments" ADD CONSTRAINT "consignments_sales_id_fkey" FOREIGN KEY ("sales_id") REFERENCES "sales"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "consignments" ADD CONSTRAINT "consignments_buyer_id_fkey" FOREIGN KEY ("buyer_id") REFERENCES "buyers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "consignments" ADD CONSTRAINT "consignments_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "consignment_lines" ADD CONSTRAINT "consignment_lines_consignment_id_fkey" FOREIGN KEY ("consignment_id") REFERENCES "consignments"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "consignment_lines" ADD CONSTRAINT "consignment_lines_lot_id_fkey" FOREIGN KEY ("lot_id") REFERENCES "inventory_lots"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "regular_sales" ADD CONSTRAINT "regular_sales_buyer_id_fkey" FOREIGN KEY ("buyer_id") REFERENCES "buyers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "regular_sales" ADD CONSTRAINT "regular_sales_courier_id_fkey" FOREIGN KEY ("courier_id") REFERENCES "couriers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "regular_sales" ADD CONSTRAINT "regular_sales_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "regular_sale_lines" ADD CONSTRAINT "regular_sale_lines_regular_sale_id_fkey" FOREIGN KEY ("regular_sale_id") REFERENCES "regular_sales"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "regular_sale_lines" ADD CONSTRAINT "regular_sale_lines_lot_id_fkey" FOREIGN KEY ("lot_id") REFERENCES "inventory_lots"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "jit_sales" ADD CONSTRAINT "jit_sales_buyer_id_fkey" FOREIGN KEY ("buyer_id") REFERENCES "buyers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "jit_sales" ADD CONSTRAINT "jit_sales_courier_id_fkey" FOREIGN KEY ("courier_id") REFERENCES "couriers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "jit_sales" ADD CONSTRAINT "jit_sales_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "jit_sale_lines" ADD CONSTRAINT "jit_sale_lines_jit_sale_id_fkey" FOREIGN KEY ("jit_sale_id") REFERENCES "jit_sales"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "jit_sale_lines" ADD CONSTRAINT "jit_sale_lines_grade_id_fkey" FOREIGN KEY ("grade_id") REFERENCES "grades"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "jit_sale_lines" ADD CONSTRAINT "jit_sale_lines_agent_id_fkey" FOREIGN KEY ("agent_id") REFERENCES "agents"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "jit_sale_lines" ADD CONSTRAINT "jit_sale_lines_profit_share_scheme_id_fkey" FOREIGN KEY ("profit_share_scheme_id") REFERENCES "profit_share_schemes"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "stock_adjustments" ADD CONSTRAINT "stock_adjustments_lot_id_fkey" FOREIGN KEY ("lot_id") REFERENCES "inventory_lots"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "stock_adjustments" ADD CONSTRAINT "stock_adjustments_adjustment_reason_id_fkey" FOREIGN KEY ("adjustment_reason_id") REFERENCES "adjustment_reasons"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "stock_adjustments" ADD CONSTRAINT "stock_adjustments_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_transformations" ADD CONSTRAINT "lot_transformations_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_transformation_inputs" ADD CONSTRAINT "lot_transformation_inputs_transformation_id_fkey" FOREIGN KEY ("transformation_id") REFERENCES "lot_transformations"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_transformation_inputs" ADD CONSTRAINT "lot_transformation_inputs_source_lot_id_fkey" FOREIGN KEY ("source_lot_id") REFERENCES "inventory_lots"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_transformation_outputs" ADD CONSTRAINT "lot_transformation_outputs_transformation_id_fkey" FOREIGN KEY ("transformation_id") REFERENCES "lot_transformations"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_transformation_outputs" ADD CONSTRAINT "lot_transformation_outputs_result_lot_id_fkey" FOREIGN KEY ("result_lot_id") REFERENCES "inventory_lots"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_analyses" ADD CONSTRAINT "purchase_analyses_purchase_id_fkey" FOREIGN KEY ("purchase_id") REFERENCES "purchases"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_analysis_cost_entries" ADD CONSTRAINT "purchase_analysis_cost_entries_analysis_id_fkey" FOREIGN KEY ("analysis_id") REFERENCES "purchase_analyses"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_purchase_allocations" ADD CONSTRAINT "lot_purchase_allocations_lot_id_fkey" FOREIGN KEY ("lot_id") REFERENCES "inventory_lots"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_purchase_allocations" ADD CONSTRAINT "lot_purchase_allocations_purchase_id_fkey" FOREIGN KEY ("purchase_id") REFERENCES "purchases"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_purchase_allocations" ADD CONSTRAINT "lot_purchase_allocations_purchase_line_id_fkey" FOREIGN KEY ("purchase_line_id") REFERENCES "purchase_lines"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_realization_entries" ADD CONSTRAINT "purchase_realization_entries_purchase_id_fkey" FOREIGN KEY ("purchase_id") REFERENCES "purchases"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_realization_entries" ADD CONSTRAINT "purchase_realization_entries_lot_id_fkey" FOREIGN KEY ("lot_id") REFERENCES "inventory_lots"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_realization_entries" ADD CONSTRAINT "purchase_realization_entries_allocation_id_fkey" FOREIGN KEY ("allocation_id") REFERENCES "lot_purchase_allocations"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "purchase_realization_summaries" ADD CONSTRAINT "purchase_realization_summaries_purchase_id_fkey" FOREIGN KEY ("purchase_id") REFERENCES "purchases"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_washings" ADD CONSTRAINT "lot_washings_lot_id_fkey" FOREIGN KEY ("lot_id") REFERENCES "inventory_lots"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_washings" ADD CONSTRAINT "lot_washings_washing_place_id_fkey" FOREIGN KEY ("washing_place_id") REFERENCES "washing_places"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_washings" ADD CONSTRAINT "lot_washings_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lot_washings" ADD CONSTRAINT "lot_washings_completed_by_fkey" FOREIGN KEY ("completed_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "company_bank_accounts" ADD CONSTRAINT "company_bank_accounts_app_setting_id_fkey" FOREIGN KEY ("app_setting_id") REFERENCES "app_settings"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "company_bank_accounts" ADD CONSTRAINT "company_bank_accounts_bank_id_fkey" FOREIGN KEY ("bank_id") REFERENCES "banks"("id") ON DELETE RESTRICT ON UPDATE CASCADE;