Files
unionflow-server-api/unionflow/FINANCE_WORKFLOW_TEST_DATA.sql
dahoud e8ad874015 feat: WebSocket temps réel + Finance Workflow + corrections
- Task #6: WebSocket /ws/dashboard + Kafka events (5 topics)
  * Backend: KafkaEventProducer, KafkaEventConsumer
  * Mobile: WebSocketService (reconnection, heartbeat, typed events)
  * DashboardBloc: Auto-refresh depuis WebSocket events

- Finance Workflow: approbations + budgets (backend + mobile)
  * Backend: entities, services, resources, migrations Flyway V6
  * Mobile: features finance_workflow complète avec BLoC

- Corrections DI: interfaces IRepository partout
  * IProfileRepository, IOrganizationRepository, IMembreRepository
  * GetIt configuré avec @injectable

- Spec-Kit: constitution + templates mis à jour
  * .specify/memory/constitution.md enrichie
  * Templates agent, plan, spec, tasks, checklist

- Nettoyage: fichiers temporaires supprimés

Signed-off-by: lions dev Team
2026-03-15 02:12:17 +00:00

482 lines
13 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ================================================================
-- Finance Workflow - Données de Test
-- ================================================================
-- Date: 2026-03-14
-- Objectif: Créer des données de test pour valider l'intégration mobile-backend
-- Usage: psql -U unionflow -d unionflow -h localhost -f FINANCE_WORKFLOW_TEST_DATA.sql
-- ================================================================
-- 1. ORGANISATION DE TEST
-- ================================================================
-- Vérifier si l'organisation existe déjà
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM organisations WHERE id = '00000000-0000-0000-0000-000000000001') THEN
INSERT INTO organisations (
id,
nom,
type_organisation,
statut,
email,
telephone,
adresse,
pays,
date_creation,
actif
) VALUES (
'00000000-0000-0000-0000-000000000001',
'Organisation Test Finance',
'ASSOCIATION',
'ACTIVE',
'test@finance.org',
'+221771234567',
'123 Rue Test, Dakar',
'Sénégal',
CURRENT_TIMESTAMP,
true
);
RAISE NOTICE 'Organisation créée: 00000000-0000-0000-0000-000000000001';
ELSE
RAISE NOTICE 'Organisation existe déjà: 00000000-0000-0000-0000-000000000001';
END IF;
END $$;
-- ================================================================
-- 2. APPROBATIONS DE TRANSACTIONS EN ATTENTE
-- ================================================================
-- Approbation 1: Contribution mensuelle (LEVEL1 - 1 approbation requise)
INSERT INTO transaction_approvals (
id,
transaction_id,
transaction_type,
amount,
currency,
requester_id,
requester_name,
organisation_id,
required_level,
status,
description,
created_at,
expires_at,
date_creation,
actif
) VALUES (
'11111111-1111-1111-1111-111111111111',
gen_random_uuid(),
'CONTRIBUTION',
50000.00,
'XOF',
gen_random_uuid(),
'Mamadou Diallo',
'00000000-0000-0000-0000-000000000001',
'LEVEL1',
'PENDING',
'Cotisation mensuelle mars 2026',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP + INTERVAL '7 days',
CURRENT_TIMESTAMP,
true
) ON CONFLICT (id) DO NOTHING;
-- Approbation 2: Retrait épargne (LEVEL2 - 2 approbations requises)
INSERT INTO transaction_approvals (
id,
transaction_id,
transaction_type,
amount,
currency,
requester_id,
requester_name,
organisation_id,
required_level,
status,
description,
created_at,
expires_at,
date_creation,
actif
) VALUES (
'22222222-2222-2222-2222-222222222222',
gen_random_uuid(),
'WITHDRAWAL',
500000.00,
'XOF',
gen_random_uuid(),
'Fatou Sarr',
'00000000-0000-0000-0000-000000000001',
'LEVEL2',
'PENDING',
'Retrait épargne pour projet personnel',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP + INTERVAL '7 days',
CURRENT_TIMESTAMP,
true
) ON CONFLICT (id) DO NOTHING;
-- Approbation 3: Dépôt solidarité (LEVEL1)
INSERT INTO transaction_approvals (
id,
transaction_id,
transaction_type,
amount,
currency,
requester_id,
requester_name,
organisation_id,
required_level,
status,
description,
created_at,
expires_at,
date_creation,
actif
) VALUES (
'33333333-3333-3333-3333-333333333333',
gen_random_uuid(),
'SOLIDARITY',
75000.00,
'XOF',
gen_random_uuid(),
'Ibrahima Ndiaye',
'00000000-0000-0000-0000-000000000001',
'LEVEL1',
'PENDING',
'Aide solidarité pour funérailles',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP + INTERVAL '7 days',
CURRENT_TIMESTAMP,
true
) ON CONFLICT (id) DO NOTHING;
-- Approbation 4: Événement (LEVEL3 - 3 approbations requises)
INSERT INTO transaction_approvals (
id,
transaction_id,
transaction_type,
amount,
currency,
requester_id,
requester_name,
organisation_id,
required_level,
status,
description,
created_at,
expires_at,
date_creation,
actif
) VALUES (
'44444444-4444-4444-4444-444444444444',
gen_random_uuid(),
'EVENT',
1500000.00,
'XOF',
gen_random_uuid(),
'Aminata Ba',
'00000000-0000-0000-0000-000000000001',
'LEVEL3',
'PENDING',
'Organisation gala annuel 2026',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP + INTERVAL '7 days',
CURRENT_TIMESTAMP,
true
) ON CONFLICT (id) DO NOTHING;
-- ================================================================
-- 3. APPROBATIONS HISTORIQUES (VALIDÉES/REJETÉES)
-- ================================================================
-- Approbation validée (pour historique)
INSERT INTO transaction_approvals (
id,
transaction_id,
transaction_type,
amount,
currency,
requester_id,
requester_name,
organisation_id,
required_level,
status,
description,
created_at,
expires_at,
completed_at,
date_creation,
actif
) VALUES (
'55555555-5555-5555-5555-555555555555',
gen_random_uuid(),
'CONTRIBUTION',
50000.00,
'XOF',
gen_random_uuid(),
'Ousmane Sow',
'00000000-0000-0000-0000-000000000001',
'LEVEL1',
'VALIDATED',
'Cotisation mensuelle février 2026',
CURRENT_TIMESTAMP - INTERVAL '15 days',
CURRENT_TIMESTAMP - INTERVAL '8 days',
CURRENT_TIMESTAMP - INTERVAL '14 days',
CURRENT_TIMESTAMP - INTERVAL '15 days',
true
) ON CONFLICT (id) DO NOTHING;
-- Action d'approbation pour la transaction validée
INSERT INTO approver_actions (
id,
approval_id,
approver_id,
approver_name,
decision,
comment,
decided_at,
date_creation,
actif
) VALUES (
gen_random_uuid(),
'55555555-5555-5555-5555-555555555555',
gen_random_uuid(),
'Cheikh Diop',
'APPROVED',
'Cotisation conforme, approuvé',
CURRENT_TIMESTAMP - INTERVAL '14 days',
CURRENT_TIMESTAMP - INTERVAL '14 days',
true
) ON CONFLICT DO NOTHING;
-- Approbation rejetée (pour historique)
INSERT INTO transaction_approvals (
id,
transaction_id,
transaction_type,
amount,
currency,
requester_id,
requester_name,
organisation_id,
required_level,
status,
description,
rejection_reason,
created_at,
expires_at,
completed_at,
date_creation,
actif
) VALUES (
'66666666-6666-6666-6666-666666666666',
gen_random_uuid(),
'WITHDRAWAL',
2000000.00,
'XOF',
gen_random_uuid(),
'Awa Diagne',
'00000000-0000-0000-0000-000000000001',
'LEVEL2',
'REJECTED',
'Retrait urgent montant élevé',
'Montant trop élevé sans justificatif adéquat. Révision budgétaire nécessaire avant approbation.',
CURRENT_TIMESTAMP - INTERVAL '10 days',
CURRENT_TIMESTAMP - INTERVAL '3 days',
CURRENT_TIMESTAMP - INTERVAL '9 days',
CURRENT_TIMESTAMP - INTERVAL '10 days',
true
) ON CONFLICT (id) DO NOTHING;
-- Action de rejet
INSERT INTO approver_actions (
id,
approval_id,
approver_id,
approver_name,
decision,
comment,
decided_at,
date_creation,
actif
) VALUES (
gen_random_uuid(),
'66666666-6666-6666-6666-666666666666',
gen_random_uuid(),
'Moussa Kane',
'REJECTED',
'Montant trop élevé sans justificatif adéquat',
CURRENT_TIMESTAMP - INTERVAL '9 days',
CURRENT_TIMESTAMP - INTERVAL '9 days',
true
) ON CONFLICT DO NOTHING;
-- ================================================================
-- 4. BUDGETS
-- ================================================================
-- Budget mensuel mars 2026 (actif, avec réalisations partielles)
INSERT INTO budgets (
id,
name,
description,
organisation_id,
period,
year,
month,
start_date,
end_date,
currency,
total_planned,
total_realized,
status,
created_at_budget,
date_creation,
actif
) VALUES (
'77777777-7777-7777-7777-777777777777',
'Budget Mars 2026',
'Budget mensuel pour le mois de mars 2026',
'00000000-0000-0000-0000-000000000001',
'MONTHLY',
2026,
3,
'2026-03-01',
'2026-03-31',
'XOF',
3500000.00,
2950000.00,
'ACTIVE',
CURRENT_TIMESTAMP - INTERVAL '14 days',
CURRENT_TIMESTAMP - INTERVAL '14 days',
true
) ON CONFLICT (id) DO NOTHING;
-- Lignes budgétaires pour Budget Mars 2026
INSERT INTO budget_lines (id, budget_id, category, name, description, amount_planned, amount_realized, notes, date_creation, actif) VALUES
(gen_random_uuid(), '77777777-7777-7777-7777-777777777777', 'CONTRIBUTIONS', 'Cotisations mensuelles', 'Cotisations des membres actifs', 2000000.00, 1800000.00, 'Basé sur 40 membres à 50000 XOF', CURRENT_TIMESTAMP, true),
(gen_random_uuid(), '77777777-7777-7777-7777-777777777777', 'SAVINGS', 'Épargne collective', 'Épargne pour projets futurs', 1000000.00, 950000.00, NULL, CURRENT_TIMESTAMP, true),
(gen_random_uuid(), '77777777-7777-7777-7777-777777777777', 'OPERATIONAL', 'Frais opérationnels', 'Loyer, électricité, fournitures', 500000.00, 200000.00, NULL, CURRENT_TIMESTAMP, true)
ON CONFLICT DO NOTHING;
-- Budget trimestriel Q2 2026 (actif, sans réalisations encore)
INSERT INTO budgets (
id,
name,
description,
organisation_id,
period,
year,
month,
start_date,
end_date,
currency,
total_planned,
total_realized,
status,
created_at_budget,
date_creation,
actif
) VALUES (
'88888888-8888-8888-8888-888888888888',
'Budget Q2 2026',
'Budget deuxième trimestre 2026 (avril-juin)',
'00000000-0000-0000-0000-000000000001',
'QUARTERLY',
2026,
4,
'2026-04-01',
'2026-06-30',
'XOF',
10000000.00,
0.00,
'ACTIVE',
CURRENT_TIMESTAMP - INTERVAL '7 days',
CURRENT_TIMESTAMP - INTERVAL '7 days',
true
) ON CONFLICT (id) DO NOTHING;
-- Lignes budgétaires pour Budget Q2 2026
INSERT INTO budget_lines (id, budget_id, category, name, description, amount_planned, amount_realized, notes, date_creation, actif) VALUES
(gen_random_uuid(), '88888888-8888-8888-8888-888888888888', 'CONTRIBUTIONS', 'Cotisations trimestrielles', 'Cotisations Q2', 6000000.00, 0.00, '3 mois × 2M', CURRENT_TIMESTAMP, true),
(gen_random_uuid(), '88888888-8888-8888-8888-888888888888', 'EVENTS', 'Événements du trimestre', 'AG + formations', 2000000.00, 0.00, NULL, CURRENT_TIMESTAMP, true),
(gen_random_uuid(), '88888888-8888-8888-8888-888888888888', 'INVESTMENTS', 'Investissements', 'Matériel informatique', 2000000.00, 0.00, NULL, CURRENT_TIMESTAMP, true)
ON CONFLICT DO NOTHING;
-- Budget avec dépassement (pour tester indicateurs)
INSERT INTO budgets (
id,
name,
description,
organisation_id,
period,
year,
month,
start_date,
end_date,
currency,
total_planned,
total_realized,
status,
created_at_budget,
date_creation,
actif
) VALUES (
'99999999-9999-9999-9999-999999999999',
'Budget Février 2026',
'Budget mensuel février (clôturé)',
'00000000-0000-0000-0000-000000000001',
'MONTHLY',
2026,
2,
'2026-02-01',
'2026-02-28',
'XOF',
3000000.00,
3200000.00,
'CLOSED',
CURRENT_TIMESTAMP - INTERVAL '45 days',
CURRENT_TIMESTAMP - INTERVAL '45 days',
true
) ON CONFLICT (id) DO NOTHING;
-- Lignes avec dépassement
INSERT INTO budget_lines (id, budget_id, category, name, description, amount_planned, amount_realized, notes, date_creation, actif) VALUES
(gen_random_uuid(), '99999999-9999-9999-9999-999999999999', 'CONTRIBUTIONS', 'Cotisations', NULL, 2000000.00, 2100000.00, NULL, CURRENT_TIMESTAMP, true),
(gen_random_uuid(), '99999999-9999-9999-9999-999999999999', 'OPERATIONAL', 'Opérationnel', NULL, 500000.00, 650000.00, 'DÉPASSEMENT: +150k', CURRENT_TIMESTAMP, true),
(gen_random_uuid(), '99999999-9999-9999-9999-999999999999', 'SOLIDARITY', 'Solidarité', NULL, 500000.00, 450000.00, NULL, CURRENT_TIMESTAMP, true)
ON CONFLICT DO NOTHING;
-- ================================================================
-- VÉRIFICATION DES DONNÉES
-- ================================================================
-- Compter les approbations créées
SELECT
status,
COUNT(*) as count
FROM transaction_approvals
WHERE organisation_id = '00000000-0000-0000-0000-000000000001'
GROUP BY status
ORDER BY status;
-- Compter les budgets créés
SELECT
status,
COUNT(*) as count
FROM budgets
WHERE organisation_id = '00000000-0000-0000-0000-000000000001'
GROUP BY status
ORDER BY status;
-- Afficher résumé
SELECT '=============================' as separator;
SELECT 'DONNÉES DE TEST CRÉÉES' as message;
SELECT '=============================' as separator;
SELECT 'Approbations en attente: 4' as stat;
SELECT 'Approbations historiques: 2' as stat;
SELECT 'Budgets actifs: 2' as stat;
SELECT 'Budgets clôturés: 1' as stat;
SELECT '=============================' as separator;