Skip to content

About

Predictive cash flow management system using behavioral pattern analysis, seasonality detection, and ML algorithms to forecast treasury with confidence scores

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

💰 Cash Flow Forecast - Outil de Prévision de Trésorerie Intelligent

License: MIT Database Status

📋 Table des Matières

🎯 À Propos

Cash Flow Forecast est un système intelligent de prévision de trésorerie qui s'appuie sur l'analyse des patterns comportementaux des clients et fournisseurs pour générer des prévisions financières précises et actionnables.

Contrairement aux outils traditionnels qui se contentent de projections linéaires, notre solution intègre:

  • L'historique de paiement réel de chaque tiers
  • Les variations saisonnières détectées automatiquement
  • Les tendances d'évolution comportementale
  • Des scores de fiabilité personnalisés

🎓 Contexte du Projet

Ce projet a été développé comme une démonstration de compétences en:

  • Modélisation de bases de données complexes
  • Analyse de séries temporelles
  • Architecture de systèmes de prévision
  • Conception d'algorithmes de scoring

🔍 Problématique

Les PME et entreprises en croissance font face à des défis majeurs dans la gestion de leur trésorerie:

Défis Identifiés

  1. Prévisions inexactes : Les projections linéaires ignorent la réalité des délais de paiement
  2. Découverts imprévus : Manque de visibilité sur les risques de liquidité à court terme
  3. Temps consommé : Analyses manuelles chronophages et sujettes à erreurs
  4. Données cloisonnées : Informations dispersées entre comptabilité, banques et facturation

Impact Business

  • Coûts bancaires élevés (agios, découverts)
  • Décisions de trésorerie sous-optimales
  • Difficulté à négocier avec les banques
  • Opportunités d'investissement manquées

💡 Solution

Approche Innovante

Notre solution utilise une approche en 4 étapes:

1. COLLECTE           2. ANALYSE          3. PRÉVISION        4. ACTION
   ↓                     ↓                   ↓                  ↓
Agrégation des    → Détection de      → Modélisation     → Alertes et
données trans.      patterns comp.      prédictive         recommandations

Différenciateurs Clés

Caractéristique Méthode Traditionnelle Cash Flow Forecast
Base de calcul Échéances contractuelles Comportement historique réel
Granularité Globale Par client/fournisseur
Saisonnalité Manuelle Détection automatique
Scénarios Unique Multiple (optimiste/réaliste/pessimiste)
Confiance Non mesurée Score de confiance 0-100%
Ajustements Difficiles Interface dédiée

✨ Fonctionnalités

🔄 Gestion des Données

  • Import automatisé depuis systèmes comptables (API/CSV/Excel)
  • Catégorisation intelligente des transactions
  • Réconciliation bancaire automatique
  • Support multi-entreprises et multi-devises

📊 Analyse de Patterns

  • Profils comportementaux : délais de paiement moyens par tiers
  • Détection de saisonnalité : cycles récurrents automatiquement identifiés
  • Scoring de fiabilité : évaluation 0-1 de la prévisibilité
  • Analyse de tendances : évolution dans le temps

🔮 Prévisions Avancées

  • Projections multi-horizons : 30/60/90 jours
  • Scénarios multiples : optimiste, réaliste, pessimiste
  • Granularité variable : vue globale ou par segment
  • Ajustements manuels : override pour événements exceptionnels
  • Taux de confiance : indicateur de fiabilité par prévision

🚨 Alertes Intelligentes

  • Seuils de trésorerie : notification si risque de découvert
  • Rappels d'échéances : paiements importants à venir
  • Détection d'anomalies : comportements inhabituels
  • Rapports programmés : synthèses automatiques

📈 Tableau de Bord

  • Courbe de trésorerie : visualisation du solde projeté
  • KPIs financiers : DSO, DPO, ratios de liquidité
  • Comparaison réel/prévu : suivi de précision
  • Drill-down : navigation vers le détail

🏗️ Architecture

Stack Technique

┌─────────────────────────────────────────────┐
│           PRÉSENTATION LAYER                │
│  • Dashboard interactif (React/Vue.js)      │
│  • Graphiques (Chart.js/D3.js)             │
│  • Exports (PDF/Excel)                      │
└─────────────────┬───────────────────────────┘
                  │
