-- ===================================================== -- TABELA DE PARCELAS INDIVIDUAIS DE VENDAS -- ===================================================== -- Criar tabela de parcelas CREATE TABLE IF NOT EXISTS venda_parcelas ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), venda_id UUID NOT NULL REFERENCES vendas(id) ON DELETE CASCADE, numero_parcela INTEGER NOT NULL, valor DECIMAL(10,2) NOT NULL, data_vencimento DATE NOT NULL, status TEXT DEFAULT 'pendente' CHECK (status IN ('pendente', 'pago', 'vencida', 'cancelada')), data_pagamento TIMESTAMP WITH TIME ZONE, pix_payment_id TEXT, pix_qr_code TEXT, pix_qr_code_base64 TEXT, observacoes TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), UNIQUE(venda_id, numero_parcela) ); -- Índices CREATE INDEX IF NOT EXISTS idx_venda_parcelas_venda ON venda_parcelas(venda_id); CREATE INDEX IF NOT EXISTS idx_venda_parcelas_status ON venda_parcelas(status); CREATE INDEX IF NOT EXISTS idx_venda_parcelas_vencimento ON venda_parcelas(data_vencimento); -- Trigger para updated_at CREATE TRIGGER update_venda_parcelas_updated_at BEFORE UPDATE ON venda_parcelas FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- RLS ALTER TABLE venda_parcelas ENABLE ROW LEVEL SECURITY; CREATE POLICY "Enable all operations for authenticated users" ON venda_parcelas FOR ALL USING (true); COMMENT ON TABLE venda_parcelas IS 'Armazena as parcelas individuais de cada venda parcelada'; COMMENT ON COLUMN venda_parcelas.numero_parcela IS 'Número da parcela (1, 2, 3, etc)'; COMMENT ON COLUMN venda_parcelas.status IS 'Status da parcela: pendente, pago, vencida, cancelada'; COMMENT ON COLUMN venda_parcelas.pix_payment_id IS 'ID do pagamento PIX do MercadoPago';