Files
Omika/docs/analyse-marketing-omika.md
2026-10-23 18:46:50 +02:00

480 lines
25 KiB
Markdown

# Omika — Analyse complète du projet (base pour le site web marketing)
> **Objet** : fournir une compréhension profonde du code source du projet **Omika**
> pour concevoir un site web de vente de l'application. Ce document croise
> l'architecture, les fonctionnalités réelles implémentées, la stack technique,
> le modèle de données et les différenciateurs, avec — pour chaque point — la
> preuve dans le code.
>
> **Sources** : code source (`src/`), solution `Omika.slnx`, documentation
> (`docs/*.md`), maquette UX (`docs/maquetteOmika.html`), fichiers de projet.
>
> **Statut du produit au moment de l'analyse** : version `1.0.0`, socle
> fonctionnel **solide et très avancé côté serveur/API**, application mobile
> **offline-first en progression** (consultation complète + écriture
> Intervention + documents/photos + saisie des temps), enrichi d'un
> **centre de diagnostic** d'exploitation.
---
## 1. Résumé exécutif (pitch)
**Omika** est une application de **gestion des interventions terrain**
(field service management) destinée aux entreprises de dépannage, maintenance,
installation et travaux (CVC, plomberie, électricité, couverture, SAV, etc.).
Elle couvre tout le cycle : **clients → sites → dossiers → interventions →
rendez-vous/planning → suivi des temps → documents/photos → comptes rendus →
rapports → e-mails**, avec une application **mobile offline-first** (Android,
iOS) et une console **desktop** (Windows/macOS/Linux).
Points de vente majeurs :
- **Migration réussie d'un logiciel métier legacy** (WinDev « Batik », ~15 ans
d'existant) vers une **stack .NET moderne** sans casser la base de données
existante (HFSQL de PC SOFT) — c'est un argument de confiance fort.
- **Offline-first** : les techniciens travaillent sans réseau ; la
synchronisation est **fiable, idempotente et asynchrone**.
- **Multi-plateforme** : une seule base de code (Avalonia) pour Android, iOS et
desktop.
- **Monétisation intégrée** : activation par **licence**, verrouillage par
appareil, jetons signés — le produit est prêt à être vendu.
- **Exploitabilité** : un **centre de diagnostic** + télémétrie OpenTelemetry
pour le support et l'exploitation.
---
## 2. Qu'est-ce qu'Omika ? (positionnement produit)
| Élément | Valeur |
|---|---|
| **Nom** | Omika |
| **Slogan / positionnement** | « Interventions terrain » (maquette `docs/maquetteOmika.html`) |
| **Catégorie** | Gestion d'interventions / Field Service Management / CRM terrain |
| **Usage** | Suivi des interventions techniques chez les clients, du RDV au rapport |
| **Public cible** | Sociétés de services techniques (artisans, PME, groupes) |
| **Éditeur historique** | Applilogik (URLs de licence `*.applilogik.fr`) |
| **Ancêtre** | Batik / Isis_BO (WinDev), décliné pour plusieurs clients (SLAMM, Bouvard, Artisans Partenaires, Batigest) |
Le cœur métier : **l'intervention** est l'agrégat central. Autour gravitent les
**clients**, **contacts**, **sites/lieux**, **dossiers** (groupes
d'interventions), **rendez-vous** (planning individuel et d'équipe), **suivi des
temps**, **documents/photos**, **comptes rendus**, **rapports** (modèles
personnalisables), **e-mails** (modèles + SMTP), **collaborateurs/équipes**,
**rôles et droits d'accès**, et **paramètres métier** configurables.
---
## 3. Historique et contexte : du WinDev au .NET
Le projet est une **réécriture** d'un logiciel historique WinDev :
| | Génération 1 (legacy) | Génération 2 (ce dépôt) |
|---|---|---|
| Langage | WinDev (WLanguage) | C# / **.NET 10** |
| Base de données | HFSQL (PC SOFT) | HFSQL **inchangée** + SQLite (mobile) |
| Interface | Fenêtres WinDev | **Avalonia** (Desktop / Android / iOS) |
| Web service | `Batik_WS_Com_Mob`, `Batik_WS_Lic_Mob` | **Omika.Api** (ASP.NET Core) |
| Service de sync | `Omika_S_Comm_DEV` (WinDev) | **Omika.Worker** (.NET) |
Chiffres clés du legacy rétro-ingénieré (source : `docs/ESTIMATION_EFFORT_DEVELOPPEMENT.md`) :
- ~**600 000 lignes** de corpus legacy analysé (2 générations WinDev + 3 web services) ;
- ~**1 600 procédures**, **140 fenêtres**, ~**380 classes**, **46 états d'impression** ;
- schéma HFSQL : **48 → 58 tables**, **720 rubriques** mappées.
**Règle d'or du projet** : la base HFSQL existante **n'est jamais modifiée**
(aucune table/collonne ajoutée ou supprimée). Le nouveau code lit/écrit dans les
tables existantes. Cela garantit une **cohabitation sans risque** avec
l'ancien système et une bascule progressive.
> **Argument commercial** : « On remplace votre vieux logiciel sans toucher à
> vos données. » C'est rare et rassurant pour un acheteur qui a 15 ans
> d'historique.
---
## 4. Cible, personas et cas d'usage
### 4.1 Personas
1. **Le technicien / intervenant terrain** (mobile) : consulte son agenda du
jour, ouvre la fiche intervention, prend des photos, ajoute des documents,
saisit son temps, consulte le client/site/contact, travaille **sans réseau**.
2. **Le chef d'équipe / planificateur** (desktop) : planifie les rendez-vous,
suit l'agenda de l'équipe, affecte les collaborateurs.
3. **Le back-office / administratif** : gère clients, dossiers, documents,
modèles de rapports et d'e-mails, paramètres métier.
4. **L'exploitant / le support** : utilise le centre de diagnostic
(`Diagnostics.Web`) pour suivre la santé du parc, les erreurs, la
synchronisation, la télémétrie.
### 4.2 Cas d'usage couverts (de bout en bout)
1. Activation de licence → session sécurisée → shell.
2. Consultation de l'agenda (jour) et du détail d'un RDV.
3. Consultation/recherche/filtre des interventions (actif/archivé).
4. **Création / modification / archivage d'une intervention** (offline).
5. **Ajout de photos / documents** sur intervention (offline).
6. **Saisie du temps** (offline, rattachée à une intervention ou un RDV).
7. Génération de **rapports** (modèles Word/RTF → PDF) et **e-mails** (modèles
+ SMTP) — backend.
8. **Synchronisation** manuelle mobile ↔ serveur.
9. **Diagnostic** du parc et de la sync (support).
---
## 5. Inventaire fonctionnel (le cœur du marketing)
> État réel par module. Légende : ✅ opérationnel · 🟡 partiel/backend · ⬜ en projet.
### 5.1 Référentiels (données de base)
| Fonction | État | Preuve dans le code |
|---|---|---|
| **Clients** (fiche, liste, adresses) | ✅ API + 🟡 mobile (lecture) | `ClientService`, `ClientEndpoints`, `ClientDetailView` |
| **Contacts / personnes** (rôles, civilité, tel, e-mail) | ✅ API + 🟡 mobile (lecture) | `ContactService`, `ContactEndpoints`, `ContactDetailView` |
| **Sites / lieux** (adresse, GPS prévu) | ✅ API + 🟡 mobile (lecture) | `SiteService`, `SiteEndpoints`, `SiteDetailView` |
| **Sociétés** | ✅ | `Societe` (entité), `SocieteDto` |
| **Collaborateurs** | ✅ API + 🟡 mobile (lecture) | `CollaborateurService`, `CollaborateurEndpoints` |
| **Équipes** | ✅ API | `EquipeService`, `EquipeEndpoints` |
| **Rôles & droits d'accès** | ✅ | `Role`, `DroitAcces`, `Permission`, `MobileIdentityProvider` |
| **Paramètres métier** (types, statuts, civilités, catégories…) | ✅ | `ParametreMetier`, `ReferenceDataService`, `ReferenceDataEndpoints` |
### 5.2 Dossiers & interventions
| Fonction | État | Preuve |
|---|---|---|
| **Dossiers** (regroupent des interventions) | ✅ API + 🟡 mobile (lecture) | `DossierService`, `DossierEndpoints`, `DossierDetailView` |
| **Interventions** (création/modif/archive) | ✅ **bout en bout offline** | `InterventionService`, `InterventionSyncOperationHandler`, `InterventionEditView` |
| Recherche d'interventions | ✅ mobile (locale) + API | `MobileInterventionSearchService`, `InterventionsView` |
| Filtre actif / archivé | ✅ | `EstArchive` |
| Actions d'intervention | ✅ | `ActionIntervention`, `ActionInterventionDto` |
| États d'intervention | ✅ | `EtatIntervention`, `EtatInterventionDto` |
| Checklists | ✅ | `Checklist`, `ChecklistItem` |
| **Compte rendu** (signé électroniquement client + technicien, devis conforme, réserves) | 🟡 backend | `CompteRenduService`, `CompteRenduEndpoints` |
### 5.3 Planning & rendez-vous
| Fonction | État | Preuve |
|---|---|---|
| **Agenda du jour** (RDV) | ✅ mobile | `AgendaView`, `AgendaViewModel` |
| Navigation jour précédent/suivant | ✅ | `AgendaDayDisplayItem` |
| **Détail d'un RDV** | ✅ mobile (lecture) | `RendezVousDetailView` |
| **Agenda d'équipe** | 🟡 (maquette + API) | `AgendaEquipeView`, `RendezVousEndpoints` |
| CRUD rendez-vous | 🟡 backend (API) | `RendezVousService`, `CreateRendezVousRequest` |
| Participants / contacts d'un RDV | ✅ | `ParticipantRendezVous`, `RDV_Collaborateur`, `RDV_Contact` |
| Annulation (motifs) | ✅ modèle | `AnnulationRendezVous` |
### 5.4 Suivi des temps
| Fonction | État | Preuve |
|---|---|---|
| Consultation des temps | ✅ mobile (liste) | `SuiviTempsLocalService`, `SuiviTempsViewModel` |
| **Saisie de temps** (offline-first) | ✅ | `SuiviTempsCreateView`, `SuiviTempsCreateViewModel`, `SuiviTempsSyncOperationHandler` |
| Référentiel « type de temps » local | ✅ | `IParametreMetierLocalService.GetTypeTempsAsync()` |
| Validation métier (champ `Valide`) | 🟡 backend | `SuiviTempsService` |
### 5.5 Documents & photos
| Fonction | État | Preuve |
|---|---|---|
| Liste des documents d'une intervention | ✅ mobile | `InterventionDocumentsView` |
| **Ajout photo/document (offline)** | ✅ | `OutboxService` + `DocumentGuid` + `SyncEngine` |
| Téléchargement à la demande | ✅ | `MobileDocumentService`, `GET /api/documents/{guid}` |
| Ouverture offline (cache) | ✅ | `DocumentCacheService` |
| Visionneuse photo | ✅ | `PhotoViewerView` |
| Éditeur d'image | ✅ | `ImageEditorView` (SkiaSharp) |
| Optimisation des photos | ✅ | `PhotoOptimizationSettings`, SkiaSharp |
| Lecture EXIF (date réelle de prise de vue) | ✅ | `MetadataExtractor` |
### 5.6 Rapports & e-mails (backend)
| Fonction | État | Preuve |
|---|---|---|
| **Modèles de rapport** (Word/RTF) | ✅ | `ModeleRapportService`, `ModeleRapport` |
| **Modèles d'e-mail** | ✅ | `ModeleMailService`, `ModeleMail` |
| Mots-clés / rubriques de substitution | ✅ | `MotClefService`, `RubriqueSubstitutionEngine` |
| **Génération DOCX → PDF** | ✅ | `DocumentGenerationService`, `RapportPdfService`, `DocumentFormat.OpenXml` |
| Pré-remplissage des champs depuis la base | ✅ | `RapportChampService`, `RapportChampEndpoints` |
| **Envoi d'e-mail (SMTP)** | ✅ | `EmailCreationService`, `MailKitEmailSender` (MailKit) |
| Images inline dans les e-mails | ✅ | `EmailImageInliner`, `EmailDocxRenderer` |
| Conversion RTF/HTML | ✅ | `RtfPlainText`, `DocxHtmlConverter` |
| Écrans mobile rapport/e-mail | ⬜ (maquette uniquement) | `RapportChampsView`, `NouveauEmailView` (partiels) |
### 5.7 Synchronisation & hors-ligne
| Fonction | État | Preuve |
|---|---|---|
| **Mode hors-ligne** (SQLite locale) | ✅ | `omika.db`, `LocalDatabase`, `SnapshotApplier` |
| **Moteur de synchronisation** | ✅ | `SyncEngine` |
| **Outbox** (file des changements) | ✅ | `OutboxService`, `OutboxRepository` |
| **Idempotence** (pas de doublon) | ✅ | `OperationId` + `ISyncOperationStatusStore` |
| **Retry** (max 30, rejet terminal) | ✅ | `SyncProcessor`, `MaxRetryCount=30` |
| **Snapshot** agenda serveur → mobile (RDV ±14 j + interventions/contacts liés) | ✅ | `MobileSnapshotService`, `MobileSnapshotResponse` |
| Chargement « à la demande » des fiches (client/site/dossier/document/temps) | ✅ | `MobileInterventionSearchService`, endpoints `/api/*` |
| Réconciliation d'identités (GUID mobile ↔ PK) | ✅ | `MobileIdentityReconciliationService`, `MobileEntityIdentityResolver` |
| État de sync affiché (Pending/Rejected) | ✅ | `SynchronisationView`, `PendingSyncItem` |
### 5.8 Licence & sécurité
| Fonction | État | Preuve |
|---|---|---|
| **Activation par licence** (code client + n° licence) | ✅ | `LicenseService`, `LicenseActivationView` |
| **Inscription par QR code signé** (RSA-SHA256, `kid`) | ✅ | `EnrollmentQrCodec` |
| Validation / révocation | ✅ | `POST /api/license/validate` |
| **Verrouillage par appareil** | ✅ | `AssignDeviceAsync` (`LI_IDMobile`) |
| **Jeton signé** HMAC-SHA256 (stateless, 2 segments) | ✅ | `TokenService`, `MobileAuthMiddleware` |
| Codes d'erreur métier | ✅ | `LicenseErrorCodes` (14 codes E0xxx/E1xxx/E2xxx/E3xxx) |
| Stockage sécurisé du token (Keystore/Keychain/secure storage) | ✅ | `PlatformSecureTokenStore` |
| Authentification back-office (PBKDF2-SHA256) | ✅ | `DiagnosticPasswordHasher`, `BackOfficeAuthEndpoints` |
### 5.9 Exploitation & support (Diagnostic Center)
| Fonction | État | Preuve |
|---|---|---|
| **Portail web d'exploitation** | ✅ | `Omika.Diagnostics.Web` (Dashboard, Diagnostics, Erreurs, Traces, Synchronisation, Telemetry, Parc, Versions, Référentiel) |
| Gestion des clients diagnostics (serveurs) | ✅ | `ClientCode` + `ApiKey` |
| **Gestion des utilisateurs** (rôles Support/Admin) | ✅ | `DiagnosticUserAuthenticator`, page `/Users` |
| Base PostgreSQL dédiée | ✅ | `omika_diagnostics` (Npgsql) |
| **Télémétrie** (traces/logs/métriques) | ✅ | `Omika.Observability.External` (OpenTelemetry, OTLP) |
| **Outbox de diagnostic** (buffering hors-ligne) | ✅ | `Omika.Core/Observability/Outbox` |
| Forwarding vers le centre central | ✅ | `Omika.Core/Observability/Forwarding` |
---
## 6. Architecture technique
### 6.1 Stack
| Couche | Technologie |
|---|---|
| Langage / runtime | C# 13 / **.NET 10** |
| UI | **Avalonia 12.1.1** (Fluent, Inter, Skia) |
| MVVM | CommunityToolkit.Mvvm 8.4.2 |
| API | **ASP.NET Core** (Minimal API) + OpenAPI |
| Service de fond | `Microsoft.NET.Sdk.Worker` (BackgroundService) |
| Base serveur | **HFSQL (PC SOFT)** via **ODBC** + **OLE DB** |
| Base mobile | **SQLite** (Microsoft.Data.Sqlite) |
| Base support | **PostgreSQL** (Npgsql) |
| E-mail | **MailKit** (SMTP) |
| Documents | **DocumentFormat.OpenXml** (DOCX), conversion PDF |
| Images | **SkiaSharp** + **MetadataExtractor** (EXIF) |
| QR code | **QRCoder** + **ZXing.Net** (scan caméra Android) |
| Cartographie | **Mapsui** (composant carte) |
| Observabilité | **OpenTelemetry** (OTLP HTTP/protobuf) |
| Tests | **xUnit** (2 038 tests) |
### 6.2 Les projets (solution `Omika.slnx`)
| Projet | Rôle |
|---|---|
| `Omika.Core` | Cœur métier : domaine, DTO, services, sync mobile, observabilité |
| `Omika.Data` | Accès HFSQL : connexions (ODBC/OLE DB), repositories adaptatifs, modèles physiques, migration |
| `Omika.Api` | Web service REST (97 endpoints) |
| `Omika.Worker` | Service de synchronisation (arrière-plan) |
| `Omika.App` | UI Avalonia partagée (29 écrans) |
| `Omika.App.Desktop` | Hôte Windows/macOS/Linux |
| `Omika.App.Android` | Hôte Android |
| `Omika.App.iOS` | Hôte iOS |
| `Omika.App.Local` | Couche offline-first (SQLite + SyncEngine) |
| `Omika.Observability.External` | OpenTelemetry |
| `Omika.Diagnostics.*` | Centre de diagnostic (Core/Data/Api/Web/Worker) |
| `Omika.Tests`, `Omika.Diagnostics.Tests` | Tests xUnit |
| `tools/*` | Sondes de diagnostic HFSQL, générateur de modèles |
### 6.3 Topologie des flux
```
Mobile (Android/iOS) ──HTTP JSON + Bearer──► Omika.Api ──► écrit TOSRV (HFSQL Service)
│
Desktop (Windows) ───── accès HFSQL direct ─────────────────► │
▼
Omika.Worker (boucle)
TOSRV → MobReception → handler
→ MobLog (résultat terminal)
│
Omika.Core (métier) + Omika.Data (HFSQL)
```
- Le **mobile** ne touche **jamais** HFSQL directement (toujours via l'API).
- Le **desktop** accède à HFSQL en direct (comportement historique conservé).
- L'API **reçoit** les opérations ; le Worker les **applique** de façon asynchrone.
### 6.4 Bases de données
| Base HFSQL | Rôle |
|---|---|
| Business / WebService | Données métier (Batik ou Omika) |
| Service | Table `TOSRV` (file d'entrée des opérations) |
| WebService | Tables `MobReception` + `MobLog` (file de travail + journal) |
| Licence | Tables `ClientBase`, `Licence`, `LicenceHisto` |
| PostgreSQL `omika_diagnostics` | Données du centre de diagnostic |
| SQLite `omika.db` | Copie locale offline sur mobile (29-30 tables) |
### 6.5 Compatibilité bi-schéma Batik ↔ Omika
Un mécanisme central (`ApplicationRuntimeContext`, `SchemaDetection`,
repositories **adaptatifs** `Adaptive*`) permet de lire **indifféremment une
base Batik (ancienne) ou Omika (nouvelle)**. Les modèles physiques sont
auto-générés depuis un dictionnaire machine-readable
(`docs/schema-compatibilite-batik-omika.json`) : 48 tables Batik + 58 tables
Omika, 720 couples table-rubrique, avec gestion des champs « zombie » et des
GUID. **Le mobile ne sait jamais quelle génération de base il utilise.**
---
## 7. Différenciateurs (arguments de vente)
1. **Migration sans douleur du legacy** : on conserve la base HFSQL et les
données ; bascule progressive, double schéma Batik/Omika géré en interne.
2. **Offline-first robuste** : SQLite local + Outbox + synchronisation
idempotente avec retry — les techniciens travaillent partout (sous-sol,
zone blanche, chantier).
3. **Fiabilité de la sync** : GUID de transaction, réconciliation d'identités,
pas de doublon, rejet terminal propre (pas d'écrasement silencieux).
4. **Multi-plateforme, un seul code** : Android, iOS, desktop avec Avalonia.
5. **Monétisation native** : licence par appareil, activation sécurisée, jetons
signés — le produit est « vendable » tel quel.
6. **Rapports & e-mails intégrés** : modèles personnalisables, DOCX→PDF, SMTP
avec images inline — sans outil externe.
7. **Sécurité sérieuse** : token HMAC-SHA256, PBKDF2-SHA256, secure storage,
aucune exposition des PK/chemins serveur au mobile.
8. **Exploitabilité** : centre de diagnostic + télémétrie OpenTelemetry pour un
support professionnel (orientation SaaS).
9. **Qualité** : ≈ 3 900 tests automatisés, 0 `TODO`/`NotImplementedException`,
documentation abondante.
10. **Confidentialité par conception** : télémétrie pseudonymisée
(HMAC-SHA256, tenant-scoped), liste de données interdites, whitelist —
compatible RGPD et multi-tenant.
---
## 8. État d'avancement réel (honnêteté marketing)
Il est essentiel de **ne pas survendre**. État constaté dans le code :
- **Serveur / API** : très avancé — 97 endpoints couvrant la quasi-totalité du
périmètre métier (clients, contacts, sites, dossiers, interventions, RDV,
collaborateurs, équipes, suivi des temps, comptes rendus, documents, rapports,
e-mails, référence, licence, sync, bootstrap, back-office).
- **Mobile (consultation)** : complet — agenda, interventions, dossiers,
clients, sites, contacts, collaborateurs, documents/photos. Le périmètre de
travail est en **offline** (snapshot agenda ±14 j) ; les autres référentiels
sont chargés « à la demande » puis conservés en cache local.
- **Mobile (écriture)** : opérationnel pour **Intervention** (create/edit/
archive), **documents/photos**, **suivi des temps** (création). Les écritures
des autres entités (RDV, dossier, client, site, collaborateur, notes,
compte rendu) sont **backend-ready** mais pas encore branchées à l'UI mobile.
- **Handlers de sync** : `Intervention` (create/update/archive),
`SuiviTemps` (create), `RendezVous` (validation de temps / annulation),
`NoteInterne`/`NoteAdministrative` (create) sont branchés ; les autres types
d'entité (Client, Contact, Site, Dossier, Document…) passent par un fallback
propre (`NO_HANDLER` → rejet explicite).
- **Licence serveur** : logique complète + tests verts, mais la **base Licence
réelle** (topologie de déploiement) est un point de vigilance documenté
(« STOP » dans `docs/LOT_SERVEUR_LICENCE.md`).
→ Le site doit présenter Omika comme une **plateforme moderne en cours de
finalisation**, avec un cœur serveur solide et une expérience mobile offline
déjà démontrable (démo de l'agenda, des interventions, des photos, de la
saisie de temps et de la synchronisation).
---
## 9. Chiffres clés (crédibilité)
| Indicateur | Valeur |
|---|---|
| Projets | 13 (+ suite Diagnostics) |
| Écrans applicatifs | ≈ 37 vues Avalonia (29 écrans distincts) |
| ViewModels / vues XAML | 42 / 51 |
| Endpoints HTTP | ≈ 97 (plus de 90 routes desktop + mobile) |
| Tables HFSQL manipulées | 65 (118 classes de modèles) |
| Couples table-rubrique mappés | 720 |
| Repositories (Batik + Omika + adaptatifs) | 19 + 20 + 22 |
| Instructions SQL brutes | ~500 |
| Tests automatisés | **≈ 3 900** (Omika.Tests ≈ 3 370 + Diagnostics.Tests ≈ 536) |
| Lignes de code (production) | ~85 200 C# + ~7 700 XAML |
| Lignes de test | ~43 800 |
| Corpus legacy analysé | ~600 000 lignes |
| Effort humain équivalent estimé | ~800 jours-homme (3-4 ans / 1 dev) |
| Version | 1.0.0 |
---
## 10. Assets disponibles pour le site web
Le dépôt contient déjà des éléments directement réutilisables :
- **Logos** (`src/Logos/`) :
- `Logo_principal.svg`
- `Logo_mobile.svg`
- `Logo_secondaire_blanc.svg`
- `Logo_secondaire_violet.svg`
- **Maquette UX complète** : `docs/maquetteOmika.html` — design system complet
(couleurs, composants, thèmes clair/sombre, responsive mobile/desktop), 593
lignes. Elle montre les écrans réels du produit (agenda, équipe,
interventions, dossiers, clients, lieux, rapports, e-mails, paramètres).
- **Couleur de marque** : indigo `#4f46e5` (dégradé `#4f46e5 → #3730a3`), avec
thème sombre `#0c1320` (extrait de la maquette).
- **Marque** : monogramme « OM », accroche « Interventions terrain ».
---
## 11. Angles et messages marketing suggérés
1. **« Votre ancien logiciel, enfin moderne »** — le remplacement de WinDev sans
perdre les données (pérenne pour les acheteurs déjà équipés en Batik).
2. **« Vos techniciens travaillent partout »** — offline-first, photos,
documents, temps saisis sur le terrain, synchronisation automatique.
3. **« Du RDV au rapport, sans ressaisie »** — cycle complet intégré
(planning → intervention → temps → compte rendu → rapport → e-mail).
4. **« Un produit vendable et sécurisé »** — licence par appareil, activation,
rôles et droits, jetons signés.
5. **« Exploitable et supportable »** — centre de diagnostic, télémétrie,
monitoring (orientation SaaS).
6. **« Du sérieux industriel »** — .NET 10, tests automatisés, compatibilité
double schéma, documentation.
### Proposition de pages pour le site
- **Accueil** : pitch + hero (maquette/logo) + bénéfices clés.
- **Fonctionnalités** : agenda/planning, interventions, documents/photos,
suivi des temps, rapports & e-mails, synchronisation.
- **Mobile & offline** : démonstration du mode hors-ligne.
- **Sécurité & licence** : activation, rôles, jetons.
- **Exploitation / SaaS** : centre de diagnostic.
- **À propos / migration** : l'histoire Batik → Omika, compatibilité des
données.
- **Tarifs / Contact** (à définir avec l'éditeur).
---
## 12. Limites et points de vigilance (à connaître avant de rédiger)
- Le produit est en **version 1.0.0**, encore en finalisation sur la partie
écriture mobile de certaines entités (RDV, dossier, client, site, notes,
compte rendu : backend prêt, UI mobile à brancher).
- La **migration Batik → Omika** (`MigrationService`) est un **squelette** :
la conversion clés numériques → clés textuelles et le suivi
`ElementModifie`/`ElementSupprime` sont prévus mais pas encore opérationnels.
- La **base de licence réelle** doit être validée sur la topologie de
production (documenté, pas bloquant pour le code).
- La **suppression physique** (DELETE) est volontairement refusée au profit de
l'**archivage** (traçabilité) — c'est aussi un argument (aucune perte).
- **Accès HFSQL via OLE DB** : Windows-only, dépendant des drivers PC SOFT
installés sur l'hôte serveur.
- La conversion **DOCX → PDF** repose sur **LibreOffice headless**
(`soffice --headless`) : prérequis de déploiement serveur à documenter.
- **Auth à deux vitesses** : les routes desktop/back-office s'appuient sur le
réseau/hébergement (reverse proxy) plutôt que sur un rejet 401 par endpoint ;
seules les routes `/api/*` vérifient le jeton.
- Durcissements à traiter avant une production large : base SQLite locale non
chiffrée, jeton Bearer en clair (desktop), pas de rate-limiting sur les
endpoints publics de licence (voir `docs/ESTIMATION_EFFORT_DEVELOPPEMENT.md`).
---
*Document généré à partir de l'analyse du code source (`src/`), de la solution
et de la documentation du dépôt `D:\Avalonia\Omika`.*