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>
62 lines
2.9 KiB
PL/PgSQL
62 lines
2.9 KiB
PL/PgSQL
-- 014_relay_deposits.sql
|
|
-- Relay deposit detection and filing fee reservation system.
|
|
--
|
|
-- Flow:
|
|
-- relay_deposit_monitor.py watches relay-deposits@performancewest.net via IMAP.
|
|
-- When Relay emails "You received $X from FID BKG SVC LLC" (Stripe payout),
|
|
-- a row is inserted into relay_deposits.
|
|
-- process_pending_filings() then checks filing_fee_reservations to compute
|
|
-- available balance and advances FIFO-ordered "Awaiting Funds" orders.
|
|
|
|
BEGIN;
|
|
|
|
-- Relay deposit notifications parsed from email
|
|
CREATE TABLE IF NOT EXISTS relay_deposits (
|
|
id SERIAL PRIMARY KEY,
|
|
amount_cents INTEGER NOT NULL, -- deposited amount in cents
|
|
sender_name TEXT NOT NULL, -- e.g. "FID BKG SVC LLC" for Stripe
|
|
source TEXT NOT NULL DEFAULT 'stripe', -- 'stripe' | 'other'
|
|
email_uid TEXT NOT NULL UNIQUE, -- IMAP UID to prevent duplicate processing
|
|
email_subject TEXT,
|
|
detected_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
processed BOOLEAN NOT NULL DEFAULT FALSE,
|
|
processed_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_relay_deposits_unprocessed
|
|
ON relay_deposits (detected_at)
|
|
WHERE processed = FALSE;
|
|
|
|
-- Filing fee reservations — tracks which deposits are committed to which orders
|
|
CREATE TABLE IF NOT EXISTS filing_fee_reservations (
|
|
id SERIAL PRIMARY KEY,
|
|
order_id TEXT NOT NULL, -- e.g. "CRTC-2026-0001" or "FO-2026-0042"
|
|
order_type TEXT NOT NULL, -- 'canada_crtc' | 'formation'
|
|
amount_cents INTEGER NOT NULL, -- filing fee reserved (BC ~C$350 → USD, US state fee)
|
|
-- Status lifecycle: pending → reserved → spent | released
|
|
status TEXT NOT NULL DEFAULT 'pending'
|
|
CHECK (status IN ('pending', 'reserved', 'spent', 'released')),
|
|
relay_deposit_id INTEGER REFERENCES relay_deposits(id),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
reserved_at TIMESTAMPTZ, -- when workflow advanced to Filing/Incorporation
|
|
spent_at TIMESTAMPTZ, -- when Playwright confirmed card charged
|
|
released_at TIMESTAMPTZ, -- if filing failed → funds returned to pool
|
|
notes TEXT
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_filing_fee_reservations_status
|
|
ON filing_fee_reservations (status, created_at);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_filing_fee_reservations_order
|
|
ON filing_fee_reservations (order_id);
|
|
|
|
-- Helper view: current available balance in Relay filing account
|
|
-- available = sum(deposits) - sum(reserved + spent reservations)
|
|
CREATE OR REPLACE VIEW relay_available_balance AS
|
|
SELECT
|
|
COALESCE((SELECT SUM(amount_cents) FROM relay_deposits), 0)
|
|
- COALESCE((SELECT SUM(amount_cents) FROM filing_fee_reservations
|
|
WHERE status IN ('reserved', 'spent')), 0)
|
|
AS available_cents;
|
|
|
|
COMMIT;
|