# CAHIER DES CHARGES GEOSECTOR

Geosector est entièrement développé en Flutter
Il utilise les dépendances suivantes

- Hive pour le stockage des données sur mobile en cas déconnexion du réseau
- Stripe pour le paiement en ligne
- MapBox pour l’affichage des cartes et la gestion des secteurs (polygones) et des passages (markers)
- Fl_chart pour les graphiques

L’application sera accessible via l’url https://app.geosector.fr

Elle utilisera une API FulRest modulaire développée en Full PHP8.3 et connectée à une base de données centrale MariaDB10.11
L’API sera accessible via l’url https://app.geosector.fr/api/geo/…
Les requêtes authentifiées passeront par le PHP session_id.

L’application Flutter utilise des adresses tirées de la base nationale des adresses Open Data via l’API.
Cette base adresses est importée chaque semaine par un script bash dans une base MariaDB

La base de données centrale geosector_app devra être initialisée et des scripts sql devront être créés pour importer les données d'une autre base avec une autre structure.

L’application Flutter GEOSECTOR se compose de trois parties : partie publique, partie admin et partie utilisateur.

# PARTIE PUBLIQUE

2 pages.

## PAGE PUBLIQUE

- Cette page présente la solution
- Elle donne un lien vers l'App Store et Play Store pour télécharger l'application mobile
- Elle présente des captures d'écran de l'application mobile et de l'interface administrateur.
- Elle donne un lien pour se connecter et suivant son e-mail et son mot de passe, on ira dans l’interface admin ou utilisateur.
- Elle donne un lien pour s'inscrire et créer son amicale en tant que administrateur.
- Elle donne des statistiques de connexion sur l'admin et le mobile sur les 2 derniers mois et sur les 2 dernières années.
- Elle donne le nombre de clients inscrits et autres infos sur 3 cards
  Au niveau du footer on a l’adresse de Geosector avec le lien Facebook, les liens de cette page et le formulaire de contacts
- ne pas oublier les pages mentions légales et conditions d'utilisation.
  Mettre aussi la modale pour la gestion des cookies

## LOGIN / REGISTER

- La connexion se fait par un username et un userpswd (mot de passe).
- Un lien "mot de passe oublié" permet de saisir son email pour récupérer un nouveau mot de passe.
- Un lien "s'inscrire" permet de saisir son e-mail, son nom et prénom, le nom de l'amicale, son code postal et sa commune pour recevoir un userame et un mot de passe par email.

# PARTIE UTILISATEUR

je voudrais commencer à voir l'interface UI de @user_dashboard_page.dart avec 5 pages qu'il faudra nommer user_xxx_page et qui contiendront des widgets communs à toute l'application.

Le design doit être soigné, clair, espacé, très lisible avec un jeu d'élévations et d'ombres et en tenant compte de @app_theme.dart

En version Web le menu se trouvera dans une SideBar à gauche avec des icones et le contenu à droite
En version mobile, le menu se trouvera en bas des pages avec les mêmes icones

## PAGE PRINCIPALE - Dashboard

- synthèse des passages de l’utilisateur et le montant collecté par type de règlement (espèce, chèque, carte bancaire).
- graphique des passages réalisés par jour depuis deux semaines
- Bouton de création d’un nouveau passage

## PAGE STATISTIQUES

- Graphiques au choix par jour, semaine, mois du nombre de passages et des sommes collectées

## PAGE HISTORIQUE

- Liste des passages par type, par date avec la possibilité de faire des recherches et de consulter le reçu au format PDF et les éventuelles erreurs détectées par retour d'email

## PAGE COMMUNICATION

- Permet de communiquer au sein de l’équipe par chat
- Permet de répondre à un mail d’un client

## PAGE CARTE

- Visualiser ses secteurs d’activité via MapBox
- Visualiser ces passages
- Sélectionner des passages près de sa position
- Cliquer sur un passage pour ouvrir le formulaire passage
- Cliquer sur la carte pour créer un passage à la position du clic

## FORMULAIRE PASSAGE

- Saisir les informations de passage et permettre de régler en ligne par carte bancaire via Stripe, et d’envoyer par mail ou SMS, le reçu au format PDF.

Il faudrait créer des widgets communs :

1. pour la carte MapBox qui aura certaines fonctionnalités suivant le role du user
2. pour le formulaire de passage qui sera utilisé à plusieurs endroits dans l'appli
3. historique des passages : liste des passages avec des critères de filtres et de tri paramétrable suivant le rôle du user
4. Statistiques : 3 types de graphiques avec critères de sélection paramétrables suivant le rôle du user

# PARTIE ADMIN

En version Web, le menu se trouvera dans une Sidebar à gauche.
En version mobile, le menu se trouvera en bas des pages.
La partie admin est différente suivant le rôle de l’utilisateur : super admin ou admin d’une amicale.

## ADMIN D’UNE AMICALE

8 pages

### PAGE PRINCIPALE

- Synthèse des passages par secteur et par utilisateur et le montant collecté sur l’opération en cours
- Graphique des passages réalisés par jour depuis deux semaines

### PAGE AMICALE

