# Technisch Ontwerp: Vergunningzoeker ## Stack - Backend: Python Flask (project template) - Frontend: React met Vite - Database: PostgreSQL - AI: Druppie platform modules via SDK ## Druppie Modules De app gebruikt de Druppie SDK (`druppie_sdk`) om platformmodules aan te roepen. Geen directe API-keys of externe provider-calls in de app. | Module | Tool | Gebruik | |--------|------|---------| | vision | ocr | Tekst extraheren uit gescande vergunningdocumenten (PDF/afbeelding) | | llm | chat | Classificatie van vergunningtype op basis van geëxtraheerde tekst | Gebruik: ```python from druppie_sdk import DruppieClient druppie = DruppieClient() # OCR op geüpload document ocr_result = druppie.call("vision", "ocr", {"image_source": image_url}) extracted_text = ocr_result["text"] # Classificatie van vergunningtype classify_result = druppie.call("llm", "chat", { "prompt": f"Classificeer dit vergunningdocument...\n\n{extracted_text}", "system": "Je bent een specialist in watervergunningen." }) ``` ## Componenten - UploadHandler: verwerkt document uploads, slaat op in DB - OCRProcessor: roept druppie vision/ocr aan voor tekstextractie - Classifier: roept druppie llm/chat aan voor classificatie - PermitStore: PostgreSQL repository voor vergunningmetadata - SearchHandler: zoekt in opgeslagen metadata ## Datamodel ``` Permit: id: UUID (PK) permit_number: String applicant_name: String permit_type: String (geclassificeerd door LLM) extracted_text: Text (OCR output) source_file: String (bestandsnaam) upload_date: DateTime created_at: DateTime ``` ## API Endpoints - POST /api/permits/upload — upload document, start OCR + classificatie - GET /api/permits — lijst van alle vergunningen met metadata - GET /api/permits/:id — details van een vergunning - GET /api/permits/search?q=term — zoek in metadata ## Belangrijk - GEEN hardcoded API keys in de app - GEEN openai package — gebruik druppie_sdk - DRUPPIE_URL wordt automatisch geïnjecteerd bij deploy