┌─────────────────▼───────────────────────────┐
│          APPLICATION LAYER                  │
│  • API REST (Node.js/Python/C#)            │
│  • Moteur d'analyse de patterns            │
│  • Algorithmes de prévision                │
│  • Système d'alertes                       │
└─────────────────┬───────────────────────────┘
                  │
┌─────────────────▼───────────────────────────┐
│            DATA LAYER                       │
│  • MySQL / PostgreSQL / SQL Server          │
│  • Modèle relationnel optimisé             │
│  • Vues analytiques                        │
│  • Index de performance                    │
└─────────────────────────────────────────────┘

Flux de Données

graph LR
    A[Systèmes Source] -->|Import| B[Transactions]
    B --> C[Analyse Patterns]
    C --> D[Calcul Prévisions]
    D --> E[Génération Alertes]
    E --> F[Dashboard]
    F -->|Ajustements| D
Loading

🗄️ Base de Données

Schéma Entité-Association

Le modèle de données comprend 12 tables principales organisées autour de 4 domaines:

1️⃣ Référentiel (4 tables)

  • users : Utilisateurs du système
  • companies : Entreprises gérées
  • bank_accounts : Comptes bancaires
  • categories : Catégorisation des flux

2️⃣ Transactions (3 tables)

  • third_parties : Clients et fournisseurs
  • invoices : Factures émises/reçues
  • transactions : Mouvements bancaires

3️⃣ Analyse (1 table)

  • payment_behavior_patterns : Patterns détectés

4️⃣ Prévisions (4 tables)

  • forecasts : Prévisions générées
  • forecast_adjustments : Ajustements manuels
  • alerts : Alertes et notifications

Points Clés du Modèle

Optimisations:

  • Index sur dates de transaction et échéances
  • Index composites pour requêtes analytiques
  • Partitionnement possible par période

Intégrité:

  • Clés étrangères avec actions ON DELETE
  • Contraintes CHECK sur énumérations
  • Contraintes UNIQUE pour éviter doublons

Flexibilité:

  • Support multi-devises
  • Catégories hiérarchiques
  • Patterns extensibles

Scripts SQL Disponibles

Trois scripts complets sont fournis pour différents SGBD:

  • MySQL : cash_flow_forecast_mysql.sql
  • PostgreSQL : cash_flow_forecast_postgresql.sql
  • SQL Server : cash_flow_forecast_sqlserver.sql

Chaque script inclut:

  • Création complète des tables
  • Contraintes et index
  • Triggers pour audit
  • Vues analytiques utiles
  • Données d'exemple

🚀 Installation

Prérequis

  • Serveur de base de données (MySQL 8.0+ / PostgreSQL 13+ / SQL Server 2019+)
  • Outil de gestion DB (MySQL Workbench / pgAdmin / SSMS)
  • Client git

Étapes d'Installation

1. Cloner le Repository

git clone https://github.com/votre-username/cash-flow-forecast.git
cd cash-flow-forecast

2. Créer la Base de Données

Pour MySQL:

mysql -u root -p < scripts/cash_flow_forecast_mysql.sql

Pour PostgreSQL:

psql -U postgres -f scripts/cash_flow_forecast_postgresql.sql

Pour SQL Server:

sqlcmd -S localhost -i scripts/cash_flow_forecast_sqlserver.sql

3. Vérifier l'Installation

Exécutez les requêtes de test:

-- Vérifier les tables créées
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'CashFlowForecast';  -- Adapter selon SGBD

-- Vérifier les données d'exemple
SELECT * FROM users;
SELECT * FROM companies;

💼 Utilisation

Scénario d'Usage Type

1. Configuration Initiale

-- Créer une entreprise
INSERT INTO companies (name, legal_name, currency)
VALUES ('Ma Société', 'Ma Société SAS', 'EUR');

-- Ajouter un compte bancaire
INSERT INTO bank_accounts (company_id, account_name, account_number, current_balance)
VALUES (1, 'Compte Principal', 'FR76XXXX', 50000.00);

2. Import de Données Historiques

-- Importer les clients
INSERT INTO third_parties (company_id, name, type, payment_terms_days)
VALUES 
    (1, 'Client A', 'customer', 30),
    (1, 'Client B', 'customer', 45),
    (1, 'Fournisseur X', 'supplier', 30);

-- Importer les factures
INSERT INTO invoices (company_id, third_party_id, invoice_number, 
                      invoice_type, invoice_date, due_date, total_amount)
VALUES 
    (1, 1, 'FA-2024-001', 'customer_invoice', '2024-01-15', '2024-02-14', 5000.00),
    (1, 2, 'FA-2024-002', 'customer_invoice', '2024-01-20', '2024-03-05', 8000.00);

3. Analyse des Patterns

-- Calculer les patterns de paiement pour un client
INSERT INTO payment_behavior_patterns 
    (third_party_id, company_id, pattern_type, period_start, period_end,
     average_delay_days, on_time_payment_rate, confidence_score)
SELECT 
    tp.third_party_id,
    tp.company_id,
    'payment_delay',
    DATE_SUB(CURDATE(), INTERVAL 12 MONTH),
    CURDATE(),
    AVG(DATEDIFF(t.transaction_date, i.due_date)),
    SUM(CASE WHEN t.transaction_date <= i.due_date THEN 1 ELSE 0 END) / COUNT(*),
    CASE 
        WHEN COUNT(*) >= 10 THEN 0.9
        WHEN COUNT(*) >= 5 THEN 0.7
        ELSE 0.5
    END
FROM third_parties tp
JOIN invoices i ON tp.third_party_id = i.third_party_id
JOIN transactions t ON i.invoice_id = t.invoice_id
WHERE tp.third_party_id = 1
GROUP BY tp.third_party_id, tp.company_id;

4. Générer des Prévisions

-- Créer une prévision pour les 30 prochains jours
INSERT INTO forecasts 
    (company_id, account_id, forecast_date, scenario_type,
     predicted_balance, predicted_inflow, predicted_outflow, confidence_level)
SELECT 
    1,
    1,
    DATE_ADD(CURDATE(), INTERVAL seq DAY),
    'realistic',
    -- Logique de calcul du solde prévu
    50000 + (seq * 1000),  -- Simplifié pour l'exemple
    5000,
    3000,
    0.85
FROM (SELECT 1 AS seq UNION SELECT 7 UNION SELECT 14 UNION SELECT 30) AS dates;

5. Consulter les Analyses

-- Vue d'ensemble de la trésorerie
SELECT * FROM v_account_summary;

-- Factures en retard
SELECT * FROM v_outstanding_invoices 
WHERE payment_status = 'overdue';

-- Performance des prévisions passées
SELECT 
    forecast_date,
    predicted_balance,
    actual_balance,
    variance_percentage
FROM v_forecast_accuracy
ORDER BY forecast_date DESC
LIMIT 10;

Requêtes Analytiques Avancées

Analyse DSO (Days Sales Outstanding)

SELECT 
    YEAR(i.invoice_date) AS year,
    MONTH(i.invoice_date) AS month,
    AVG(DATEDIFF(t.transaction_date, i.invoice_date)) AS avg_collection_days,
    COUNT(DISTINCT i.invoice_id) AS invoice_count,
    SUM(i.total_amount) AS total_revenue
FROM invoices i
LEFT JOIN transactions t ON i.invoice_id = t.invoice_id
WHERE i.invoice_type = 'customer_invoice'
    AND i.status = 'paid'
GROUP BY YEAR(i.invoice_date), MONTH(i.invoice_date)
ORDER BY year DESC, month DESC;

Top Clients par Retard de Paiement

SELECT 
    tp.name,
    COUNT(DISTINCT i.invoice_id) AS invoice_count,
    AVG(pbp.average_delay_days) AS avg_delay,
    tp.reliability_score,
    SUM(i.total_amount - i.paid_amount) AS outstanding_amount
FROM third_parties tp
JOIN invoices i ON tp.third_party_id = i.third_party_id
LEFT JOIN payment_behavior_patterns pbp ON tp.third_party_id = pbp.third_party_id
WHERE tp.type IN ('customer', 'both')
    AND i.status != 'paid'
GROUP BY tp.third_party_id, tp.name, tp.reliability_score
ORDER BY avg_delay DESC
LIMIT 10;

🧮 Méthodologie d'Analyse

Calcul des Patterns Comportementaux

1. Délai de Paiement Moyen

average_delay = Σ(date_paiement - date_échéance) / nombre_transactions

Interprétation:

  • < 0 : Paiements anticipés
  • 0-5 : Excellent payeur
  • 5-15 : Bon payeur
  • 15-30 : Retards modérés
  • > 30 : Retards significatifs

2. Score de Fiabilité

reliability_score = (paiements_à_temps / total_paiements) × 
                    (1 - écart_type_délai / 30) × 
                    min(1, nombre_transactions / 10)

Composantes:

  • Taux de ponctualité (0-1)
  • Régularité (pénalise forte variance)
  • Maturité (ajusté selon historique)

3. Facteur de Saisonnalité

seasonal_factor = moyenne_période / moyenne_globale

Application:

  • 1.2 : Période haute

  • 0.8-1.2 : Période normale
  • < 0.8 : Période basse

Génération des Prévisions

Formule de Base

prévision(t) = solde_actuel + 
               Σ(encaissements_prévus) - 
               Σ(décaissements_prévus)

Avec Ajustement Comportemental

encaissement_prévu = montant_facture × 
                     (1 + délai_moyen_client / 30) × 
                     facteur_saisonnier × 
                     reliability_score

Niveau de Confiance

confidence_level = min(
    0.95,
    reliability_score × 
    (1 - variance_historique / moyenne) × 
    (nombre_patterns / 100)
)

🛣️ Roadmap

Phase 1 : MVP (Complétée) ✅

  • Modèle de données complet
  • Scripts SQL multi-SGBD
  • Documentation technique
  • Requêtes analytiques de base

Phase 2 : Backend (En cours) 🔄

  • API REST en Node.js/Python
  • Endpoints CRUD pour toutes les entités
  • Moteur de calcul des patterns
  • Algorithme de prévision
  • Système d'alertes

Phase 3 : Frontend (Planifiée) 📅

  • Dashboard interactif
  • Graphiques de trésorerie
  • Interface de gestion des ajustements
  • Module de reporting

Phase 4 : Intelligence (Futur) 🚀

  • Machine Learning pour prévisions
  • Détection d'anomalies avancée
  • Recommandations automatiques
  • Intégration API bancaires

Phase 5 : Entreprise (Vision) 🌟

  • Multi-tenant SaaS
  • Connecteurs ERP (SAP, Oracle)
  • Mobile app (iOS/Android)
  • BI intégré (PowerBI/Tableau)

📊 Métriques de Performance

Objectifs Mesurables

Métrique Baseline Target Impact
Précision prévisions J+30 45% 85% +40%
Temps d'analyse mensuelle 8h 30min -94%
Incidents de découvert 4/an 1/an -75%
Délai d'alerte 48h temps réel -100%

KPIs Suivis

  • Variance moyenne : Écart absolu entre prévu et réalisé
  • Taux de couverture : % de flux correctement anticipés
  • Réactivité : Délai entre événement et alerte
  • Adoption : Nombre de décisions basées sur prévisions

🤝 Contribution

Les contributions sont bienvenues ! Voici comment participer:

Guide de Contribution

  1. Fork le projet
  2. Créer une branche (git checkout -b feature/AmazingFeature)
  3. Commit les changements (git commit -m 'Add AmazingFeature')
  4. Push vers la branche (git push origin feature/AmazingFeature)
  5. Ouvrir une Pull Request

Standards

  • Code documenté et commenté
  • Tests unitaires pour nouvelles fonctionnalités
  • Respect des conventions SQL (nommage, indentation)
  • Documentation mise à jour

Domaines d'Amélioration

  • 🐛 Bugs : Corrections et optimisations
  • 📚 Documentation : Tutoriels, exemples
  • 🧪 Tests : Jeux de données, cas limites
  • 🎨 UX : Maquettes interface
  • 🔧 DevOps : CI/CD, Docker

📄 License

Ce projet est sous licence MIT - voir le fichier LICENSE pour détails.

👤 Auteur

Développé dans le cadre d'un portfolio de démonstration de compétences en:

  • Architecture de bases de données
  • Modélisation analytique
  • Systèmes de prévision
  • Data engineering
Made with ❤️ and ☕ - Jean Narivelo

About

Predictive cash flow management system using behavioral pattern analysis, seasonality detection, and ML algorithms to forecast treasury with confidence scores

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages