You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

9.6 KiB

Praktikumssoftware 2026.10.02.1 – Geschützter Praxisexport

Stand: 02.10.2026. Ausgangspunkt Praxisverwaltung 0.117.0 und Praktikumssoftware Build 2026.08.20.1. Die Änderungen aus 0.117.0 bleiben enthalten. Passender neuer Praktikums-Build: 2026.10.02.1 (Frontend-Paket 1.1.0).

Bedienung

  1. Beide Anwendungen aktualisieren und ihre Datenbankmigrationen ausführen.
  2. In der Praktikumssoftware anmelden und Monatsbericht öffnen. Zeitraum und ein eigenes Exportpasswort mit mindestens zwölf Zeichen angeben. Verschlüsselten Praxisexport herunterladen wählen.
  3. In der Praxissoftware im gewünschten eigenen Konto anmelden. Über Schnell finden → Praktikumsdaten importieren oder Fahrten & Fortbildung → Daten & Notfallplan den Import öffnen.
  4. .pcmtransfer-Datei und Exportpasswort eingeben. Vorschau prüfen, neue Einträge auswählen und die fachliche Prüfung bestätigen. Auswahl verbindlich importieren legt nur diese Datensätze an.
  5. Fahrten erscheinen im Fahrtenbuch, Lernaktivitäten unter Bildung & Nachweise. Kategorien, Ausbildungsphase, Kilometeransatz und fehlende Strecken/Fahrzeugdaten prüfen. Nachweisdateien können anschließend am Bildungseintrag ergänzt werden.

Dies ist ein geschützter, bewusst ausgelöster Dateiaustausch. Es handelt sich nicht um eine laufende Synchronisation oder um ein vollständiges Backup.

Daten und fachliche Grenzen

  • Datum, Ausbildungsbereich, Tätigkeitsart und Originalminuten werden übernommen. Stunden werden auf zwei Dezimalstellen umgerechnet; Originalminuten bleiben in den Notizen.
  • Kilometer und der im Quellsystem konfigurierte Jahressatz werden übernommen. Fehlt dort ein Satz, verwendet der Export den bestehenden Quellsystem-Ersatzwert 0,42 EUR/km und markiert ihn intern als Ersatzwert. Jeder importierte Kilometeransatz ist selbst zu prüfen; die Software ermittelt hier keine steuerliche Zulässigkeit.
  • Kosten bleiben Herkunftsnotizen. Es entstehen weder Ausgabenbuchungen noch Zahlungszuordnungen.
  • Ausbildungsaktivitäten werden zunächst als training erfasst. Vergangene Aktivitäten sind completed, zukünftige planned. Keine ECTS-Umrechnung, keine automatische Mediationsstunden-Zuordnung oder behördliche Anerkennung.
  • Unbekannte Tätigkeitsarten werden als Sonstiges gespeichert. Quelle und Originalart bleiben nachvollziehbar.
  • Beschreibungen werden nur bei ausdrücklicher Auswahl im Export mitgenommen. Standardmäßig sind sie ausgeschlossen. Namen von Klienten, Kontopasswörter, E-Mail-Adressen und API-Tokens sind keine Exportfelder.
  • Das vorhandene Quellmodell besitzt keine angehängten Nachweisdateien. Diese werden deshalb nicht übertragen und können im Ziel ergänzt werden.
  • Laufende Zeiterfassungen werden ausgelassen und als Anzahl angezeigt. Einträge ohne Minuten und ohne Kilometer erzeugen keinen Ziel-Datensatz. Maximal 500 Quelleinträge beziehungsweise 1.000 Zielzeilen pro Export, maximal 4 MiB Datei.
  • Ein Quelleintrag mit Kilometern und Zeit wird zu zwei unabhängig auswählbaren Zielzeilen: Fahrt und Lernaktivität.

Schutzmaßnahmen

AES-256-GCM mit zufälligem Salt und IV; Schlüsselableitung PBKDF2-HMAC-SHA256 mit 600.000 Iterationen. Das Passwort steht nicht in der Datei. Veränderung und falsches Passwort führen zur Ablehnung. Algorithmus und KDF-Aufwand sind fest vorgegeben. Das Format ist versioniert.

Export und Import benötigen jeweils die Anmeldung im betreffenden Konto. Die Quelle exportiert nur eigene Einträge. Das Ziel ignoriert keine fremden Benutzerangaben, sondern lehnt nicht unterstützte Felder ab; sämtliche Zielzuordnungen stammen vom angemeldeten Benutzer. Nur klinisch berechtigte Praxisrollen dürfen importieren. Vorhandene Verschlüsselung der Zielmodelle bleibt erhalten.

Eine signierte Vorschau ist 15 Minuten gültig und an Benutzer und Dateihash gebunden. Auswahl und Dubletten werden beim Speichern erneut unter Kontosperre geprüft. Datensätze, Importbelege und Audit-Ereignis werden transaktional gespeichert. Bereits importierte Datensätze werden übersprungen; Änderungen erzeugen einen Konflikt. Gelöschte Ziel-Datensätze werden nicht unbemerkt erneut angelegt. Importbelege enthalten nur gehashte Quellidentität/Fingerabdruck und Zielreferenzen, keine Beschreibung. Sie bleiben nach einer einzelnen Datensatzlöschung als Dublettenschutz erhalten, bis das Konto gelöscht wird.

Passwörter/Vorschautoken sind aus Rails-Parameterlogs gefiltert. Antworten haben Cache-Control: no-store. Kein Passwort oder entschlüsselter Vorschauinhalt wird in Local Storage gespeichert. Passwortfelder werden nach erfolgreicher Übernahme geleert. Die Benutzeroberfläche verweigert Datenaustausch auf unverschlüsselten entfernten HTTP-Seiten; lokale Entwicklungsadressen sind ausgenommen. Die Produktions-API verlangt HTTPS zusätzlich serverseitig.

