Architecture Technique
1. Vue d'ensemble
┌──────────────────────────┐
│ Shared Schemas │
│ (Single Source of Truth)│
└──────┬──────────┬────────┘
▼ ▼
┌────────────┐ ┌────────────┐
│ Backend │ │ Frontends │
│ (Pydantic) │ │ (TS Types) │
└──────┬─────┘ └─────┬──────┘
│ │
└───────┬───────┘
▼
┌───────────────┐
│ Base de Donn.│
└───────────────┘
2. Composants
2.1 Backend (backend/)
| Répertoire |
Rôle |
core/config.py |
Configuration (nom, version, chemins clés ECDSA) |
core/database.py |
SQLAlchemy engine, session factory, init DB |
core/security.py |
Service cryptographique ECDSA-SHA256 (signature & vérification) |
models/ |
8 modèles SQLAlchemy (Category, Product, User, Room, Table, PaymentMethod, VatRate, Order, OrderItem, AuditLog) |
schemas/ |
Schémas Pydantic pour validation des entrées/sorties API |
api/v1/ |
Endpoints REST : categories, products, users, rooms, payment-methods, vat-rates, orders, audit |
services/ |
order_service (création commande signée), audit_service (journal d'événements signé) |
2.2 Frontend POS (frontend-pos/)
| Technologie |
Version |
| React Native |
0.76+ |
| Expo |
SDK 52 |
| Tamagui |
UI framework |
| Navigation |
React Navigation |
2.3 Frontend Admin (frontend-admin/)
| Technologie |
Version |
| React |
18+ |
| Vite |
6+ |
| Tamagui |
UI framework |
| Material Symbols |
Iconographie |
3. Flux de données
3.1 Création d'une commande (flux critique NF525)
- Le serveur valide la commande sur le POS
POST /api/v1/orders/ → order_service.create_order()
- Le service récupère la signature de la commande précédente (
previous_signature)
- Les données à signer sont formatées :
"{timestamp}|{total_ttc}|{uuid}|{previous_signature}"
- Signature ECDSA-SHA256 appliquée
- La commande est persistée en DB avec
signature et previous_signature
- Un événement
ORDER_CREATED est enregistré dans audit_logs
3.2 Vérification d'intégrité
GET /api/v1/audit/verify → audit_service.verify_chain()
- Parcours séquentiel de toutes les entrées du journal
- Pour chaque entrée N, vérification que
entry[N].previous_hash == entry[N-1].signature
- Si la chaîne est intacte →
{"valid": true}
4. Sécurité réseau
| Mesure |
Détail |
| CORS |
Origins restreintes (localhost:5173, 5174, 3000) |
| HTTPS |
Obligatoire en production (TLS 1.3) |
| API Auth |
JWT tokens (à implémenter) |
| PIN access |
Code PIN pour accès POS par utilisateur |
Code Source — Point d'Entrée Fiscal