0% ont trouvé ce document utile (0 vote)
1 vues26 pages

CDC FinanceApp FastAPI React PostgreSQL

Ce cahier des charges décrit le projet FinanceApp, une application web de gestion des finances personnelles destinée aux étudiants en 2e année de Génie Logiciel au Cameroun. Il présente les besoins fonctionnels, l'architecture technique utilisant FastAPI, React et PostgreSQL, ainsi que les modules de gestion des dépenses et des dettes. Le document inclut également des objectifs, des fonctionnalités détaillées, et un schéma de base de données.

Transféré par

abdiasnguemo
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
1 vues26 pages

CDC FinanceApp FastAPI React PostgreSQL

Ce cahier des charges décrit le projet FinanceApp, une application web de gestion des finances personnelles destinée aux étudiants en 2e année de Génie Logiciel au Cameroun. Il présente les besoins fonctionnels, l'architecture technique utilisant FastAPI, React et PostgreSQL, ainsi que les modules de gestion des dépenses et des dettes. Le document inclut également des objectifs, des fonctionnalités détaillées, et un schéma de base de données.

Transféré par

abdiasnguemo
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

CAHIER DES CHARGES

Application Web de Gestion des Finances Personnelles

FinanceApp — Module Depenses & Module Dettes

Version 2.0 | Avril 2025

Niveau cible : 2e annee Genie Logiciel — Cameroun

FastAPI (Back-end) React (Front-end) PostgreSQL (BDD)

A qui s'adresse ce document ?


Ce cahier des charges est redige pour un etudiant en 2e annee de Genie Logiciel au Cameroun. Il decrit de
facon claire les besoins fonctionnels, l'architecture technique (FastAPI, React, PostgreSQL), les schemas
de base de donnees et les contraintes du projet FinanceApp.
TABLE DES MATIERES

1 Presentation Generale du Projet

2 Objectifs et Perimetre

3 Architecture Technique Generale

4 Acteurs du Systeme

5 MODULE 1 — Gestion des Depenses

6 MODULE 2 — Gestion des Dettes

7 Fonctionnalites Transversales

8 Schema de Base de Donnees (PostgreSQL)

9 API REST — Endpoints FastAPI

10 Architecture Front-end React

11 Securite et Authentification

12 Interfaces Utilisateur (Wireframes)

13 Planning et Livrables

14 Glossaire
1. PRESENTATION GENERALE DU PROJET

1.1 Contexte
Au Cameroun, de nombreux etudiants et jeunes actifs eprouvent des difficultes a gerer leurs finances
personnelles. Les depenses quotidiennes (nourriture, transport, credit telephone) s'accumulent sans suivi, et les
prets entre amis ou aupres de tontines sont souvent mal documentes. Cette absence de traçabilite conduit a
des desequilibres budgetaires et des conflits financiers.
FinanceApp est une application web responsive qui repond a ce probleme en offrant deux modules distincts : un
module de gestion des depenses avec classification automatique, et un module de suivi des dettes avec alertes
de remboursement.

1.2 Identification du Projet


Champ Detail

Nom du projet FinanceApp

Type Application web responsive (desktop + mobile)

Version 2.0

Date de redaction Avril 2025

Auteur Etudiant 2e annee Genie Logiciel

Encadrant [Nom du professeur responsable]

Duree estimee 10 semaines

1.3 Problemes Resolus


• Difficulte a savoir combien on depense et dans quelle categorie.
• Oubli de remboursement de dettes (argent emprunte ou prete).
• Absence de rappels automatiques avant les echeances.
• Manque de vision globale sur le budget mensuel disponible.
• Aucun historique des transactions financieres personnelles.
2. OBJECTIFS ET PERIMETRE

2.1 Objectifs Principaux


Code Objectif Module Priorite

O1 Permettre la saisie et classification automatique des depenses


Depenses HAUTE

O2 Suivre les dettes avec calcul automatique du solde restantDettes HAUTE

O3 Envoyer des notifications avant les echeances de remboursement


Dettes HAUTE

O4 Afficher des statistiques visuelles par categorie et periode Les deux MOYENNE