- Saisie des informations et options de l’amicale
- Upload du logo
- Gestion des abonnements avec paiement en ligne STRIPE en fonction du nombre de calendriers distribués.
- Gestion des SMS avec paiement en ligne STRIPE de pack de 200 à 2000 SMS.

### PAGE MEMBRES

- Gérer les membres de l’amicale
- Upload des badges des membres
- Demande de réinitialisation de mot de passe
- Importer/Exporter une liste de membres

### PAGE COMMUNICATION

- Communiquer par chat au sein de l’équipe et auprès de Geosector

### PAGE CONNEXIONS

- Consulter les dernières connexions de l’équipe des 15 derniers jours
- Graphique des connexions sur 5 mois glissants

### PAGE CARTE

- Voir les secteurs d’activité et les passages avec des filtres sur des secteurs ou des utilisateurs

### PAGE OPERATIONS

- Gérer ses opérations et opération active présélectionnée
- Gérer les secteurs de l’opération : couleur, titre, membres
- Tracer les secteurs sur une carte
- Affichage des passages en fonction de l’historique et des adresses récupérées de la base adresses
- Affichage de la liste des membres actifs avec leurs données de stats par type de passage
- Exporter les données de l’opération au format Excel
- Exporter les données d’un membre

### PAGE STATISTIQUES

- Afficher des graphiques d’activité par secteur, par membre, et sur des périodes sélectionnées

## ADMIN GEOSECTOR

L’admin des super administrateurs GEOSECTOR a 1 page en plus

### PAGE CLIENTS

- Affiche la liste des amicales créées actives ou en démo avec une recherche sur le nom de l'amicale, un code postal, une commune, un nom de membre
- gestion des amicales en mode démo (inscription en ligne)
- Création d’une amicale en récupérant le formulaire de la page AMICALE
- Suppression d’une amicale
- Consulter le nombre de membres, de passages réalisés sur la dernière opération de chaque amicale
- Gérer les secteurs de son opération avec possibilité de suppression ou de restauration
- Gérer les opérations avec possibilité de suppression, création
- Gérer les abonnements en fonction du nombre de passages réalisés et d’envoyer par mail une facture au format PDF

# WIDGETS COMMUNS

Des widgets communs doivent être développés pour être utilisés dans plusieurs pages et être appelés avec des paramètres.

- Widget Formulaire de passage
- Widget Carte avec des actions sur les markers (ajout, modification, suppression) et sur les secteurs (ajout, modification, suppression) suivant le rôle de l'utilisateur
- Widget Graphiques de connexions suivant le rôle Admin ou Super Admin
- Widget Graphiques de statistiques de passages d'un membre
- Widget Graphiques de statistiques d'un secteur
- Widget Graphiques de statistiques d'une opération
- Widget Formulaire d'une amicale
- Widget Formulaire d'un membre
- Widget Formulaire d'une opération
- Widget Formulaire d'un secteur

# CHIFFREMENT

Chaque mot de passe doit être chiffré avec l'algorithme Argon2
Des données sensibles seront à chiffer avec l'algorithme AES-256 dans la base de données. Ces champs seront nommées avec le préfixe `encrypted_`
Le chiffrement sera utilisé avec IV identique pour les emails, les adresses car elles sont utilisées dans les recherches.

# EMAILS

Les emails seront envoyés via l'API vers le serveur SMTP de geosector.fr avec les adresses noreply et contact@geosector.fr
Une gestion de queue des emails sera développée par l'API pour éviter d'envoyer trop d'emails par heure (limite 1500 emails/heure).
Un script externe en PHP sera développé pour nettoyer la queue et envoyer les emails stockés en base de données.
Un script externe en PHP sera développé pour contrôler les éventuels retours d'emails non réceptionnés (erreur email) et qui renverra l'information d'erreur dans la table ope_pass des passages pour que l'utilisateur soit alerté et qu'il puisse mettre à jour l'email et effectuer un renvoi du reçu au format PDF.

# SMS

Un SMS peut être envoyé sur un passage à l'habitant pour lui confirmer le passage et la somme collectée.
Seules les amicales qui ont accepté cette fonctionnalité dans l'interface admin pourront envoyer des SMS.
Les SMS seront envoyés via l'API et via le serveur SMS OVH.
Une gestion de règlement sera développée pour que l'amicale puisse régler le paiement des SMS envoyés, par pack de 200, 500, 1000, 2000 SMS.

# BASES DE DONNEES EXTERNES OPEN DATA

Des scripts PHP au niveau de l'API seront développés pour importer hebdomadairement la base ADRESSES Open Data.
Ces données seront stockées dans une base de données centrale MariaDB.

Des scripts PHP au niveau de l'API seront développés pour importer hebdomadairement la base SIRENE Open Data.
Ces données seront stockées dans une base de données centrale MariaDB.

Des scripts PHP au niveau de l'API seront développés pour importer hebdomadairement la base BATIMENTS Open Data.
Ces données seront stockées dans une base de données centrale MariaDB.

Des scripts PHP au niveau de l'API seront développés pour importer hebdomadairement la base OpenStreetMap Open Data.
Ces données seront stockées dans une base de données centrale MariaDB.

Des points d'entrées de l'API seront développés pour récupérer les données des bases externes à destination de GEOSECTOR.
