"sprint_context":"Teil des B1 Backend-Sprints (Variante B verbindlich).",
"warum_dieser_block_zuerst":"Ohne /v1/chat kann Desktop-App nicht von direkten OpenAI-Calls migriert werden. Muster /v1/transcribe existiert. Alles weitere (Hetzner, Key-Entfernung) haengt davon ab.",
"architecture":"Hostpoint=Website/Marketing/WooCommerce. Hetzner=AZA-Backend/API/OpenAI-Proxy (JETZT AKTIV). KEINE DNS-Aenderungen ohne Pruefung.",
"openai_key_strategy":"VARIANTE B VERBINDLICH (2026-03-25): OpenAI-Key AUSSCHLIESSLICH serverseitig. Desktop-App → AZA-Backend (Hetzner) → OpenAI. KEIN Key beim Kunden. KEIN Shared-Key. Lokale Key-Eingabe nur Dev-Fallback.",
"audio_format_locked":"ENDGUELTIG: Aufnahme direkt als M4A (AAC 64kbps via ffmpeg stdin-Pipe). Kein WAV-Zwischenschritt. NIEMALS auf WAV zurueckaendern. WAV nur Fallback wenn ffmpeg fehlt.",
"3. Caching-Strategie festlegen (lokal vs. serverseitig)",
"4. Lokale Faktenliste durch Compendium-Zugang ersetzen (Faktenliste bleibt Offline-Fallback)",
"5. Spaetere Marktprofile fuer DE (BfArM/Gelbe Liste) und AT (BASG) separat aufbauen"
],
"rules":[
"_MEDICATION_FACTS bleibt als Offline-Fallback (kein Netz / Quelle nicht erreichbar)",
"DocCheck Flexikon + PharmaWiki Fallback ist die primaere Inhaltsquellen-Kette",
"Originallink (CH=Compendium, AT=BASG, DE=BfArM) bleibt separat und unveraendert",
"Keine erfundenen Einnahmehinweise – was nicht aus der Quelle kommt, wird weggelassen",
"Spaetere Laenderprofile (DE/AT/weitere) separat, nicht vermischen"
]
},
"security_benchmark_hin":{
"title":"HIN-nahe Schutzprinzipien als Sicherheits-Zielbild fuer Browser-AZA",
"disclaimer":"AZA ist NICHT HIN-zertifiziert, NICHT ISO-zertifiziert. Dies ist ein internes Sicherheits-Zielbild / Benchmark / Architekturleitlinie. Keine Marketingbehauptung.",
"principles":[
"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 / Benchmark",
"EPD-/IdP-nahe Vertrauens- und Identitaetslogik als Orientierung"
],
"rules":[
"Browser-AZA ist Kern des Projekts und soll langfristig hohes Schutz- und Vertrauensniveau erreichen.",
"Sicherheitsarchitektur orientiert sich an etablierten Schweizer Gesundheitswesen-Prinzipien.",
"Keine ueberzogenen Aussenbehauptungen zu HIN/EPD/ISO ohne tatsaechliche Zertifizierung/Integration.",
"Oeffentliche Website bleibt Hostpoint/WordPress – davon unabhaengig.",
"Spaetere geschuetzte App / Browser-AZA ist eigener Sicherheitsblock."
],
"handover":[
"Diesen Sicherheitsblock NICHT vergessen bei Architektur-/Sicherheitsentscheidungen.",
"NICHT jedes Mal neu diskutieren – auf dieses Zielbild zurueckgreifen.",
"Bei Sicherheits-/Architekturfragen diesen Benchmark konsultieren statt neu zu improvisieren.",
"TODO-IDs fuer Einzelpruefungen: SEC-01 bis SEC-08 in project_todos.json."
"description":"Steps/Status/Roadmap/To-Dos synchronisiert; Browser-AZA als Kernprojekt festgelegt.",
"files":[
"project_status.json",
"project_roadmap.json",
"project_plan.json",
"project_todos.json"
]
}
],
"steps":[
{
"step":22,
"title":"Browserbasiertes AZA (MVP) - zentral",
"goal":"Kleinste verkaufbare Browser-Version von AZA: Audio hochladen, über /v1/transcribe verarbeiten, Transkript direkt im Browser anzeigen und kopieren.",
"owner":"web/frontend/backend",
"status":"open",
"spec_file":"browser_aza_mvp_spec.md",
"scope":{
"in_scope":[
"Browser-UI mit einer klaren Hauptseite fuer Upload und Ergebnis",
"Minimaler Zugangsschutz (Token/License oder einfacher Login, ohne grosse Account-Plattform)",
"Fachrichtungsauswahl vor dem Upload",
"Audio-Upload an /v1/transcribe",
"Transkript im Browser anzeigen",
"Copy-to-clipboard fuer das Transkript",
"HTTPS erreichbar",
"Support-Link und Privacy/Terms sichtbar"
],
"out_of_scope":[
"Komplexes Rollen-/Rechtesystem",
"Mehrmandantenfaehige Admin-Konsole",
"Auto-Update fuer Desktop",
"Komplexe Rechnungserstellung im Browser",
"Analytics/BI Dashboard",
"Perfekte UI-Politur",
"Zusatzmodule ausserhalb des Kernflows"
]
},
"definition_of_done":[
"Browser-App ist ueber HTTPS erreichbar",
"User kann Fachrichtung waehlen",
"User kann eine unterstuetzte Audiodatei hochladen",
"Upload laeuft erfolgreich gegen /v1/transcribe mit X-API-Token/Auth-Mechanik des Projekts",
"Transkript wird im Browser sichtbar dargestellt",
"Transkript kann mit einem Klick kopiert werden",
"Fehlermeldung bei leerem/ungueltigem Upload ist benutzerverstaendlich",
"Support-Link und Privacy/Terms-Link sind sichtbar",
"Keine Secrets oder Tokens werden im Frontend oder Logs ausgegeben"
"Audio hochladen -> Request an /v1/transcribe erfolgreich",
"Antwort wird als Transkript sichtbar",
"Copy-Button kopiert Transkript",
"Support/Privacy sichtbar",
"HTTPS aktiv"
],
"implementation_order":[
"1. Minimales Browser-UI mit Upload-Seite festlegen",
"2. Zugangsschutz fuer MVP festlegen (einfach, ohne Umbau des Auth-Contracts)",
"3. Fachrichtungsauswahl in UI einbauen",
"4. Upload-Flow an /v1/transcribe anbinden",
"5. Ergebnisansicht + Copy-Button bauen",
"6. Support/Privacy sichtbar machen",
"7. HTTPS-Staging/Deployment pruefen"
],
"non_negotiables":[
"/license/status Schema bleibt exakt",
"Auth bleibt X-API-Token",
"Keine Tokens/Secrets loggen oder im UI offen anzeigen",
"Keine Breaking Changes am bestehenden Backend-Contract ohne separaten Step",
"Sicherheitsarchitektur orientiert sich am HIN-nahen Zielbild (siehe security_benchmark_hin). Keine Abkuerzungen bei Auth, Verschluesselung oder Identitaet ohne Pruefung gegen diesen Benchmark."
"title":"Internationalisierung / Laender- und Quellenprofile",
"goal":"UI-Sprache, Medikamenten-/Diagnose-/Therapiequellen und Quellenprofile pro Markt/Land anpassbar machen. Nicht hart nach Herkunftsland schalten, sondern saubere Profil-Logik mit manuellem Override.",
"note":"Domain – konsistent, kein Handlungsbedarf"
}
},
"analysis":{
"echte_inkonsistenz":"Keine echte Inkonsistenz – die verschiedenen Namen haben unterschiedliche Rollen (Firma vs. Produkt vs. interner Projektname). Alle drei Namensformen sind beabsichtigt.",
"signing_kritisch":"Nur 'AZA MedWork' (publisher_firma) ist fuer Code-Signing relevant. Dieser Name muss exakt mit dem Subject/CN/O des EV-Zertifikats uebereinstimmen.",
"vor_zertifikatskauf":[
"Pruefen: Ist der offizielle Firmenname im Handelsregister 'AZA MedWork', 'AZA MedWork GmbH', 'MedWork GmbH' oder anders?",
"Der Zertifikats-Anbieter validiert gegen den Handelsregistereintrag (EV-Validierung)",
"AppPublisher in aza_installer.iss muss EXAKT zum Zertifikat passen",
"SmartScreen/Smart App Control bauen Reputation auf den Publisher-Namen auf – nach Festlegung NICHT mehr aendern",
"Alle Stellen mit 'AZA MedWork' (legal, consent, installer, E-Mail-Absender) gemeinsam aktualisieren falls der HR-Name abweicht"
],
"kein_handlungsbedarf":[
"'AZA Desktop' als Produktname ist ueberall konsistent",
"'AZA Medical AI Assistant' als interner Projektname/Marketing ist ueberall konsistent",
"Domain aza-medwork.ch ist ueberall konsistent",
"Keine widersprüchlichen oder fehlerhaften Eintraege gefunden"