Statut d'implémentation

Dernière mise à jour : 18 décembre 2025

Configuration base de données - ✅ TERMINÉ

  • ✅ Table licence_regio créée (13 régions)
  • ✅ Table licence_products créée (6 produits d'exemple)
  • ✅ Table orders étendue (6 nouvelles colonnes)
  • ✅ Vue vw_active_licences créée
  • ✅ 3 procédures stockées créées
  • ✅ Requêtes de test disponibles

Scripts : /FRA/database/licence_system_setup.sql
/FRA/database/licence_system_test_queries.sql

Prochaines étapes

  • ⏳ Page de gestion du catalogue de produits
  • ⏳ Adapter le flux d'inscription/commande
  • ⏳ Contrôle des droits dans les pages de recherche
  • ⏳ Tableau de bord du compte (mes licences)
  • ⏳ Implémentation des limites de téléchargement

Structure de base de données implémentée

Statut : ✅ Entièrement implémenté le 18 décembre 2025

Approche : Système simplifié avec réutilisation de la table orders existante

1. licence_regio (NIEUW)

CREATE TABLE [dbo].[licence_regio]( [regioID] INT IDENTITY(1,1) PRIMARY KEY, [regio_code] VARCHAR(20) UNIQUE NOT NULL, [regioNL] NVARCHAR(100) NOT NULL, [regioFR] NVARCHAR(100) NOT NULL, [regioEN] NVARCHAR(100) NULL, [website] VARCHAR(100) NOT NULL DEFAULT 'syndi.be', [active] BIT NOT NULL DEFAULT 1, [sort_order] INT NOT NULL DEFAULT 0, [created_date] DATETIME NOT NULL DEFAULT GETDATE(), [modified_date] DATETIME NOT NULL DEFAULT GETDATE() )

Données d'exemple (13 régions) :

  • BE - België / Belgique
  • ANT - Antwerpen / Anvers
  • LIM - Limburg / Limbourg
  • OVL - Oost-Vlaanderen / Flandre-Orientale
  • WVL - West-Vlaanderen / Flandre-Occidentale
  • VBR - Vlaams-Brabant / Brabant flamand
  • LUI - Luik / Liège
  • LUX - Luxemburg / Luxembourg
  • NAM - Namen / Namur
  • HEN - Henegouwen / Hainaut
  • WBR - Waals-Brabant / Brabant wallon
  • BHG - Région de Bruxelles-Capitale
  • NL - Pays-Bas (inactif - futur)

2. licence_products (NIEUW)

CREATE TABLE [dbo].[licence_products]( [listID] INT IDENTITY(1,1) PRIMARY KEY, [product_code] VARCHAR(50) UNIQUE NOT NULL, [licence_type] VARCHAR(20) NOT NULL, -- 'master', 'executive', 'excel' [regioID] INT NULL, -- FK, NULL = all regions [duration_months] INT NOT NULL, [titelNL] NVARCHAR(200) NOT NULL, [titelFR] NVARCHAR(200) NOT NULL, [beschrijvingNL] NVARCHAR(MAX) NULL, [beschrijvingFR] NVARCHAR(MAX) NULL, [price_excl_btw] MONEY NOT NULL, [promo_price_excl_btw] MONEY NULL, [max_downloads] INT NULL, -- NULL = unlimited [active] BIT NOT NULL DEFAULT 1, [visible] BIT NOT NULL DEFAULT 1, [created_date] DATETIME NOT NULL DEFAULT GETDATE(), [modified_date] DATETIME NOT NULL DEFAULT GETDATE(), CONSTRAINT [FK_licence_products_regio] FOREIGN KEY ([regioID]) REFERENCES [dbo].[licence_regio]([regioID]) )

Produits d'exemple (6 produits) :

  • MASTER-BE-12 - Master Belgique 1 an (€1299)
  • MASTER-BE-24 - Master Belgique 2 ans (€2468, promo €2340)
  • MASTER-ANT-12 - Master Anvers 1 an (€499)
  • EXEC-LUI-12 - Executive Liège 1 an (€299)
  • EXCEL-BE-12 - Téléchargements Excel Belgique 1 an (€399, max 100 téléchargements)
  • EXCEL-BE-24 - Téléchargements Excel Belgique 2 ans (€699, illimité)

3. orders (EXISTANT - ÉTENDU)

-- Nouvelles colonnes ajoutées à la table orders existante : ALTER TABLE [dbo].[orders] ADD [listID] INT NULL ALTER TABLE [dbo].[orders] ADD [regioID] INT NULL ALTER TABLE [dbo].[orders] ADD [duration_months] INT NULL ALTER TABLE [dbo].[orders] ADD [start_date] DATE NULL ALTER TABLE [dbo].[orders] ADD [download_count] INT NOT NULL DEFAULT 0 ALTER TABLE [dbo].[orders] ADD [max_downloads] INT NULL -- Foreign keys: CONSTRAINT [FK_orders_licence_products] FOREIGN KEY ([listID]) CONSTRAINT [FK_orders_licence_regio] FOREIGN KEY ([regioID])

Champs existants réutilisés :

  • orderID - Primary key
  • clientID - Lien vers le client
  • invoiceID - NULL = non payé, NOT NULL = payé
  • subscription - Type de licence ('master', 'executive', 'excel')
  • expirationdate - Date de fin (calculée : start_date + duration_months)
  • VATpct - Pourcentage de TVA (0 ou 21)
  • payment - Statut de paiement ('openstaand', 'mollie', 'factuur')
  • total - Montant total TTC

4. Outils

View: vw_active_licences

Vue d'ensemble de toutes les licences actives avec calcul du statut.

Procédures stockées :

  • sp_check_licence_access - Vérifier si le client a accès à une région
  • sp_get_client_licences - Récupérer toutes les licences d'un client
  • sp_increment_download - Incrémenter le compteur de téléchargements avec contrôle de limite

Décisions importantes

Pourquoi une approche simplifiée ?

  • Compatible rétro : Les commandes existantes et le système de facturation continuent à fonctionner
  • Pas de migration de données : Les anciennes commandes restent dans la même table
  • Petit volume : ~100 commandes/an, pas besoin d'overkill
  • Maintenance simple : Seulement 2 nouvelles tables + 6 colonnes

Logique des licences actives

-- Une licence est active si : WHERE invoiceID IS NOT NULL -- Payé AND expirationdate >= GETDATE() -- Non expiré AND listID IS NOT NULL -- Nouvelle commande de licence -- En cas de licences en doublon : prendre celle qui expire le plus tard ORDER BY expirationdate DESC

Notes d'implémentation (18 décembre 2025)

Détails importants d'implémentation

Database: kbo (SQL Server)

Scripts exécutés : licence_system_setup.sql

Statut : Totalement opérationnel et testé

Modifications de la table orders existante :
  • listID INT NULL - Lien vers le catalogue de produits (licence_products)
  • regioID INT NULL - Lien vers la région (licence_regio)
  • duration_months INT NULL - Durée en mois (12, 24, 36, 60)
  • start_date DATE NULL - Date de début de la licence (par défaut = orderdate)
  • download_count INT DEFAULT 0 - Compteur pour les téléchargements Excel
  • max_downloads INT NULL - Limite de téléchargements (NULL = illimité)

Pourquoi des valeurs NULL ? Les anciennes commandes (avant le système de licences) n'ont pas ces champs. Cela rend le système compatible rétro.

Champs existants réutilisés :
  • subscription VARCHAR(50) - Utilisé pour licence_type ('master', 'executive', 'excel')
  • invoiceID INT - NULL = non payé, NOT NULL = payé et actif
  • expirationdate DATETIME - Calculé comme start_date + duration_months
  • VATpct INT - Toujours 0 ou 21 (B2B déterminé lors de la création de la commande)
  • payment VARCHAR(50) - 'openstaand', 'mollie', 'factuur', 'bank'

Référence rapide : requêtes fréquemment utilisées

1. Vérifier si le client a accès à une région

-- Via procédure stockée (recommandé) EXEC sp_check_licence_access @clientID = 123, @regioID = 2; -- ANT -- Direct query SELECT TOP 1 1 FROM orders WHERE clientID = @clientID AND regioID = @regioID AND subscription IN ('master', 'executive') AND invoiceID IS NOT NULL AND expirationdate >= GETDATE() ORDER BY expirationdate DESC;

2. Récupérer toutes les licences actives d'un client

-- Via stored procedure EXEC sp_get_client_licences @clientID = 123; -- Via view SELECT * FROM vw_active_licences WHERE clientID = 123 AND status = 'active' ORDER BY end_date DESC;

3. Vérifier et incrémenter la limite de téléchargements

DECLARE @errorMsg NVARCHAR(500); EXEC sp_increment_download @orderID = 456, @errorMessage = @errorMsg OUTPUT; IF @errorMsg IS NOT NULL PRINT 'Error: ' + @errorMsg; ELSE PRINT 'Téléchargement autorisé';

4. Créer une nouvelle commande (exemple PHP)

// Récupérer le produit depuis le catalogue $sql = "SELECT * FROM licence_products WHERE product_code = ?"; $stmt = sqlsrv_query($conn, $sql, ['MASTER-ANT-12']); $product = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); // Calculer les dates $startDate = date('Y-m-d'); $durationMonths = $product['duration_months']; $endDate = date('Y-m-d', strtotime("+{$durationMonths} months")); // Déterminer la TVA (0 à l'étranger, 21 pour la Belgique) $vatPct = validateKBO($vatNumber) ? 21 : 0; $total = $product['price_excl_btw'] * (1 + $vatPct/100); // Insertion de la commande $sql = "INSERT INTO orders ( userID, clientID, listID, regioID, subscription, duration_months, start_date, expirationdate, orderdate, VATpct, total, product, payment, max_downloads, quantiy, credits ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, GETDATE(), ?, ?, ?, 'openstaand', ?, 1, 0)"; $params = [ $userID, // ID de l'utilisateur qui commande $clientID, $product['listID'], $product['regioID'], $product['licence_type'], $durationMonths, $startDate, $endDate, $vatPct, $total, $product['titelNL'], $product['max_downloads'] ]; sqlsrv_query($conn, $sql, $params);

Gestion des produits

Ajouter un nouveau produit

INSERT INTO licence_products ( product_code, licence_type, regioID, duration_months, titelNL, titelFR, beschrijvingNL, beschrijvingFR, price_excl_btw, promo_price_excl_btw, max_downloads ) VALUES ( 'MASTER-OVL-12', -- Code unique 'master', -- Type 4, -- Flandre-Orientale (depuis licence_regio) 12, -- 1 an 'Master Flandre-Orientale 1 an', 'Master Flandre-Orientale 1 an', 'Accès complet à toutes les ACP...', 'Accès complet à toutes les ACP...', 499.00, -- Prix HT NULL, -- Pas de promo NULL -- Téléchargements illimités );

Modifier un prix

UPDATE licence_products SET price_excl_btw = 549.00, promo_price_excl_btw = 499.00, modified_date = GETDATE() WHERE product_code = 'MASTER-ANT-12';

Désactiver un produit (ne pas supprimer !)

UPDATE licence_products SET active = 0, visible = 0 WHERE product_code = 'OLD-PRODUCT-12';

Dépannage & questions fréquentes

Q : Les anciennes commandes ne fonctionnent plus ?

R : Les anciennes commandes (avant le système de licences) ont listID = NULL. Vérifiez toujours :

WHERE (listID IS NOT NULL OR subscription IS NOT NULL)

Q : Le client a une licence en double pour la même région ?

R : Prenez toujours celle qui expire le plus tard avec ORDER BY expirationdate DESC. Les procédures stockées le font automatiquement.

Q : La limite de téléchargement ne fonctionne pas ?

R : Vérifiez que max_downloads est enregistré lors de la création de la commande (snapshot du produit). NULL = illimité.

Q : Le calcul de la TVA n'est pas correct ?

R : La TVA est déterminée lors de la création de la commande (pas au paiement). B2B étranger = 0%, B2B belge = 21%. Vérifiez la validation KBO.

Q : Comment renouveler une licence ?

R : Créez une nouvelle commande avec start_date = ancienne expirationdate. Les deux commandes restent dans la table, la plus longue prévaut.

Q : Puis-je supprimer des produits ?

R : NON ! Ne jamais supprimer (des commandes existantes y font référence). Utilisez active=0 et visible=0 au lieu de DELETE.

Checklist de tests

Avant mise en production :

  • ☐ Tester la création de commande pour chaque type de produit
  • ☐ Tester le traitement des paiements (mise à jour invoiceID)
  • ☐ Tester le contrôle d'accès par région
  • ☐ Tester la limite de téléchargement (avec et sans limite)
  • ☐ Tester une licence expirée (expirationdate dans le passé)
  • ☐ Tester les licences en double (plusieurs pour la même région)
  • ☐ Tester le calcul de la TVA (0% et 21%)
  • ☐ Tester le multilinguisme (titres produits NL/FR)
  • ☐ Tester la compatibilité des anciennes commandes (listID = NULL)
  • ☐ Test de performance (requête 1000+ orders < 100ms)

Chemin de migration (futur)

Pour les clients existants avec l'ancien champ subscription :

-- Optionnel : convertir d'anciennes commandes vers le nouveau système -- À exécuter uniquement si vous souhaitez migrer les anciennes données ! UPDATE orders SET listID = ( SELECT TOP 1 listID FROM licence_products WHERE licence_type = orders.subscription AND duration_months = 12 ), regioID = (SELECT regioID FROM licence_regio WHERE regio_code = 'BE'), duration_months = 12, start_date = orderdate, download_count = 0 WHERE listID IS NULL AND subscription IN ('master', 'executive') AND invoiceID IS NOT NULL;

Avertissement : Testez d'abord ceci sur la base de données de développement !

Optimisation des performances

-- Index pour des requêtes rapides (à ajouter si nécessaire) CREATE NONCLUSTERED INDEX IX_orders_active_licences ON orders (clientID, invoiceID, expirationdate, listID) INCLUDE (subscription, regioID); CREATE NONCLUSTERED INDEX IX_orders_region_lookup ON orders (regioID, subscription, expirationdate) WHERE invoiceID IS NOT NULL AND listID IS NOT NULL; CREATE NONCLUSTERED INDEX IX_products_active ON licence_products (active, visible, licence_type) INCLUDE (product_code, titelNL, price_excl_btw);

1. Modèle conceptuel

D'un abonnement unique → un portefeuille multi-licences

Actuel : Client = 1 abonnement (Basic/Pro/Master/Executive) pour toute la Belgique ou 1 région

Nouveau : Client = portefeuille de licences avec différents types, régions et durées

Le nouveau système offre une flexibilité totale : un client peut avoir simultanément une licence Master pour Anvers avec une date de fin au 15/03/2026, une licence Executive pour Liège avec une date de fin au 01/09/2025, et une licence de téléchargement Excel pour toute la Belgique avec encore une autre date de fin.

2. Proposition de structure de base de données

A. Tables principales

clients (table members existante - adaptée)

  • Reste la table principale pour les données d'entreprise
  • Supprimer les champs : subscription, expirationdate, beperking
  • Conserver : company, coordonnées, identifiants de connexion, clientID

licenses (NOUVEAU - cœur du système)

Champs :
- licenseID (clé primaire)
- clientID (lien vers le client)
- license_type ('master', 'executive', 'excel_download')
- scope ('provincie_name', 'belgium', 'multi_province')
- province (province spécifique ou NULL pour toute la Belgique)
- start_date (date de début de la licence)
- end_date (date de fin de la licence)
- duration_years (1, 2, 3 ans)
- status ('active', 'expired', 'cancelled')
- auto_renew (booléen)
- purchase_date (date d'achat)
- price_paid (montant payé)
- discount_percentage (remise appliquée en cas de multi-annuel)

license_permissions (NOUVEAU - droits par licence)

Champs :
- licenseID (lien vers la licence)
- can_search_vme (Boolean)
- can_search_syndicus (Boolean)
- can_export_excel (Boolean)
- can_download_updates (Boolean - pour licences Excel)
- max_exports_per_month (entier ou NULL)
- max_search_results (entier ou NULL)

license_purchases (NOUVEAU - historique d'achat)

Champs :
- purchaseID (clé primaire)
- clientID (client)
- licenseID (licence créée)
- purchase_date (date)
- amount_paid (montant)
- payment_method ('mollie', 'invoice', 'bank')
- invoice_number (numéro de facture)
- transaction_id (identifiant de paiement externe)

3. Configuration produit

Types de licence

A. Licence MASTER

  • Disponible par province
  • Accès à toutes les ACP et aux syndics de cette province
  • Recherche et export illimités
  • Peut inclure des téléchargements Excel (optionnel)

B. Licence EXECUTIVE

  • Disponible par province
  • Droits plus limités que Master
  • Possibilité de limite d'exports par mois
  • Fonctionnalités de recherche de base

C. Licence TÉLÉCHARGEMENT EXCEL

  • Licence distincte pour les téléchargements Excel
  • Peut être liée à une province ou à toute la Belgique
  • Pendant la durée : téléchargement de la dernière version
  • Pas de recherche, uniquement des droits de téléchargement

Durée & remises

Standard : 1 an

Prix de base par type de licence

Multi-annuel avec remise :

  • 2 ans : 5% de remise
  • 3 ans : 10% de remise
  • 5 ans : 15% de remise

Remises combinées :

  • 3+ licences simultanées : 5% supplémentaire
  • Extension client existant : 5% de remise de fidélité

4. Flux d'interface utilisateur

A. Tableau de bord du compte - "Mes licences"

┌─────────────────────────────────────────────────┐ │ LICENCES ACTIVES │ ├─────────────────────────────────────────────────┤ │ □ Master - Province d'Anvers │ │ Valable jusqu'au : 15/03/2026 │ │ [Renouveler] [Détails] │ │ │ │ □ Executive - Province de Liège │ │ Valable jusqu'au : 01/09/2025 │ │ [Renouveler] [Détails] │ │ │ │ □ Excel Downloads - Belgique │ │ Valable jusqu'au : 31/12/2025 │ │ [Télécharger la dernière version] │ ├─────────────────────────────────────────────────┤ │ [+ Ajouter une nouvelle licence] │ └─────────────────────────────────────────────────┘

B. Acheter une nouvelle licence

  1. Étape 1 : choisir le type
    • Master (province)
    • Executive (province)
    • Téléchargements Excel
    • Pack (combinaison avec remise supplémentaire)
  2. Étape 2 : sélectionner le périmètre
    • Pour Master/Executive : choisir la/les province(s)
    • Pour Excel : choisir une province ou toute la Belgique
  3. Étape 3 : choisir la durée
    • 1 an (prix de base)
    • 2 ans (5% de remise)
    • 3 ans (10% de remise)
    • 5 ans (15% de remise)
  4. Étape 4 : récapitulatif & paiement
    • Afficher le prix total avec remises
    • Afficher toutes les licences actives + nouvelles dans un aperçu
    • Options de paiement : en ligne / facture

5. Logique métier

A. Activation de licence

Lors d'une recherche/d'un export :

  1. Vérifier si le client est connecté
  2. Récupérer TOUTES les licences actives (WHERE status='active' AND end_date >= TODAY)
  3. Pour l'action en cours : vérifier quelles licences s'appliquent
  4. Pour rechercher des ACP à Anvers : vérifier qu'une licence Master/Executive active pour Anvers existe
  5. Pour un téléchargement Excel : vérifier qu'une licence Excel est active pour cette région

Droits combinés :

  • Si le client a Master Anvers + Master Limbourg : les deux provinces sont accessibles
  • Si le client a Executive Liège + Excel Belgique : il peut rechercher à Liège ET télécharger Excel partout

B. Licences expirées

Automatique :

  • Une tâche cron quotidienne vérifie les licences arrivant à échéance
  • 30 jours avant expiration : premier e-mail de rappel
  • 14 jours avant : deuxième rappel
  • 7 jours avant : dernier rappel
  • Le jour de l'expiration : statut → 'expired', e-mail avec lien de renouvellement

Renouvellement manuel :

  • Le client peut renouveler lui-même depuis le tableau de bord
  • Choisir une nouvelle durée (1 à 5 ans)
  • Si dans les 30 jours après expiration : continuité sans interruption
  • Si plus tard : nouvelle date de début = aujourd'hui

C. Licence de téléchargement Excel

Fonctionnement :

  • La licence donne accès à la fonction de téléchargement
  • À chaque connexion du client : vérifier si une nouvelle version est disponible
  • Bouton "Télécharger la dernière version" toujours visible avec une licence active
  • Suivi : enregistrer chaque téléchargement (date, version, province)
  • Au renouvellement : accès immédiat à la version la plus récente

6. Stratégie de migration (clients existants)

Option A : conversion automatique

  • Abonnement existant → nouvelle licence
  • Basic/Pro/Master/Executive Belgique → licence Master Belgique
  • Executive Province X → licence Executive Province X
  • Conserver l'expirationdate actuelle
  • E-mail aux clients : "Votre compte a été mis à niveau vers notre nouveau système"

Option B : migration progressive

  • Les clients existants restent sur l'ancien système jusqu'au renouvellement
  • Au renouvellement : passage automatique vers le nouveau système
  • Avantage : transition en douceur
  • Inconvénient : maintenir une double logique (temporairement)

Recommandation : option A avec grandfathering

  • Migrer directement vers le nouveau système
  • Les clients existants conservent le prix actuel pour le premier renouvellement
  • Flexibilité totale pour ajouter des licences supplémentaires

7. Exemple de tableau tarifaire

Type de licence Périmètre 1 an 2 ans 3 ans
Master Par province €499 €949 (5%) €1.347 (10%)
Master Belgique €1.299 €2.468 (5%) €3.507 (10%)
Executive Par province €299 €568 (5%) €807 (10%)
Executive Belgique €899 €1.708 (5%) €2.427 (10%)
Téléchargement Excel Par province €149 €283 (5%) €402 (10%)
Téléchargement Excel Belgique €399 €758 (5%) €1.077 (10%)

Offres pack

  • 3 provinces Master : prix de 2,5 provinces
  • Combo Master + Excel : 15% de remise sur Excel
  • Toute la Belgique vs 10 provinces : Belgique = prix de 6 provinces

8. Avantages de ce système

Pour les clients

  • Flexibilité : N'achetez que ce dont vous avez besoin
  • Évolutif : Commencez petit, développez ensuite
  • Rentable : Ne payez pas pour des régions non utilisées
  • Avantage pluriannuel : Remises en cas d'engagement plus long
  • Toujours à jour : Téléchargements Excel toujours en dernière version

Pour Syndi.be

  • Chiffre d'affaires plus élevé : Possibilités de cross-sell et d'up-sell
  • Fidélisation accrue : Contrats pluriannuels
  • Meilleur suivi : Savoir précisément quelles licences sont actives
  • Facturation simplifiée : Facturer par licence
  • Insights data : Quelles provinces/types sont populaires

9. Phases d'implémentation

Phase 1 : base de données & backend (2-3 semaines)

Créer de nouvelles tables • Script de migration pour les clients existants • Construire les contrôles de licence • Tester avec des données fictives

Phase 2 : tableau de bord du compte (1-2 semaines)

Page d'aperçu des licences • Détails par licence • Fonction de renouvellement • Intégration du téléchargement Excel

Phase 3 : flux d'achat (2 semaines)

Assistant de nouvelle licence • Configurateur de packs • Calcul de prix avec remises • Intégration paiement (Mollie)

Phase 4 : logique de recherche & export (1 semaine)

Contrôle de licence dans la recherche ACP • Contrôle de licence dans la recherche syndic • Vérification des droits d'export Excel • Messages d'erreur en cas de licence manquante

Phase 5 : outils admin (1 semaine)

Gestion des licences pour admins • Création/modification manuelle de licences • Reporting & statistiques • Actions en masse

Phase 6 : tests & lancement (1 semaine)

Tests d'acceptation utilisateur • Tests de performance • E-mail aux clients existants • Soft launch → Full launch

Durée totale : 8-10 semaines

10. Considérations techniques

Caching & Performance

  • Mettre en cache les licences actives par utilisateur dans la session
  • Rafraîchir à la connexion ou après achat
  • Index sur clientID, status, end_date

Rechten Check Pattern

function hasLicenseFor($clientID, $province, $licenseType) { // Vérifier d'abord le cache // Requêter les licences actives pour la province // Retourner un booléen }

Excel Versioning

  • Nouvelle table : excel_versions
  • Champs : version_id, province, upload_date, file_path, changelog
  • Au téléchargement : vérifier quelle version a été téléchargée en dernier
  • Afficher le badge « Nouvelle version disponible ! »

API pour l'avenir

  • Plus tard : API externe pour partenaires
  • Endpoint de vérification de licence
  • Endpoint de téléchargement avec rate limiting

Conclusion & prochaines étapes

Ce système offre une flexibilité maximale aux clients et un potentiel de croissance pour Syndi.be.

Approche recommandée :

  1. Commencer par le design de la base de données et le script de migration
  2. Construire d'abord la logique backend (contrôles de licence)
  3. Ensuite le frontend (tableau de bord, flux d'achat)
  4. Tester intensivement avec un petit groupe de clients existants
  5. Déploiement progressif avec grandfathering pour les clients existants

Actions suivantes :

  • Définir les schémas de base de données en détail
  • Rédiger la spécification de l'assistant d'achat
  • Mettre en place un prototype du tableau de bord
  • Écrire le script de migration