Documentation currently in Polish

Narzędzie kliniczne - praca z sesjami terapeutycznymi

Jak zbudowany jest Logbook

Logbook zamienia nagranie sesji w transkrypcję i ustrukturyzowaną notatkę kliniczną - domyślnie w całości na jednym komputerze. Architektura jest podporządkowana jednej zasadzie: dane pacjenta nie opuszczają urządzenia, chyba że klinicysta świadomie o to poprosi - i wtedy tylko po anonimizacji.

Zasada nośna

On-device by default, cloud by choice. Transkrypcja i praca z danymi odbywają się lokalnie (Whisper + model językowy przez Ollama). Model w chmurze (Claude / GPT) jest opcją włączaną ręcznie i dostaje wyłącznie tekst po pseudonimizacji - nazwiska i miejsca zamienione na tokeny. Surowy transkrypt nigdy nie jest wysyłany poza komputer. Maszyna proponuje, klinicysta zatwierdza.

01

Przepływ danych

Od pliku audio do zatwierdzonej notatki w kartotece. Każdy artefakt nosi etykietę pochodzenia: VERBATIM AI-SZKIC ZATWIERDZONE

wejście
Nagranie
Import pliku z dyktafonu lub nagranie w aplikacji, za odnotowaną zgodą pacjenta (RODO). Audio ląduje w szyfrowanej skrzynce roboczej poza vaultem.
wav · m4a · mp3 · aac
transkrypcja
Whisper (lokalnie) VERBATIM
mlx-whisper (Apple MLX/Metal) przepisuje sesję po polsku ze znacznikami czasu. Heurystyczna diaryzacja rozdziela terapeutę i pacjenta. Podgląd na żywo, pełne pokrycie nagrania.
mlx-community/whisper-large-v3-turbo · dekodowanie afconvert (bez ffmpeg)
anonimizacja
on-prem
Pseudonimizacja - bariera zaufania
Zanim tekst zobaczy jakikolwiek model, lokalny filtr NER zamienia osoby, miejsca i organizacje na tokeny [OSOBA-1]. Słownik odwrotny jest szyfrowany; klucz mieszka w Keychain. To jedyny punkt, przez który tekst przechodzi do dowolnego silnika.
spaCy pl_core_news_lg + lematy · AES-GCM · macOS Keychain
wybór silnika
Notatka - model lokalny albo chmura AI-SZKIC
Klinicysta wybiera, kto napisze szkic. Do obu dróg trafia ten sam, już zanonimizowany tekst.

On-prem

zero chmury · domyślne
  • Ollama + lokalny LLM
  • kontekst wzbogacony wiedzą z vaulta (RAG)
  • nic nie opuszcza komputera

Chmura

opcja · klucz API
  • Claude (SDK Anthropic) lub GPT (OpenAI)
  • tylko tekst po anonimizacji
  • strukturalna bariera assert_anonymized
weryfikacja
Przegląd i zatwierdzenie ZATWIERDZONE
Klinicysta czyta szkic obok transkryptu, poprawia i dopiero zatwierdza. Notatka staje się częścią kartoteki wyłącznie po ręcznej akceptacji; audio może zostać skasowane wg retencji.
panel 127.0.0.1 · dziennik audytu
kartoteka
Vault Obsidian + narastająca wiedza o pacjencie
Zatwierdzona notatka trafia do folderu pacjenta jako Markdown. Z kolejnych zatwierdzonych sesji lokalny model buduje „profil pacjenta" - podsumowanie wątków, wzorców i postępu, widoczne w oknie pacjenta.
pliki .md · Dataview · kalendarz wizyt
02

Granice zaufania

Co zostaje na komputerze, co może go opuścić i gdzie leży bariera.

● Na tym komputerze - zawsze
nagrania audio surowy transkrypt (VERBATIM) słownik pseudonimów (AES + Keychain) vault / kartoteka model lokalny (Ollama) indeks RAG (SQLite) nazwa pacjenta (etykieta klinicysty)
▚ Bariera - pseudonimizacja

Jedyne przejście dalej. Tekst bez tokenów [X-n] jest odrzucany (assert_anonymized). Sieć w runtime jest domyślnie wyłączona; test „offline-only" przechodzi dla całego lokalnego przepływu.

◇ Może opuścić komputer - tylko na życzenie
zanonimizowany tekst → Claude / GPT klucz API (z Keychain, nie z plików)

Wysyłka to świadoma decyzja operatora, oprawiona ostrzeżeniem RODO. Domyślnie nieaktywna.

03

Komponenty

Wszystko działa jako jeden proces lokalny; panel dostępny wyłącznie z tego komputera (127.0.0.1).