O5 Authentifier les utilisateurs de facon securisee (JWT) Transversal HAUTE

O6 Offrir une API REST documentee et testable (FastAPI/Swagger)


Technique HAUTE

O7 Exporter les rapports en PDF ou CSV Les deux BASSE

2.2 Perimetre — Inclus vs Exclu


INCLUS dans le projet EXCLU du projet

Gestion des depenses personnelles avec categories Comptabilite d'entreprise ou de commerce

Suivi des dettes entre particuliers Gestion de credits bancaires complexes

Notifications par email (back-end) Notifications SMS ou push mobiles (v2)

Application web (navigateur) Application mobile native (iOS/Android)

API REST avec FastAPI + Swagger GraphQL ou API temps reel (WebSocket)

Stockage PostgreSQL Synchronisation multi-appareils (v2)

Authentification JWT Connexion via reseaux sociaux (OAuth v2)


3. ARCHITECTURE TECHNIQUE GENERALE

Architecture 3-tiers : L'application suit le modele classique Client / Serveur / Base de donnees. Le
navigateur (React) communique avec le serveur (FastAPI) via des requetes HTTP/JSON. FastAPI interroge
la base de donnees PostgreSQL et renvoie les donnees au client.

COUCHE TECHNOLOGIE ROLE PORT PAR DEFAUT

React 18 + Vite Interface utilisateur,


Presentation
+ TailwindCSS appels API, affichage localhost:5173
(Front-end)
+ Axios des donnees

FastAPI (Python) Traitement des requetes,


Logique Metier
+ SQLAlchemy ORM validation des donnees, localhost:8000
(Back-end)
+ Pydantic gestion JWT, emails

PostgreSQL 15 Stockage persistant


Donnees
+ Alembic des utilisateurs, localhost:5432
(Base de donnees)
(migrations) depenses et dettes

Envoi automatique
Notifications FastAPI
d'emails de rappel Integre au back-end
(Service email) + smtplib / SendGrid
d'echeance

3.1 Structure des Dossiers du Projet


financeapp/

backend/ # Projet FastAPI

app/

[Link] # Point d'entree FastAPI

models/ # Modeles SQLAlchemy (tables BDD)

[Link]

[Link]

[Link]

[Link]

[Link]

schemas/ # Schemas Pydantic (validation)

depense_schema.py

dette_schema.py

routes/ # Endpoints de l'API


[Link]

[Link]

[Link]

services/ # Logique metier

notification_service.py

[Link] # Connexion PostgreSQL

[Link] # Variables d'environnement

[Link]

.env # Secrets (ne pas versionner !)

frontend/ # Projet React

src/

components/ # Composants reutilisables

pages/ # Pages principales

[Link]

[Link]

[Link]

[Link]

services/ # Appels API (Axios)

[Link]

store/ # Gestion d'etat (Context ou Redux)

[Link]

[Link] # (Optionnel) Pour tout lancer d'un coup


4. ACTEURS DU SYSTEME

Acteur Type Role et Responsabilites

Utilisateur
Humain S'inscrit, se connecte, gere ses depenses et dettes. Consulte ses statistiques et recoit des noti
authentifie

API FastAPI Systeme Traite toutes les requetes HTTP du front-end. Valide les donnees, interroge PostgreSQL et ret

PostgreSQL Systeme Stocke de maniere persistante tous les utilisateurs, depenses, categories, dettes et rembourse

Service de
Systeme Tache planifiee (cron / APScheduler) qui verifie chaque jour les echeances de dettes et envoie
Notification
5. MODULE 1 — GESTION DES DEPENSES

5.1 Description
Le module Depenses permet a l'utilisateur d'enregistrer chaque somme d'argent depensee au quotidien.
Chaque depense est obligatoirement liee a une categorie. Le systeme propose une classification automatique
basee sur des mots-cles : si l'utilisateur saisit 'pizza' ou 'bonbon', le systeme propose automatiquement la
categorie Nourriture. L'utilisateur peut accepter la suggestion ou choisir une autre categorie.

5.2 Categories de Depenses


ID Categorie Mots-cles exemples Couleur

CAT-01 Nourriture et Boissons pizza, bonbon, eau, pain, biere, restaurant, repas, djossa, soya #16A34A

