DDL schemas for Trading Platform: - User management - Authentication - Payments - Education - ML predictions - Trading data Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
70 lines
2.8 KiB
SQL
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';
|