ASR - transkrypcja
mlx-whisper (Apple MLX). Pełne, surowe transkrypty PL ze znacznikami czasu.
Pseudonimizacja
spaCy NER + lematy; mapowania AES-GCM, klucz w Keychain. Bariera przed każdym modelem.
Silnik notatek
Lokalny LLM (Ollama) lub chmura (Claude/GPT). Prompty SOAP / DAP / pierwszorazowa w vaulcie.
RAG - wiedza
nomic-embed + sqlite-vec. Podpowiada tylko z notatek ZWERYFIKOWANYCH; izolacja per-pacjent.
Panel operatora
FastAPI + Jinja, 127.0.0.1. Kolejka, podgląd na żywo (SSE), przegląd, eksport, audyt.
Vault (kartoteka)
Obsidian - zwykłe pliki .md. Pacjenci, sesje, transkrypty, baza wiedzy, szablony.
Pacjenci + kalendarz
Konto pacjenta: nazwa, ikona, historia wizyt/nagrań, uwagi, profil AI. Kalendarz wg dat.
Sekrety i audyt
Klucze API w Keychain; dziennik zdarzeń append-only jako materiał do rejestru czynności.
04

Etykiety pochodzenia

Każdy tekst wie, skąd pochodzi. To centralna zasada epistemiczna - nic „miękkiego" nie udaje faktu.

VERBATIM

Wierny zapis nagrania z Whispera. Nietknięty, ze znacznikami czasu.

AI-SZKIC

Propozycja modelu (lokalnego lub chmurowego). Do redakcji, nigdy nie jest orzeczeniem.

ZATWIERDZONE

Tekst po akceptacji klinicysty. Dopiero to wchodzi do dokumentacji i zasila profil pacjenta.

Wiedza w bazie ma własny cykl: DO-WERYFIKACJI → ZWERYFIKOWANE - RAG korzysta wyłącznie ze zweryfikowanych.

05

Profile sprzętowe

Ten sam kod, model dobierany do maszyny (auto-detekcja RAM). Chmura zdejmuje wymagania sprzętowe kosztem prywatności - dlatego jest opcją, nie domyślną.

Profil A

Mac · 32 GB
Transkrypcja
Whisper large-v3-turbo
Model lokalny
Gemma 3 12B / Qwen3 14B (Q4), kontekst 16k
Tryb
sekwencyjny - ASR i LLM nie naraz

Profil B

Mac · 48 GB+
Transkrypcja
Whisper large-v3(-turbo)
Model lokalny
Qwen3 32B / Gemma 3 27B, kontekst 32k+
Tryb
równoległy - cała sesja w kontekście
06

Dystrybucja i instalacja

„Najpierw u mnie, potem wszędzie" - bez konta developerskiego, bez Homebrew, bez sudo.

Aplikacja natywna (.dmg)
Powłoka Swift (AppKit + WKWebView) - okno z panelem, ikona w pasku menu, sama uruchamia backend. Podpis ad-hoc; notaryzacja gotowa do włączenia z kontem Apple.
Paczka zip + install.sh
Kod + szablon vaulta + dokumentacja MD. Instalator dociąga zależności user-space (uv, Ollama, pandoc, typst, spaCy) i modele wg profilu. Modele poza paczką → <1 MB.
Samouczek + pierwsze uruchomienie
Kreator 7 kroków, jednorazowa deklaracja zgody RODO, auto-utworzenie vaulta. Codzienna praca bez powtarzania formalności.
07

Stos technologiczny

WarstwaTechnologiaDlaczego
Transkrypcjamlx-whisperNatywny Apple Silicon, offline, dobra polszczyzna; bez ciężkiego toolchainu (whisper.cpp wymagał cmake).
Model lokalnyOllamaHeadless API, łatwa podmiana modeli, zero telemetrii treści.
Model chmurowyClaude (opus-4-8) · GPTOpcjonalna jakość frontier - wyłącznie na tekście po anonimizacji.
AnonimizacjaspaCy pl · AES-GCMLokalny NER; mapowania szyfrowane, klucz w Keychain.
PanelFastAPI + JinjaLekki serwer lokalny (127.0.0.1), bez frameworka front.
Wiedza / RAGnomic-embed · sqlite-vecLokalny indeks; tylko zweryfikowana wiedza, izolacja per-pacjent.
KartotekaObsidian (.md)Dane jako zwykłe pliki - czytelne bez aplikacji, łatwy backup i migracja.
Eksportpandoc + typstMD → PDF/DOCX lokalnie, bez konwerterów online.
AplikacjaSwift AppKit + WKWebViewNatywne okno bez Rust/Node; kompilacja swiftc, .dmg przez hdiutil.
08

Kluczowe decyzje

Architektura jest wynikiem realiów maszyny i wymogu prywatności - nie teorii.

D1 · ASR
mlx-whisper zamiast whisper.cpp - brak Homebrew/cmake na maszynie; te same wagi, prostsze pakowanie.
D2 · instalacja
Wszystko user-space, bez Homebrew i sudo (uv + oficjalne binarki).
D6 · dekodowanie
afconvert (natywne macOS) zamiast ffmpeg - jedna zależność mniej.
D7 · aplikacja
Powłoka Swift (AppKit + WKWebView) zamiast Tauri - dostępny tylko Xcode CLT.
D8 · UX
Transkrypcja oddzielona od analizy; podgląd gromadzi cały tekst; koniec z „trybami".
D9 · chmura
Silnik chmurowy jako opcja po anonimizacji; klucze w Keychain; strukturalna bariera przed wysyłką.
D10 · aplikacja pacjentów
Samouczek, konto pacjenta (nazwa + ikona + historia), kalendarz, narastający profil AI on-prem.