Source Chimiques souhaite équiper son équipe terrain d'une application mobile bilingue (Français /
Arabe avec RTL) permettant
le contrôle quotidien des points de vente du circuit traditionnel. Le système doit centraliser, dans un
back-office web sécurisé,
l'ensemble des données collectées (réponses, photos, vidéos, enregistrements audio, géolocalisation) pour
produire des
tableaux de bord, KPI régionaux, cartes et rapports analytiques à destination du
management.
Objectifs métiers prioritaires
Donner aux contrôleurs un outil mobile rapide, robuste, utilisable même hors
connexion (zones rurales, sous-sols, etc.).
Permettre au superviseur de suivre en temps réel la position et l'avancement de ses
subordonnés.
Offrir au Responsable Marketing et au Top Management des KPI
consolidés, exportables (Excel / PDF).
Garantir la traçabilité : horodatage, géolocalisation, médias signés et stockés de
façon sécurisée.
Assurer un multilinguisme natif (FR / AR) avec inversion automatique de l'interface en
mode RTL.
2. Périmètre Fonctionnel
2.1 Rôles et matrice de visibilité hiérarchique
Rôle
Mobile
Back-Office Web
Périmètre de visibilité
Administrateur
Lecture
Total (CRUD)
Toutes les régions, tous les utilisateurs, paramétrages, gestion des catégories d'articles, planification des missions, rapports.
Contrôleur terrain
Saisie complète + mode offline
—
Ses missions du jour, son historique, son tableau de bord personnel.
Superviseur
Saisie de ses propres interventions + suivi (vue seule) de ses subordonnés sur carte
Consultation + validation des comptes-rendus de ses subordonnés
Ses propres interventions (édition) + interventions de ses contrôleurs rattachés (lecture seule).
Responsable Marketing
Consultation
Tableaux de bord, exports
Toutes les régions (lecture analytique).
Top Management
Consultation
KPI globaux, exports
Vue consolidée nationale, par région, par contrôleur.
2.2 Modules fonctionnels
Application mobile (Ionic / Android)
Cible : Android uniquement (APK signé, distribution interne ou Google Play privé).
Liste des missions du jour planifiées par l'administrateur.
Géolocalisation automatique au démarrage de chaque intervention.
Formulaire dynamique de contrôle : catégorie / marque / disponibilité.
Questionnaires paramétrés depuis le back-office (questions obligatoires ou facultatives, semi-ouvertes ou fermées, par point de vente ou par région).
Capture multimédia : PhotoVidéoAudioTexte FRنص
عربي avec compression et optimisation locales sur le téléphone avant envoi afin de réduire la consommation de bande passante mobile et d'éviter le gaspillage du stockage serveur.
Mode hors-ligne (SQLite local chiffré) + synchronisation automatique à la reconnexion, avec pré-traitement des images et vidéos avant upload.
Historique personnel des interventions + tableau de bord léger.
Module « Support & Signalement » : l'utilisateur peut signaler une anomalie applicative (capture d'écran + description) directement depuis l'app, ticket envoyé au support.
Back-Office Web (Angular + Laravel API)
Gestion des comptes utilisateurs et des rôles.
Gestion du catalogue : catégories + articles (avec photos de
marques).
Paramétrage des questionnaires : création / édition des questions, choix du type (texte, choix multiple, oui/non, observation), portée (par point de vente ou région), et caractère obligatoire ou facultatif.
Création et planification des missions par région et par contrôleur.
Visualisation des comptes-rendus liés à une mission (médias, géoloc, audio).
Tableaux de bord KPI : taux de disponibilité, alertes GPS, couverture régionale.
Cartographie temps réel des contrôleurs et des points visités.
Gestion des tickets de support remontés depuis l'app mobile.
Journal d'audit (qui a fait quoi, quand, depuis où).
2.3 Cible matérielle mobile (Android)
L'application mobile est développée et optimisée exclusivement pour Android. Les contrôleurs
seront équipés de smartphones répondant aux caractéristiques minimales suivantes pour garantir la fluidité, la
capture multimédia et la fiabilité GPS sur le terrain.
Caractéristique
Minimum requis
Recommandé
Version Android
Android 9 (API 28)
Android 12+ (API 31)
Processeur
Octa-core 1.6 GHz
Octa-core 2.0 GHz ou plus
Mémoire vive (RAM)
3 Go
4 Go ou plus
Stockage interne libre
16 Go
32 Go ou plus
Écran
5,5" — résolution HD+ (720 × 1480)
6,0"+ — Full HD+ (1080 × 2400)
Appareil photo arrière
8 Mpx avec autofocus
13 Mpx ou plus
GPS
GPS + A-GPS
GPS + GLONASS + GALILEO
Connectivité
4G LTE + Wi-Fi
4G LTE / 5G + Wi-Fi double bande
Batterie
3 000 mAh
4 500 mAh ou plus
Micro & haut-parleur
Standard intégré
Micro avec réduction de bruit
3. Architecture de Communication Client–Serveur (Cloud)
L'architecture recommandée repose sur un modèle Cloud managé sécurisé. L'application mobile
Ionic communique
de façon asynchrone avec l'API REST Laravel via HTTPS / TLS Le back-office Angular consomme la même API.
flowchart LR
subgraph Terrain["Terrain - Contrôleurs"]
M1["Mobile Ionic 1 SQLite + Queue"]
M2["Mobile Ionic 2 SQLite + Queue"]
M3["Mobile Ionic 3 SQLite + Queue"]
M4["Mobile Ionic 4 SQLite + Queue"]
end
subgraph Sup["Mobile Superviseur"]
MS["Vue carte + suivi équipes"]
end
subgraph Cloud["Cloud managé (HTTPS / TLS 1.3)"]
LB["Reverse Proxy Nginx + WAF"]
API["API Laravel JWT - REST"]
Q["File d'attente (Jobs / Queue)"]
DB[("MySQL données métier")]
S3[("Stockage objet Photos / Vidéos / Audio")]
LOG["Logs & Audit"]
end
subgraph BO["Back-Office Web"]
NG["Angular Dashboard / KPI / Map"]
end
M1 -- "Sync JSON + Médias" --> LB
M2 --> LB
M3 --> LB
M4 --> LB
MS -- "Lecture temps réel" --> LB
NG -- "Admin + KPI" --> LB
LB --> API
API --> DB
API --> Q
Q --> S3
API --> S3
API --> LOG
Figure 3.1 — Topologie de la communication Mobile / Cloud / Back-Office.
3.1 Logique du mode Offline et auto-synchronisation
sequenceDiagram
participant U as Contrôleur
participant App as App Ionic
participant DB as SQLite local
participant Net as Network
participant API as API Laravel
participant Sto as Stockage Médias
U->>App: Saisie intervention (offline)
App->>DB: Enregistrement local + médias
Note over App,DB: Statut = PENDING_SYNC
Net-->>App: Reconnexion détectée (4G/Wi-Fi)
App->>API: POST /interventions (payload JSON)
API-->>App: 201 Created (id_serveur)
loop Pour chaque média
App->>App: Compression / redimensionnement / optimisation locale
App->>Sto: Chunk upload (photo/vidéo/audio optimisé)
Sto-->>App: OK + URL signée
end
App->>API: PATCH /interventions/{id} (URLs médias)
API-->>App: 200 OK
App->>DB: Statut = SYNCED
Figure 3.2 — Séquence de synchronisation différée garantissant zéro perte de donnée
terrain.
Garantie de robustesse : tant qu'une intervention n'est pas marquée SYNCED,
elle reste protégée dans la base
SQLite locale, même en cas de fermeture de l'application ou de redémarrage du téléphone. Les uploads médias
reprennent
automatiquement au point d'interruption (resume upload).
4. Maquettes de l'Application Mobile (Ionic)
L'application détecte automatiquement la langue préférée (FR / AR). En mode arabe, l'interface bascule en
RTL
(Right-To-Left) : les menus, icônes d'action et formulaires sont inversés pour un confort de lecture
optimal.
Écran 1 — Liste des missions (Français)
Écran 2 — Formulaire de saisie multimédia (Arabe / RTL)
Écran 3 — Tableau de bord personnel & historique
5. Maquettes du Back-Office (Angular)
Écran 4 — Back-Office : tableau de bord global avec KPI, cartographie temps réel,
comptes-rendus récents et graphique régional.
Écran 5 — Back-Office : planification hebdomadaire des missions par contrôleur (drag
& drop), avec statuts visuels.
Écran 6 — Back-Office : détail d'une intervention réalisée par un opérateur sur une région, avec KPI de mission, réponses, géolocalisation, médias et conclusion manager.
5.1 Versions Back-Office en Arabe
Écran 7 — Back-Office en arabe : tableau de bord global avec KPI, carte du Maroc et dernières interventions.
Écran 8 — Back-Office en arabe : planification hebdomadaire des missions.
Écran 9 — Back-Office en arabe : détail d'une intervention opérateur sur une région.
6. Modèle de Données (vue logique)
erDiagram
USERS ||--o{ MISSIONS : "assigné à"
USERS ||--o{ INTERVENTIONS : "réalise"
USERS }o--|| ROLES : "a un"
USERS }o--o| USERS : "supervise (superviseur → contrôleurs)"
REGIONS ||--o{ POINTS_DE_VENTE : "contient"
POINTS_DE_VENTE ||--o{ MISSIONS : "ciblé par"
MISSIONS ||--o{ INTERVENTIONS : "génère"
CATEGORIES ||--o{ ARTICLES : "regroupe"
INTERVENTIONS ||--o{ DISPONIBILITES : "relève"
ARTICLES ||--o{ DISPONIBILITES : "concerne"
INTERVENTIONS ||--o{ REPONSES_QUESTIONS : "répond à"
QUESTIONS ||--o{ REPONSES_QUESTIONS : "structure"
INTERVENTIONS ||--o{ MEDIAS : "joint"
INTERVENTIONS ||--|| GEOLOCALISATION : "horodatée par"
USERS { int id PK string nom string email string mot_de_passe int role_id FK int superviseur_id FK
string langue }
ROLES { int id PK string libelle }
REGIONS { int id PK string nom }
POINTS_DE_VENTE { int id PK int region_id FK string nom float gps_lat float gps_lng }
MISSIONS { int id PK int user_id FK int point_de_vente_id FK date planifiee_le string statut }
INTERVENTIONS { int id PK int mission_id FK int user_id FK datetime debut datetime fin string
statut_sync }
CATEGORIES { int id PK string libelle_fr string libelle_ar }
ARTICLES { int id PK int categorie_id FK string marque string libelle string photo_url }
DISPONIBILITES { int id PK int intervention_id FK int article_id FK bool disponible }
QUESTIONS { int id PK string libelle_fr string libelle_ar string type string portee }
REPONSES_QUESTIONS { int id PK int intervention_id FK int question_id FK string reponse }
MEDIAS { int id PK int intervention_id FK string type string url string hash }
GEOLOCALISATION { int id PK int intervention_id FK float lat float lng datetime captee_le float
precision_m }
Figure 6.1 — Modèle entité-relation simplifié.
7. Sécurité & Conformité
Transport : HTTPS / TLS obligatoire entre mobile, back-office et API.
Stockage mobile : base locale chiffrée — SQLite + SQLCipher (option par défaut, intégration native Capacitor) ou PouchDB / CouchDB en alternative (réplication différentielle native vers le serveur). Le choix final sera arrêté à l'issue du sprint 1 de conception. Médias stockés dans le dossier privé de l'app.
Stockage serveur : médias stockés de manière sécurisée sur le serveur principal avec conservation pérenne des photos, vidéos et audios, sans suppression automatique liée à une durée de vie limitée. L'accès à ces médias reste protégé par les droits applicatifs, l'authentification et les règles de visibilité métier. Les images et vidéos sont compressées et optimisées côté téléphone avant transfert, ce qui réduit la bande passante utilisée, accélère la synchronisation terrain et limite le volume de stockage consommé sur le serveur.
Système d'exploitation serveur : déploiement prévu sous Linux dans tous les cas (Cloud ou On-Premise). Linux est retenu pour sa meilleure robustesse, sa surface d'attaque réduite, sa stabilité en production 24/7, son coût de licence nul et son administration sécurisée, plus adaptée à ce type de plateforme que Windows Server.
Mots de passe : hashés via Bcrypt côté Laravel.
Anti-falsification GPS : détection des coordonnées simulées (mock locations).
Audit : journalisation immuable des connexions, des modifications de catalogue, des
validations de comptes-rendus.
Sauvegardes : snapshots base + médias quotidiens chiffrés, rétention 30 jours minimum.
8. Hébergement : Cloud managé vs Serveur local On-Premise
Le client a évoqué la possibilité d'héberger le back-office et l'API sur un serveur physique
installé sur site à
Source Chimiques. Cette option reste techniquement réalisable, mais comporte plusieurs risques majeurs qu'il
est impératif de
documenter avant toute décision.
flowchart TB
subgraph CloudOpt["Option A — Cloud managé sécurisé (RECOMMANDÉE)"]
direction TB
M_CLD["Mobiles terrain Android (4G / 5G / Wi-Fi)"]
WEB_CLD["Postes Back-Office (Admin / Manager)"]
CDN["CDN + WAF Anti-DDoS"]
LB2["Load Balancer Multi-zones (Multi-AZ)"]
APP1["App server #1 Laravel"]
APP2["App server #2 Laravel"]
DB_M[("BDD primaire MySQL")]
DB_R[("BDD réplica Lecture / Failover")]
OBJ[("Object storage Médias chiffrés")]
BKP[("Backups quotidiens chiffrés - 30j")]
MON["Monitoring 24/7 + Alerting"]
M_CLD --> CDN
WEB_CLD --> CDN
CDN --> LB2
LB2 --> APP1
LB2 --> APP2
APP1 --> DB_M
APP2 --> DB_M
DB_M --> DB_R
APP1 --> OBJ
APP2 --> OBJ
DB_M --> BKP
OBJ --> BKP
APP1 --> MON
APP2 --> MON
end
subgraph OnPrem["Option B — Serveur local On-Premise (Site Source Chimiques)"]
direction TB
M_LOC["Mobiles terrain Android"]
FAI["FAI principal fibre + secours 4G / 2e fibre"]
RT["Routeur entreprise Dual-WAN / bascule auto Ports 80/443 ouverts"]
SW["Switch interne"]
SRV["Serveur Linux local Ubuntu + Apache + MySQL + PHP"]
DSK[("Stockage local RAID recommandé")]
NAS[("NAS local Backups planifiés")]
WEB_LOC["Postes Back-Office internes"]
PWR["Onduleur / UPS à prévoir / déjà présent"]
M_LOC --> FAI
FAI --> RT
RT --> SW
SW --> SRV
WEB_LOC --> SW
SRV --> DSK
SRV --> NAS
PWR --> SRV
end
style CloudOpt fill:#f1f8ee,stroke:#38761d,stroke-width:2px
style OnPrem fill:#fff5f1,stroke:#cc4125,stroke-width:2px
Figure 8.1 — Topologies détaillées comparées : Cloud managé (multi-zones, redondance, sauvegardes externalisées) vs On-Premise renforcé (NAS local, onduleur, routeur Dual-WAN avec secours 4G ou seconde fibre).
Important : l'option On-Premise devient plus viable si Source Chimiques dispose déjà d'un NAS pour les sauvegardes, d'onduleurs (UPS) pour protéger le serveur, et d'un basculement internet entre une fibre principale et un secours 4G ou une seconde ligne fibre. Sans ces prérequis, le risque opérationnel reste élevé.
8.1 Risques majeurs d'un déploiement On-Premise non managé
1. Vulnérabilité de sécurité réseau. L'ouverture des ports entrants (80/443) sur le routeur
de l'entreprise pour permettre
aux mobiles externes de se connecter expose tout le LAN aux risques DDoS, intrusions et ransomwares — sans
équipe sécurité dédiée.
2. Absence d'environnement virtuel clé-en-main. Un serveur unique n'offre ni redondance, ni
snapshots automatiques,
ni load balancing. Un crash disque ou un composant défectueux entraîne plusieurs jours d'indisponibilité.
3. Dépendance à la connectivité internet. Si une seule ligne FAI est utilisée, une coupure bloque instantanément toute la
chaîne : les contrôleurs ne peuvent plus synchroniser, le management ne reçoit plus aucun rapport, la cartographie temps réel est
gelée. Ce risque peut être fortement réduit par un routeur Dual-WAN avec bascule automatique vers un modem 4G ou une seconde fibre.
4. IP dynamique & DNS. Les abonnements pro standards réinitialisent régulièrement
l'adresse IP publique.
Sans IP fixe (surcoût) ou DDNS bien configuré, les mobiles perdent l'URL de l'API.
5. Continuité électrique. En l'absence d'onduleur professionnel, toute micro-coupure peut arrêter la base de données et corrompre les données en cours d'écriture. Si le site est déjà équipé d'UPS / onduleurs, ce point devient maîtrisable, à condition de prévoir leur dimensionnement et leur maintenance.
6. Maintenance & mises à jour. OS, PHP, base de données, certificats SSL
(renouvellement tous les 3 mois),
pare-feu : la charge d'infogérance est lourde et nécessite des compétences sysadmin internes.
7. Sauvegardes locales fragiles. Une sauvegarde stockée sur le même site ne protège ni d'un vol, ni d'un incendie, ni d'un ransomware. En revanche, la présence d'un NAS permet de mettre en place des sauvegardes automatiques locales plus sérieuses ; il reste recommandé d'ajouter en complément une copie externalisée ou déconnectée.
Élastique : montée en charge automatique si l'équipe terrain s'agrandit.
Limite physique du serveur, nécessite achat matériel pour évoluer.
Coût initial
Variable selon la taille et les caractéristiques des serveurs, du stockage et du niveau de disponibilité demandé.
Investissement matériel + NAS + onduleur + réseau de secours + éventuellement IP fixe.
Coût récurrent
Mensuel et évolutif selon le sizing retenu : CPU, RAM, stockage médias, trafic, sauvegardes et monitoring.
Électricité, infogérance, contrat(s) FAI, renouvellement matériel, maintenance NAS et supervision.
Exposition réseau
Aucun port ouvert sur le LAN entreprise.
Ports 80/443 ouverts sur le routeur → surface d'attaque.
Recommandation
RECOMMANDÉ
À ÉVITER sans DSI interne
Recommandation finale. Pour une PME comme Source Chimiques, dont le cœur de métier n'est
pas l'infrastructure IT,
l'option Cloud managé reste la plus simple à exploiter et la plus sécurisante pour garantir la continuité opérationnelle de l'application
terrain, la sécurité des médias collectés et la disponibilité 24/7 du tableau de bord pour le management. L'option On-Premise reste possible si le client souhaite garder l'infrastructure sur site, mais elle doit alors être accompagnée d'un socle minimum : serveur Linux, NAS de sauvegarde, onduleurs, et bascule internet automatique.
9. Méthodologie Projet & Équipe
9.1 Approche Agile (Scrum)
Le projet sera conduit selon une méthodologie Agile / Scrum, organisée en sprints de 2 semaines
avec des livraisons régulières et démontrables. Cette approche permet au client de valider les fonctionnalités
au fur et à mesure et de demander des ajustements avant la fin du projet, plutôt qu'en bloc à la livraison finale.
Sprint planning en début de chaque sprint (objectifs + backlog priorisé).
Daily stand-up interne (15 min) côté équipe de développement.
Sprint review en fin de sprint avec démonstration au client et collecte du feedback.
Sprint retrospective pour améliorer le processus en continu.
9.2 Équipe projet mobilisée
Rôle
Mobilisation
Responsabilités
Chef de projet (Yassine FARIS)
Toute la durée
Pilotage global, interface client, planification, suivi qualité, gestion des risques.
Développeur Back-end (Laravel)
Phases 2 → 6
API REST, sécurité, base de données, intégrations, performance.
Pour garantir une visibilité totale au client sur l'avancement, nous mettrons en place un
outil de gestion de projet partagé (Jira ou Trello selon préférence du client).
Le client aura accès en lecture / commentaire à :
Le backlog complet avec priorités.
Le tableau Kanban en temps réel (À faire / En cours / En revue / Terminé).
Les burndown charts et l'avancement par sprint.
Un canal de communication direct (Slack, Teams ou WhatsApp Business).
Un rapport hebdomadaire consolidé envoyé par e-mail.
Le client peut donner son feedback à chaque étape clé (fin de sprint, jalon majeur) afin
d'ajuster le périmètre ou les priorités sans attendre la livraison finale.
10. Formation & Accompagnement
Une formation complète est prévue pour garantir une adoption rapide et efficace de la solution
par l'ensemble des profils utilisateurs.
Lecture des KPI, dashboards, cartographie, exports CSV/Excel/PDF.
Superviseur
Présentiel
½ journée
Suivi équipe, validation comptes-rendus, traitement des alertes GPS.
Contrôleurs terrain
Présentiel sur le terrain
1 journée
Prise en main mobile (FR + AR), mode offline, capture multimédia, synchronisation.
Livrables d'accompagnement inclus :
Guide utilisateur illustré par profil (PDF, FR + AR).
Guide administrateur technique.
Tutoriels vidéo intégrés dans l'application mobile.
Sessions de questions / réponses pendant le mois post-mise en production.
11. Planning Prévisionnel & Jalons
La durée totale estimée du projet est de 3 mois, organisée en 6 sprints de 2 semaines,
afin d'intégrer convenablement les cycles de développement, les tests, la recette terrain et les retours du client à chaque jalon important.
Phase
Période
Durée
Jalon / Livrable
Phase 1 — Cadrage & conception
Sprint 1
2 semaines
Validation des maquettes, du modèle de données et des questionnaires.
Phase 2 — Développement socle
Sprints 2 à 3
4 semaines
API Laravel, base de données, sécurité, structure back-office.
Phase 3 — Développement fonctionnel
Sprints 4 à 5
4 semaines
Back-office Angular, application mobile Android, offline, multimédia, exports.
Phase 4 — Recette, feedback, formation & mise en production
Sprint 6
2 semaines
Tests finaux, intégration des retours client, corrections, formation des utilisateurs, livraison et démarrage.
gantt
title Planning prévisionnel — Application Contrôle Terrain (3 mois)
dateFormat YYYY-MM-DD
axisFormat S%V
section Sprint 1
Cadrage & maquettes :a1, 2026-06-01, 2w
section Sprints 2-3
API Laravel & socle technique :a2, after a1, 4w
section Sprints 4-5
Back-office + mobile Android :a3, after a2, 4w
section Sprint 6
Recette, feedback & livraison :a4, after a3, 2w
Figure 11.1 — Diagramme de Gantt prévisionnel du projet sur 3 mois.
12. Plan Tarifaire
La proposition financière pour la réalisation complète du projet, incluant la conception, le développement,
la mise en production, la formation et l'accompagnement initial, est fixée à :
Total projet :180 000 DHS HT
Le montant de 180 000 DHS HTn'inclut pas l'abonnement d'hébergement Cloud récurrent, ni les coûts d'infrastructure mensuels associés au serveur, au stockage, aux sauvegardes et à la supervision.
Toute demande complémentaire en dehors du périmètre prévu devra faire l'objet d'un réajustement budgétaire. Cela concerne notamment une version iOS, des intégrations ERP tierces, des connecteurs spécifiques, des workflows additionnels, ou encore une exigence forte de compression des délais. Dans ce cas, l'offre devra être revue à un niveau de prix supérieur, en fonction de la charge additionnelle et du niveau d'engagement attendu.
Ce montant couvre donc l'intégralité du périmètre fonctionnel et technique décrit dans ce document, et uniquement ce périmètre.
En cas d'hébergement Cloud, le coût mensuel d'infrastructure dépendra du sizing réel retenu : nombre de serveurs Linux, CPU, mémoire RAM, capacité de stockage des médias, niveau de sauvegarde, trafic réseau et supervision souhaitée. Ce poste sera calibré définitivement au moment du déploiement selon la volumétrie réelle et le niveau de disponibilité attendu.
13. Conclusion
La stack Laravel + Angular + Ionic couvre l'intégralité des exigences exprimées dans le
cahier des charges initial :
multilinguisme FR/AR avec RTL natif, capture multimédia riche, géolocalisation, mode hors-ligne avec
synchronisation différée,
back-office hiérarchique avec KPI, cartographie et exports.
Compte tenu des risques sévères associés à un hébergement physique local non managé (réseau, électricité,
sauvegardes, IP),
nous recommandons formellement le déploiement sur Cloud managé sécurisé afin de garantir au
client une solution
robuste, scalable et opérationnelle 24/7.
— Fin du document — Application Mobile de Contrôle Terrain · Source Chimiques · Mai 2026 —