Syndic SaaS - Documentation Complète

Plateforme multi-tenant de gestion de copropriété conçue pour les syndics professionnels et bénévoles.

Multi-tenant
Sécurisé
Temps réel
Multi-devises

Qu'est-ce que Syndic SaaS ?

Syndic SaaS est une plateforme complète de gestion de copropriété qui permet aux syndics de gérer efficacement leurs résidences, propriétaires, locataires, finances et communications. L'application offre une architecture multi-tenant où chaque organisation (syndic) opère de manière isolée avec ses propres données, utilisateurs et paramètres.

Gestion Immobilière

Gérez résidences, blocs, locaux, dépendances et contacts propriétaires/locataires.

Comptabilité Intégrée

Caisse, encaissements, décaissements, sessions et réconciliation automatique.

Cotisations & Appels

Génération automatique des appels de fonds selon le mode fixe ou proportionnel.

Gestion Fournisseurs

Suivi des achats, factures, paiements et certificats de retenue à la source.

Notifications

Alertes automatiques pour impayés, rappels et communications importantes.

Sécurité Avancée

Authentification JWT, rôles granulaires et isolation multi-tenant complète.

Architecture

Vue d'ensemble de l'architecture technique du système

Diagramme d'Architecture


┌─────────────────────┐         ┌──────────────────────┐         ┌─────────────────┐
│   Next.js 15+       │────────>│   Django REST        │────────>│   PostgreSQL    │
│   Frontend          │  HTTP   │   Framework          │  SQL    │   Database      │
│   (Port 3000)       │<────────│   (Port 8000)        │<────────│                 │
└─────────────────────┘         └──────────────────────┘         └─────────────────┘
         │                               │                                │
         │ React Query                   │ Celery Tasks                   │
         │ SWR Caching                   ▼                                │
         │                      ┌──────────────────┐                      │
         │                      │   Redis          │                      │
         │                      │   Cache/Broker   │                      │
         │                      └──────────────────┘                      │
         │                               │                                │
         ▼                               ▼                                │
┌─────────────────────┐         ┌──────────────────┐                      │
│   Cloudinary/S3     │         │   Celery Workers │                      │
│   Media Storage     │         │   Background Jobs│                      │
└─────────────────────┘         └──────────────────┘                      │
                  

Backend (Django)

  • Django 5.2 - Framework web Python robuste
  • Django REST Framework - API RESTful complète
  • PostgreSQL - Base de données relationnelle
  • Celery + Redis - Tâches asynchrones
  • JWT Authentication - Sécurité token-based

Frontend (Next.js)

  • Next.js 15+ - App Router & React 19
  • TypeScript - Typage statique
  • Tailwind CSS - Styling utility-first
  • SWR / React Query - Data fetching
  • Shadcn/UI - Composants UI modernes

Rôles & Permissions

Système de contrôle d'accès granulaire basé sur les rôles

Hiérarchie des Utilisateurs

Propriétaire d'Organisation

Accès complet à toutes les fonctionnalités de l'organisation. Peut gérer les membres, rôles et paramètres.

Membre (avec rôles)

Accès défini par les rôles assignés. Peut avoir des permissions sur des résidences spécifiques.

Utilisateur Locaux

Accès limité: voir ses cotisations, soumettre des réclamations, participer aux conversations.

Permissions Granulaires

Format: app.action

articles.viewarticles.createarticles.updatearticles.deletefournisseurs.viewfournisseurs.createcaisse.viewcaisse.createcotisations.viewcotisations.createachats.viewachats.export

Organisations

Entité principale de multi-tenancy - isolation complète des données

Modèle Organization

Champs Principaux

  • name - Nom de l'organisation
  • owner - Propriétaire (OneToOne avec User)
  • slug - Identifiant URL unique
  • is_active - Statut actif/inactif

Paramètres Devise

  • currency_code - Code ISO (TND, EUR, USD...)
  • currency_decimal_places - 2 ou 3 décimales
  • currency_thousand_separator - Séparateur milliers
  • currency_symbol_position - before/after

Paramètres TEJ (Fiscalité Tunisie)

  • tax_id - Matricule fiscal
  • taxpayer_category - PM (Personne Morale) / PP
  • legal_address - Adresse légale
  • contact_email / contact_phone

Résidences

Propriétés gérées - appartenant à une organisation

Attributs de Résidence

Identification

  • • Nom & Adresse
  • • Slug URL unique
  • • Usage (Habitation/Pro)

Compteurs

  • • Nombre de blocs
  • • Nombre de locaux
  • • Nombre de dépendances

Garantie

  • • Garantie décennale (O/N)
  • • Date début/fin garantie

Modes de Cotisation

Mode FIXE

Prix fixe par type de local/dépendance

  • • prix_local_commercial
  • • prix_local_residentiel
  • • prix_dep_parking_ss/ar
  • • prix_dep_cellier

Mode PROPORTIONNEL

