new-site/api/migrations/044_compliance_orders.sql
justin f8cd37ac8c Initial commit — Performance West telecom compliance platform
Includes: API (Express/TypeScript), Astro site, Python workers,
document generators, FCC compliance tools, Canada CRTC formation,
Ansible infrastructure, and deployment scripts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 06:54:22 -05:00

49 lines
2.2 KiB
SQL

-- 044: Compliance orders — tracks paid compliance service orders
--
-- Bridges the gap between the free compliance check tool and ERPNext:
-- 1. Customer runs free compliance check → sees what needs fixing
-- 2. Customer places a compliance order → creates row here
-- 3. Checkout creates Stripe session → payment_status advances
-- 4. On payment: ERPNext Sales Order created, webhook triggers worker
-- 5. Worker generates documents, uploads to MinIO
-- 6. Delivery worker emails documents to customer
CREATE TABLE IF NOT EXISTS compliance_orders (
id SERIAL PRIMARY KEY,
order_number TEXT NOT NULL UNIQUE, -- CO-XXXXXXXX format
-- Service
service_slug TEXT NOT NULL, -- maps to SERVICE_HANDLERS key
service_name TEXT NOT NULL, -- human-readable service name
service_fee_cents INTEGER NOT NULL DEFAULT 0,
-- Linked entity (optional — required for FCC services)
telecom_entity_id INTEGER REFERENCES telecom_entities(id),
-- Customer
customer_email TEXT NOT NULL,
customer_name TEXT NOT NULL,
customer_phone TEXT,
-- Payment
payment_status TEXT NOT NULL DEFAULT 'pending_payment'
CHECK (payment_status IN (
'pending_payment', 'paid', 'refunded', 'cancelled'
)),
payment_method TEXT,
surcharge_pct NUMERIC(5,2) DEFAULT 0,
surcharge_cents INTEGER DEFAULT 0,
stripe_session_id TEXT,
paid_at TIMESTAMPTZ,
-- Discount
discount_code TEXT,
discount_cents INTEGER DEFAULT 0,
-- ERPNext link
erpnext_sales_order TEXT,
-- Metadata
notes TEXT,
intake_data JSONB DEFAULT '{}', -- questionnaire answers, entity snapshot
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_compliance_orders_email ON compliance_orders(customer_email);
CREATE INDEX IF NOT EXISTS idx_compliance_orders_entity ON compliance_orders(telecom_entity_id)
WHERE telecom_entity_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS idx_compliance_orders_status ON compliance_orders(payment_status);