Reviewed-on: #8
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: In Entwicklung
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:
- Patienten- und Dokumentationsinformationen
- bearbeitete Dokumentationsblöcke
- vorhandene Unterschriften
- 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:
Erstelldatum_Patientenname_Geburtsdatum.pdf
Beispiel:
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:
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:
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.
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:
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_SECUREverhindert Screenshots und Recent-Apps-Vorschaubilder.- Dateien werden extern ausschließlich gezielt über
FileProviderundcontent://-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
Projekt öffnen
Repository klonen:
git clone <repository-url>
cd VulneraDoc
Anschließend den Projektordner in Android Studio öffnen.
Android Studio führt beim ersten Öffnen einen Gradle-Sync durch und lädt die benötigten Dependencies.
Danach:
Gradle Sync
↓
Build / Make Project
↓
Android-Gerät oder Emulator auswählen
↓
Run
Projektphasen
Phase 1 -- Architektur
- Projektarchitektur
- Datenmodell
- Datenbankschema
- Navigation
- PDF-Konzept
- Autosave-Konzept
- Medien- und Signaturkonzept
Phase 2 -- Projektgrundgerüst
- Android-Projekt
- Room-Datenbank
- Entities
- DAOs
- Repositories
- Navigation
- ViewModels
Phase 3 -- Kernfunktionalität
- Patientenverwaltung
- Patientenliste
- Wunddokumentationsliste
- Dokumentation erstellen
- Dokumentationsblöcke
- Blocknavigation
- Autosave
- Dokumentation bearbeiten
- Dokumentation fortsetzen
Phase 4 -- Medien
- Fotoimport
- Bildverwaltung
- Digitale Signatur
- Mehrere Signaturen
Phase 5 -- PDF
- PDF-Exporter
- Dokumentationsblöcke
- Signaturen
- Fotoanhang
- PDF anzeigen
- PDF teilen
Phase 6 -- Qualität und Stabilität
- Unit Tests
- Room Tests
- UI Tests
- Fehlerbehandlung
- Tablet-Optimierung
- Datenschutz-Review
Dokumentation
Die ausführliche technische Architektur befindet sich in der Projektdokumentation:
docs/
└── Architekturplanung.md
Dort werden unter anderem Datenmodell, Datenbankschema, Navigationskonzept, Autosave, PDF-Erzeugung und Medienverwaltung detailliert beschrieben.
Status
VulneraDoc befindet sich aktuell in Entwicklung und ist nicht für den produktiven Einsatz freigegeben.
Insbesondere bei der Verarbeitung realer Patientendaten müssen vor einem Produktiveinsatz die rechtlichen, datenschutzrechtlichen und sicherheitstechnischen Anforderungen abschließend geprüft werden.