#!/usr/bin/env python3 """ API minimale pour le système notarial Version ultra-simplifiée pour test rapide """ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import uvicorn import asyncio from datetime import datetime from typing import Dict, Any # Configuration app = FastAPI( title="API Notariale Minimale", description="API minimale pour l'analyse de documents notariaux", version="1.0.0" ) # CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Stockage en mémoire pour la démo documents_db = { "doc_001": { "id": "doc_001", "filename": "acte_vente_001.pdf", "status": "completed", "progress": 100, "upload_time": "2024-01-15T10:30:00", "results": { "ocr_text": "ACTE DE VENTE - Appartement situé 123 Rue de la Paix, 75001 Paris...", "document_type": "Acte de vente", "entities": { "persons": ["Jean Dupont", "Marie Martin"], "addresses": ["123 Rue de la Paix, 75001 Paris"], "properties": ["Appartement T3, 75m²"] }, "verification_score": 0.85 } }, "doc_002": { "id": "doc_002", "filename": "compromis_vente_002.pdf", "status": "processing", "progress": 60, "upload_time": "2024-01-15T11:00:00", "current_step": "Extraction d'entités" } } @app.get("/") async def root(): """Page d'accueil""" return {"message": "API Notariale Minimale - Version 1.0.0"} @app.get("/api/health") async def health_check(): """Vérification de l'état de l'API""" return { "status": "healthy", "timestamp": datetime.now().isoformat(), "version": "1.0.0", "services": { "api": "OK", "llm": "Simulé", "external_apis": "Simulé" } } @app.get("/api/notary/stats") async def get_stats(): """Statistiques des documents""" total_docs = len(documents_db) processed = len([d for d in documents_db.values() if d.get("status") == "completed"]) processing = len([d for d in documents_db.values() if d.get("status") == "processing"]) return { "total_documents": total_docs, "processed": processed, "processing": processing, "pending": total_docs - processed - processing } @app.get("/api/notary/documents") async def get_documents(): """Liste des documents""" return { "documents": list(documents_db.values()), "total": len(documents_db) } @app.get("/api/notary/documents/{document_id}") async def get_document(document_id: str): """Détails d'un document""" if document_id not in documents_db: return {"error": "Document non trouvé"} return documents_db[document_id] @app.post("/api/notary/upload") async def upload_document(): """Upload simulé d'un document""" doc_id = f"doc_{datetime.now().strftime('%Y%m%d_%H%M%S')}" document_data = { "id": doc_id, "filename": f"document_{doc_id}.pdf", "status": "uploaded", "progress": 0, "upload_time": datetime.now().isoformat() } documents_db[doc_id] = document_data # Simuler le traitement asyncio.create_task(process_document_simulated(doc_id)) return { "message": "Document uploadé avec succès (simulé)", "document_id": doc_id, "status": "uploaded" } async def process_document_simulated(doc_id: str): """Simulation du traitement d'un document""" if doc_id not in documents_db: return # Mise à jour du statut documents_db[doc_id]["status"] = "processing" documents_db[doc_id]["progress"] = 10 # Simuler les étapes de traitement steps = [ ("OCR", 30), ("Classification", 50), ("Extraction d'entités", 70), ("Vérification", 90), ("Finalisation", 100) ] for step_name, progress in steps: await asyncio.sleep(2) # Simuler le temps de traitement documents_db[doc_id]["progress"] = progress documents_db[doc_id]["current_step"] = step_name # Résultats simulés documents_db[doc_id].update({ "status": "completed", "progress": 100, "current_step": "Terminé", "results": { "ocr_text": "Texte extrait simulé du document...", "document_type": "Acte de vente", "entities": { "persons": ["Jean Dupont", "Marie Martin"], "addresses": ["123 Rue de la Paix, 75001 Paris"], "properties": ["Appartement T3, 75m²"] }, "verification_score": 0.85, "external_checks": { "cadastre": "OK", "georisques": "OK", "bodacc": "OK" } }, "completion_time": datetime.now().isoformat() }) if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)