Aller au contenu

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)

  1. Le serveur valide la commande sur le POS
  2. POST /api/v1/orders/order_service.create_order()
  3. Le service récupère la signature de la commande précédente (previous_signature)
  4. Les données à signer sont formatées : "{timestamp}|{total_ttc}|{uuid}|{previous_signature}"
  5. Signature ECDSA-SHA256 appliquée
  6. La commande est persistée en DB avec signature et previous_signature
  7. Un événement ORDER_CREATED est enregistré dans audit_logs

3.2 Vérification d'intégrité

  1. GET /api/v1/audit/verifyaudit_service.verify_chain()
  2. Parcours séquentiel de toutes les entrées du journal
  3. Pour chaque entrée N, vérification que entry[N].previous_hash == entry[N-1].signature
  4. 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

Fichier Rôle Lien GitHub
fiscal_main.py Entrypoint isolé — API fiscale uniquement → Voir sur GitHub
api/v1/fiscal/ Tous les routeurs fiscaux → Voir sur GitHub
core/security.py Gestion des clés ECDSA → Voir sur GitHub