Dateien nach "/" hochladen
This commit is contained in:
@@ -0,0 +1,459 @@
|
|||||||
|
# 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:
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
### Projekt öffnen
|
||||||
|
|
||||||
|
Repository klonen:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
Gradle Sync
|
||||||
|
↓
|
||||||
|
Build / Make Project
|
||||||
|
↓
|
||||||
|
Android-Gerät oder Emulator auswählen
|
||||||
|
↓
|
||||||
|
Run
|
||||||
|
```
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
|
- [ ] 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:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
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.
|
||||||
Reference in New Issue
Block a user