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>
49 lines
2.2 KiB
SQL
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);
|