Calcul basé sur la surface

  • • surface_globale (m²)
  • • budget_annuel
  • • Formule: budget × (surface_local / surface_totale)

Structures

Organisation physique: Blocs, Locaux, Dépendances, Contacts

Block

Bâtiment ou bloc au sein d'une résidence

  • name
  • description
  • residence (FK)
  • organization (FK)

LocalUnit

Appartement ou local commercial

  • code
  • type (résidentiel/commercial)
  • surface_m²
  • surface_globale_m²
  • solde_anterieur
  • block (FK)

LocalContact

Contact associé à un local

  • role (propriétaire/locataire/payeur)
  • person_type (physique/morale)
  • nom/prénom ou raison_sociale
  • email, téléphone
  • user (FK optionnel)

Dependance

Parking, cellier, etc.

  • type (parking_ss/parking_ar/cellier)
  • name
  • surface_m²
  • block (FK optionnel)
  • local (FK optionnel)

Module Financier

Vue d'ensemble des flux financiers

Entrées

  • Cotisations
  • Encaissements
  • Approvisionnements

Caisse

  • Sessions
  • Mouvements
  • Réconciliation

Sorties

  • Paiements fournisseurs
  • Dépenses
  • Dépôts bancaires

Caisse

Gestion de trésorerie avec sessions et mouvements

Composants de la Caisse

Caisse

Registre de caisse par résidence. Suit le solde courant et les sessions.

CaisseSession

Période d'activité avec solde d'ouverture/clôture. Réconciliation automatique à la fermeture.

CaisseMovement

Transaction individuelle: direction (IN/OUT), type, mode de paiement, montant.

Types de Mouvements

EncaissementPaiement FournisseurApprovisionnementDépôt BancaireDépenseÉchangeTransfertCorrection

Cotisations

Appels de fonds et suivi des paiements

Types de Cotisations

FS - Frais Syndic

Cotisations régulières pour le fonctionnement. Mode proportionnel uniquement.

EX - Exceptionnelle

Travaux, réparations. Nécessite service_name et service_budget.

AA - Autres Apports

Contributions diverses non classifiées.

Workflow des Cotisations

1Création Batch
2Génération Cotisations
3Encaissement
4Réconciliation

Achats

Gestion des fournisseurs, factures et paiements

Fournisseur

Prestataires et fournisseurs

  • company_name
  • matricule_fiscal
  • address
  • email/phone
  • bank_account (RIB)

DocumentAchat

Factures et avoirs

  • type (facture/avoir)
  • reference
  • fournisseur (FK)
  • total_ht/ttc
  • amount_paid_cached
  • status

TEJ (Télédéclaration)

Certificats de retenue à la source pour la fiscalité tunisienne

Qu'est-ce que le TEJ ?

Le TEJ (Télédéclaration des Retenues à la Source) est le système électronique tunisien pour déclarer les retenues à la source effectuées sur les paiements aux fournisseurs. L'application génère automatiquement les fichiers XML conformes au format exigé.

TauxRetenue

Barème des taux de retenue

  • code
  • libelle
  • taux (%)
  • date_debut/fin

CertificatRetenue

Certificat par fournisseur

  • fournisseur
  • document_achat
  • montant_brut
  • taux_retenue
  • montant_retenu

DepotTEJ

Dépôt de déclaration

  • periode
  • certificats (M2M)
  • status (draft/submitted)
  • xml_file

Notifications

Système d'alertes et communications

Types de Notifications

Cotisations Impayées

Alertes automatiques pour les retards

Paiements Reçus

Confirmation des encaissements

Réclamations

Nouvelles réclamations et réponses

Invitations

Invitations à rejoindre l'organisation

Stack Technique

Technologies utilisées dans le projet

Django 5.2

Backend

Django REST Framework

API

PostgreSQL

Database

Redis

Cache

Celery

Tasks

Next.js 15

Frontend

React 19

UI

TypeScript

Language

Tailwind CSS

Styling

Docker

Container

AWS EB

Deployment

Cloudinary

Media

API Reference

Endpoints REST principaux

POST/api/auth/google/
POST/api/auth/token/refresh/
GET/api/v1/organizations/
GET/api/v1/residences/
GET/api/v1/residences/{id}/structures/locaux/
GET/api/v1/residences/{id}/cotisations/
POST/api/v1/residences/{id}/caisse/movements/
GET/api/v1/residences/{id}/finance/certificats/

Documentation API complète: Accédez à /api/schema/swagger-ui/ pour la documentation OpenAPI interactive.

Déploiement

Options de déploiement et configuration

Docker (Recommandé)

# Build et démarrer
docker-compose up -d

# Production
docker-compose -f docker-compose.prod.yml up -d

# Migrations
docker-compose exec backend python manage.py migrate

AWS Elastic Beanstalk

  • Configuration .ebextensions/ incluse
  • Hooks de déploiement automatiques
  • Procfile pour Gunicorn
  • Variables d'environnement sécurisées