In der Praktikums-API wurde außerdem behoben, dass ein fehlender Token-Digest bei einem Konto ohne Token passen konnte. Fehlende Tokens und andere Authentifizierungsschemata als Bearer werden jetzt abgelehnt.

Installation und HTTPS

Vor dem Update jede Datenbank separat sichern und vorhandene Konfiguration/Schlüssel behalten. Die beiden Projektordner gehören in ihre jeweiligen bestehenden Installationen, nicht ineinander. Keine neue .env über eine bestehende Serverkonfiguration kopieren.

Neue Migrationen:

  • Praxis: 20261002090000_create_professional_import_receipts.rb
  • Praktikum: 20261002080000_add_practice_transfer_id_to_users.rb

In jedem Projekt die neuen Images bauen, db:prepare vor dem Neustart ausführen und erst nach erfolgreichem Healthcheck wieder freigeben. Die Praxis verwendet weiterhin ihren vorhandenen Deploy-/Rollback-Prozess. Bei einer manuellen Wartungsinstallation sind die Kernschritte je Projekt:

docker compose build
docker compose run --rm api bin/rails db:prepare
docker compose up -d

Diese Befehle setzen laufende Datenbank/Redis und korrekt gesetzte bestehende Umgebungsvariablen voraus. Vorherige Images und Datenbanksicherung für einen kontrollierten Rollback behalten. Bei Rückkehr zum alten Code die neuen Importtabellen/-spalten stehen lassen; keine automatische Down-Migration, da sie den Dublettenschutz entfernen würde. Vor einem erneuten Import nach einer Datenbankwiederherstellung beide Datenstände prüfen.

Beide öffentlichen Anwendungen über HTTPS bereitstellen. API-Ports dürfen nur dem vertrauenswürdigen Reverse Proxy zugänglich sein. In der Praxis muss der bestehende sichere Cookie-/TLS-Proxy-Betrieb korrekt konfiguriert sein. In der Praktikumssoftware ist neu ASSUME_SSL an den API-Container durchgereicht: nur hinter einem tatsächlich TLS-erzwingenden, vertrauenswürdigen Proxy auf true setzen. Alternativ den ursprünglichen HTTPS-Status korrekt bis Rails durchreichen. ASSUME_SSL=true schaltet selbst kein TLS ein. Ein HTTP-Produktionsaufruf wird mit HTTP 426 und verständlichem Hinweis abgelehnt.

Keine Produktionsgeheimnisse im Paket. Vorhandene private Credentials-Dateien bleiben Teil der jeweiligen Installation. Entwicklungs-Datenbankpasswörter werden ebenfalls über Umgebungsvariablen gesetzt.

Geprüft und offen

  • Praxis: Produktionsbuild erfolgreich; 143 Frontend-Tests in 37 Dateien erfolgreich.
  • Praktikum: Produktionsbuild erfolgreich; 4 Frontend-Tests in 2 Dateien erfolgreich.
  • Praxis: 51 HTML-Templates auf Übersetzungsabdeckung geprüft, keine fehlende englische Übersetzung im automatisierten Template-Check. UI-Konsistenzprüfung erfolgreich.
  • npm audit: in beiden aktualisierten Frontends 0 gemeldete Schwachstellen. Praktikum: Angular-Runtime 22.2.1, Build/CLI 22.1.4, gezielter Piscina-Override 5.3.2. Keine erzwungene Major-Aktualisierung. Lockfiles enthalten die geprüften Versionen.
  • Praxisbuild: fünf bestehende SCSS-Budgetwarnungen außerhalb der neuen Importkomponente; kein Buildfehler.
  • Rails-Spezifikationen für Verschlüsselung, Kontotrennung, Auswahl, Dubletten, Konflikte, Löschschutz, Transaktion und Vorschau-Bindung sowie Quell-API-Authentifizierung ergänzt. Nicht ausgeführt: Ruby/Bundler und PostgreSQL sind hier nicht verfügbar. bundle exec rspec und ruby test/practice_transfer_test.rb konnten deshalb nicht starten.
  • Kein Docker-Build, kein Produktivdeployment und kein browsergestützter Ende-zu-Ende-Test gegen laufende Backends ausgeführt. Migrationen und verschlüsselter Roundtrip sind vor Freigabe auf einer Testinstallation auszuführen.

Backend-Prüfung auf einer geeigneten Testumgebung:

# Praxis/backend, ausschließlich separate Testdatenbank:
RAILS_ENV=test bundle exec rails db:prepare
bundle exec rspec spec/services/professional_transfer_envelope_spec.rb spec/services/professional_transfer_import_spec.rb spec/requests/api/v1/professional_transfers_spec.rb
# Praktikumsprojekt, ausschließlich separate Testdatenbank:
RAILS_ENV=test bundle exec rails db:prepare
bundle exec ruby test/practice_transfer_test.rb

English summary

This release adds an authenticated, password-encrypted file transfer from the internship application to the practice application. Open Monthly report in the updated source app to export a date range, then use Import internship records in practice quick find. Review and select records before confirming. Repeated imports are skipped; changed sources are marked for manual review. Learning activities initially use the training phase. No automatic professional credit, certificate transfer, accounting entry or ongoing synchronization is performed. Both applications and migrations are required. Frontend builds/tests and dependency audits pass; Rails, migration and live end-to-end verification remain pending because the required runtimes are unavailable here.