Files
sigrhapf/Documents/sigfip/sigefp/sigefp-database/insert_functional_test_data.sql
T

369 lines
20 KiB
SQL
Raw Normal View History

-- ============================================================================
-- SCRIPT COMPLEMENTAR DE DADOS PARA TESTES FUNCIONAIS COMPLETOS
-- Adiciona dados necessários para testar fluxos completos do sistema
-- ============================================================================
--
-- Este script complementa insert_all_test_data.sql adicionando:
-- - Períodos de folha adicionais
-- - Execuções de folha completas (COMPLETED)
-- - Itens de folha completos com todos os cálculos
-- - Execuções orçamentárias (COMMITMENT, LIQUIDATION, PAYMENT)
-- - Lotes de pagamento
-- - Ordens de pagamento
-- - Confirmações de pagamento do tesouro
-- - Dados para testar fluxos end-to-end
--
-- IMPORTANTE: Execute insert_all_test_data.sql primeiro!
DO $$
DECLARE
-- IDs existentes
v_min_financas UUID;
v_min_saude UUID;
v_min_educacao UUID;
v_ou_tesouro UUID;
v_ou_orcamento UUID;
v_ou_hospital UUID;
v_ou_escola UUID;
-- Agentes
v_agent_amilcar UUID;
v_agent_francisca UUID;
v_agent_joao UUID;
v_agent_maria UUID;
v_agent_samba UUID;
-- Ano Fiscal e Linhas Orçamentais
v_fy_2025 UUID;
v_bl_financas UUID;
v_bl_saude UUID;
v_bl_educacao UUID;
-- Tipos de Proventos e Descontos
v_earning_vencimento UUID;
v_earning_abono UUID;
v_deduction_inps UUID;
v_deduction_irps UUID;
v_deduction_selo UUID;
-- Contas Bancárias
v_account_amilcar UUID;
v_account_francisca UUID;
v_account_joao UUID;
v_account_maria UUID;
v_account_samba UUID;
-- Períodos de Folha
v_period_jan2025 UUID;
v_period_fev2025 UUID;
v_period_mar2025 UUID;
-- Execuções de Folha
v_payroll_run_jan_completed UUID;
v_payroll_run_fev_completed UUID;
v_payroll_run_mar_pending UUID;
-- Lotes de Pagamento
v_batch_jan UUID;
v_batch_fev UUID;
-- Usuário Admin
v_user_admin UUID;
BEGIN
RAISE NOTICE '=== INICIANDO CARGA DE DADOS PARA TESTES FUNCIONAIS ===';
-- ========================================================================
-- OBTER IDs EXISTENTES
-- ========================================================================
SELECT id INTO v_min_financas FROM ministry WHERE code = 'MIN-001';
SELECT id INTO v_min_saude FROM ministry WHERE code = 'MIN-002';
SELECT id INTO v_min_educacao FROM ministry WHERE code = 'MIN-003';
SELECT id INTO v_ou_tesouro FROM org_unit WHERE code = 'UO-001';
SELECT id INTO v_ou_orcamento FROM org_unit WHERE code = 'UO-002';
SELECT id INTO v_ou_hospital FROM org_unit WHERE code = 'UO-003';
SELECT id INTO v_ou_escola FROM org_unit WHERE code = 'UO-004';
SELECT id INTO v_agent_amilcar FROM agents WHERE matricula = '2020/001';
SELECT id INTO v_agent_francisca FROM agents WHERE matricula = '2021/045';
SELECT id INTO v_agent_joao FROM agents WHERE matricula = '2019/089';
SELECT id INTO v_agent_maria FROM agents WHERE matricula = '2022/112';
SELECT id INTO v_agent_samba FROM agents WHERE matricula = '2024/201';
SELECT id INTO v_fy_2025 FROM fiscal_year WHERE year = 2025;
SELECT id INTO v_bl_financas FROM budget_line WHERE code = '2025-MINFIN-311100';
SELECT id INTO v_bl_saude FROM budget_line WHERE code = '2025-MINSAUDE-311100';
SELECT id INTO v_bl_educacao FROM budget_line WHERE code = '2025-MINEDU-311100';
SELECT id INTO v_earning_vencimento FROM earning_type WHERE code = 'VENC-BASE';
SELECT id INTO v_earning_abono FROM earning_type WHERE code = 'ABONO-FAM';
SELECT id INTO v_deduction_inps FROM deduction_type WHERE code = 'INPS';
SELECT id INTO v_deduction_irps FROM deduction_type WHERE code = 'IRPS';
SELECT id INTO v_deduction_selo FROM deduction_type WHERE code = 'SELO';
SELECT id INTO v_account_amilcar FROM agent_bank_account WHERE agent_id = v_agent_amilcar AND is_primary = true;
SELECT id INTO v_account_francisca FROM agent_bank_account WHERE agent_id = v_agent_francisca AND is_primary = true;
SELECT id INTO v_account_joao FROM agent_bank_account WHERE agent_id = v_agent_joao AND is_primary = true;
SELECT id INTO v_user_admin FROM user_account WHERE username = 'admin';
-- Criar contas bancárias para agentes que não têm
IF v_account_maria IS NULL THEN
INSERT INTO agent_bank_account (id, agent_id, bank, account_number, branch_code, is_primary, created_at, updated_at)
VALUES ('00110001-0000-0000-0000-000000000000', v_agent_maria, 'BCEAO', '4567890123', '004', true, now(), now())
RETURNING id INTO v_account_maria;
END IF;
IF v_account_samba IS NULL THEN
INSERT INTO agent_bank_account (id, agent_id, bank, account_number, branch_code, is_primary, created_at, updated_at)
VALUES ('00110002-0000-0000-0000-000000000000', v_agent_samba, 'BRS', '5678901234', '005', true, now(), now())
RETURNING id INTO v_account_samba;
END IF;
-- ========================================================================
-- PERÍODOS DE FOLHA ADICIONAIS
-- ========================================================================
INSERT INTO payroll_period (id, fiscal_year, month, start_date, end_date, status, created_at, updated_at) VALUES
('00120001-0000-0000-0000-000000000000', 2025, 2, '2025-02-01', '2025-02-28', 'OPEN', now(), now()),
('00120002-0000-0000-0000-000000000000', 2025, 3, '2025-03-01', '2025-03-31', 'OPEN', now(), now())
ON CONFLICT (id) DO NOTHING;
SELECT id INTO v_period_jan2025 FROM payroll_period WHERE fiscal_year = 2025 AND month = 1;
SELECT id INTO v_period_fev2025 FROM payroll_period WHERE fiscal_year = 2025 AND month = 2;
SELECT id INTO v_period_mar2025 FROM payroll_period WHERE fiscal_year = 2025 AND month = 3;
-- ========================================================================
-- EXECUÇÕES DE FOLHA COMPLETAS
-- ========================================================================
-- Janeiro - COMPLETED (para gerar ordens de pagamento)
INSERT INTO payroll_run (id, period_id, ministry_id, org_unit_id, run_type, status, created_at, updated_at, created_by) VALUES
('00130001-0000-0000-0000-000000000000', v_period_jan2025, v_min_financas, v_ou_tesouro, 'REGULAR', 'COMPLETED', now(), now(), v_user_admin)
ON CONFLICT (id) DO NOTHING;
SELECT id INTO v_payroll_run_jan_completed FROM payroll_run WHERE id = '00130001-0000-0000-0000-000000000000';
-- Fevereiro - COMPLETED
INSERT INTO payroll_run (id, period_id, ministry_id, org_unit_id, run_type, status, created_at, updated_at, created_by) VALUES
('00130002-0000-0000-0000-000000000000', v_period_fev2025, v_min_financas, v_ou_tesouro, 'REGULAR', 'COMPLETED', now(), now(), v_user_admin)
ON CONFLICT (id) DO NOTHING;
SELECT id INTO v_payroll_run_fev_completed FROM payroll_run WHERE id = '00130002-0000-0000-0000-000000000000';
-- Março - PENDING (para testar validações)
INSERT INTO payroll_run (id, period_id, ministry_id, org_unit_id, run_type, status, created_at, updated_at, created_by) VALUES
('00130003-0000-0000-0000-000000000000', v_period_mar2025, v_min_financas, v_ou_tesouro, 'REGULAR', 'PENDING', now(), now(), v_user_admin)
ON CONFLICT (id) DO NOTHING;
SELECT id INTO v_payroll_run_mar_pending FROM payroll_run WHERE id = '00130003-0000-0000-0000-000000000000';
-- ========================================================================
-- ITENS DE FOLHA COMPLETOS (Janeiro - COMPLETED)
-- Com todos os cálculos: Vencimento, Abono, INPS, IRPS, Selo
-- ========================================================================
-- Amilcar Cabral - Vencimento Base: 600.000
INSERT INTO payroll_item (
id, payroll_run_id, agent_id, line_type, earning_type_id, deduction_type_id,
description, unit_amount, quantity, total_amount, budget_line_id, created_at, updated_at
) VALUES
-- Vencimento Base
('00140001-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_amilcar, 'EARNING', v_earning_vencimento, NULL,
'Vencimento Base', 600000.00, 1.00, 600000.00, v_bl_financas, now(), now()),
-- Abono de Família (2 dependentes)
('00140002-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_amilcar, 'EARNING', v_earning_abono, NULL,
'Abono de Família (2 dep.)', 2000.00, 2.00, 4000.00, v_bl_financas, now(), now()),
-- INPS 7% sobre 604.000 = 42.280
('00140003-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_amilcar, 'DEDUCTION', NULL, v_deduction_inps,
'INPS 7%', 42280.00, 1.00, 42280.00, NULL, now(), now()),
-- Selo 0.3% sobre 604.000 = 1.812
('00140004-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_amilcar, 'DEDUCTION', NULL, v_deduction_selo,
'Imposto de Selo 0.3%', 1812.00, 1.00, 1812.00, NULL, now(), now()),
-- IRPS: Base = 604.000 - 42.280 = 561.720
-- Faixa 50001-150000: (561.720 - 50.000) * 10% - 5.000 = 51.172 - 5.000 = 46.172
('00140005-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_amilcar, 'DEDUCTION', NULL, v_deduction_irps,
'IRPS', 46172.00, 1.00, 46172.00, NULL, now(), now())
ON CONFLICT (id) DO NOTHING;
-- Francisca Pereira - Vencimento Base: 550.000
INSERT INTO payroll_item (
id, payroll_run_id, agent_id, line_type, earning_type_id, deduction_type_id,
description, unit_amount, quantity, total_amount, budget_line_id, created_at, updated_at
) VALUES
-- Vencimento Base
('00140006-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_francisca, 'EARNING', v_earning_vencimento, NULL,
'Vencimento Base', 550000.00, 1.00, 550000.00, v_bl_financas, now(), now()),
-- Abono de Família (1 dependente)
('00140007-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_francisca, 'EARNING', v_earning_abono, NULL,
'Abono de Família (1 dep.)', 2000.00, 1.00, 2000.00, v_bl_financas, now(), now()),
-- INPS 7% sobre 552.000 = 38.640
('00140008-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_francisca, 'DEDUCTION', NULL, v_deduction_inps,
'INPS 7%', 38640.00, 1.00, 38640.00, NULL, now(), now()),
-- Selo 0.3% sobre 552.000 = 1.656
('00140009-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_francisca, 'DEDUCTION', NULL, v_deduction_selo,
'Imposto de Selo 0.3%', 1656.00, 1.00, 1656.00, NULL, now(), now()),
-- IRPS: Base = 552.000 - 38.640 = 513.360
-- Faixa 50001-150000: (513.360 - 50.000) * 10% - 5.000 = 46.336 - 5.000 = 41.336
('0014000a-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_francisca, 'DEDUCTION', NULL, v_deduction_irps,
'IRPS', 41336.00, 1.00, 41336.00, NULL, now(), now())
ON CONFLICT (id) DO NOTHING;
-- João Vieira - Vencimento Base: 600.000 (Saúde)
INSERT INTO payroll_item (
id, payroll_run_id, agent_id, line_type, earning_type_id, deduction_type_id,
description, unit_amount, quantity, total_amount, budget_line_id, created_at, updated_at
) VALUES
('0014000b-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_joao, 'EARNING', v_earning_vencimento, NULL,
'Vencimento Base', 600000.00, 1.00, 600000.00, v_bl_saude, now(), now()),
('0014000c-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_joao, 'EARNING', v_earning_abono, NULL,
'Abono de Família (3 dep.)', 2000.00, 3.00, 6000.00, v_bl_saude, now(), now()),
('0014000d-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_joao, 'DEDUCTION', NULL, v_deduction_inps,
'INPS 7%', 42420.00, 1.00, 42420.00, NULL, now(), now()),
('0014000e-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_joao, 'DEDUCTION', NULL, v_deduction_selo,
'Imposto de Selo 0.3%', 1818.00, 1.00, 1818.00, NULL, now(), now()),
('0014000f-0000-0000-0000-000000000000', v_payroll_run_jan_completed, v_agent_joao, 'DEDUCTION', NULL, v_deduction_irps,
'IRPS', 46178.00, 1.00, 46178.00, NULL, now(), now())
ON CONFLICT (id) DO NOTHING;
-- ========================================================================
-- EXECUÇÕES ORÇAMENTÁRIAS (Budget Execution)
-- COMMITMENT: Compromisso quando a folha é gerada
-- LIQUIDATION: Liquidação quando a folha é processada
-- PAYMENT: Pagamento quando o tesouro confirma
-- ========================================================================
-- COMMITMENT - Janeiro (compromisso inicial)
INSERT INTO budget_execution (
id, budget_line_id, period_id, movement_type, amount, source_module, reference_id, created_at, updated_at
) VALUES
('00150001-0000-0000-0000-000000000000', v_bl_financas, 202501, 'COMMITMENT', 1156000.00, 'RH', v_payroll_run_jan_completed, now(), now()),
('00150002-0000-0000-0000-000000000000', v_bl_saude, 202501, 'COMMITMENT', 606000.00, 'RH', v_payroll_run_jan_completed, now(), now())
ON CONFLICT (id) DO NOTHING;
-- LIQUIDATION - Janeiro (liquidação após processamento)
INSERT INTO budget_execution (
id, budget_line_id, period_id, movement_type, amount, source_module, reference_id, created_at, updated_at
) VALUES
('00150003-0000-0000-0000-000000000000', v_bl_financas, 202501, 'LIQUIDATION', 1156000.00, 'RH', v_payroll_run_jan_completed, now(), now()),
('00150004-0000-0000-0000-000000000000', v_bl_saude, 202501, 'LIQUIDATION', 606000.00, 'RH', v_payroll_run_jan_completed, now(), now())
ON CONFLICT (id) DO NOTHING;
-- ========================================================================
-- LOTES DE PAGAMENTO (Payment Batch)
-- ========================================================================
INSERT INTO payment_batch (
id, period_id, ministry_id, status, created_at, updated_at, created_by
) VALUES
('00160001-0000-0000-0000-000000000000', 202501, v_min_financas, 'CREATED', now(), now(), v_user_admin),
('00160002-0000-0000-0000-000000000000', 202502, v_min_financas, 'SENT_TO_BANK', now(), now(), v_user_admin)
ON CONFLICT (id) DO NOTHING;
SELECT id INTO v_batch_jan FROM payment_batch WHERE id = '00160001-0000-0000-0000-000000000000';
SELECT id INTO v_batch_fev FROM payment_batch WHERE id = '00160002-0000-0000-0000-000000000000';
-- ========================================================================
-- ORDENS DE PAGAMENTO (Payment Order)
-- Geradas a partir da folha de Janeiro
-- ========================================================================
-- Amilcar: Bruto = 604.000, Líquido = 604.000 - 42.280 - 1.812 - 46.172 = 513.736
-- NOTA: payroll_run_id é bigint no schema mas UUID na entidade Java - usando NULL por enquanto
INSERT INTO payment_order (
id, payment_batch_id, payroll_run_id, agent_id, bank_account_id, budget_line_id,
gross_amount, net_amount, status, created_at, updated_at
) VALUES
('00170001-0000-0000-0000-000000000000', v_batch_jan, NULL, v_agent_amilcar, v_account_amilcar, v_bl_financas,
604000.00, 513736.00, 'CREATED', now(), now()),
-- Francisca: Bruto = 552.000, Líquido = 552.000 - 38.640 - 1.656 - 41.336 = 470.368
('00170002-0000-0000-0000-000000000000', v_batch_jan, NULL, v_agent_francisca, v_account_francisca, v_bl_financas,
552000.00, 470368.00, 'CREATED', now(), now()),
-- João: Bruto = 606.000, Líquido = 606.000 - 42.420 - 1.818 - 46.178 = 515.584
('00170003-0000-0000-0000-000000000000', v_batch_jan, NULL, v_agent_joao, v_account_joao, v_bl_saude,
606000.00, 515584.00, 'SENT_TO_BANK', now(), now())
ON CONFLICT (id) DO NOTHING;
-- ========================================================================
-- CONFIRMAÇÕES DE PAGAMENTO DO TESOURO (Treasury Payment)
-- ========================================================================
INSERT INTO treasury_payment (
id, payment_order_id, paid_at, transaction_ref, status, message, created_at, updated_at
) VALUES
-- Amilcar - Pago
('00180001-0000-0000-0000-000000000000', '00170001-0000-0000-0000-000000000000', '2025-01-15 10:30:00', 'TXN-2025-001-001', 'PAID', 'Pagamento confirmado pelo banco', now(), now()),
-- Francisca - Pendente
('00180002-0000-0000-0000-000000000000', '00170002-0000-0000-0000-000000000000', NULL, NULL, 'PENDING', NULL, now(), now()),
-- João - Pago
('00180003-0000-0000-0000-000000000000', '00170003-0000-0000-0000-000000000000', '2025-01-15 11:15:00', 'TXN-2025-001-003', 'PAID', 'Pagamento confirmado pelo banco', now(), now())
ON CONFLICT (id) DO NOTHING;
-- ========================================================================
-- EXECUÇÕES ORÇAMENTÁRIAS - PAYMENT (após confirmação do tesouro)
-- ========================================================================
INSERT INTO budget_execution (
id, budget_line_id, period_id, movement_type, amount, source_module, reference_id, created_at, updated_at
) VALUES
-- Pagamentos confirmados
('00150005-0000-0000-0000-000000000000', v_bl_financas, 202501, 'PAYMENT', 513736.00, 'TREASURY', '00170001-0000-0000-0000-000000000000', now(), now()),
('00150006-0000-0000-0000-000000000000', v_bl_saude, 202501, 'PAYMENT', 515584.00, 'TREASURY', '00170003-0000-0000-0000-000000000000', now(), now())
ON CONFLICT (id) DO NOTHING;
-- ========================================================================
-- ITENS DE FOLHA PARA FEVEREIRO (para testar múltiplos períodos)
-- ========================================================================
INSERT INTO payroll_item (
id, payroll_run_id, agent_id, line_type, earning_type_id, deduction_type_id,
description, unit_amount, quantity, total_amount, budget_line_id, created_at, updated_at
) VALUES
-- Amilcar - Fevereiro
('00140010-0000-0000-0000-000000000000', v_payroll_run_fev_completed, v_agent_amilcar, 'EARNING', v_earning_vencimento, NULL,
'Vencimento Base', 600000.00, 1.00, 600000.00, v_bl_financas, now(), now()),
('00140011-0000-0000-0000-000000000000', v_payroll_run_fev_completed, v_agent_amilcar, 'EARNING', v_earning_abono, NULL,
'Abono de Família (2 dep.)', 2000.00, 2.00, 4000.00, v_bl_financas, now(), now()),
('00140012-0000-0000-0000-000000000000', v_payroll_run_fev_completed, v_agent_amilcar, 'DEDUCTION', NULL, v_deduction_inps,
'INPS 7%', 42280.00, 1.00, 42280.00, NULL, now(), now()),
('00140013-0000-0000-0000-000000000000', v_payroll_run_fev_completed, v_agent_amilcar, 'DEDUCTION', NULL, v_deduction_selo,
'Imposto de Selo 0.3%', 1812.00, 1.00, 1812.00, NULL, now(), now()),
('00140014-0000-0000-0000-000000000000', v_payroll_run_fev_completed, v_agent_amilcar, 'DEDUCTION', NULL, v_deduction_irps,
'IRPS', 46172.00, 1.00, 46172.00, NULL, now(), now())
ON CONFLICT (id) DO NOTHING;
RAISE NOTICE '=== DADOS PARA TESTES FUNCIONAIS INSERIDOS COM SUCESSO ===';
RAISE NOTICE 'Períodos de folha adicionados: 2';
RAISE NOTICE 'Execuções de folha criadas: 3';
RAISE NOTICE 'Itens de folha completos: 15+';
RAISE NOTICE 'Execuções orçamentárias: 6';
RAISE NOTICE 'Lotes de pagamento: 2';
RAISE NOTICE 'Ordens de pagamento: 3';
RAISE NOTICE 'Confirmações de pagamento: 3';
END $$;
-- ========================================================================
-- VERIFICAÇÃO FINAL DOS DADOS INSERIDOS
-- ========================================================================
SELECT 'PERIODOS FOLHA' as tipo, COUNT(*)::text as total FROM payroll_period WHERE fiscal_year = 2025
UNION ALL
SELECT 'EXECUCOES FOLHA', COUNT(*)::text FROM payroll_run WHERE period_id IN (
SELECT id FROM payroll_period WHERE fiscal_year = 2025
)
UNION ALL
SELECT 'ITENS FOLHA', COUNT(*)::text FROM payroll_item WHERE payroll_run_id IN (
SELECT id FROM payroll_run WHERE period_id IN (
SELECT id FROM payroll_period WHERE fiscal_year = 2025
)
)
UNION ALL
SELECT 'EXECUCOES ORCAMENTARIAS', COUNT(*)::text FROM budget_execution WHERE period_id >= 202501
UNION ALL
SELECT 'LOTES PAGAMENTO', COUNT(*)::text FROM payment_batch WHERE period_id >= 202501
UNION ALL
SELECT 'ORDENS PAGAMENTO', COUNT(*)::text FROM payment_order WHERE payment_batch_id IN (
SELECT id FROM payment_batch WHERE period_id >= 202501
)
UNION ALL
SELECT 'CONFIRMACOES TESOURO', COUNT(*)::text FROM treasury_payment WHERE payment_order_id IN (
SELECT id FROM payment_order WHERE payment_batch_id IN (
SELECT id FROM payment_batch WHERE period_id >= 202501
)
)
ORDER BY tipo;