Issues Manquantes - Features Critiques Non Planifiées

Date: 2025-10-23 Source: Analyse étude de marché + Business Plan Bootstrap Total: 9 nouvelles issues identifiées


🔴 CRITIQUES (Bloquent Lancement Belgique)

#016 - Conformité PCN Belge (Plan Comptable Normalisé)

Besoin: “La Belgique utilise le Plan Comptable Normalisé (PCN) pour la comptabilité des copropriétés. KoproGo doit générer des rapports conformes PCN.”

Priorité: 🔴 CRITIQUE (Phase 1) Estimation: 12-15h Bloque: Lancement Belgique

Specs:

  • Mapper catégories expenses → Comptes PCN (classe 6: charges, classe 7: produits)

  • Export rapport PCN avec numérotation belge (60 Achats, 61 Services, 62 Rémunérations, etc.)

  • Format PDF + Excel conforme normes belges

  • Intégration avec ExpenseCalculator existant

  • Tests conformité avec échantillon réel syndic belge

Exemple Mapping:

ExpenseCategory::Utilities -> PCN::Account("615") // Utilities services
ExpenseCategory::Maintenance -> PCN::Account("611") // Building maintenance
ExpenseCategory::Insurance -> PCN::Account("613") // Insurance premiums

Dépendances: Issue #003 (Financial Reports)


#017 - CODA Import Bancaire (Format Belge)

Besoin: “Les banques belges utilisent le format CODA (COded Daily) pour les relevés bancaires. Permettre import automatique des paiements copropriétaires.”

Priorité: 🔴 CRITIQUE (Phase 2) Estimation: 15-20h

Specs:

  • Parser fichiers CODA (.cod) - Format fixe 128 caractères/ligne

  • Extraire: montant, date, référence communication structurée (+++xxx/xxxx/xxxxx+++)

  • Matching automatique paiement → expense via référence

  • Réconciliation bancaire automatique

  • Gestion rejets (paiements non identifiés)

  • Support multi-banques belges (BNP Paribas Fortis, ING, KBC, Belfius)

Format CODA (simplifié):

0000001001200001CODA FILE HEADER...
1...           // Transaction header
2...           // Transaction details (amount, date, reference)
8...           // File trailer
9...           // End record

Endpoint:

POST /api/v1/payments/coda-import
- Upload .cod file
- Parse + match expenses
- Return matched/unmatched list
- Validate before auto-marking paid

ROI: Gain temps énorme syndics belges (90% paiements auto-réconciliés)


#019 - Internationalization NL/FR/DE/EN

Besoin: “La Belgique est trilingue (NL/FR/DE - néerlandais 60%, français 40%, allemand <1%). L’interface doit supporter les 3 langues officielles belges + anglais (EN) pour compétitivité internationale.”

Priorité: 🔴 CRITIQUE (Phase 1) Estimation: 10-12h (ajusté pour 4 langues)

Specs:

  • Backend: Enums + messages erreur traduits (NL/FR/DE/EN)

  • Frontend: i18n avec svelte-i18n ou @formatjs/intl

  • Fichiers locales: locales/nl.json, locales/fr.json, locales/de.json, locales/en.json

  • Détection langue automatique (header Accept-Language)

  • Sélecteur langue UI avec drapeaux (🇳🇱 🇫🇷 🇩🇪 🇬🇧)

  • Traduction complète:

    • Labels formulaires

    • Messages validation

    • Emails notifications

    • PDFs rapports PCN (déjà NL/FR, ajouter DE/EN)

    • Documentation

Fichier locale exemple (locales/fr.json):

{
  "dashboard.title": "Tableau de Bord",
  "buildings.create": "Créer un Immeuble",
  "expenses.status.paid": "Payé",
  "meetings.type.ordinary": "Assemblée Générale Ordinaire"
}

Priorités linguistiques:

  1. Néerlandais (NL): Priorité #1 - 60% population (Flandre)

  2. Français (FR): Priorité #2 - 40% population (Wallonie + Bruxelles)

  3. Allemand (DE): Requis légalement - <1% population (Cantons de l’Est)

  4. Anglais (EN): Compétitivité internationale + expatriés Bruxelles


#020 - Multi-Tenancy Parfait (Isolation Données Hosted)

Besoin: “Pour le modèle hosted 1€/mois, isolation totale des données par organisation (syndic). Sécurité + performance critiques.”

Priorité: 🔴 CRITIQUE (Phase 1-2) Estimation: 10-12h Bloque: Lancement hosted

