Architektura Zaufania B2G · Dowody w Kodzie

Trust Center: Dane, Retencja, Izolacja i Audyt

Każda publikacja ma źródło i przechodzi weryfikację; przy braku danych system odmawia. Poniżej publikujemy techniczny rejestr mechanizmów ochrony danych, izolacji międzygminnej oraz rozliczalności AI zastosowanych w platformie CityPulse.

Region AI: europe-central2 (Warszawa) / EUIzolacja DB: PostgreSQL RLS (rolbypassrls = false)Retencja audit_logs: 12 miesięcy (365 dni)
01 · Lokalizacja Danych (RODO)

Gdzie przetwarzamy i przechowujemy dane

Przetwarzanie modeli AI, indeksów wyszukiwania oraz bazy danych realizujemy w regionach Unii Europejskiej (EOG).

  • Modele generatywne Genkit / Vertex AI działają w regionie europejskim europe-central2 (Warszawa).
  • Wyszukiwarka semantyczna Vertex AI Search (Discovery Engine) korzysta z punktu końcowego eu-discoveryengine.googleapis.com (multi-region EU).
  • Baza danych PostgreSQL (pgvector) oraz warstwa aplikacyjna pracują w europejskim regionie chmurowym (europe-west4).
Weryfikacja w kodzie:packages/shared/services/src/lib/services/rag.service.ts (locations/eu, eu-discoveryengine.googleapis.com)
02 · Retencja Danych

Okresy przechowywania i automatyczne czyszczenie

Stosujemy jawne limity czasu życia dla logów operacyjnych oraz pamięci podręcznej.

  • Logi audytowe (audit_logs) podlegają 12-miesięcznej retencji (365 dni) i są usuwane w transakcyjnych paczkach po 1000 rekordów.
  • Pamięć podręczna Redis dla pomocniczych embeddingów i grafik stosuje 30-dniowy czas wygasania (TTL 30 dni).
  • Zadanie retencyjne obsługuje tryb symulacji (--dry-run) przed wykonaniem operacji na bazie.
Weryfikacja w kodzie:scripts/audit-retention.ts:22-76 (cutoffDate = 365 dni, batchSize = 1000)
03 · Dostęp i Nadzór Redakcyjny

Kontrola dostępu RBAC i zasada Human-in-the-Loop

Żaden materiał nie trafia do publikacji z pominięciem pojedynczej bramy decyzyjnej i uprawnionego człowieka.

  • Bramka bezpieczeństwa API (checkApiSecurityGate) wymusza uwierzytelnienie i weryfikuje role ADMIN, EDITOR oraz AUDITOR (Fail-Closed 401/403).
  • Pojedyncza brama publikacji (canPublish) bezwzględnie odrzuca automatycznych publikatorów (system / bot) — publikacja wymaga zatwierdzenia przez redaktora.
  • Każda zmiana statusu artykułu zapisuje identyfikator aktora (changed_by) oraz historię wersji (article_versions).
Weryfikacja w kodzie:packages/shared/domain/src/lib/publish-gate.ts (canPublish) · apps/reader/src/middleware.ts:16-84 (checkApiSecurityGate)
04 · Izolacja Międzygminna

Separacja danych tenantów w bazie i w RAG

Dane każdej gminy są odseparowane na poziomie silnika PostgreSQL oraz zapytań wektorowych asystenta Ask City.

  • Tabele wielodostępne PostgreSQL posiadają polityki Row-Level Security (tenantPolicy oparte o app.current_tenant_id), a rola aplikacyjna ma wyłączone uprawnienie omijania RLS (rolbypassrls = false).
  • Zapytania RAG (pgvector oraz Vertex AI Search) nakładają twardy filtr citySlug / clientId przed wykonaniem LIMIT.
  • Każdy dokument zwrócony przez zewnętrzny indeks przechodzi weryfikację przynależności do miasta (Fail-Closed); obce dokumenty są odrzucane.
