"last_update":"ARCHITEKTURENTSCHEIDUNG VARIANTE B verbindlich getroffen (2026-03-25). OpenAI-Key AUSSCHLIESSLICH serverseitig. Desktop-App spricht NUR mit eigenem AZA-Backend, AZA-Backend spricht mit OpenAI. Kein OpenAI-Key in der Client-App. Kein eigener OpenAI-Key pro Kunde. Kein Shared-Key. Hetzner wird als Server-/Backend-Pfad ernsthaft einbezogen. Hostpoint bleibt fuer Website/WooCommerce. Naechster Hauptblock: Backend Chat Proxy Endpoint (POST /v1/chat).",
"Do-not-break: /license/status Format bleibt exakt. Keine Auth-Aenderungen ohne Auftrag. Keine Secrets loggen. Keine unnoetige API-Contract-Aenderungen.",
"Do-not-break: Keine riskanten DNS-/Domain-Aenderungen an aza-medwork.ch ohne klare Pruefung. Website-Chaos durch vorschnelle Umschaltung war ein Fehler.",
"Do-not-break: OpenAI-Key NIEMALS hardcoded in App einbauen. NIEMALS Shared-Key an Kunden ausliefern. Lokale Key-Eingabe wird bei Produktivauslieferung entfernt (Variante B). Secrets NIEMALS loggen.",
"Do-not-break: Audioaufnahme IMMER als M4A (AAC via ffmpeg-Pipe). NIEMALS auf WAV zurueckaendern. WAV nur als Fallback wenn ffmpeg fehlt. Diese Entscheidung ist ENDGUELTIG – wurde bereits einmal faelschlich rueckgaengig gemacht.",
"ARCHITEKTURENTSCHEIDUNG VARIANTE B (VERBINDLICH, 2026-03-25): OpenAI-Key AUSSCHLIESSLICH serverseitig im AZA-Backend. Desktop-App und spaetere Browser-App sprechen NUR mit AZA-Backend. AZA-Backend spricht mit OpenAI. KEIN OpenAI-Key in der Client-App. KEIN eigener OpenAI-Key pro Kunde als Pflicht. KEIN gemeinsamer OpenAI-Key clientseitig. KEINE halben Uebergangsloesung. KEINE Shared-Key-Bastelei. Lokale Key-Eingabe wird bei Produktivauslieferung entfernt. Hetzner wird als Server-/Backend-Pfad ernsthaft einbezogen.",
"ARCHITEKTUR – Audio: Aufnahme direkt als M4A (AAC 64kbps via ffmpeg stdin-Pipe). Kein WAV-Zwischenschritt. Deutlich kleinere Dateien, schnellerer Upload, Aufnahmen ueber 1 Stunde moeglich. Chunking in 10-Minuten-Segmente bei Bedarf.",
"Hostpoint-Website bleibt Haupt-Website. Hetzner NICHT fuer Haupt-Website verwenden.",
"SICHERHEITS-ZIELBILD – HIN-nahe Schutzprinzipien als Benchmark fuer Browser-AZA: AZA ist NICHT HIN-zertifiziert und NICHT ISO-zertifiziert. Es handelt sich um ein Sicherheits-Zielbild / Benchmark / Architekturleitlinie, KEINE Marketingbehauptung. Folgende Prinzipien gelten als Orientierung: geschlossener Vertrauensraum, verifizierte digitale Identitaet (eID), Zwei-Faktor-Authentisierung (2FA), asymmetrische Verschluesselung, S/MIME-Verschluesselung, TLS-Transportverschluesselung, digitale Signatur, technische und organisatorische Massnahmen (TOM), ISMS nach ISO/IEC 27001 als Zielbild, EPD-/IdP-nahe Vertrauens- und Identitaetslogik als Orientierung. Browser-AZA ist Kern des Projekts und soll langfristig ein hohes Schutz- und Vertrauensniveau erreichen. Sicherheitsarchitektur orientiert sich an etablierten Schweizer Gesundheitswesen-Prinzipien.",
"HANDOVER-REGEL – Sicherheitsblock: Diesen Sicherheits-Benchmark NICHT jedes Mal neu diskutieren. Bei Sicherheits-/Architekturfragen auf dieses Zielbild zurueckgreifen statt neu zu improvisieren. Keine ueberzoegenen Aussenbehauptungen zu HIN/EPD/ISO ohne tatsaechliche Zertifizierung/Integration.",
"ARCHITEKTUR – Medikamenten-Quellenlogik: Inhaltsquelle und Originallink getrennt (FIX-11). Inhaltsquellen: _fetch_doccheck_info (Standard) und _fetch_pharmawiki_info (Fallback), benutzerwaehlbar ueber _MED_CONTENT_QUELLEN / med_content_quelle. Originallink: _MED_QUELLEN / medikament_quelle (CH=Compendium, AT=BASG, DE=BfArM) unveraendert. _MEDICATION_FACTS als Offline-Fallback. Deckt alle auf DocCheck + PharmaWiki verfuegbaren Medikamente ab. Spaetere Marktprofile (DE/AT) separat.",
"ZUKUNFTSBLOCK – Internationalisierung / Laender- und Quellenprofile: NICHT fuer jetzt. Erst DACH sauber stabilisieren (CH/DE/AT), Produkt erfolgreich machen, Go-Live sichern. Danach pruefen: Mehrsprachigkeit, laenderspezifische med. Quellenprofile. Profillogik vorsehen: app_language, market_region, med_source_profile, dx_source_profile, therapy_source_profile + manueller Override durch Benutzer/Praxis. Handelsnamen, Zulassungen, Fachinfos und Verfuegbarkeit sind laenderspezifisch – deshalb spaeter Quellenprofile pro Markt statt Einheitslogik."
],
"auth_contract":{
"api_token_env":"MEDWORK_API_TOKEN",
"header_name":"X-API-Token",
"important_endpoints":[
"/license/status",
"/api/project/status",
"/v1/transcribe"
],
"notes":[
"Healthcheck und Dev Tools müssen MEDWORK_API_TOKEN verwenden.",
"goal":"Neuen Endpunkt POST /v1/chat in backend_main.py erstellen. Desktop-App kann Chat-Anfragen ueber das Backend an OpenAI senden. OpenAI-Key liegt NUR serverseitig.",
"sprint_context":"Teil des B1 Backend-Sprints (Variante B). Grundstein fuer serverseitige OpenAI-Architektur.",
"warum_dieser_block_zuerst":"Ohne /v1/chat kann die Desktop-App nicht von direkten OpenAI-Calls auf Backend-Calls umgestellt werden. Muster existiert bereits bei /v1/transcribe. Alles andere (Hetzner-Deploy, Key-Entfernung) haengt davon ab.",
"scope":[
"POST /v1/chat Endpoint in backend_main.py",
"Auth via X-API-Token + X-Device-Id (bestehendes Muster)",
"Request entgegennehmen: model, messages, temperature etc.",
"Serverseitig OpenAI-Client mit OPENAI_API_KEY aus Umgebung",
"detail":"WooCommerce-Doku komplett (WORDPRESS_GOLIVE.md), aber in WordPress NICHT konfiguriert. Waehrung USD, Land US, kein Stripe Gateway, kein Subscription Plugin, Demo-Produkte vorhanden.",
"next":"WooCommerce gemaess WORDPRESS_GOLIVE.md konfigurieren (User-Aufgabe in WordPress-Admin)"
},
"download":{
"status":"teilweise",
"detail":"Download-Mechanik vorhanden (version.json, download.html). Fuer WooCommerce: Installer als Produkt-Download hochladen. URL-Inkonsistenz download vs downloads in publish-release.ps1.",
"next":"Installer-EXE in WooCommerce-Produkt hochladen"
},
"installer":{
"status":"funktional_fertig",
"detail":"Inno Setup komplett, Build-Scripts funktionsfaehig. Kein Code-Signing (SmartScreen-Warnung bei Kunden).",
"detail":"Kritischer Bruch behoben: Aktivierungsschluessel setzt jetzt Vollmodus. Erster Kundenweg: Entwickler generiert AZA-Key, sendet per E-Mail, Kunde gibt ein. DEMO_MAX_DICTATIONS=9999 entschaerft kurzfristig.",
"next":"Fuer spaetere Automatisierung: Hetzner-Backend mit Stripe-Webhooks deployen"
"detail":"Funktional, aber OpenAI-API-Key ist groesste Kundenhuerde. VARIANTE B gewaehlt: Kein eigener Key mehr fuer Kunden. App spricht mit Backend.",
"next":"B1 Backend-Sprint: POST /v1/chat Endpoint → Desktop-App umstellen → Hetzner Deploy → Kein Key-Setup mehr noetig"
"description":"Erst nach stabilem Kauf-/Download-/Installationspfad. Kein aktueller Hauptblock.",
"priority":"NACHGELAGERT"
}
],
"current_focus":{
"title":"Kauf / Download / Installation / Aktivierung – erster echter Kundenweg End-to-End",
"goal":"AZA Desktop als Subscription-Produkt (monatlich + Jahreslizenz) ueber aza-medwork.ch (Hostpoint WordPress + WooCommerce + Stripe) verkaufen. Der gesamte Weg von Kauf bis produktivem Grundbetrieb muss aus Kundensicht stabil sein. Bestehende Website NICHT beschaedigen.",
"in_progress_items":[
"Kauf-/Download-/Installationsweg End-to-End pruefen und festziehen",
"Version auf 1.0.0 gesetzt (aza_version.py, version.json)",
"Hard-Expiry auf 2027-03-31 verlaengert",
"Changelog und Installationsanleitung erstellt",
"v1.0.0 Installer gebaut und getestet (Build+Smoke+Installer gruen)",
"Signing-Readiness: sign_release.ps1 erstellt, Release-Pipeline mit optionalem Signing-Schritt, Artefakt-Report mit Signatur-Status, SIGNING_READINESS.md mit Checkliste und Zertifikats-Empfehlung",
"Publisher-/Namenskonsistenz geprueft: 3 Namensformen (AZA MedWork=Firma, AZA Desktop=Produkt, AZA Medical AI Assistant=interner Projektname). Nur AZA MedWork ist signing-kritisch. Vor Zertifikatskauf HR-Name pruefen und AppPublisher abstimmen.",
"Briefstil-Profile Fix+Nachschaerfung: KISIM/Klinischer Bericht als feste Systemprofile immer sichtbar, praezise medizinische Prompt-Definitionen, vereinheitlichtes Stilprofil-System (Haekchen+Dropdown+Standard fuer Arztbriefe) direkt im Brief-UI",
"Nachschaerfungs-Patch FIX-02: Stilprofil-Dialog nur Verwaltung (keine aktive Auswahl mehr im Dialog, nur Status+Lernen+Loeschen), Kommentare-Fenster oeffnet automatisch nach KG-Erstellung wenn Haekchen aktiv, Logo-Trennung (Wassertropfen=EXE/Desktop/Installer-Icon, originales Logo=internes Branding unten links)"
],
"non_goals_right_now":[
"Update-Komfort / separater Updater (bewusst nachgelagert, erst nach stabilem Kundenweg)",
"Browser-AZA Web-App (Step 22, nach Go-Live, aber verbindlich geplant)",
"Admin-Konsole",
"Weitere Desktop-UX-Aenderungen (keine Feature-Patches, nur Blocker-Fixes)",
"Hetzner-Server konfigurieren (erst wenn Browser-AZA dran ist)",
"Internationalisierung / Mehrsprachigkeit / Laender- und Quellenprofile (erst nach DACH-Stabilitaet und Produkterfolg)",