CAT-02 Transport bus, taxi, carburant, moto, bendskin, essence, voyage, billet #2563EB

CAT-03 Logement et Charges loyer, electricite, eau, internet, wifi, bouteille gaz #7C3AED

CAT-04 Education cahier, stylo, scolarite, livre, impression, photocopie #0891B2

CAT-05 Habillement vetements, chaussures, sac, ceinture, habit, friperie #DB2777

CAT-06 Sante medicament, pharmacie, consultation, analyse, clinique #DC2626

CAT-07 Technologie credit, airtime, accessoire, reparation, batterie, chargeur #EA580C

CAT-08 Loisirs et Sorties cinema, sport, fete, boite, jeu, concert, piscine #CA8A04

CAT-09 Soins Personnels coiffeur, savon, parfum, creme, rasoir, gel #0D9488

CAT-10 Epargne epargne, tontine, mise de cote, cotisation #059669

CAT-11 Divers Tout ce qui ne rentre dans aucune autre categorie #64748B

5.3 Fonctionnalites Detaillees


Ajouter une depense
F-DEP-01 L'utilisateur saisit : montant (FCFA), description, categorie, date. Le systeme suggere
automatiquement la categorie via analyse de mots-cles.

Lister les depenses


F-DEP-02 Affichage paginé et filtrable de toutes les depenses. Filtres : periode (jour, semaine, mois,
personnalise), categorie, montant min/max. Tri par date ou montant.

Modifier une depense


F-DEP-03
Mise a jour de tous les champs d'une depense existante. Historique de modification conserve.
Supprimer une depense
F-DEP-04
Suppression avec confirmation obligatoire. La suppression est definitive (soft-delete optionnel).

Tableau de bord visuel


F-DEP-05 Graphique camembert (par categorie) et graphique en barres (evolution mensuelle). Total depense
du mois, comparaison avec le mois precedent.

Definir un budget par categorie


F-DEP-06 L'utilisateur fixe un plafond mensuel par categorie. L'interface affiche une barre de progression et
alerte (couleur rouge) si le plafond est depasse ou sur le point de l'etre.

Classification automatique
F-DEP-07 A la saisie de la description, le back-end analyse les mots-cles et retourne une suggestion de
categorie. Exemple : 'pizza chez le voisin' -> CAT-01 (Nourriture).

Recherche textuelle
F-DEP-08
Barre de recherche sur la description des depenses. Resultat en temps reel.
6. MODULE 2 — GESTION DES DETTES

6.1 Description
Le module Dettes gere deux flux financiers : l'argent que l'utilisateur doit rembourser (EMPRUNT) et l'argent
qu'on lui doit (PRET). Pour chaque dette, l'application enregistre les remboursements partiels ou totaux et
calcule automatiquement le solde restant. Un systeme de notifications previent l'utilisateur avant les echeances.

Exemple concret (Cameroun) : Martial emprunte 75 000 FCFA a sa tante le 5 mars, avec echeance le 5
avril. Le 20 mars, il rembourse 30 000 FCFA via Mobile Money. L'application affiche : Rembourse = 30 000
FCFA | Reste = 45 000 FCFA | Rappel email prevu le 29 mars (7 jours avant).

6.2 Fonctionnalites Detaillees

Creer une dette


F-DET-01 Champs : type (EMPRUNT ou PRET), nom de la personne, montant total, date du pret, date
d'echeance, nombre de jours avant rappel (1/3/7/14), description optionnelle.

Enregistrer un remboursement partiel


F-DET-02 L'utilisateur peut ajouter plusieurs paiements. Chaque paiement : montant, date, mode de paiement
(especes, Mobile Money, virement). Le solde restant est recalcule automatiquement.

Suivi automatique du solde


F-DET-03 Solde restant = Montant total - Somme de tous les remboursements. Calcul en temps reel a chaque
ajout de paiement. Affiche en FCFA et en pourcentage.

Notifications email automatiques


Le back-end (APScheduler) envoie un email de rappel N jours avant la date d'echeance. Un second
F-DET-04
email est envoye le jour J si la dette n'est pas soldee. Un troisieme email est envoye si la date est
depassee (dette en retard).

