2026-03-25 22:03:39 +01:00
{
"project" : "AZA Medical AI Assistant" ,
2026-03-30 07:59:11 +02:00
"phase" : "B1 Backend-Sprint ABGESCHLOSSEN – Variante B produktiv nachgewiesen" ,
"current_step" : "Lizenz-Subscription-Lifecycle" ,
2026-03-25 22:03:39 +01:00
"last_completed" : 17 ,
2026-03-30 07:59:11 +02:00
"next_step" : "Lizenz-Subscription-Lifecycle" ,
"last_update" : "B1 Backend-Sprint KOMPLETT ERLEDIGT (2026-03-27). B1-W1 bis B1-W5 alle erfolgreich. Desktop → Hetzner → OpenAI funktioniert in der echten App. Kein lokaler OpenAI-Key noetig. Naechster Hauptblock: Lizenz-/Subscription-Lifecycle." ,
"updated_at" : "2026-03-27" ,
2026-03-25 22:03:39 +01:00
"workspace" : {
2026-03-30 07:59:11 +02:00
"project_root" : "C:\\Users\\surov\\Documents\\AZA_GIT\\aza" ,
"current_working_folder" : "C:\\Users\\surov\\Documents\\AZA_GIT\\aza\\AzA march 2026" ,
"note" : "All commands and scripts should assume this root unless explicitly changed. ALTER PFAD C:\\Users\\surov\\Documents\\AZA\\backup 24.2.26 ist NICHT mehr aktuell."
2026-03-25 22:03:39 +01:00
} ,
"notes" : [
"Browser-basiertes AZA ist Kern des Projekts und nicht optional." ,
"Step 22 wird verbindlich nach browser_aza_mvp_spec.md umgesetzt." ,
"Kongress/CSE Thema ist geparkt (Google CSE 403 / DDG volatil). Fokus jetzt: Go-Live." ,
2026-03-30 07:59:11 +02:00
"Preismodell: Subscription. Basic (1 User): CHF 59/Monat, CHF 590/Jahr. Team (2 User): CHF 89/Monat, CHF 890/Jahr. KEIN Einmalkauf." ,
2026-03-25 22:03:39 +01:00
"PRODUKTNAME – AKTUELLE RICHTUNG: AZA Office. Bevorzugte Langform: 'AZA Office – Ihr medizinischer KI-Arbeitsplatz fuer die Praxis'. Zweite gute Variante: 'AZA Office – Die KI-Assistenz fuer medizinische Dokumentation'. Noch nicht zwingend final juristisch/brand-strategisch entschieden, aber aktuelle bevorzugte Naming-Richtung fuer WooCommerce/Website/Download/Go-Live/Produktdarstellung. FRUEHERE SHORTLIST (AZA Desktop): (1) Die KI-Loesung fuer medizinische Dokumentation, (2) KI-gestuetzte Praxisdokumentation fuer Aerzte, (3) Ihre Plattform fuer medizinische KI-Dokumentation, (4) Ihr medizinischer KI-Arbeitsplatz fuer die Praxis, (5) Die KI-Assistenz fuer medizinische Dokumentation, (6) Medizinische KI fuer Aerzte und Praxen. KRITISCH: 'von Aerzten' eher nicht verwenden." ,
2026-03-30 07:59:11 +02:00
"Architektur: Hostpoint = Website/Marketing/WordPress/Kadence/WooCommerce. Hetzner = AZA-Backend/API/OpenAI-Proxy/Browser-AZA (JETZT RELEVANT, nicht mehr spaeter)." ,
2026-03-25 22:03:39 +01:00
"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." ,
2026-03-30 07:59:11 +02:00
"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." ,
2026-03-25 22:03:39 +01:00
"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." ,
2026-03-30 07:59:11 +02:00
"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." ,
2026-03-25 22:03:39 +01:00
"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." ,
"Workspace root path fixed: C:\\Users\\surov\\documents\\aza" ,
"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." ,
"Token wird im Header X-API-Token gesendet." ,
"NICHT Authorization: Bearer verwenden." ,
"Keine Tokens loggen."
]
} ,
"project_phase_assessment" : {
2026-03-30 07:59:11 +02:00
"phase" : "B1 Backend-Sprint – Serverseitige OpenAI-Architektur (Variante B)" ,
"status_A" : "Desktop-App ist weit fortgeschritten und grundsaetzlich benutzbar" ,
"status_B" : "ARCHITEKTURENTSCHEIDUNG: Variante B gewaehlt – OpenAI-Key nur serverseitig" ,
"status_C" : "WooCommerce/Stripe-Pfad laeuft parallel weiter (Hostpoint)" ,
"status_D" : "Hetzner-Backend wird jetzt ernsthaft als Server-Pfad aufgebaut" ,
"status_E" : "Arbeitsphase = Backend-Zielarchitektur + Produktisierung parallel"
2026-03-25 22:03:39 +01:00
} ,
"go_live_sprint" : {
2026-03-30 07:59:11 +02:00
"title" : "B1 Backend-Sprint – Serverseitige OpenAI-Architektur (4 Wochen)" ,
"goal" : "AZA-Backend als OpenAI-Proxy verkaufsfaehig machen. Kein OpenAI-Key mehr beim Kunden." ,
2026-03-25 22:03:39 +01:00
"start" : "2026-03-25" ,
"target" : "ca. 2026-04-22" ,
2026-03-30 07:59:11 +02:00
"architekturentscheidung" : "VARIANTE B verbindlich: Desktop-App → AZA-Backend → OpenAI. Key nur serverseitig." ,
"operative_plattform" : "Hetzner (Backend/API/OpenAI-Proxy). Hostpoint bleibt fuer Website/WooCommerce." ,
2026-03-25 22:03:39 +01:00
"wochenplan" : {
2026-03-30 07:59:11 +02:00
"woche_1" : "Backend Chat Proxy Endpoint (POST /v1/chat) + Auth + Rate Limiting" ,
"woche_2" : "Desktop-App umstellen: alle OpenAI-Calls ueber Backend statt direkt" ,
"woche_3" : "Hetzner Deploy: Docker/Caddy/HTTPS + Production-Env + Smoke-Tests" ,
"woche_4" : "E2E-Test Desktop→Backend→OpenAI + Kundenweg ohne OpenAI-Key + Go-Live-Freigabe"
2026-03-25 22:03:39 +01:00
}
} ,
"priority_order" : {
2026-03-30 07:59:11 +02:00
"description" : "B1 Backend-Sprint Prioritaeten – Variante B verbindlich" ,
"1_hoechste" : "Backend Chat Proxy Endpoint POST /v1/chat (Woche 1)" ,
"2_hoch" : "Desktop-App von direktem OpenAI auf Backend umstellen (Woche 2)" ,
"3_mittel" : "Hetzner Deploy: Docker/Caddy/HTTPS/Production-Env (Woche 3)" ,
"4_hoch" : "E2E-Test Desktop→Backend→OpenAI + Go-Live-Freigabe (Woche 4)" ,
"5_parallel" : "WooCommerce/Stripe/Kauf-Weg laeuft parallel weiter (Hostpoint)" ,
2026-03-25 22:03:39 +01:00
"explizit_nachrangig" : [
"Update-Komfort / separater Auto-Updater" ,
2026-03-30 07:59:11 +02:00
"Browser-AZA Web-App (nach Backend-Architektur)" ,
"Grosse Refactors / Architektur-Spielereien die nicht direkt Variante B dienen"
2026-03-25 22:03:39 +01:00
] ,
2026-03-30 07:59:11 +02:00
"hostpoint_vs_hetzner" : "Hostpoint bleibt fuer Website/WooCommerce. Hetzner ist JETZT der Backend-Pfad fuer OpenAI-Proxy/API. Beides laeuft parallel, nicht gegeneinander."
2026-03-25 22:03:39 +01:00
} ,
"working_principles" : {
"description" : "Verbindliche Arbeitsweise fuer die naechsten Chats" ,
"rules" : [
"Root-cause-first statt blindem Nachpatchen" ,
"Ein klarer Block nach dem anderen" ,
"Keine 10 Baustellen gleichzeitig" ,
"Reale installierte Builds staerker gewichten als Code-Behauptungen" ,
"Nicht zu frueh 'fertig' sagen" ,
"Desktop unterscheiden in: 1. Dev-Code, 2. neu gebauter Installer, 3. reales Verhalten im installierten Build"
]
} ,
"next_main_block" : {
2026-03-30 07:59:11 +02:00
"title" : "Lizenz-/Subscription-Lifecycle" ,
"goal" : "Lizenzstatus zuverlaessig an Subscription-Zahlung koppeln. Rueckfall auf Testmodus bei Kuendigung/Nichtzahlung." ,
"status" : "offen" ,
"sprint_context" : "B1 Backend-Sprint ist komplett erledigt. Desktop → Hetzner → OpenAI funktioniert. Variante B produktiv nachgewiesen." ,
"warum_dieser_block" : "Backend-Pfad steht. Jetzt muss der Lizenz-/Zahlungsweg sauber funktionieren, damit Kunden produktiv arbeiten koennen." ,
"scope" : [
"Lizenz aktiv solange Subscription bezahlt ist" ,
"Rueckfall auf Testmodus / eingeschraenkten Modus bei Kuendigung/Nichtzahlung" ,
"App-/Lizenzstatus sauber und zuverlaessig pruefen" ,
"/license/status-Struktur NICHT kaputtmachen" ,
"Keine vorschnellen Auth-/API-Contract-Aenderungen"
] ,
"parallel_block" : {
"title" : "WooCommerce / Stripe Live-Setup" ,
"scope" : [
"WooCommerce-/Stripe-Konfiguration fertigstellen" ,
"Live-Zahlungsfluss vorbereiten" ,
"Auszahlung auf Bankkonto des Nutzers sicherstellen" ,
"Testkauf / Zahlungsfluss validieren"
]
} ,
"nachgelagert" : [
"Autotext-Fix" ,
"Fenstergroessen anpassen" ,
"Button-Groessen / Layout fuer Online-Praesentation" ,
"Allgemeiner UI-Feinschliff" ,
"Direkte OpenAI-Restpfade in Nebenmodulen bereinigen"
2026-03-25 22:03:39 +01:00
]
} ,
"customer_journey_analysis" : {
"date" : "2026-03-24" ,
"kauf" : {
"status" : "offen" ,
"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)." ,
"next" : "Code-Signing-Zertifikat beschaffen (vor breiter Auslieferung)"
} ,
"aktivierung" : {
"status" : "bridge_implementiert" ,
"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"
} ,
"erster_start" : {
2026-03-30 07:59:11 +02:00
"status" : "variante_b_live_erfolgreich" ,
"detail" : "B1 Backend-Sprint KOMPLETT ERLEDIGT (2026-03-27). Desktop → Hetzner → OpenAI funktioniert in der echten App. basis14.py lokal gegen Live-Backend erfolgreich getestet. Kein lokaler OpenAI-Key noetig." ,
"next" : "Lizenz-/Subscription-Lifecycle sauber machen."
2026-03-25 22:03:39 +01:00
}
} ,
"first_customer_workflow" : {
2026-03-30 07:59:11 +02:00
"description" : "Ziel-Kundenweg mit Variante B (nach B1 Backend-Sprint)" ,
2026-03-25 22:03:39 +01:00
"steps" : [
"1. Kunde kauft ueber WooCommerce/Stripe auf aza-medwork.ch" ,
"2. WooCommerce liefert Download-Link (E-Mail + Mein-Konto-Seite)" ,
"3. Kunde laedt aza_desktop_setup.exe herunter und installiert" ,
"4. App startet mit 21-Tage-Testphase (kein Key noetig)" ,
2026-03-30 07:59:11 +02:00
"5. Aktivierung ueber AZA-Key oder Stripe-Webhook (spaeter automatisch)" ,
"6. App laeuft im Vollmodus – KEIN OpenAI-Key noetig" ,
"7. Alle KI-Funktionen laufen ueber AZA-Backend auf Hetzner" ,
"8. OpenAI-Key liegt NUR auf dem Server, Kunde sieht ihn nie"
] ,
"uebergangsloesung_aktuell" : [
"B1 W1-W5 KOMPLETT ERLEDIGT (2026-03-27)" ,
"Desktop → Hetzner → OpenAI funktioniert in der echten App" ,
"Kein lokaler OpenAI-Key noetig fuer den Hauptpfad" ,
"NAECHSTER BLOCK: Lizenz-/Subscription-Lifecycle + WooCommerce/Stripe Live-Setup"
2026-03-25 22:03:39 +01:00
] ,
"manual_steps_by_developer" : [
"Key generieren: python aza_activation.py 2027-03-31" ,
"Key per E-Mail an Kunden senden" ,
"Spaeter automatisieren via Hetzner-Backend + Stripe-Webhooks"
]
} ,
"open_focus_blocks" : [
{
"id" : "FB-A" ,
"title" : "Kauf-/Download-/Installationsweg sauber festziehen" ,
"description" : "WooCommerce / Stripe / Download / Installer / Aktivierung – End-to-End aus Kundensicht" ,
"priority" : "HOECHSTE"
} ,
{
"id" : "FB-B" ,
"title" : "Kritische Desktop-Restfehler nur gezielt und einzeln behandeln" ,
"description" : "Keine neuen Monsterpatches. Root-cause-first. Installierten Build hoeher gewichten als Code-Behauptungen." ,
"priority" : "HOCH"
} ,
{
"id" : "FB-C" ,
"title" : "Windows-Kundenauslieferung absichern" ,
"description" : "Signing-Readiness vorbereitet. Produktives Signing vor Kundenauslieferung noch offen. Smart App Control / Reputation / Publisher-Konsistenz beachten." ,
"priority" : "MITTEL"
} ,
{
"id" : "FB-D" ,
"title" : "Update-Verbesserungen bewusst nachgelagert" ,
"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" ,
2026-03-30 07:59:11 +02:00
"goal" : "AZA Desktop als Subscription-Produkt (Basic CHF 59/Monat, Team CHF 89/Monat) 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." ,
2026-03-25 22:03:39 +01:00
"in_progress_items" : [
"Kauf-/Download-/Installationsweg End-to-End pruefen und festziehen" ,
"WooCommerce-Produkt + Stripe-Integration sauber machen" ,
"Installer-Datei als WooCommerce-Download hochladen" ,
"Testkauf im Stripe-Testmodus (monatlich + jaehrlich)" ,
"Download → Installation → Aktivierung → erster Start verifizieren" ,
"Stripe auf Live-Modus umschalten" ,
"Produktseite auf Home verlinken"
] ,
"completed_items" : [
"Desktop-App als EXE gebaut" ,
"Lokales Backend startet automatisch mit der Desktop-App" ,
"Lokaler Desktop-Smoke-Test ist gruen" ,
"Installer/Packaging mit Inno Setup gebaut" ,
"Desktop Runtime Secret Provisioning eingefuehrt" ,
"Default Opacity auf 1.0 korrigiert" ,
"Praxiscomputer-Testpaket erstellt (Installer, Anleitung, Checkliste, Rueckmeldebogen)" ,
"Update-Check gegen release/version.json verdrahtet" ,
"APPDATA-Persistence-Fix: Benutzerdaten unter %APPDATA%\\AZA Desktop statt Program Files" ,
"Release-Pipeline nach APPDATA-Fix erneut validiert (Build+Smoke+Installer gruen)" ,
"Praxiscomputer-Testpaket mit neuem Installer aktualisiert" ,
"AZA-Startseite/Launcher mit Modulauswahl und Auto-Open eingefuehrt" ,
"Launcher auf 6 Module erweitert (KI, KG, Audio-Notizen, Uebersetzer, MedWork Chat, Praxis Chat)" ,
"Woechentliches Login statt taeglich" ,
"App-Ablaufdatum 30.04.2026 eingebaut" ,
"Aktivierungsschluessel-System fuer Geraetesteuerung (aza_activation.py)" ,
"Praxiscomputer-Testpaket auf neuen Stand aktualisiert (6 Module, Aktivierung, Wochenlogin)" ,
"OpenAI-Key-Einrichtung professionalisiert: Setup-Helfer als Standardweg, Fallback auf Config-Datei" ,
"Premium-UI: Launcher und Setup-Dialog im Medizinprodukt-Design, keine technischen Begriffe in Nutzerdialogen" ,
"Uebersetzer-Modul: Tkinter-Threading-Bug behoben (eigener Tk-Mainloop im Hauptthread statt Thread)" ,
"Audio-Notizen-Modul: identischer Fix (direkter Start im Hauptthread)" ,
"Integrierter Systemstatus/Selbsttest: 12 Pruefpunkte, Diagnose-Kopieren, Praxiscomputer-Validierung" ,
"Praxiscomputer-Testpaket: Systemstatus in Anleitung, Checkliste und Rueckmeldung nachgezogen" ,
"Windows-Firewall-Fix: Installer legt minimale Regel (localhost:8000) an, Nutzerhinweis bei Backend-Fehler" ,
"Release-Pipeline erneut validiert (Build+Smoke+Installer gruen, Firewall-Regel im ISS, Publish-Bundle sauber)" ,
"Praxiscomputer-Testpaket auf finalen Stand aktualisiert (Installer, paketinfo, Checkliste, Rueckmeldung)" ,
"Firewall-Regel-Pruefung im integrierten Systemstatus (check_firewall_rule in aza_firewall.py)" ,
"Systemstatus Backend-Erkennung gefixt: Fallback auf lokale URL (127.0.0.1:8000) wie desktop_backend_autostart" ,
"Systemstatus Lizenz-Fix: X-Device-Id Header mitsenden (fehlte, daher device_enforcement=denied)" ,
"Systemstatus Aktivierung-Fix: check_app_access() gibt Tuple zurueck, nicht Dict" ,
"Systemstatus Lizenz-Token-Pfad-Fix: Im frozen Build _internal statt exe_dir durchsuchen (wie basis14.py)" ,
"Hauptfenster UX-Feinschliff: Tooltips fuer alle Toolbar-Buttons, Backend-Status entechnisiert, Beschriftungen professionalisiert" ,
"Launcher-Icons: Canvas-gezeichnete Vektor-Icons (Sparkle, Clipboard, Mikrofon, Dokumente, Netzwerk, Chat)" ,
"Kauf-zu-Download-Flow: Success-Seite, Landing-Page mit Pricing/Checkout, Download-Seite, reale Domain-URLs" ,
"Live-Deployment-Readiness: CORS-Middleware, Dockerfile backend_main:app, Caddyfile Static+API, Stripe-URLs produktionsreif, PRODUCTION_CONFIG.md" ,
"Deploy-Stack lokal verifiziert: 7/7 Routen gruen (Health, Download-API, Success, Cancel, Landing, Download-Page, version.json), CORS-Preflight OK" ,
"v1.0.0 Produktdefinition erstellt (deploy/PRODUCT_V1.md)" ,
"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." ,
"WooCommerce-Produkttexte vorbereitet (deploy/WOOCOMMERCE_PRODUCT.md)" ,
"Infrastruktur-Analyse: Hostpoint WordPress+Kadence+WooCommerce online (deploy/INFRA_STATUS.md)" ,
"Autotext Root-Cause-Fix: _is_admin NameError behoben, Listener auf bewaehrten Stand (Kopie 13) zurueckgesetzt" ,
"Deinstallation: Inno Setup fragt bei Deinstallation ob Benutzerdaten geloescht werden sollen (Standard: Nein, Daten bleiben erhalten)" ,
"Signaturlogik: load_signature_name() faellt automatisch auf Profilname zurueck wenn kein expliziter Signaturname gesetzt ist" ,
"Rechtsklick-Haekchen im Minifenster: gleiche Option wie im Hauptfenster, synchronisiert" ,
"Kommentare-Fenster: Grundstruktur implementiert (TEILWEISE – Detailmodus und Live-Aktualisierung noch offen)" ,
"Kommentarlogik quellenstreng: Inhaltsquelle und Originallink sauber getrennt. Inhaltsquelle (Detailinhalt): DocCheck Flexikon Standard, PharmaWiki Fallback, benutzerwaehlbar + persistent. Originallink: CH=Compendium, AT=BASG, DE=BfArM unveraendert. Kuratierte Fakten als Offline-Fallback. Inline nur Indikation. Therapien separat." ,
"Signatur-UI in Einstellungen: Haekchen 'Profilname verwenden' + Feld fuer abweichenden Signaturnamen" ,
"Briefstil-Lernen: DOCX-Upload, GPT-Stilanalyse, persistente Stilprofile, Integration vor Briefgenerierung (TEILWEISE – Erweiterungen offen)" ,
"Persistenz-Patch: KI-Einwilligung beim Erststart, Profil+Code persistent, Kommentare-Toggle, Einstellungen gruppiert, Deinstallations-Frage erweitert" ,
"Uebersetzer-Stabilitaetsfix: Root Cause Tkinter-in-Thread behoben, jetzt Toplevel-Embedded-Modus statt Threading" ,
"Vordefinierte Briefprofile: KISIM Bericht + Klinischer Bericht als auswaehlbare Berichtsprofile im Brief-Fenster" ,
"AZA Clean Uninstall/Reset Tool: PowerShell-Script fuer saubere Deinstallation/Reset ohne Neustart (tools/aza_clean_uninstall.ps1, AZA_Deinstallieren.bat)" ,
"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)" ,
"Monsterpatches oder breite Umbauaktionen"
] ,
"architecture" : {
"hostpoint" : "Oeffentliche Website, Marketing, WordPress, Kadence, WooCommerce, Stripe-Checkout, Download-Auslieferung" ,
2026-03-30 07:59:11 +02:00
"hetzner" : "AZA-Backend/API/OpenAI-Proxy (JETZT AKTIV). Docker/Caddy/HTTPS. Subdomain api.aza-medwork.ch oder app.aza-medwork.ch." ,
"variante_b" : "VERBINDLICH: Desktop-App → AZA-Backend (Hetzner) → OpenAI. Key nur serverseitig. Kein OpenAI-Key beim Kunden." ,
"rule" : "Hostpoint bleibt Haupt-Website. Hetzner ist der Backend-Pfad. Keine DNS-Aenderungen ohne klare Pruefung."
2026-03-25 22:03:39 +01:00
}
} ,
"step_22_deliverables" : [
"browser_aza_mvp_spec.md" ,
"Browser-Seite mit Upload-Bereich" ,
"Fachrichtungsauswahl vor Upload" ,
"Request-Flow an /v1/transcribe unter Beibehaltung von X-API-Token" ,
"Ergebnisansicht fuer Transkript" ,
"Copy-Button fuer Transkript" ,
"Support/Privacy/Terms sichtbar"
] ,
"step_22_acceptance_checks" : [
"Seite laedt im Browser" ,
"Fachrichtung kann ausgewaehlt werden" ,
"Audio kann hochgeladen werden" ,
"Backend /v1/transcribe antwortet erfolgreich" ,
"Transkript wird sichtbar angezeigt" ,
"Copy-Button funktioniert" ,
"Keine Secrets/Tokens im UI oder Log"
] ,
"phases" : [
{
"id" : 1 ,
"title" : "Core Desktop + Backend" ,
"items" : [
{ "title" : "Step 13: Smoke Suite PASS" , "status" : "done" } ,
{ "title" : "Step 14: Docker/Compose Smoke PASS" , "status" : "done" }
]
} ,
{
"id" : 2 ,
"title" : "Live Congress Search (PARKED)" ,
"items" : [
{ "title" : "CSE JSON API Zugriff stabil" , "status" : "paused" } ,
{ "title" : "Backend Live-Suche in Kongress-UI" , "status" : "paused" } ,
{ "title" : "Filter/UX News & Kongresse" , "status" : "paused" }
] ,
"why_paused" : [
"Google CSE: 403 not authorized / Access/Billing unklar" ,
"DDG scraping volatil (Bot block / 0 results / Response-Laenge sehr kurz)"
]
} ,
{
"id" : 3 ,
"title" : "Go-Live / Productization" ,
"items" : [
{ "title" : "Step 15: Caddy/HTTPS + Reverse Proxy Vorbereitung" , "status" : "done" } ,
{ "title" : "Step 17: Desktop-App + Installer + Kauf-/Download-Flow (Code-komplett)" , "status" : "done" } ,
{ "title" : "Step 16: Go-Live extern (VPS, DNS, Stripe, Secrets, Deploy)" , "status" : "in_progress" } ,
{ "title" : "Step 22: Browserbasiertes AZA (MVP) - nach Go-Live" , "status" : "open" } ,
{ "title" : "Step 18: Website/Landing + Download-Page + Rechnungen/Belege (Billing/Invoice Flow)" , "status" : "done" } ,
{ "title" : "Step 19: Support/Telemetry minimal (ohne PHI), Crashlogs optional" , "status" : "done" } ,
{ "title" : "Step 20: Final Security pass (rate limit, request caps, audit)" , "status" : "done" }
]
} ,
{
"id" : 4 ,
"title" : "Sell-Ready Pack" ,
"items" : [
{ "title" : "Step 21: Steps/Status/Roadmap/To-Dos konsolidiert" , "status" : "done" } ,
{ "title" : "Step 23: Billing & Legal sell-ready" , "status" : "open" } ,
{ "title" : "Step 24: Ops/Monitoring/Runbook final" , "status" : "open" } ,
{ "title" : "Step 25: Go-Live Cutover" , "status" : "open" }
]
}
] ,
"next_actions" : [
2026-03-30 07:59:11 +02:00
"ERLEDIGT B1-W1: POST /v1/chat Endpoint (2026-03-26)" ,
"ERLEDIGT B1-W2: Desktop Chat-Calls auf Backend migriert (2026-03-26)" ,
"ERLEDIGT B1-W3/W4: Hetzner-Deploy LIVE + Server-E2E (2026-03-26)" ,
"ERLEDIGT B1 Desktop-Finalisierung + Live-Test (2026-03-27)" ,
"ERLEDIGT B1-W5: Desktop → Hetzner → OpenAI in echtem App-Test bestaetigt (2026-03-27)" ,
">>> AKTUELLER HAUPTBLOCK: Lizenz-/Subscription-Lifecycle <<<" ,
"Lizenz aktiv solange Subscription bezahlt, Rueckfall bei Kuendigung/Nichtzahlung" ,
"/license/status-Struktur NICHT kaputtmachen" ,
">>> PARALLELER BLOCK: WooCommerce / Stripe Live-Setup <<<" ,
"WooCommerce-/Stripe-Konfiguration fertigstellen, Auszahlung auf Bankkonto sicherstellen" ,
"Stripe Lookup Keys: aza_basic_monthly (CHF 59), aza_basic_yearly (CHF 590), aza_team_monthly (CHF 89), aza_team_yearly (CHF 890)" ,
"Stripe-Konto fuehrend dokumentieren (Login, Modus, Webhook, Bankkonto)" ,
"Testkauf / Zahlungsfluss validieren" ,
"NACHGELAGERT: Autotext-Fix, Fenstergroessen, Buttons, UI-Feinschliff" ,
"NACHGELAGERT: Direkte OpenAI-Restpfade in Nebenmodulen bereinigen"
2026-03-25 22:03:39 +01:00
] ,
"todos" : [
{
"id" : "A-01" ,
"priority" : "SOFORT" ,
"status" : "in Arbeit" ,
"group" : "A – Go-Live extern" ,
"title" : "Hostpoint-Website stabil lassen" ,
"description" : "Keine riskanten Domain-/DNS-Experimente. Bestehende WordPress/Kadence-Seite bleibt Haupt-Website auf Hostpoint." ,
"area" : [ "ops" , "infra" ]
} ,
{
"id" : "A-02" ,
"priority" : "SOFORT" ,
"status" : "offen" ,
"group" : "A – Go-Live extern" ,
"title" : "Stripe Live-Setup sauber fertigstellen" ,
"description" : "Stripe-Keys (Live) in WooCommerce eintragen, Webhooks konfigurieren, Zahlungsmethoden aktivieren." ,
"area" : [ "billing" , "ops" ]
} ,
{
"id" : "A-03" ,
"priority" : "SOFORT" ,
"status" : "offen" ,
"group" : "A – Go-Live extern" ,
"title" : "Live-Secrets pruefen" ,
"description" : "deploy/.env: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, MEDWORK_API_TOKEN. Keine Secrets in Code oder Logs." ,
"area" : [ "security" , "ops" ]
} ,
{
"id" : "A-04" ,
2026-03-30 07:59:11 +02:00
"priority" : "ERLEDIGT" ,
"status" : "erledigt" ,
2026-03-25 22:03:39 +01:00
"group" : "A – Go-Live extern" ,
2026-03-30 07:59:11 +02:00
"title" : "Deploy-Stack auf Hetzner live (2026-03-26)" ,
"description" : "Docker Compose + Caddy + Backend auf Hetzner live. Services aza-api + aza-caddy laufen. api.aza-medwork.ch erreichbar. Haupt-Website bleibt auf Hostpoint." ,
2026-03-25 22:03:39 +01:00
"area" : [ "ops" , "infra" ]
} ,
{
"id" : "A-05" ,
"priority" : "SOFORT" ,
"status" : "offen" ,
"group" : "A – Go-Live extern" ,
"title" : "Testkauf Ende-zu-Ende durchfuehren" ,
"description" : "Stripe-Testmodus: Subscription monatlich + jaehrlich kaufen, Download-Link pruefen, E-Mail pruefen, Mein-Konto pruefen." ,
"area" : [ "product" , "billing" ]
} ,
{
"id" : "A-06" ,
"priority" : "SOFORT" ,
"status" : "offen" ,
"group" : "A – Go-Live extern" ,
"title" : "Download-/Lizenzfluss live validieren" ,
"description" : "Installer herunterladen, installieren, Aktivierung, Lizenzpruefung, Backend-Anbindung – alles End-to-End." ,
"area" : [ "product" , "release" ]
} ,
{
"id" : "B-01" ,
"priority" : "HOCH" ,
"status" : "offen" ,
"group" : "B – Verkauf / Subscription" ,
"title" : "Subscription in Website/Checkout konsistent abbilden" ,
2026-03-30 07:59:11 +02:00
"description" : "Basic (1 User): CHF 59/Monat, CHF 590/Jahr. Team (2 User): CHF 89/Monat, CHF 890/Jahr. Stripe Billing direkt (kein WooCommerce Subscriptions Plugin noetig). Pricing auf Produktseite, Checkout, E-Mails konsistent." ,
2026-03-25 22:03:39 +01:00
"area" : [ "product" , "billing" ]
} ,
{
"id" : "B-02" ,
"priority" : "HOCH" ,
"status" : "erledigt" ,
"group" : "B – Verkauf / Subscription" ,
"title" : "Pricing-Texte und Lizenztexte festziehen" ,
"description" : "deploy/PRODUCT_V1.md und deploy/WOOCOMMERCE_PRODUCT.md auf Subscription-Modell aktualisiert. Nicht mehr aendern, sondern verwenden." ,
"area" : [ "product" , "legal" ]
} ,
{
"id" : "B-03" ,
"priority" : "HOCH" ,
"status" : "offen" ,
"group" : "B – Verkauf / Subscription" ,
"title" : "Billing / Invoices / VAT / Stripe-Rechnungslogik" ,
"description" : "Rechnungen mit CHF, MwSt-Hinweis, korrekte Absenderadresse. Stripe Invoice-Einstellungen. AGB mit Subscription-Hinweisen." ,
"area" : [ "billing" , "legal" ]
} ,
{
"id" : "C-01" ,
"priority" : "HOCH" ,
"status" : "erledigt" ,
"group" : "C – Download-Produkt" ,
"title" : "Stabile Basisversion als erste verkaufbare Version definieren" ,
"description" : "v1.0.0 definiert, Installer gebaut und getestet. 6 Module, Systemstatus, Launcher, Firewall-Fix." ,
"area" : [ "release" , "desktop" ]
} ,
{
"id" : "C-02" ,
"priority" : "HOCH" ,
"status" : "erledigt" ,
"group" : "C – Download-Produkt" ,
"title" : "Release-/Update-Strategie sauber machen" ,
"description" : "Versionierung (v1.0.x / v1.x / v2.0), Update-Lieferung ueber WooCommerce-Account, Changelog als Website-Seite." ,
"area" : [ "release" , "product" ]
} ,
{
"id" : "C-03" ,
"priority" : "MITTEL" ,
"status" : "offen" ,
"group" : "C – Download-Produkt" ,
"title" : "Signierte Downloads / Versionierung / Changelog vervollstaendigen" ,
"description" : "Code-Signing nach erstem Live-Kauf. Changelog-Seite auf Website. version.json mit korrekter Download-URL." ,
"area" : [ "release" , "security" ]
} ,
{
"id" : "D-01" ,
"priority" : "HOCH" ,
"status" : "offen" ,
"group" : "D – Browser-AZA" ,
"title" : "Nach Go-Live Step 22 verbindlich starten" ,
"description" : "Browser-AZA ist Kern des Projekts. Wird nach Go-Live sofort gestartet, nicht optional." ,
"area" : [ "web" , "product" ]
} ,
{
"id" : "D-02" ,
"priority" : "HOCH" ,
"status" : "offen" ,
"group" : "D – Browser-AZA" ,
"title" : "Browser-AZA MVP nach Spec umsetzen" ,
"description" : "browser_aza_mvp_spec.md: Upload-Bereich, Fachrichtungsauswahl, /v1/transcribe, Ergebnisansicht, Copy-Button." ,
"area" : [ "web" , "frontend" , "backend" ]
} ,
{
"id" : "D-03" ,
"priority" : "HOCH" ,
"status" : "offen" ,
"group" : "D – Browser-AZA" ,
"title" : "Minimaler Zugangsschutz ohne Breaking Change" ,
"description" : "Auth fuer Browser-AZA, ohne /license/status oder X-API-Token Contract zu brechen." ,
"area" : [ "security" , "backend" ]
} ,
{
"id" : "D-04" ,
"priority" : "HOCH" ,
"status" : "offen" ,
"group" : "D – Browser-AZA" ,
"title" : "Upload-Flow / Result-Flow / Specialty-Auswahl bauen" ,
"description" : "Audio-Upload, Fachrichtungsauswahl, Transkript-Anzeige, Copy-Button. Keine PHI in Logs." ,
"area" : [ "web" , "frontend" ]
} ,
{
"id" : "E-01" ,
"priority" : "SPAETER" ,
"status" : "offen" ,
"group" : "E – Ops / Spaeter" ,
"title" : "Observability" ,
"description" : "Logging, Metriken, Alerting. Kein PHI in Logs. Uptime-Monitoring." ,
"area" : [ "ops" ]
} ,
{
"id" : "E-02" ,
"priority" : "SPAETER" ,
"status" : "offen" ,
"group" : "E – Ops / Spaeter" ,
"title" : "Admin-/Support-Tools" ,
"description" : "Admin-Panel, Support-Workflows, Nutzer-Management." ,
"area" : [ "ops" , "product" ]
} ,
{
"id" : "E-03" ,
"priority" : "SPAETER" ,
"status" : "offen" ,
"group" : "E – Ops / Spaeter" ,
"title" : "Runbook final" ,
"description" : "Backups, Log-Rotation, Incident-Playbook, Token-Rotation." ,
"area" : [ "ops" ]
} ,
{
"id" : "E-04" ,
"priority" : "SPAETER" ,
"status" : "offen" ,
"group" : "E – Ops / Spaeter" ,
"title" : "Go-Live Cutover final" ,
"description" : "Finale Checkliste, Rollback-Plan, DNS-Cutover fuer Browser-AZA (app.aza-medwork.ch)." ,
"area" : [ "ops" , "product" ]
}
]
}