# RenoValid Back Office — code bundle Le workspace MCP a refusé l’écriture directe de certaines extensions via fs_apply. Ce bundle garde le contenu cible des premiers fichiers backend. ## app/main.py ```python from fastapi import FastAPI from app.db import create_db_and_tables from app.routers import health, postal_codes, referentials, simulations, stats app = FastAPI(title="RenoValid Back Office", version="0.1.0") @app.on_event("startup") def on_startup() -> None: create_db_and_tables() app.include_router(health.router) app.include_router(referentials.router) app.include_router(postal_codes.router) app.include_router(simulations.router) app.include_router(stats.router) ``` ## app/db.py ```python import os from collections.abc import Generator from sqlmodel import SQLModel, Session, create_engine DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./renovalid_backoffice.db") connect_args = {"check_same_thread": False} if DATABASE_URL.startswith("sqlite") else {} engine = create_engine(DATABASE_URL, echo=False, connect_args=connect_args) def create_db_and_tables() -> None: SQLModel.metadata.create_all(engine) def get_session() -> Generator[Session, None, None]: with Session(engine) as session: yield session ``` ## modèles MVP - ReferentialItem : tarifs, barèmes, règles, matériaux, types de travaux - PostalCodeCommune : base code postal / commune - SavedProject : brouillons, simulations, projets sauvegardés - FieldInputEvent : statistiques de saisie terrain - AuditLog : préparation audit et traçabilité