DDL schemas for Trading Platform: - User management - Authentication - Payments - Education - ML predictions - Trading data Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
69 lines
2.6 KiB
SQL
69 lines
2.6 KiB
SQL
-- ============================================================================
|
|
-- FINANCIAL SCHEMA - Tabla: customers
|
|
-- ============================================================================
|
|
-- Clientes de Stripe y datos de facturacion
|
|
-- Vincula usuarios con su informacion de pago
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS financial.customers (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
-- Relacion con usuario
|
|
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
|
|
-- Stripe
|
|
stripe_customer_id VARCHAR(100) UNIQUE,
|
|
stripe_default_payment_method_id VARCHAR(100),
|
|
|
|
-- Datos de facturacion
|
|
billing_name VARCHAR(255),
|
|
billing_email VARCHAR(255),
|
|
billing_phone VARCHAR(50),
|
|
|
|
-- Direccion de facturacion
|
|
billing_address_line1 VARCHAR(255),
|
|
billing_address_line2 VARCHAR(255),
|
|
billing_city VARCHAR(100),
|
|
billing_state VARCHAR(100),
|
|
billing_postal_code VARCHAR(20),
|
|
billing_country VARCHAR(2), -- ISO 3166-1 alpha-2
|
|
|
|
-- Datos fiscales (Mexico)
|
|
tax_id VARCHAR(20), -- RFC
|
|
tax_id_type VARCHAR(20) DEFAULT 'mx_rfc', -- Tipo de ID fiscal
|
|
legal_name VARCHAR(255), -- Razon social
|
|
|
|
-- Preferencias
|
|
currency financial.currency_code NOT NULL DEFAULT 'USD',
|
|
locale VARCHAR(10) DEFAULT 'en-US',
|
|
|
|
-- Estado
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
delinquent BOOLEAN NOT NULL DEFAULT FALSE,
|
|
delinquent_since TIMESTAMPTZ,
|
|
|
|
-- Metadata
|
|
metadata JSONB DEFAULT '{}',
|
|
|
|
-- Timestamps
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
-- Constraints
|
|
CONSTRAINT uq_customers_user UNIQUE(user_id),
|
|
CONSTRAINT chk_valid_country CHECK (billing_country IS NULL OR LENGTH(billing_country) = 2)
|
|
);
|
|
|
|
-- Indices
|
|
CREATE INDEX idx_customers_user ON financial.customers(user_id);
|
|
CREATE INDEX idx_customers_stripe ON financial.customers(stripe_customer_id) WHERE stripe_customer_id IS NOT NULL;
|
|
CREATE INDEX idx_customers_email ON financial.customers(billing_email) WHERE billing_email IS NOT NULL;
|
|
CREATE INDEX idx_customers_delinquent ON financial.customers(delinquent) WHERE delinquent = TRUE;
|
|
CREATE INDEX idx_customers_tax_id ON financial.customers(tax_id) WHERE tax_id IS NOT NULL;
|
|
|
|
-- Comentarios
|
|
COMMENT ON TABLE financial.customers IS 'Clientes de Stripe con datos de facturacion';
|
|
COMMENT ON COLUMN financial.customers.stripe_customer_id IS 'ID del cliente en Stripe (cus_xxx)';
|
|
COMMENT ON COLUMN financial.customers.tax_id IS 'RFC para Mexico, VAT para EU, etc.';
|
|
COMMENT ON COLUMN financial.customers.delinquent IS 'True si tiene pagos vencidos';
|