Weryfikacja w kodzie:packages/shared/database/src/lib/schema.ts (tenantPolicy) · packages/shared/services/src/lib/services/rag.service.ts (streamAskCity)
05 · Usuwanie i Eksport (RODO Art. 17 i 20)

Prawo do bycia zapomnianym i przenoszenia danych

Realizujemy usunięcie danych osobowych oraz ich eksport w kodzie usługowym w ramach transakcji bazodanowej.

  • Funkcja deleteUserData wykonuje twarde usunięcie (hard delete) rekordu z tabeli users oraz powiązanych zgłoszeń z tabeli leads.
  • Wpisy w audit_logs powiązane z użytkownikiem są anonimizowane (actorEmail = "[REDACTED]", actorId = null), a ślad wykonania prawa Art. 17 (user_rodo_erasure) nie zawiera żadnych danych osobowych (Zero PII).
  • W razie częściowego błędu transakcja kończy się statusem Fail-Closed (flaga ERASURE_PARTIAL). Funkcja exportUserData zapewnia eksport danych zgodnie z Art. 20 RODO.
Weryfikacja w kodzie:packages/shared/services/src/lib/privacy-service.ts:25-151 (deleteUserData, exportUserData)
06 · Audyt, Weryfikacja Źródeł i AI Act

Ugruntowanie faktów, jawność kosztów i oznaczanie AI

Każda publikacja ma źródło i przechodzi weryfikację; przy braku danych system odmawia.

  • Przy braku potwierdzenia w źródłach lub niedostępności zależności system zwraca jawny stan odmowy i flagi SystemFlags (GROUNDING_UNKNOWN, EMBEDDING_UNAVAILABLE, CONFLICT_UNRESOLVED) zamiast cichej degradacji.
  • Detektor sprzeczności (claim_conflicts) porównuje twierdzenia wyekstrahowane ze źródeł (daty, kwoty, statusy) i kieruje konflikty do weryfikacji redakcyjnej.
  • Zużycie tokenów i koszty modeli są rejestrowane per gmina w tabeli ai_usage_ledger, a ilustracje generowane przez AI posiadają oznaczenie: Ilustracja AI • Art. 50(4) EU AI Act.
Weryfikacja w kodzie:packages/shared/services/src/lib/grounding-audit.ts · packages/shared/services/src/lib/claim-conflict-detector.ts · packages/shared/domain/src/lib/runtime-flags.ts

Rejestr Dowodów Technicznych i Standardów Prawnych

System wspiera czytelność komunikacji urzędu zgodnie z rekomendacjami KPRM i RPO oraz wspiera zgodność z ustawą o dostępności cyfrowej (WCAG 2.1 AA). Pakiety wdrożeniowe mieszczą się poniżej progu ustawowego (170 000 zł netto); procedura zależy od regulaminu zamawiającego.

Obszar KontroliMechanizm Egzekwowania (Fail-Closed)Moduł w Repozytorium
Lokalizacja AI & RAGPrzypięcie do regionów UE (europe-central2 / locations/eu)rag.service.ts · llm-provider.ts
Izolacja TenantówPostgreSQL RLS (tenantPolicy) + filtr citySlug przed LIMITschema.ts · articles.ts
Brama PublikacjicanPublish (wymagany człowiek, blokada bot/system)publish-gate.ts
RODO Art. 17 & Art. 20Transakcyjny deleteUserData (Zero PII w audycie, ERASURE_PARTIAL)privacy-service.ts:25-151
Retencja LogówAutomatyczne czyszczenie audit_logs starszych niż 365 dniscripts/audit-retention.ts:22-76
Audyt UgruntowaniaRaport PDF pokrycia źródeł + detektor sprzeczności claim_conflictsgrounding-audit.ts · claim-conflict-detector.ts

Wnioski RODO (Art. 17 / Art. 20), Umowy Powierzenia (DPA) i Audyt Bezpieczeństwa

W sprawie usunięcia lub eksportu danych, weryfikacji umowy powierzenia przetwarzania danych (art. 28 RODO) lub zamówienia raportu ugruntowania źródeł dla gminy skontaktuj się z naszym zespołem: