Files
VulneraDoc/README.md
T
2026-10-07 11:49:41 +02:00

420 lines
9.8 KiB
Markdown

# VulneraDoc
**VulneraDoc** ist eine native Android-Anwendung zur strukturierten,
offlinefähigen Wunddokumentation.
Die App ermöglicht die Verwaltung von Patienten und Wunddokumentationen,
unterstützt Fotos und digitale Unterschriften und erzeugt aus
abgeschlossenen Dokumentationen PDF-Dateien.
> **Projektstatus:** beta1.1
------------------------------------------------------------------------
## Features
### Patientenverwaltung
- Patienten anlegen und bearbeiten
- Stammdatenverwaltung:
- Vor- und Nachname
- Geburtsdatum
- Adresse
- bis zu drei Telefonnummern
- Patienten durchsuchen
- Datum der letzten Wunddokumentation anzeigen
### Wunddokumentation
Eine Wunddokumentation besteht aus mehreren datengetriebenen
Dokumentationsblöcken.
Jeder Block kann enthalten:
- vordefinierte Checkboxen
- Freitext
- automatische Speicherung bei Änderungen
Zwischen den Dokumentationsblöcken kann auf Smartphone und Tablet
navigiert werden.
Bestehende Dokumentationen können:
- bearbeitet
- gelöscht
- als Grundlage einer neuen Dokumentation fortgesetzt
werden.
Beim **Fortsetzen** wird eine neue Dokumentation aus dem vorherigen
Stand erzeugt. Die ursprüngliche Dokumentation bleibt unverändert
erhalten.
### Autosave
VulneraDoc benötigt keinen klassischen Speichern-Button.
Änderungen an Checkboxen werden unmittelbar persistiert. Freitexte
werden nach einem kurzen Debounce automatisch gespeichert.
Die lokale Datenbank bildet jederzeit den maßgeblichen persistierten
Stand der Dokumentation.
### Fotos
Einer Dokumentation können mehrere Fotos hinzugefügt werden.
Der Import erfolgt über den Android Photo Picker.
Importierte Bilder werden in den internen App-Speicher kopiert und
dadurch unabhängig von der ursprünglichen Datei in der Galerie
verwaltet.
### Digitale Unterschriften
Dokumentationen können direkt auf dem Android-Gerät per Finger oder
Stylus unterschrieben werden.
Das Datenmodell unterstützt mehrere Unterschriften pro Dokumentation,
beispielsweise für unterschiedliche Wundversorger.
### PDF-Export
Aus einer Dokumentation kann ein PDF erzeugt werden.
Dabei werden ausschließlich tatsächlich bearbeitete Dokumentationsblöcke
ausgegeben.
Das PDF enthält:
1. Patienten- und Dokumentationsinformationen
2. bearbeitete Dokumentationsblöcke
3. vorhandene Unterschriften
4. angehängte Fotos
Anschließend kann das PDF mit einem installierten PDF-Reader geöffnet
oder über den Android Sharesheet geteilt werden.
Das Dateinamensschema lautet:
``` text
Erstelldatum_Patientenname_Geburtsdatum.pdf
```
Beispiel:
``` text
2026-08-19_Max_Mustermann_1980-03-14.pdf
```
------------------------------------------------------------------------
## Offline First
VulneraDoc ist als vollständig offlinefähige Anwendung konzipiert.
Für die Kernfunktionen ist keine Internetverbindung erforderlich:
- Patientenverwaltung
- Dokumentationen erstellen und bearbeiten
- Autosave
- Fotos
- Signaturen
- Suche
- PDF-Erzeugung
Eine optionale Synchronisation mehrerer Geräte innerhalb eines lokalen
WLANs ist für eine spätere Version vorgesehen, aber nicht Bestandteil
von Version 1.
------------------------------------------------------------------------
## Tech Stack
Bereich Technologie
--------------- ------------------------------------
Sprache Kotlin
UI Jetpack Compose
Design Material 3
UI-State ViewModel + StateFlow
Asynchronität Kotlin Coroutines
Persistenz Room
Datenbank SQLite
Navigation Navigation Compose
Fotos Android Photo Picker
PDF `android.graphics.pdf.PdfDocument`
Dateifreigabe Android FileProvider
------------------------------------------------------------------------
## Architektur
VulneraDoc verwendet eine bewusst schlanke Schichtenarchitektur:
``` text
Jetpack Compose UI
│
▼
ViewModel
│
▼
Repository
│
▼
DAO
│
▼
Room
│
▼
SQLite
```
### UI
Jetpack Compose stellt den aktuellen Zustand dar und leitet
Benutzeraktionen an das jeweilige ViewModel weiter.
Die UI enthält keine SQL-, Datei- oder PDF-Logik.
### ViewModel
ViewModels verwalten den UI-State über `StateFlow` und koordinieren
Benutzeraktionen.
### Repository
Repositories bilden die zentrale Datenzugriffsschicht und koordinieren
DAOs sowie bei Bedarf lokale Dateien.
### DAO
DAOs enthalten ausschließlich Room-/SQLite-bezogene
Datenbankoperationen.
### Domain Model
Fachliche Datenmodelle sind von Room und Compose getrennt.
Room-spezifische Entities werden ausschließlich für die Persistenz
verwendet.
------------------------------------------------------------------------
## Datenmodell
Die wichtigsten Relationen sind:
``` text
Patient
│
│ 1:n
▼
Documentation
│
├── 1:n ── BlockState
│ │
│ └── 1:n ── CheckItemState
│
├── 1:n ── Photo
│
└── 1:n ── Signature
```
Als Primärschlüssel werden UUIDs verwendet.
Dies erleichtert insbesondere eine mögliche spätere Synchronisation
zwischen mehreren Geräten.
------------------------------------------------------------------------
## Historische Dokumentationen
Die Struktur einer neuen Wunddokumentation wird durch einen zentralen
`DocumentationCatalog` definiert.
Beim Erstellen einer Dokumentation werden die verwendeten:
- Blocktitel
- Checkboxtexte
- Reihenfolgen
als Snapshot persistiert.
``` text
DocumentationCatalog
│
│ neue Dokumentation
▼
persistierter Snapshot
│
▼
historische Dokumentation
```
Dadurch verändern spätere Änderungen des Dokumentationskatalogs nicht
rückwirkend bereits vorhandene Dokumentationen.
------------------------------------------------------------------------
## Projektstruktur
Die Anwendung orientiert sich an folgender Struktur:
``` text
app/
├── data/
│ ├── database/
│ ├── dao/
│ ├── entity/
│ ├── mapper/
│ └── repository/
│
├── domain/
│ └── model/
│
├── ui/
│ ├── documentation/
│ ├── patients/
│ ├── components/
│ ├── navigation/
│ └── theme/
│
├── media/
│ ├── photo/
│ └── signature/
│
├── pdf/
├── di/
└── MainActivity.kt
```
Dependency Injection wird zunächst ohne zusätzliches Framework über
einen zentralen `AppContainer` umgesetzt.
------------------------------------------------------------------------
## Datenschutz und lokale Speicherung
VulneraDoc verarbeitet sensible personenbezogene und medizinische Daten.
Daher gelten unter anderem folgende Architekturentscheidungen:
- Patientendaten werden lokal gespeichert.
- Fotos, Signaturen und PDFs werden bevorzugt im internen App-Speicher
abgelegt.
- Bilder werden nicht als BLOB in SQLite gespeichert.
- Es werden keine Patientendaten in normalen Logs ausgegeben.
- Es werden keine Analytics-Dienste verwendet.
- Cloud-/Android-Backups werden deaktiviert bzw. bewusst
eingeschränkt.
- Unnötige Android-Berechtigungen werden vermieden.
- `FLAG_SECURE` verhindert Screenshots und Recent-Apps-Vorschaubilder.
- Dateien werden extern ausschließlich gezielt über `FileProvider` und
`content://`-URIs freigegeben.
------------------------------------------------------------------------
## PDF und Schreibschutz
VulneraDoc erzeugt in Version 1 ein statisches PDF ohne interaktive
Formularfelder.
Mit „schreibgeschützt" ist derzeit **kein kryptographischer
Manipulationsschutz** gemeint.
Insbesondere sind in Version 1 nicht vorgesehen:
- PDF-Owner-Passwort
- Berechtigungsschutz
- kryptographische PDF-Signatur
Die PDF-Erzeugung wird hinter einem `DocumentationPdfExporter`
abstrahiert, sodass die konkrete PDF-Implementierung später ausgetauscht
werden kann.
------------------------------------------------------------------------
## Entwicklung
### Voraussetzungen
- Android Studio
- Android SDK
- JDK über Android Studio
- Android-Gerät oder Android Emulator
------------------------------------------------------------------------
## Projektphasen
### Phase 1 -- Architektur
- [x] Projektarchitektur
- [x] Datenmodell
- [x] Datenbankschema
- [x] Navigation
- [x] PDF-Konzept
- [x] Autosave-Konzept
- [x] Medien- und Signaturkonzept
### Phase 2 -- Projektgrundgerüst
- [x] Android-Projekt
- [x] Room-Datenbank
- [x] Entities
- [x] DAOs
- [x] Repositories
- [x] Navigation
- [x] ViewModels
### Phase 3 -- Kernfunktionalität
- [x] Patientenverwaltung
- [x] Patientenliste
- [x] Wunddokumentationsliste
- [x] Dokumentation erstellen
- [x] Dokumentationsblöcke
- [x] Blocknavigation
- [x] Autosave
- [x] Dokumentation bearbeiten
- [x] Dokumentation fortsetzen
### Phase 4 -- Medien
- [x] Fotoimport
- [x] Bildverwaltung
- [x] Digitale Signatur
- [x] Mehrere Signaturen
### Phase 5 -- PDF
- [x] PDF-Exporter
- [x] Dokumentationsblöcke
- [x] Signaturen
- [x] Fotoanhang
- [x] PDF anzeigen
- [x] PDF teilen
### Phase 6 -- Qualität und Stabilität
- [ ] Unit Tests
- [ ] Room Tests
- [ ] UI Tests
- [ ] Fehlerbehandlung
- [ ] Tablet-Optimierung
- [ ] Datenschutz-Review
### Phase 7 -- Multi-Device-Synchronisation
- [ ] Geräteidentität und Pairing
- [ ] Automatische Geräteerkennung im WLAN
- [ ] Differenzabgleich / Sync-Protokoll
- [ ] Patienten synchronisieren
- [ ] Wunddokumentationen synchronisieren
- [ ] Fotos synchronisieren
- [ ] Konflikterkennung und Konfliktauflösung
- [ ] Automatische Synchronisation
- [ ] Sync-Status und manueller Fallback
- [ ] Multi-Device- und Recovery-Tests