trading-platform-database-v2/ddl/schemas/investment/tables/03-accounts.sql
rckrdmrd 45e77e9a9c feat: Initial commit - Database schemas and scripts
DDL schemas for Trading Platform:
- User management
- Authentication
- Payments
- Education
- ML predictions
- Trading data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 04:30:23 -06:00

68 lines
2.5 KiB
SQL

-- =====================================================
-- INVESTMENT SCHEMA - ACCOUNTS TABLE
-- =====================================================
-- Description: Individual investor PAMM accounts
-- Schema: investment
-- Author: Database Agent
-- Date: 2025-12-06
-- =====================================================
CREATE TABLE investment.accounts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Propietario
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
-- Producto PAMM
product_id UUID NOT NULL REFERENCES investment.products(id) ON DELETE RESTRICT,
-- Identificación
account_number VARCHAR(20) NOT NULL UNIQUE, -- INV-202512-00001
-- Balance
initial_balance DECIMAL(15,2) NOT NULL,
current_balance DECIMAL(15,2) NOT NULL,
total_deposits DECIMAL(15,2) DEFAULT 0.00,
total_withdrawals DECIMAL(15,2) DEFAULT 0.00,
total_distributions DECIMAL(15,2) DEFAULT 0.00,
-- Rentabilidad
total_return_percent DECIMAL(10,4) DEFAULT 0.00,
total_return_amount DECIMAL(15,2) DEFAULT 0.00,
-- Perfil de riesgo del usuario
user_risk_profile investment.risk_profile NOT NULL,
questionnaire_id UUID REFERENCES investment.risk_questionnaire(id),
-- Estado
status investment.account_status DEFAULT 'pending_kyc',
-- KYC/Compliance
kyc_verified BOOLEAN DEFAULT false,
kyc_verified_at TIMESTAMPTZ,
kyc_verified_by VARCHAR(100),
-- Fechas importantes
opened_at TIMESTAMPTZ,
closed_at TIMESTAMPTZ,
last_distribution_at TIMESTAMPTZ,
-- Metadata
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Índices
CREATE INDEX idx_accounts_user ON investment.accounts(user_id);
CREATE INDEX idx_accounts_product ON investment.accounts(product_id);
CREATE INDEX idx_accounts_status ON investment.accounts(status);
CREATE INDEX idx_accounts_active ON investment.accounts(status) WHERE status = 'active';
CREATE INDEX idx_accounts_number ON investment.accounts(account_number);
-- Comentarios
COMMENT ON TABLE investment.accounts IS 'Individual investor PAMM accounts';
COMMENT ON COLUMN investment.accounts.account_number IS 'Unique account identifier (INV-YYYYMM-NNNNN)';
COMMENT ON COLUMN investment.accounts.current_balance IS 'Current account balance including all deposits, withdrawals, and distributions';
COMMENT ON COLUMN investment.accounts.total_return_percent IS 'Cumulative return percentage since account opening';
COMMENT ON COLUMN investment.accounts.user_risk_profile IS 'Risk profile from questionnaire, must match product recommendation';