Files
aza/AzA march 2026 - Kopie (10)/project_roadmap.json

170 lines
13 KiB
JSON
Raw Normal View History

2026-04-16 13:32:32 +02:00
{
"version": 11,
"updated_at": "2026-03-31",
"project_phase": "PRODUKTIVPFAD + BETREIBER-KONTROLLE VOLLSTAENDIG BEWIESEN kein aktiver Hauptblock",
"b1_backend_sprint": {
"title": "B1 Backend-Sprint Variante B verbindlich",
"start": "2026-03-25",
"target": "ca. 2026-04-22",
"architekturentscheidung": "VARIANTE B: Desktop-App → AZA-Backend → OpenAI. Key nur serverseitig. Kein OpenAI-Key beim Kunden.",
"woche_1": "Backend Chat Proxy Endpoint (POST /v1/chat) + Auth + Rate Limiting",
"woche_2": "Desktop-App: 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",
"hostpoint_vs_hetzner": "Hostpoint bleibt fuer Website/WooCommerce. Hetzner ist JETZT der Backend-Pfad (OpenAI-Proxy/API). Beides parallel."
},
"priority_order": {
"1_hoechste": "B1-W1: Backend Chat Proxy POST /v1/chat (Woche 1)",
"2_hoch": "B1-W2: Desktop-App OpenAI-Calls auf Backend umstellen (Woche 2)",
"3_mittel": "B1-W3: Hetzner Deploy Docker/Caddy/HTTPS (Woche 3)",
"4_hoch": "B1-W4: E2E-Test + Go-Live-Freigabe Backend-Pfad (Woche 4)",
"5_parallel": "WooCommerce/Stripe/Kauf-Weg (Hostpoint) laeuft parallel weiter",
"explizit_nachrangig": "Update-Komfort, Auto-Updater, Browser-AZA Web-App, grosse Refactors"
},
"next_main_block": "KEIN AKTIVER HAUPTBLOCK. PRODUKTIVPFAD + BETREIBER-KONTROLLE BEWIESEN (2026-03-31). Moegliche naechste Bloecke: (1) Admin-Token-Rotation, (2) Betreiber-Runbook, (3) WooCommerce, (4) Lizenz-Lifecycle, (5) Browser-AZA. SICHERHEITSNOTIZ: AZA_ADMIN_TOKEN im Chat offengelegt, Rotation offen.",
"working_principles": [
"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"
],
"pricing_model": "Subscription: Basic (1 User) CHF 59/Monat bzw. CHF 590/Jahr. Team (2 User) CHF 89/Monat bzw. CHF 890/Jahr. KEIN Einmalkauf.",
"product_naming": {
"current_direction": "AZA Office",
"status": "Aktuelle bevorzugte Naming-Richtung noch nicht zwingend final juristisch/brand-strategisch entschieden",
"use_for": "WooCommerce-Produkt, Website, Download-Seite, Go-Live, Produktdarstellung",
"rule": "Bei spaeteren Diskussionen diese Richtung wiederverwenden statt Namen jedes Mal neu zu erfinden",
"favorite_long": "AZA Office Ihr medizinischer KI-Arbeitsplatz fuer die Praxis",
"second_choice": "AZA Office Die KI-Assistenz fuer medizinische Dokumentation",
"earlier_shortlist_aza_desktop": {
"note": "Fruehere Favoritenliste unter dem Namen AZA Desktop durch AZA Office abgeloest",
"favorites": [
"AZA Desktop Die KI-Loesung fuer medizinische Dokumentation",
"AZA Desktop KI-gestuetzte Praxisdokumentation fuer Aerzte",
"AZA Desktop Ihre Plattform fuer medizinische KI-Dokumentation",
"AZA Desktop Ihr medizinischer KI-Arbeitsplatz fuer die Praxis",
"AZA Desktop Die KI-Assistenz fuer medizinische Dokumentation",
"AZA Desktop Medizinische KI fuer Aerzte und Praxen"
],
"critically_assessed": "'von Aerzten' eher nicht verwenden"
}
},
"architecture": "Hostpoint=Website/Marketing/WooCommerce. Hetzner=AZA-Backend/API/OpenAI-Proxy (JETZT AKTIV, nicht mehr spaeter). KEINE DNS-Aenderungen ohne Pruefung.",
"openai_key_strategy": "VARIANTE B VERBINDLICH (2026-03-25): OpenAI-Key AUSSCHLIESSLICH serverseitig. Desktop-App → AZA-Backend → OpenAI. KEIN Key beim Kunden. KEIN Shared-Key. Lokale Key-Eingabe nur Dev-Fallback.",
"audio_format_locked": "ENDGUELTIG: Aufnahme direkt als M4A (AAC via ffmpeg-Pipe). NIEMALS auf WAV zurueckaendern.",
"security_benchmark": "HIN-nahe Schutzprinzipien als Sicherheits-Zielbild fuer Browser-AZA. Geschlossener Vertrauensraum, 2FA, asymm. Verschluesselung, TLS, digitale Signatur, TOM, ISMS ISO/IEC 27001 als Benchmark, EPD-/IdP-nahe Orientierung. KEINE Zertifizierungsbehauptung reines Zielbild.",
"phases": [
{
"name": "Core Desktop + Backend",
"status": "done",
"milestones": [
{ "name": "Step 13 - Smoke Suite PASS", "status": "done" },
{ "name": "Step 14 - Docker/Compose Smoke PASS", "status": "done" }
]
},
{
"name": "B1 Backend-Sprint Serverseitige OpenAI-Architektur (VARIANTE B)",
"status": "done",
"milestones": [
{ "name": "B1-W1 - Backend Chat Proxy POST /v1/chat", "status": "done" },
{ "name": "B1-W2 - Desktop-App OpenAI-Calls auf Backend umstellen", "status": "done" },
{ "name": "B1-W3 - Hetzner Deploy Docker/Caddy/HTTPS/Production-Env", "status": "done" },
{ "name": "B1-W4 - E2E-Test Desktop→Backend→OpenAI + Go-Live Backend-Pfad", "status": "done" },
{ "name": "B1-W5 - Desktop lokal auf Live-Backend: realer Live-Test", "status": "done" }
]
},
{
"name": "Lizenz-/Subscription-Lifecycle + WooCommerce/Stripe Live",
"status": "in_progress",
"milestones": [
{ "name": "STRIPE-W0 - Stripe Live-Webhook stabilisiert (StripeObject/Routing/Env-Fix)", "status": "done" },
{ "name": "STRIPE-W1 - Webhook Nacharbeiten (Sandbox-Kauf erfolgreich, lookup_key-Fallback, DB bereinigt)", "status": "done" },
{ "name": "STRIPE-W2-LIVE - Echter Live-Testkauf + Storno + Refund (license_debug=canceled, 3 Bugs gepatcht)", "status": "done" },
{ "name": "STRIPE-W3 - Desktop-Lizenzpfad gegen Live-Backend validiert (canceled → Testmodus korrekt)", "status": "done" },
{ "name": "ADMIN-V1 - Admin Monitor v1 live (system_status, licenses_overview, backup_status, billing_overview)", "status": "done" },
{ "name": "ADMIN-V2 - Control Panel v2 live (license_customer_map, revenue_overview, alerts, dashboard_summary)", "status": "done" },
{ "name": "BACKUP-MON - Backup/Storage-Monitor aktiv (taegliches Backup, /host_backups gemountet)", "status": "done" },
{ "name": "LIVE-KAUF - Echter Live-Kauf CHF 59, Backend-Lizenz active, Desktop Vollmodus, current_period_end korrekt (1777652509)", "status": "done" },
{ "name": "ACTIVATION-FIX - Desktop Aktivierungs-Gate Fix: _has_remote_backend() Bypass bei Remote-Backend (RC14)", "status": "done" },
{ "name": "CPE-FIX - current_period_end-Fallback in Webhook-Handlern (RC15)", "status": "done" },
{ "name": "BETREIBER-KONTROLLE - revenue_overview mit recent_charges/recent_refunds Einzelposten (RC16)", "status": "done" },
{ "name": "SEC-TOKEN - Admin-Token-Rotation (Token im Chat offengelegt, Rotation noch offen)", "status": "open" },
{ "name": "LIC-01 - Lizenz an Subscription koppeln, Rueckfall bei Kuendigung", "status": "open" },
{ "name": "LIC-02 - WooCommerce/Stripe Live-Setup inkl. Auszahlung auf Bankkonto", "status": "open" },
{ "name": "LIC-03 - Testkauf / Zahlungsfluss validieren", "status": "open" },
{ "name": "LIC-04 - Stripe-Konto fuehrend dokumentieren, Bankkonto/Auszahlung pruefen", "status": "open" }
]
},
{
"name": "Go-Live / Productization",
"status": "in_progress",
"milestones": [
{ "name": "Step 17 - Desktop-App + Installer + Kauf-/Download-Flow (CODE-KOMPLETT)", "status": "done" },
{ "name": "Step 15 - Caddy/HTTPS Reverse Proxy", "status": "done" },
{ "name": "Step 16 - Go-Live extern (aza-medwork.ch)", "status": "in_progress" },
{ "name": "Step 22 - Browser-AZA MVP (nach Backend-Architektur)", "status": "open" },
{ "name": "Step 18 - Website + Download + Billing Flow", "status": "done" },
{ "name": "Step 19 - Support/Telemetry minimal", "status": "done" },
{ "name": "Step 20 - Final Security pass", "status": "done" }
]
},
{
"name": "Sell-Ready Pack",
"status": "in_progress",
"milestones": [
{ "name": "Step 21 - Steps/Status/Roadmap/To-Dos konsolidiert", "status": "done" },
{ "name": "Step 17a - Installer-Workflow vorbereitet", "status": "done" },
{ "name": "Step 17b - Runtime Secret Provisioning + Installer gebaut", "status": "done" },
{ "name": "Step 17c - Praxiscomputer-Testpaket ready for field test", "status": "done" },
{ "name": "Step 17d - APPDATA-Persistence-Fix + Rebuild validiert", "status": "done" },
{ "name": "Step 17e - AZA-Startseite/Launcher mit Modulauswahl", "status": "done" },
{ "name": "Step 17f - Launcher 6 Module + Woechentlicher Login + Aktivierungsschluessel + App-Ablauf", "status": "done" },
{ "name": "Step 17g - Systemstatus/Selbsttest fuer Praxiscomputer-Validierung", "status": "done" },
{ "name": "Step 17h - Windows-Firewall-Fix fuer lokales Backend", "status": "done" },
{ "name": "Step 17i - Launcher Canvas-Icons + UX-Feinschliff", "status": "done" },
{ "name": "Step 17j - Kauf-/Download-Flow (Landing, Pricing, Checkout, Success, Download)", "status": "done" },
{ "name": "Step 17k - Live-Deploy-Readiness (CORS, Dockerfile, Caddyfile, Stripe-URLs, lokal verifiziert)", "status": "done" },
{ "name": "DX - Benutzerdaten bei Deinstallation erhalten + Signatur-Fallback + Minifenster-Rechtsklick + Kommentare-Fenster", "status": "done" },
{ "name": "DX - Autotext Root-Cause-Fix (_is_admin NameError + Listener-Revert auf Kopie 13)", "status": "done" },
{ "name": "DX - Signatur-UI (Haekchen + abweichender Name) in Einstellungen", "status": "done" },
{ "name": "BSL - Briefstil-Lernen aus frueheren Word-Briefen (DOCX-Upload, Stilprofil, Integration)", "status": "done" },
{ "name": "BSL - Briefstil-Lernen Erweiterungen (strukturierte Analyse, weitere Formate)", "status": "open" },
{ "name": "PCP - Persistenz/Consent/Profil-Patch (Erststart-Consent, Code-Feld, Kommentare-Toggle, Einstellungs-Gruppierung)", "status": "done" },
{ "name": "UEB - Uebersetzer-Stabilitaetsfix (Toplevel-Embedded statt Tkinter-in-Thread)", "status": "done" },
{ "name": "BRP - Vordefinierte Briefprofile: KISIM Bericht + Klinischer Bericht", "status": "done" },
{ "name": "DX - AZA Clean Uninstall/Reset Tool (saubere Deinstallation/Reset ohne Neustart, 2 Modi)", "status": "done" },
{ "name": "BRP - Briefstil-Profile Fix: Systemprofile immer sichtbar, praezise Prompts, vereinheitlichtes Stilprofil-UI", "status": "done" },
{ "name": "FIX - Korrektur-Patch: Uebersetzer-Label, Kommentare-Fenster, Korrektur-Scrollbar, Stilprofil-Live, KG-Inline, Zentrierung", "status": "done" },
{ "name": "FIX - Nachschaerfungs-Patch: Stilprofil-Dialog nur Verwaltung, Kommentare auto-open, Logo-Trennung (Wassertropfen=Icon, Logo=Branding)", "status": "done" },
{ "name": "FIX - Quellenstrenge Kommentarlogik: Inhaltsquelle/Originallink getrennt, DocCheck Standard + PharmaWiki Fallback, benutzerwaehlbar", "status": "done" },
{ "name": "SIGNING - Signing-Readiness vorbereitet (sign_release.ps1, Pipeline-Integration, Artefakt-Report mit Signatur-Status, SIGNING_READINESS.md)", "status": "done" },
{ "name": "SIGNING - Publisher-/Namenskonsistenz analysiert (3 Namensformen identifiziert, keine echten Inkonsistenzen)", "status": "done" },
{ "name": "SIGNING - Publisher-/Firmenname final festlegen (HR-Name pruefen, vor Zertifikatskauf)", "status": "open" },
{ "name": "SIGNING - Echtes Code-Signing-Zertifikat beschaffen und produktiv aktivieren (VOR Kundenauslieferung)", "status": "open" },
{ "name": "ARCH-MED - Naechste Stufe: Caching, Robustheit, HCI-API-Evaluation", "status": "open" },
{ "name": "ADMIN-V1/V2 - Admin Monitor v1 + Control Panel v2 live (8 Endpunkte, X-Admin-Token geschuetzt)", "status": "done" },
{ "name": "BACKUP-MON - Backup/Storage-Monitor aktiv (taegliches Backup, /host_backups, alerts)", "status": "done" },
{ "name": "BETREIBER-KONTROLLE - revenue_overview mit Einzelposten (recent_charges/recent_refunds)", "status": "done" },
{ "name": "GO-LIVE EXTERN - WooCommerce/Produktiver Verkaufspfad (MOEGLICHER BLOCK)", "status": "open" },
{ "name": "SEC - Sicherheits-Zielbild (HIN-nahe Schutzprinzipien) fuer Browser-AZA konkretisieren", "status": "open" },
{ "name": "Step 23 - Billing & Legal sell-ready (Invoices/VAT/AGB)", "status": "open" },
{ "name": "Step 24 - Ops/Monitoring/Runbook final", "status": "open" },
{ "name": "Step 25 - Go-Live Cutover", "status": "open" }
]
},
{
"name": "Zukunft / Internationalisierung (NACH DACH-Erfolg)",
"status": "geparkt",
"milestones": [
{ "name": "DACH-Markt sauber stabilisiert (CH/DE/AT) Voraussetzung", "status": "open" },
{ "name": "Profil-Architektur: app_language, market_region, med_source_profile, dx_source_profile, therapy_source_profile", "status": "geparkt" },
{ "name": "UI-Mehrsprachigkeit (z.B. franzoesische UI)", "status": "geparkt" },
{ "name": "Laenderspezifische Medikamentenquellen (Handelsnamen, Zulassungen, Fachinfos je Markt)", "status": "geparkt" },
{ "name": "Laenderspezifische Diagnose-/Therapiequellen", "status": "geparkt" },
{ "name": "Manueller Override durch Benutzer/Praxis", "status": "geparkt" }
]
}
]
}