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