Cycle de vie et statuts


F-DET-05 EN_COURS : active, remboursement partiel ou nul. EN_RETARD : date d'echeance depassee.
SOLDEE : montant restant = 0. ARCHIVEE : soldee et deplacee dans l'historique.

Historique des remboursements


F-DET-06 Pour chaque dette, liste complete de tous les paiements : date, montant, mode, note. Permet de
retracer l'integralite des transactions.

Tableau de bord des dettes


F-DET-07 Recap : total de ce que je dois (EMPRUNT actifs), total de ce qu'on me doit (PRET actifs), nombre de
dettes en retard, prochaines echeances (7 prochains jours).
Marquer comme soldee
F-DET-08 Bouton 'Marquer comme soldee' disponible quand solde = 0 ou manuellement. Demande
confirmation, puis archive la dette.

6.3 Cycle de Vie d'une Dette


Statut Couleur UI Condition Action possible

EN_COURS Bleu Date non depassee, solde > 0 Ajouter remboursement, modifier

EN_RETARD Rouge Date d'echeance depassee, solde > 0 Ajouter remboursement, contacter

SOLDEE Vert Solde restant = 0 FCFA Archiver

ARCHIVEE Gris Soldee et archivee par l'utilisateur Consulter uniquement


7. FONCTIONNALITES TRANSVERSALES

Inscription / Connexion
Formulaire d'inscription (nom, email, mot de passe hashe avec bcrypt). Connexion par email + mot de passe.
Retour d'un token JWT valable 30 jours. Deconnexion cote client.

Tableau de bord global


Page d'accueil apres connexion : solde budgetaire estime (revenus declares - depenses), total depense ce
mois, resume des dettes actives, prochaines echeances.

Statistiques et graphiques
Graphiques interactifs ([Link] ou Recharts) : camembert des depenses par categorie, evolution mensuelle en
barres, comparaison mois N vs mois N-1.

Gestion du profil
L'utilisateur peut modifier son nom, email, mot de passe. Il peut aussi saisir un revenu mensuel estime pour que
l'app calcule son budget restant.

Multi-devises
FCFA par defaut. Option de saisir dans une autre devise avec conversion indicative.

Export des donnees


Bouton 'Exporter' pour telecharger l'historique des depenses ou dettes en format CSV ou PDF.

Mode responsive
L'interface React est adaptee aux ecrans mobiles (smartphone) et ordinateurs de bureau. Utilisation de
TailwindCSS pour le design responsif.
8. SCHEMA DE BASE DE DONNEES (PostgreSQL)

Technologie : PostgreSQL 15 avec SQLAlchemy comme ORM Python et Alembic pour les migrations.
Chaque table est representee comme un modele SQLAlchemy dans FastAPI.

TABLE : users
Colonne Type SQL Contrainte Description

id SERIAL PRIMARY KEY Identifiant unique auto-incremente

nom VARCHAR(100) NOT NULL Nom complet de l'utilisateur

email VARCHAR(150) UNIQUE, NOT NULL Adresse email (identifiant de connexion)

mot_de_passe VARCHAR(255) NOT NULL Mot de passe hashe (bcrypt)

revenu_mensuel NUMERIC(12,2) DEFAULT 0 Revenu mensuel declare (optionnel)

date_creation TIMESTAMP DEFAULT NOW() Date d'inscription

est_actif BOOLEAN DEFAULT TRUE Compte actif ou suspendu

TABLE : categories
Colonne Type SQL Contrainte Description

id SERIAL PRIMARY KEY Identifiant unique

nom VARCHAR(100) NOT NULL Ex : 'Nourriture', 'Transport'

icone VARCHAR(10) Emoji representatif (ex : pizza)

