# Upgrade Baltique OS do Core 0.78.0

## Przed upgrade

1. Wykonaj pełny backup plików aplikacji.
2. Wykonaj pełny dump bazy MySQL.
3. Sprawdź, czy masz dostęp administratora do Baltique OS.
4. Wgraj pliki release 0.78.0.
5. Nie uruchamiaj ręcznie pojedynczych fragmentów SQL, jeżeli możesz użyć strony upgrade. Strona `/upgrade_0_78_0.php` wykonuje SQL oraz helper PHP z kontrolą istnienia kolumn i indeksów.

## Uruchomienie

1. Wejdź na `/upgrade_0_78_0.php`.
2. Kliknij **Uruchom upgrade 0.78.0**.
3. Po zakończeniu przejdź do `/system_enterprise_078.php`.
4. Wszystkie kontrole krytyczne powinny mieć status `OK`.

## Co robi upgrade

- tworzy `system_migration_ledger`, `system_modules`, `system_module_routes`, `system_module_dependencies`, `system_feature_flags`, `system_schema_compatibility_checks`;
- naprawia rozjazd Digital Twin między schematem legacy i runtime;
- dodaje `readiness_source_key` do OR Readiness i usuwa duplikaty statusów dnia;
- naprawia zgodność OR Mobile Push między `endpoint_hash/subscription_json` i `endpoint/p256dh/auth_secret`;
- wzmacnia archiwum podpisanych dokumentów;
- aktualizuje `core_version` i `schema_version` do `0.78.0`;
- zapisuje migrację w ledgerze z checksumem SQL.

## Idempotencja

Upgrade można uruchomić więcej niż raz. Błędy typu „duplicate column”, „duplicate key” lub „table already exists” są traktowane jako nieszkodliwe, a finalna zgodność jest wymuszana przez `app/enterprise_integration.php`.

## Rollback organizacyjny

Przed upgrade zachowaj backup plików i dump bazy. W razie potrzeby rollback polega na przywróceniu plików i bazy z backupu. Paczka 0.78.0 nie usuwa danych klinicznych; deduplikacja OR Readiness usuwa tylko starsze duplikaty tego samego dnia i tego samego źródła, zachowując najnowszy rekord.

## Kontrole po upgrade

Minimalne kontrole:

- `/system_enterprise_078.php` pokazuje wszystkie krytyczne checks jako `OK`;
- `/system_module_registry.php` zawiera moduły active i legacy;
- `/system_migration_ledger.php` zawiera wpis `086_core_0_78_enterprise_integration_stabilization`;
- `/or_digital_twin_optimizer.php` uruchamia symulację bez błędu `Unknown column simulation_date`;
- `/or_readiness_control_tower.php` nie dubluje pacjenta przy ponownym skanie dnia;
- `/or_mobile_push_escalation_center.php` nie wykonuje rejestracji bez poprawnego VAPID public key;
- podpisany dokument zapisuje się jako snapshot, a nie pusta karta.