Specs:

  • Table organizations (syndic, cabinet)

  • Toutes entités ont organization_id (building, unit, expense, etc.)

  • Row-Level Security PostgreSQL (RLS policies)

  • Middleware Actix vérifie organization_id dans JWT

  • Tests isolation: User org A ne peut JAMAIS voir données org B

  • Indexes optimisés (organization_id, created_at)

  • Signup self-service avec création organization auto

Schema Example:

CREATE TABLE organizations (
  id UUID PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  plan VARCHAR(50) DEFAULT 'free', -- free, starter, pro
  max_buildings INT DEFAULT 1,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

ALTER TABLE buildings ADD COLUMN organization_id UUID REFERENCES organizations(id);
CREATE INDEX idx_buildings_org ON buildings(organization_id);

-- Row-Level Security
ALTER TABLE buildings ENABLE ROW LEVEL SECURITY;
CREATE POLICY buildings_isolation ON buildings
  USING (organization_id = current_setting('app.current_organization_id')::UUID);

JWT Claims:

{
  "user_id": "uuid",
  "organization_id": "uuid",
  "role": "admin"
}

Critique pour modèle hosted = fondation architecture SaaS


#022 - Belgian Council Management (Conseil Copropriété >20 lots)

Besoin: “En Belgique, conseil de copropriété obligatoire si >20 lots. Gérer membres conseil, mandats, décisions.”

Priorité: 🟡 IMPORTANT (Phase 2) Estimation: 6-8h

Specs:

  • Entité Council (conseil de copropriété)

  • Entité CouncilMember (membre du conseil)

  • Validation automatique: si building.total_units > 20 → council requis

  • Gestion mandats (durée, renouvellement)

  • Décisions conseil (distinctes des décisions AG)

  • Intégration avec Meeting (conseil se réunit entre AG)

Règle Métier Belgique:

impl Building {
    pub fn requires_council(&self) -> bool {
        match self.country {
            Country::Belgium => self.total_units > 20,
            Country::France => self.total_units > 15, // Variable selon règlement
            _ => false,
        }
    }
}

Endpoints:

POST   /api/v1/buildings/:id/council
GET    /api/v1/buildings/:id/council/members
POST   /api/v1/councils/:id/decisions

🟡 IMPORTANTES (Phase 2-3)

#018 - Exact Online Export (Logiciel Comptabilité BE #1)

Besoin: “Exact Online est le logiciel comptable le plus utilisé en Belgique. Export écritures comptables pour import Exact.”

Priorité: 🟡 IMPORTANT (Phase 2) Estimation: 10-12h

Specs:

  • Export format CSV compatible Exact Online

  • Colonnes: Journal, Date, Numéro pièce, Compte, Débit, Crédit, Libellé

  • Mapping PCN → Comptes Exact

  • Export périodique (mois, trimestre, année)

  • Validation format avant export

Endpoint:

GET /api/v1/reports/exact-export/:building_id?period=2025-Q1
- Returns CSV file
- Headers: Journal,Date,Account,Debit,Credit,Description

Alternatif: Odoo, Sage export (ajoutables Phase 3)


#021 - Stripe Billing 1€/Mois (Hosted Monetization)

Besoin: “Système de billing automatique pour abonnements hosted 1€/mois ou 10€/mois selon plan.”

Priorité: 🟡 IMPORTANT (Phase 2) Estimation: 6-8h

Specs:

  • Intégration Stripe Billing (Subscriptions)

  • Plans:

    • free: 1 copropriété, 0€

    • starter: 5 copropriétés, 10€/mois

    • pro: 20 copropriétés, 35€/mois

    • enterprise: Illimité, 150€/mois

  • Webhook invoice.paid → activer organization

  • Webhook invoice.payment_failed → suspendre accès

  • Self-service upgrade/downgrade

  • Facturation automatique

Flow:

  1. User signup → Free plan

  2. Ajoute 2ème building → Prompt upgrade

  3. Choose plan → Stripe Checkout

  4. Payment success → Unlock features

  5. Recurring billing auto

Différent de Issue #006 (paiements charges copropriétaires)


#023 - Country Regulations Engine

Besoin: “Support multi-pays (BE/FR/ES/IT/TN) avec règles métier spécifiques par pays.”

Priorité: 🟡 IMPORTANT (Phase 2-3) Estimation: 12-15h

Specs:

  • Trait CountryRegulations

  • Implémentations: BelgiumRegulations, FranceRegulations, TunisiaRegulations, etc.

  • Validations dynamiques selon building.country

  • Exemples règles:

    • BE: Syndic obligatoire ≥2 lots

    • ES: Syndic obligatoire >4 lots

    • IT: Syndic obligatoire >4 lots

    • TN: Syndicat toujours obligatoire

  • Config multi-pays pour:

    • Seuils syndic

    • Formats comptables (PCN BE, FEC FR)

    • Formats bancaires (CODA BE, SEPA EU)

    • Langues officielles

Architecture:

pub trait CountryRegulations {
    fn syndic_mandatory_threshold(&self) -> u32;
    fn council_mandatory_threshold(&self) -> Option<u32>;
    fn accounting_format(&self) -> AccountingFormat;
    fn supported_languages(&self) -> Vec<Language>;
}

pub struct BelgiumRegulations;
impl CountryRegulations for BelgiumRegulations {
    fn syndic_mandatory_threshold(&self) -> u32 { 2 }
    fn council_mandatory_threshold(&self) -> Option<u32> { Some(20) }
    fn accounting_format(&self) -> AccountingFormat { AccountingFormat::PCN }
    fn supported_languages(&self) -> Vec<Language> { vec![Language::FR, Language::NL] }
}

Extensible pour expansion géographique future


#024 - Multi-Currency Support (EUR/TND)

Besoin: “Support Euro (Belgique/France) et Dinar Tunisien (Tunisie) pour expansion Afrique du Nord.”

Priorité: 🟡 IMPORTANT (Phase 3) Estimation: 6-8h

Specs:

  • Champ currency dans Building (EUR, TND, USD, etc.)

  • Calculs montants avec rust_decimal (précision)

  • Affichage formaté selon locale (1 234,56 € vs 1,234.56 TND)

  • Conversion taux de change (API externe ou manuel)

  • Rapports multi-devises (dashboard portfolio)

Frontend:

formatCurrency(amount: number, currency: string, locale: string): string {
  return new Intl.NumberFormat(locale, {
    style: 'currency',
    currency: currency
  }).format(amount);
}

// Usage
formatCurrency(1234.56, 'EUR', 'fr-BE') // "1 234,56 €"
formatCurrency(1234.56, 'TND', 'ar-TN') // "1234.560 د.ت"

🟢 NICE-TO-HAVE (Phase 4+)

#025 - TLIS Integration (Tunisian Land Registry)

Besoin: “Intégration avec TLIS (Système de gestion de l’information foncière tunisien) pour vérification propriété.”

Priorité: 🟢 NICE (Phase 4) Estimation: 15-20h

Specs:

  • API TLIS (si disponible publiquement)

  • Vérification propriété immeuble/lot

  • Import automatique données cadastrales

  • Validation propriétaires

Note: Dépend de disponibilité API gouvernementale tunisienne


📊 Résumé Priorisation Nouvelles Issues

Issue

Nom

Priorité

Phase

Estimation

#016

PCN Belge

🔴 CRITIQUE

1

12-15h

#019

i18n FR/NL/EN

🔴 CRITIQUE

1

8-10h

#020

Multi-tenancy

🔴 CRITIQUE

1

10-12h

#017

CODA Import

🔴 CRITIQUE

2

15-20h

#022

Belgian Council

🟡 IMPORTANT

2

6-8h

#018

Exact Export

🟡 IMPORTANT

2

10-12h

#021

Stripe Billing

🟡 IMPORTANT

2

6-8h

#023

Regulations Engine

🟡 IMPORTANT

2-3

12-15h

#024

Multi-currency

🟡 IMPORTANT

3

6-8h

#025

TLIS Integration

🟢 NICE

4

15-20h

Total Effort: ~86-128h (11-16 semaines à 20h/sem)


🚨 Impact sur Roadmap

Ces 9 nouvelles issues doivent être intégrées au planning:

Phase 1 ajustée:

  • Issues existantes: #001-#005 (37-46h)

  • Issues nouvelles: #016, #019, #020 (30-37h)

  • Total Phase 1: 67-83h (8-10 semaines)

Phase 2 ajustée:

  • Issues existantes: #006-#010 (53-64h)

  • Issues nouvelles: #017, #018, #021, #022, #023 (49-63h)

  • Total Phase 2: 102-127h (13-16 semaines)

Sans ces issues, KoproGo ne peut PAS:

  • ✅ Lancer en Belgique (#016, #017, #019)

  • ✅ Faire du hosted (#020, #021)

  • ✅ Être compétitif vs Vilogi/Copriciel


Prochaine étape: Intégrer dans ROADMAP.md et PRIORITIES_TABLE.md

Dernière mise à jour: 2025-10-23