# 04 — Modèle de données

## Entités principales MVP

- Ecole
- Theme
- User
- Section
- Niveau
- Classe
- AnneeScolaire
- Etudiant
- Inscription
- AffectationClasse
- TypeFrais
- PlanScolariteEtudiant
- Paiement
- TenantDomain

## Ecole

Champs :
- id
- nom
- slug
- sousDomaine
- prefixeMatricule
- dernierNumeroMatricule
- logo
- description
- slogan
- email
- telephone1
- telephone2
- whatsapp
- adresse
- ville
- pays
- couleurPrincipale
- couleurSecondaire
- couleurAccent
- themePublic
- heroTitle
- heroSubtitle
- aboutTitle
- aboutText
- ctaTitle
- ctaText
- active
- createdAt
- updatedAt

Relations :
- Ecole 1-n Section
- Ecole 1-n Niveau
- Ecole 1-n Classe
- Ecole 1-n Etudiant
- Ecole 1-n Inscription
- Ecole 1-n Paiement
- Ecole 1-n User
- Ecole 1-n TenantDomain

## TenantDomain

Champs :
- id
- ecole
- host
- canonical
- active
- createdAt
- updatedAt

Règles :
- une école peut avoir un seul domaine canonique actif ;
- une école peut avoir plusieurs alias actifs ;
- les alias redirigent vers le domaine canonique en conservant le chemin et les query params.

## Theme

Champs :
- id
- nom
- code
- description
- previewImage
- actif
- createdAt

Exemples :
- qamar
- daroul_ilm

## User

Champs :
- id
- ecole nullable
- nom
- email
- telephone
- password
- roles
- active
- createdAt
- updatedAt

Règles :
- super-admin : ecole nullable
- admin école : ecole obligatoire

## Section

Champs :
- id
- ecole
- nom
- slug
- description
- type
- publicCible
- active
- ordre

Types :
- EN_LIGNE
- PRESENTIEL
- WHATSAPP
- MIXTE
- PERSONNALISE

## Niveau

Champs :
- id
- ecole
- section nullable
- nom
- slug
- description
- ordre
- active

## AnneeScolaire

Champs :
- id
- ecole
- section nullable
- libelle
- dateDebut
- dateFin
- active
- statut

Statuts :
- BROUILLON
- ACTIVE
- CLOTUREE

## Classe

Champs :
- id
- ecole
- section
- niveau nullable
- anneeScolaire nullable
- nom
- slug
- langue
- sexe
- mode
- capacite
- joursCours
- heureDebut
- heureFin
- tarifDefaut
- active

Langues :
- FRANCAIS
- HAOUSSA
- FOULFOULDE
- ARABE

Sexes :
- HOMME
- FEMME
- MIXTE

Modes :
- WHATSAPP
- PRESENTIEL
- EN_LIGNE
- PERSONNALISE

## Etudiant

Champs :
- id
- ecole
- matricule
- nom
- prenom
- sexe
- dateNaissance
- lieuNaissance
- telephone
- telephoneWhatsapp
- autresContacts
- adresse
- ancien
- active
- createdAt
- updatedAt

Règles :
- matricule unique par école
- généré automatiquement à la création

## Inscription

Champs :
- id
- ecole
- etudiant
- anneeScolaire
- section
- classe nullable
- type
- statut
- dateInscription
- dateValidation
- validePar nullable
- observation

Types :
- NOUVELLE
- REINSCRIPTION

Statuts :
- EN_ATTENTE
- A_AFFECTER
- VALIDEE
- REJETEE
- ANNULEE

## AffectationClasse

Champs :
- id
- ecole
- etudiant
- inscription
- classe
- dateAffectation
- affectePar
- active
- observation

Règle :
- garder l’historique des affectations.

## TypeFrais

Champs :
- id
- ecole
- section nullable
- nom
- type
- montant
- periodicite
- obligatoire
- montantVariable
- active

Types :
- INSCRIPTION
- REINSCRIPTION
- ANNUEL
- MENSUEL
- DOCUMENTS
- PERSONNALISE
- AUTRE

Periodicites :
- UNIQUE
- MENSUEL
- ANNUEL
- VARIABLE

## PlanScolariteEtudiant

Champs :
- id
- ecole
- etudiant
- inscription
- section
- classe nullable
- typeTarif
- montantInscription
- montantScolarite
- periodicite
- nombreSeances
- actif
- observation

Utilité :
- gérer les cas personnalisés, surtout Daroul-Ilm présentiel.

## Paiement

Champs :
- id
- ecole
- etudiant
- inscription nullable
- typeFrais nullable
- montantAttendu
- montantPaye
- reste
- datePaiement
- modePaiement
- reference
- recuNumero
- statut
- enregistrePar
- observation
- createdAt

Modes :
- ESPECES
- MTN_MONEY
- ORANGE_MONEY
- VIREMENT
- AUTRE

Statuts :
- PAYE
- PARTIEL
- IMPAYE
- ANNULE