couleur_hex VARCHAR(7) Code couleur (ex : #16A34A)

mots_cles TEXT Mots-cles separes par virgule pour auto-classification

est_systeme BOOLEAN DEFAULT FALSE TRUE = categorie par defaut, FALSE = personnalisee

user_id INTEGER FK [Link] NULL si categorie systeme, sinon proprietaire

TABLE : depenses
Colonne Type SQL Contrainte Description

id SERIAL PRIMARY KEY Identifiant unique

user_id INTEGER FK [Link], NOT NULL Proprietaire de la depense

categorie_id INTEGER FK [Link], NOT NULL Categorie de la depense


montant NUMERIC(12,2) NOT NULL, > 0 Montant depense en FCFA

description TEXT NOT NULL Description libre (ex : pizza chez Jean)

date_depense DATE NOT NULL Date effective de la depense

date_creation TIMESTAMP DEFAULT NOW() Date de saisie dans l'application

TABLE : budgets
Colonne Type SQL Contrainte Description

id SERIAL PRIMARY KEY Identifiant unique

user_id INTEGER FK [Link], NOT NULL Proprietaire du budget

categorie_id INTEGER FK [Link], NOT NULL Categorie concernee

montant_max NUMERIC(12,2) NOT NULL, > 0 Plafond mensuel defini par l'utilisateur

mois INTEGER NOT NULL, 1-12 Mois concerne (1 = janvier)

annee INTEGER NOT NULL Annee concernee

TABLE : dettes
Colonne Type SQL Contrainte Description

id SERIAL PRIMARY KEY Identifiant unique

user_id INTEGER FK [Link], NOT NULL Proprietaire

type_dette VARCHAR(10) CHECK IN ('EMPRUNT','PRET')


EMPRUNT = je dois | PRET = on me doit

nom_personne VARCHAR(150) NOT NULL Nom du creancier ou debiteur

montant_total NUMERIC(12,2) NOT NULL, > 0 Montant total de la dette

montant_rembourse NUMERIC(12,2) DEFAULT 0 Cumul de tous les remboursements

montant_restant NUMERIC(12,2) GENERATED (virtual) montant_total - montant_rembourse

date_emprunt DATE NOT NULL Date de creation de la dette

date_echeance DATE NOT NULL Date prevue de remboursement complet

statut VARCHAR(15) DEFAULT 'EN_COURS' EN_COURS | EN_RETARD | SOLDEE | ARCHIVEE

rappel_jours INTEGER DEFAULT 3 Nb de jours avant echeance pour email de rappel

description TEXT Notes optionnelles

date_creation TIMESTAMP DEFAULT NOW() Date d'enregistrement


TABLE : remboursements
Colonne Type SQL Contrainte Description

id SERIAL PRIMARY KEY Identifiant unique

dette_id INTEGER FK [Link], NOT NULL Reference vers la dette concernee

montant NUMERIC(12,2) NOT NULL, > 0 Montant de ce remboursement

date_remboursement DATE NOT NULL Date effective du paiement

mode_paiement VARCHAR(50) Especes, Mobile Money, Virement, etc.

note TEXT Commentaire optionnel

date_creation TIMESTAMP DEFAULT NOW() Date de saisie


9. API REST — ENDPOINTS FASTAPI

Documentation automatique : FastAPI genere automatiquement une documentation interactive


accessible a [Link] (Swagger UI) et [Link] Chaque endpoint
peut etre teste directement depuis le navigateur.

AUTHENTIFICATION
Methode URL Description Auth ?

POST /auth/register Inscription d'un nouvel utilisateur Non

POST /auth/login Connexion, retourne un token JWT Non

GET /auth/me Informations de l'utilisateur connecte Oui

PUT /auth/me Modifier le profil (nom, email, revenu) Oui

PUT /auth/password Changer le mot de passe Oui

MODULE DEPENSES
Methode URL Description Auth ?

GET /categories Lister toutes les categories disponibles Oui

POST /categories Creer une categorie personnalisee Oui

GET /depenses Lister les depenses (avec filtres + pagination) Oui

POST /depenses Creer une nouvelle depense Oui

GET /depenses/{id} Obtenir le detail d'une depense Oui

PUT /depenses/{id} Modifier une depense existante Oui

DELETE /depenses/{id} Supprimer une depense Oui

GET /depenses/stats/mensuel Statistiques mensuelles par categorie Oui

POST /depenses/classifier Suggerer une categorie selon description Oui

GET /budgets Lister les budgets par categorie Oui

POST /budgets Definir un budget pour une categorie/mois Oui

MODULE DETTES
Methode URL Description Auth ?

GET /dettes Lister toutes les dettes (filtres: statut, type) Oui
POST /dettes Creer une nouvelle dette Oui

GET /dettes/{id} Detail d'une dette + historique remboursements Oui

PUT /dettes/{id} Modifier une dette (echeance, description) Oui

DELETE /dettes/{id} Supprimer une dette (confirmation requise) Oui

POST /dettes/{id}/rembourser Enregistrer un remboursement partiel/total Oui

PUT /dettes/{id}/solder Marquer la dette comme soldee manuellement Oui

GET /dettes/stats/resume Resume : total du, total a recevoir, en retard Oui

GET /dettes/echeances/prochaines Dettes dont l'echeance arrive dans 7 jours Oui

9.1 Exemple de Code FastAPI — Endpoint Depenses


# backend/app/routes/[Link]

from fastapi import APIRouter, Depends, HTTPException

from [Link] import Session

from ..database import get_db

from ..[Link] import Depense

from ..schemas.depense_schema import DepenseCreate, DepenseResponse

from ..services.auth_service import get_current_user

router = APIRouter(prefix='/depenses', tags=['Depenses'])

@[Link]('/', response_model=DepenseResponse)

def creer_depense(

depense: DepenseCreate,

db: Session = Depends(get_db),

current_user = Depends(get_current_user)

):

nouvelle = Depense(**[Link](), user_id=current_user.id)

[Link](nouvelle)

[Link]()

[Link](nouvelle)

return nouvelle

@[Link]('/', response_model=list[DepenseResponse])
def lister_depenses(

categorie_id: int = None,

db: Session = Depends(get_db),

current_user = Depends(get_current_user)

):

query = [Link](Depense).filter(Depense.user_id == current_user.id)

if categorie_id:

query = [Link](Depense.categorie_id == categorie_id)

return query.order_by(Depense.date_depense.desc()).all()
10. ARCHITECTURE FRONT-END REACT

10.1 Librairies et Outils


Librairie / Outil Version Role dans le projet

React 18.x Framework principal pour construire l'interface utilisateur

Vite 5.x Outil de build et serveur de developpement rapide

TailwindCSS 3.x Framework CSS utilitaire pour le design responsive

Axios 1.x Client HTTP pour les appels API vers FastAPI

React Router DOM 6.x Navigation entre les pages (SPA - Single Page Application)

Recharts ou [Link] Latest Graphiques interactifs (camembert, barres)

React Hook Form 7.x Gestion des formulaires avec validation

Context API ou Zustand — Gestion de l'etat global (utilisateur connecte, token JWT)

date-fns 3.x Manipulation et formatage des dates

10.2 Pages Principales


Page Route Contenu

Connexion / Inscription /login, /register Formulaires d'authentification

Tableau de bord / Resume global, alertes, stats rapides

Depenses /depenses Liste, ajout, modification, filtres

Statistiques depenses /depenses/stats Graphiques par categorie et periode

Budgets /budgets Definition et suivi des plafonds par categorie

Dettes /dettes Liste des dettes actives, archivees, resume

Detail d'une dette /dettes/:id Historique remboursements, barre progression

Profil /profil Modification des informations personnelles

10.3 Exemple de Composant React — Formulaire de Depense


// frontend/src/pages/[Link]

import { useState } from 'react';


import axios from '../services/api';

export default function AjouterDepense() {

const [form, setForm] = useState({

montant: '', description: '', categorie_id: '', date_depense: ''

});

const handleSubmit = async (e) => {

[Link]();

try {

await [Link]('/depenses', form);

alert('Depense enregistree avec succes !');

} catch (error) {

alert('Erreur : ' + [Link]);

};

return (

<form onSubmit={handleSubmit} className='space-y-4 p-6'>

<input type='number' placeholder='Montant (FCFA)'

onChange={e => setForm({...form, montant: [Link]})}

className='border rounded p-2 w-full' />

<input type='text' placeholder='Description (ex: pizza chez Jean)'

onChange={e => setForm({...form, description: [Link]})}

className='border rounded p-2 w-full' />

{/* Selecteur de categorie + Bouton Enregistrer */}

<button type='submit' className='bg-green-600 text-white px-4 py-2 rounded'>

Enregistrer la depense

</button>

</form>

);

}
11. SECURITE ET AUTHENTIFICATION

11.1 Authentification JWT

JWT (JSON Web Token) : Apres connexion, le serveur FastAPI genere un token signe. Ce token est
stocke dans le navigateur (localStorage ou cookie HTTP-only). Pour chaque requete protegee, React
envoie ce token dans l'en-tete HTTP : Authorization: Bearer <token>. FastAPI verifie le token avant de
traiter la requete.

Mesure de Securite Implementation Librairie

Hachage des mots de passe bcrypt avec salt automatique passlib[bcrypt]

Tokens d'authentification JWT avec expiration de 30 jours python-jose

Validation des entrees Schemas Pydantic (types, contraintes) pydantic

Protection CORS Middleware FastAPI CORS (domaines autorises) [Link]

Variables sensibles Fichier .env (jamais versionne) python-dotenv

Requetes SQL securisees ORM SQLAlchemy (anti SQL injection) sqlalchemy

HTTPS en production Certificat SSL via Nginx ou Caddy Serveur web

Rate limiting Limiter les tentatives de connexion slowapi


12. INTERFACES UTILISATEUR (Wireframes Textuels)

Outil recommande : Figma (gratuit pour etudiants) pour concevoir les maquettes graphiques. Les
wireframes ci-dessous decrivent la structure de chaque ecran principal.

Ecran 1 : Tableau de Bord (Dashboard)


• En-tete : Logo FinanceApp | Nom utilisateur | Bouton Deconnexion
• Barre de navigation gauche (sidebar) : Dashboard | Depenses | Dettes | Stats | Profil
• Carte 1 : 'Depenses ce mois' — montant total en FCFA + variation vs mois precedent
• Carte 2 : 'Dettes actives' — nombre + montant total du + montant total a recevoir
• Carte 3 : 'Prochaine echeance' — nom de la personne + date + montant restant
• Graphique rapide : camembert des 3 principales categories du mois
• Liste : 5 dernieres depenses enregistrees (date, description, montant, categorie)

Ecran 2 : Page Depenses


• Barre de filtres : Date (debut/fin) | Categorie | Montant min/max | Bouton Rechercher
• Bouton 'Ajouter une depense' (prominent, vert)
• Tableau des depenses : icone categorie | date | description | montant | actions (editer/sup.)
• Pagination en bas du tableau (10 resultats par page)
• Total de la periode affiche en bas

Ecran 3 : Formulaire Ajout/Modification Depense


• Champ : Montant (FCFA) — clavier numerique, obligatoire
• Champ : Description — texte libre, obligatoire
• Champ : Categorie — selecteur avec icones colorees + suggestion automatique
• Champ : Date — selecteur de date (defaut = aujourd'hui)
• Boutons : Enregistrer (vert) | Annuler (gris)
• Zone de suggestion : 'Nous suggerons la categorie [X] pour cette depense'

Ecran 4 : Page Dettes


• Onglets : Actives | En retard | Soldees/Archives
• Filtres : Type (EMPRUNT/PRET) | Statut | Periode
• Bouton 'Nouvelle dette' (prominent, orange)
• Carte par dette : nom personne | type badge | montant total | barre de progression | echeance
• Indicateurs en haut : Total du (rouge) | Total a recevoir (vert)

Ecran 5 : Detail d'une Dette


• En-tete : Nom + Type + Statut (badge colore) + Bouton 'Rembourser'
• Resume chiffre : Montant total | Rembourse | Reste | Date echeance | Jours restants
• Grande barre de progression circulaire (pourcentage rembourse)
• Section 'Historique des remboursements' : tableau date | montant | mode | note
• Bouton 'Marquer comme soldee' (visible si solde = 0 ou forçage manuel)
• Bouton 'Archiver' (visible si statut = SOLDEE)
13. PLANNING ET LIVRABLES

Sprint Duree Taches Back-end (FastAPI) Taches Front-end (React) Livrable

Config FastAPI + PostgreSQL Init React + Vite


Sprint 0 Projet configure
1 sem. Modeles SQLAlchemy TailwindCSS
Mise en place BDD creee
Alembic migrations Axios + React Router

Endpoints auth Pages Login/Register


Sprint 1 Authentification
1 sem. (register/login/JWT) Gestion token JWT
Auth & Users fonctionnelle
Hachage bcrypt Protection routes

CRUD depenses Page Depenses


Sprint 2 Module Depenses
2 sem. CRUD categories Formulaire ajout
Module Depenses complet
Classification mots-cles Suggestion categorie

Endpoint stats Graphiques Recharts


Sprint 3 Statistiques
1 sem. Endpoint budgets Page Statistiques
Budgets & Stats visibles
Calculs aggregats Barre budget

CRUD dettes Page Dettes


Sprint 4 Module Dettes
2 sem. CRUD remboursements Detail dette
Module Dettes complet
Logique statuts Barre progression

APScheduler
Sprint 5 Affichage alertes UI Notifications
1 sem. Verification echeances
Notifications Badges 'En retard' operationnelles
Envoi emails SMTP

Tests unitaires pytest Tests E2E


Sprint 6 Application finale
2 sem. Corrections bugs Responsivite mobile
Tests & Deploy deployable
Documentation API Optimisation UI

Duree totale : 10 semaines | Equipe recommandee : 2 a 3 etudiants (1 back-end, 1 front-end, 1


fullstack/tests) | Methode : Agile Scrum avec reunions de suivi hebdomadaires.
14. GLOSSAIRE

Interface de programmation permettant a deux systemes (React et FastAPI) de


API REST
communiquer via HTTP en echangeant des donnees JSON.

Framework Python moderne pour creer des APIs REST. Il genere automatiquement
FastAPI
une documentation Swagger et est tres rapide.

Librairie JavaScript developpee par Meta pour construire des interfaces utilisateur
React
interactives (front-end).

Systeme de gestion de base de donnees relationnelle open-source, robuste et adapte


PostgreSQL
aux projets serieux.

ORM (Object-Relational Mapper) Python : permet d'ecrire des requetes SQL sous
SQLAlchemy
forme de code Python orienté objet.

Outil de migration de base de donnees pour SQLAlchemy. Gere les modifications de


Alembic
structure (ajout/suppression de colonnes).

JSON Web Token : format de token securise utilise pour l'authentification. Contient
JWT
des informations signees numeriquement.

Algorithme de hachage securise pour les mots de passe. Rend impossible la


bcrypt
recuperation du mot de passe original.

Librairie Python pour la validation des donnees. S'assure que les donnees reçues par
Pydantic
l'API respectent le bon format.

Librairie Python pour programmer des taches automatiques (ex : verifier les
APScheduler
echeances de dettes chaque jour a 8h).

Cross-Origin Resource Sharing : mecanisme qui autorise (ou interdit) React a appeler
CORS
l'API FastAPI depuis un autre domaine.

Object-Relational Mapper : couche logicielle qui fait le lien entre les objets Python et
ORM
les tables SQL.

Script qui modifie la structure de la base de donnees sans perdre les donnees
Migration
existantes.

Une URL specifique de l'API qui repond a un type de requete precise (GET, POST,
Endpoint
PUT, DELETE).
Create, Read, Update, Delete : les quatre operations de base sur une base de
CRUD
donnees.

Framework CSS qui fournit des classes utilitaires pour styler rapidement des
TailwindCSS
interfaces sans ecrire de CSS custom.

Franc CFA : monnaie officielle utilisee au Cameroun et dans d'autres pays d'Afrique
FCFA
centrale et occidentale.

Outil de build JavaScript moderne, beaucoup plus rapide que l'ancien Create React
Vite
App.

Single Page Application : l'application React charge une seule page HTML et met a
SPA
jour le contenu dynamiquement sans rechargement.

En methode Agile, periode de travail courte (1 a 2 semaines) avec un objectif precis et


Sprint
mesurable.

Usage Academique — Genie


FinanceApp — CDC v2.0 FastAPI | React | PostgreSQL | 2025
Logiciel

Vous aimerez peut-être aussi