KT
Connexion…
KT
Kantiir
Pilotez vos chantiers BTP
Connexion
Créer un compte
Email
Mot de passe
Se connecter
Prénom & Nom
Entreprise
Email
Mot de passe
Créer mon compte
📶 Hors ligne — Mode consultation activé · Les données sont sauvegardées localement
KT
Tableau de bord
☰
🇫🇷
🇬🇧
🇩🇪
🇪🇸
🇮🇹
☀️
🔔
KT
Kantiir
Tableau de bord
Chantiers
0
Planning Gantt
Coûts & Budget
Équipes
Documents
Performance
Architecture
Rapports
Paramètres
€
EUR €
☀️
Mode clair
—
Chargement…
Kantiir
⏏
👥
Mon équipe
⚡
Passer en Pro
Tableau de bord
Vue globale
·
Temps réel
☀️
🏗️
Tous les chantiers
Nouveau chantier
🔔
Local
🇫🇷
🇬🇧
🇩🇪
🇪🇸
🇮🇹
⏏
Déconnexion
🏗️
Chantiers actifs
0
📊
Avancement moyen
—
avancement moyen
💶
Budget consommé
—
⚠️
Alertes actives
0
aucune alerte
🏦
Santé financière · ISF
—
—
Calcul en attente de données
⏱️
Dérive temporelle
—
—
Calcul en attente de données
🏗️
Chantiers en cours
créer le premier
Aucun chantier actif
🔔
Alertes & Notifications
+ Nouvelle
💰
Budget global
Détail →
Chargement…
👷
Équipe
Gérer →
Chargement…
Tous
(0)
En cours
(0)
Planifié
(0)
Terminé
(0)
Alerte
(0)
+ Nouveau chantier
🏗️
Aucun chantier
Cliquez sur "+ Nouveau chantier" pour commencer
-- Aucun chantier --
Semaine
Mois
Trimestre
📅 Aujourd'hui
🔗 Dépendances
+ Tâche
Avancement
—
Retard
—
Terminées
—
Jalons
—
Durée
—
—
Tâches & Phases
+
AUJOURD'HUI
Terminé
En cours
En retard
Planifié
Jalon
Aujourd'hui
Chemin critique
Cliquer sur barre pour éditer · Glisser pour déplacer · T = Aujourd'hui
✕
Statut
Début
📅
jj/mm/aaaa
Fin
📅
jj/mm/aaaa
Avancement
0%
Équipe
— Sélectionner —
Durée
Dépendances
Chemin critique
Notes
Confirmer la suppression ?
Annuler
🗑 Oui, supprimer
🗑 Supprimer
✓ Enregistrer
📝
Nouvelle tâche
✕
Nom *
Phase
Gros Œuvre
Second Œuvre
Finitions
Type
Tâche
Jalon
Début
📅
jj/mm/aaaa
Fin
📅
jj/mm/aaaa
Équipe
— Sélectionner —
Statut
Planifié
En cours
Critique
Non
Oui
Annuler
Créer la tâche
📊 Export Excel
📄 Export PDF
+ Saisir dépense
Budget total prévu
—
Ensemble des postes
Dépenses réelles
—
Consommé à date
—
Reste à dépenser
—
Sur le budget prévu
Écart global
—
—
—
💶
Postes de dépenses
✏️ Modifier budgets
Poste
Prévu
Réel
Écart
%
🧾
Dépenses saisies
+ Saisir une dépense
📊
Consommation par poste — Prévu vs Réel
✏️ Modifier budgets
✕
Annuler
Enregistrer
Compagnons
Sous-traitants
Affectations
Feuilles de temps
Tous les chantiers
📊 Export présences
+ Ajouter membre
COMPAGNON
QUALIFICATION
CHANTIER AFFECTÉ
PRÉSENCE SEMAINE
HEURES / SEM.
TAUX HORAIRE
STATUS
ACTIONS
📊 Export sous-traitants
+ Ajouter
ENTREPRISE
SPÉCIALITÉ
CHANTIER
CONTRAT
MONTANT
STATUS
ACTIONS
Aucun sous-traitant — utilisez le bouton + pour en ajouter
📊 Export affectations
+ Nouvelle affectation
COMPAGNON
CHANTIER
PÉRIODE
RÔLE
ACTIONS
Semaine en cours
Semaine précédente
Il y a 2 semaines
Tous les chantiers
📊 Exporter CSV
🔒 Valider la semaine
COMPAGNON
CHANTIER
L
M
M
J
V
TOTAL
STATUS
Tous les chantiers
Tous
Plans
Devis
Factures
Photos
📎 Ajouter document
Chantiers actifs
0
Aucun chantier
Avancement moyen
0
%
Tous chantiers actifs
Aucune donnée
Budget consommé
0€
budget non défini
Aucune dépense
Alertes actives
0
Incidents en cours
✓ Tout va bien
📈
Avancement par chantier
🏗️
Aucun chantier — créez votre premier chantier
💹
Rentabilité par chantier
Ajoutez des chantiers pour voir la rentabilité
📊
Analyse des écarts — Vue globale
📄 PDF
📊 Excel
📊
Chargement…
📐 Cette page documente l'architecture technique complète de
Kantiir
— schéma de base de données, API endpoints, et recommandations technologiques.
🏛️ Architecture Globale
Architecture
3-tiers
découplée :
Frontend React/PWA
+
Backend FastAPI (Python)
+
PostgreSQL
. Déployée sur
Docker / Kubernetes
avec authentification JWT et rôles (Admin, Conducteur, Chef de chantier, Consultation).
┌─────────────────────────────────────────────────────────────────┐
│ ARCHITECTURE CHANTIERPRO │
└─────────────────────────────────────────────────────────────────┘
Frontend (React 18 / PWA)
├── Dashboard
// KPIs temps réel
├── Planning (Gantt.js)
// Gantt interactif drag & drop
├── Budget (Chart.js)
// Tableaux de coûts
├── Équipes & Présences ├── Documents (PDF viewer) └── Performance (Analytics)
Backend (Python FastAPI)
├── /api/v1/auth
// JWT + Refresh tokens
├── /api/v1/chantiers
// CRUD chantiers
├── /api/v1/taches
// Gestion Gantt
├── /api/v1/couts
// Budget & dépenses
├── /api/v1/equipes
// RH & présences
├── /api/v1/documents
// Upload S3/Minio
└── /api/v1/rapports
// Export PDF/Excel
Base de données (PostgreSQL 15)
├── Chantiers, Phases, Taches ├── Couts_Prevus, Couts_Reels ├── Equipes, Membres, Presences └── Documents, Annotations
Infrastructure
├── Docker Compose / K8s ├── Redis (cache, sessions) ├── Minio (stockage docs) └── Celery (tâches async: exports PDF)
🗃️ Schéma de Base de Données
-- TABLE: Chantiers
CREATE TABLE
chantiers ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), code VARCHAR(20) UNIQUE NOT NULL,
-- CH-2026-001
nom VARCHAR(255) NOT NULL, adresse TEXT, client VARCHAR(255), maitre_oeuvre VARCHAR(255), responsable_id UUID REFERENCES utilisateurs(id), date_debut DATE, date_fin_prevue DATE, date_fin_reelle DATE, statut VARCHAR(20) DEFAULT 'planifie',
-- planifie|encours|alerte|termine
budget_prevu DECIMAL(15,2), avancement_pct DECIMAL(5,2) DEFAULT 0, created_at TIMESTAMPTZ DEFAULT NOW() );
-- TABLE: Taches (Gantt)
CREATE TABLE
taches ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), chantier_id UUID REFERENCES chantiers(id) ON DELETE CASCADE, phase VARCHAR(100), nom VARCHAR(255) NOT NULL, date_debut DATE, date_fin DATE, duree_jours INTEGER, avancement_pct DECIMAL(5,2) DEFAULT 0, statut VARCHAR(20) DEFAULT 'planifie', equipe_id UUID REFERENCES equipes(id), dependances UUID[],
-- IDs tâches prérequises
est_critique BOOLEAN DEFAULT FALSE, retard_jours INTEGER DEFAULT 0, created_at TIMESTAMPTZ DEFAULT NOW() );
-- TABLE: Couts
CREATE TABLE
couts ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), chantier_id UUID REFERENCES chantiers(id) ON DELETE CASCADE, categorie VARCHAR(50),
-- materiaux|mdo|sous_traitance|transport|securite
libelle VARCHAR(255), montant_prevu DECIMAL(15,2), montant_reel DECIMAL(15,2), ecart DECIMAL(15,2) GENERATED ALWAYS AS (montant_reel - montant_prevu) STORED, fournisseur VARCHAR(255), date_saisie DATE DEFAULT CURRENT_DATE, document_ref UUID REFERENCES documents(id), saisi_par UUID REFERENCES utilisateurs(id) );
-- TABLE: Membres / Équipes
CREATE TABLE
membres ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), nom VARCHAR(100), prenom VARCHAR(100), qualification VARCHAR(100),
-- Maçon N3P2, Grutier CACES...
type_membre VARCHAR(20) DEFAULT 'salarie',
-- salarie|sous_traitant
taux_horaire DECIMAL(8,2), telephone VARCHAR(20), email VARCHAR(255) );
-- TABLE: Presences
CREATE TABLE
presences ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), membre_id UUID REFERENCES membres(id), chantier_id UUID REFERENCES chantiers(id), date_presence DATE, statut VARCHAR(20),
-- present|absent|conge|maladie
heure_debut TIME, heure_fin TIME, heures_travail DECIMAL(5,2), UNIQUE(membre_id, chantier_id, date_presence) );
-- TABLE: Documents
CREATE TABLE
documents ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), chantier_id UUID REFERENCES chantiers(id), nom_fichier VARCHAR(255), type_doc VARCHAR(30),
-- plan|devis|facture|photo|rapport
taille_octets BIGINT, chemin_stockage TEXT,
-- URL S3/Minio
annotations JSONB DEFAULT '[]',
-- [{x,y,texte,auteur}]
uploade_par UUID REFERENCES utilisateurs(id), uploaded_at TIMESTAMPTZ DEFAULT NOW() );
🔌 API Endpoints (FastAPI)
## AUTH
POST
/api/v1/auth/login
# { email, password } → JWT token
POST
/api/v1/auth/refresh
# Refresh token
GET
/api/v1/auth/me
# Profil utilisateur courant
## CHANTIERS
GET
/api/v1/chantiers
# ?statut=encours&page=1&limit=20
POST
/api/v1/chantiers
# Créer chantier
GET
/api/v1/chantiers/{id}
# Détail complet + KPIs
PUT
/api/v1/chantiers/{id}
# Modifier
DELETE
/api/v1/chantiers/{id}
# Archiver
GET
/api/v1/chantiers/{id}/kpis
# Dashboard KPIs temps réel
## PLANNING (GANTT)
GET
/api/v1/chantiers/{id}/taches
# Liste tâches Gantt
POST
/api/v1/chantiers/{id}/taches
# Créer tâche
PUT
/api/v1/taches/{id}
# Modifier (drag & drop)
PUT
/api/v1/taches/{id}/avancement
# { pct: 75 }
GET
/api/v1/chantiers/{id}/chemin-critique
# Calcul CPM
## BUDGET & COÛTS
GET
/api/v1/chantiers/{id}/couts
# ?categorie=materiaux&mois=2024-02
POST
/api/v1/chantiers/{id}/couts
# Saisir dépense
GET
/api/v1/chantiers/{id}/budget/summary
# Prévu vs réel + écarts
GET
/api/v1/chantiers/{id}/budget/evolution
# Courbe S
## ÉQUIPES & PRÉSENCES
GET
/api/v1/membres
# ?chantier={id}&date=2024-02-15
POST
/api/v1/presences
# Pointer présences du jour
GET
/api/v1/chantiers/{id}/presences/semaine
# Vue semaine
GET
/api/v1/membres/{id}/temps
# Feuille de temps
## DOCUMENTS
GET
/api/v1/chantiers/{id}/documents
# ?type=plan
POST
/api/v1/chantiers/{id}/documents
# multipart/form-data upload
POST
/api/v1/documents/{id}/annotations
# { x, y, texte, auteur }
## RAPPORTS & EXPORTS
GET
/api/v1/chantiers/{id}/rapport/pdf
# Rapport de suivi PDF (Celery async)
GET
/api/v1/chantiers/{id}/rapport/xlsx
# Export Excel budget
GET
/api/v1/dashboard/kpis
# KPIs globaux (admin)
⚙️ Pseudo-code — Calcul automatique des KPIs
# calculer_kpis_chantier(chantier_id) — FastAPI endpoint
async def
get_kpis
(chantier_id: UUID, db: AsyncSession): chantier =
await
db.get(Chantier, chantier_id) taches =
await
db.query(Tache).filter(chantier_id=chantier_id).all() couts =
await
db.query(Cout).filter(chantier_id=chantier_id).all()
# Avancement pondéré par durée des tâches
avancement = sum(t.avancement_pct * t.duree_jours
for
t
in
taches) \ / sum(t.duree_jours
for
t
in
taches)
# Calcul retard (date fin théorique vs aujourd'hui)
retard_jours = (date.today() - chantier.date_fin_prevue).days \
if
avancement < 100
else
0
# Écarts budgétaires
budget_prevu = sum(c.montant_prevu
for
c
in
couts) budget_reel = sum(c.montant_reel
for
c
in
couts) depassement = budget_reel - budget_prevu
# Indice de performance (IPI)
valeur_acquise = budget_prevu * (avancement / 100) ipi = valeur_acquise / budget_reel
if
budget_reel > 0
else
1.0
# Génération alertes
alertes = []
if
depassement > budget_prevu * 0.05: alertes.append({
"type"
:
"budget"
,
"seuil"
:
">5%"
})
if
retard_jours > 5: alertes.append({
"type"
:
"delai"
,
"jours"
: retard_jours})
return
KPIsResponse( avancement_pct=round(avancement, 1), retard_jours=retard_jours, budget_prevu=budget_prevu, budget_reel=budget_reel, depassement=depassement, ipi=round(ipi, 3), alertes=alertes )
📱 Wireframes Navigation Utilisateur
Flux principal pour un
Conducteur de travaux
en mobilité chantier :
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ LOGIN │───>│ DASHBOARD │───>│ CHANTIER │───>│ GANTT │
│ │ │ │ │ DÉTAIL │ │ PLANNING │
│ email/mdp │ │ KPIs globaux│ │ │ │ │
│ 2FA optionnel │ Alertes │ │ Avancement │ │ Drag & drop │
│ │ │ Chantiers │ │ Budget │ │ Dépendances │
│ │ │ Présence/j │ │ Tâches │ │ Chemin crit.│
└─────────────┘ └──────┬──────┘ └──────┬──────┘ └─────────────┘
│ │ ┌─────▼──────┐ ┌──────▼──────┐ ┌─────────────┐ │ POINTAGE │ │ BUDGET │───>│ RAPPORT │ │ PRÉSENCES │ │ DÉPENSES │ │ PDF/Excel │ │ │ │ │ │ │ │ QR code ou │ │ Saisie pose │ │ Période │ │ manuel │ │ Catégorie │ │ Indicateurs │ │ ✓ / ✗ / 🏖 │ │ Montant │ │ Download │ └─────┬──────┘ └──────┬──────┘ └─────────────┘ │ │ ┌─────▼──────┐ ┌──────▼──────┐ │ DOCUMENTS │ │ PERFORMANCE │ │ │ │ │ │ Upload PDF │ │ Productivité│ │ Photos │ │ Rentabilité │ │ Annot. mob.│ │ Écarts │ └────────────┘ └─────────────┘
RÔLES & ACCÈS :
Administrateur
: Accès total + gestion utilisateurs + paramètres
Conducteur
: Tous les modules + création chantiers + exports
Chef de chantier
: Pointage, tâches, documents de son chantier
Consultation
: Lecture seule tableau de bord + rapports
🎯 Frontend
React 18 · TypeScript · Vite
TailwindCSS · Recharts
Gantt.js / DHTMLX Gantt
React Query (cache API)
PWA offline (Service Worker)
i18n : fr / en
⚙️ Backend
Python 3.12 · FastAPI
SQLAlchemy 2.0 (async)
Alembic (migrations)
Celery + Redis (exports)
WeasyPrint (PDF)
OpenPyXL (Excel)
🗄️ Infrastructure
PostgreSQL 15 (primary DB)
Redis 7 (cache + sessions)
Minio / S3 (documents)
Docker Compose + Nginx
GitHub Actions (CI/CD)
Sentry (monitoring)
📋 Nouveau rapport
📄 Rapport PDF
Rapports enregistrés
Aucun rapport. Créez-en un nouveau.
💱
Devise
Choisissez la devise utilisée dans les budgets, rapports et exports PDF.
💶 Euro (€)
🇨🇭 Franc suisse (CHF)
🏢
Logo de l'entreprise
Votre logo apparaîtra dans la sidebar et en haut de vos rapports PDF. Il sera redimensionné à 300px max et compressé automatiquement.
Logo actuel
🗑️ Supprimer
🖼️
Glissez votre logo ici ou cliquez pour sélectionner
PNG, JPG, SVG — redimensionné à 300px max, compressé automatiquement
👤
Compte & Organisation
👥
Mon équipe
⏏ Se déconnecter
📋
Nouveau rapport
Kantiir BTP
✕
①
Informations générales
🏗️
Chantier
-- Sélectionner --
📅
Date
🌤️
Météo
☀️ Ensoleillé
⛅ Nuageux
🌧️ Pluvieux
⛈️ Orageux
🌬️ Venteux
❄️ Gelée
👷
Conducteur de travaux
✍️
Observations générales
②
👷 Présences du jour
③
📊 Avancement par phase
Sélectionnez un chantier pour charger l'avancement.
④
📸 Photos de chantier
0 photo
🖼️ Depuis la galerie
📷 Prendre une photo
✏️
Annotation —
✏️
➡️
▭
⭕
T
↩ Annuler
🗑️
✓ Valider
✕
Légende de la photo
🏗️
Nouveau Chantier
✕
Code chantier
Statut
Planifié
En cours
Nom du chantier *
Adresse complète
Client / Maître d'ouvrage
Maître d'œuvre
Responsable chantier
Budget prévu (€)
Date de début
Date de fin prévue
📊
Board
🏗️
Chantiers
📅
Planning
📷
Rapports
👷
Équipes
👷
Ajouter un compagnon
✕
Prénom *
Nom *
Rôle
Qualification
Chantier
-- Sélectionner --
Taux horaire (€/h)
Statut
Actif
Congé
Absent
📎
Ajouter un document
✕
📂
Glisser ou
cliquer
pour sélectionner
Nom *
Type
📐 Plan
💶 Devis
🧾 Facture
📷 Photo
📄 Autre
Chantier
-- Choisir --
Auteur
Statut
Validé
En révision
À valider
Brouillon
Montant €
✕
AVANCEMENT
SITUATION
NOTES
✏️ Modifier
Nom
Code
Client
Adresse
Maître d'œuvre
Responsable
Budget (€)
Statut
Planifié
En cours
Terminé
Alerte
Début
Fin prévue
Avancement (%)
Situation
Notes
Annuler
💾 Enregistrer
✕
🔔 Nouvelle alerte
Titre
Description
Niveau
⚠️ Avertissement
🚨 Critique
ℹ️ Information
Lien vers
📊 Tableau de bord
💰 Budget
📅 Planning
🏗️ Chantiers
👷 Équipes
📁 Documents
Annuler
💾 Créer l'alerte
✕
AVANCEMENT
SITUATION
NOTES
✏️ Modifier
Nom
Code
Client
Adresse
Maître d'œuvre
Responsable
Budget (€)
Statut
Planifié
En cours
Terminé
Alerte
Début
Fin prévue
Avancement (%)
Situation
Notes
Annuler
💾 Enregistrer
✕
🔔 Nouvelle alerte
Titre
Description
Niveau
⚠️ Avertissement
🚨 Critique
ℹ️ Information
Lien vers
📊 Tableau de bord
💰 Budget
📅 Planning
🏗️ Chantiers
👷 Équipes
📁 Documents
Annuler
💾 Créer l'alerte
✕
💸 Saisir une dépense
Libellé *
Date
Montant réel (€) *
Montant prévu (€)
Catégorie *
Chantier
Fournisseur
Référence
Annuler
💾 Enregistrer
Organisation
Plan :
·
—
membres
✕
Membres actifs
⏳ Chargement…
✉️ Inviter un collaborateur
Nouvelle invitation
👷 Conducteur
👁 Lecture seule
Envoyer l'invitation
Annuler