trading-platform-database-v2/ddl/schemas/investment/tables/04-distributions.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

70 lines
2.8 KiB
SQL

-- =====================================================
-- INVESTMENT SCHEMA - DISTRIBUTIONS TABLE
-- =====================================================
-- Description: Profit distributions (80/20 split)
-- Schema: investment
-- Author: Database Agent
-- Date: 2025-12-06
-- =====================================================
CREATE TABLE investment.distributions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Producto PAMM
product_id UUID NOT NULL REFERENCES investment.products(id) ON DELETE RESTRICT,
-- Periodo
period_start TIMESTAMPTZ NOT NULL,
period_end TIMESTAMPTZ NOT NULL,
period_label VARCHAR(20) NOT NULL, -- 2025-12, 2025-Q4
-- Performance del agente de trading
total_profit_amount DECIMAL(15,2) NOT NULL, -- Ganancia total generada
total_profit_percent DECIMAL(10,4) NOT NULL, -- % de retorno
-- Distribución 80/20
investor_total_amount DECIMAL(15,2) NOT NULL, -- 80% para inversores
platform_total_amount DECIMAL(15,2) NOT NULL, -- 20% para plataforma
-- Cuentas participantes
participating_accounts INTEGER NOT NULL,
total_aum_at_period_start DECIMAL(15,2) NOT NULL,
total_aum_at_period_end DECIMAL(15,2) NOT NULL,
-- Estado
status VARCHAR(20) DEFAULT 'pending', -- pending, processing, completed, failed
-- Procesamiento
calculated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
approved_by VARCHAR(100),
approved_at TIMESTAMPTZ,
distributed_at TIMESTAMPTZ,
-- Metadata
notes TEXT,
distribution_metadata JSONB, -- Detalles adicionales
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
-- Validación
CONSTRAINT valid_period CHECK (period_end > period_start),
CONSTRAINT valid_split CHECK (
investor_total_amount + platform_total_amount = total_profit_amount
)
);
-- Índices
CREATE INDEX idx_distributions_product ON investment.distributions(product_id);
CREATE INDEX idx_distributions_period ON investment.distributions(period_start, period_end);
CREATE INDEX idx_distributions_status ON investment.distributions(status);
CREATE UNIQUE INDEX idx_distributions_product_period ON investment.distributions(product_id, period_label);
-- Comentarios
COMMENT ON TABLE investment.distributions IS 'Periodic profit distributions with 80/20 split';
COMMENT ON COLUMN investment.distributions.period_label IS 'Human-readable period identifier (YYYY-MM or YYYY-QN)';
COMMENT ON COLUMN investment.distributions.total_profit_amount IS 'Total profit generated by trading agent during period';
COMMENT ON COLUMN investment.distributions.investor_total_amount IS '80% of total profit distributed to all investors';
COMMENT ON COLUMN investment.distributions.platform_total_amount IS '20% of total profit retained by platform';
COMMENT ON COLUMN investment.distributions.total_aum_at_period_start IS 'Total Assets Under Management at period start';