Files
0pt/docs/compliance/RELATIONS.md
T

124 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RELATIONS — 0pt relationskarta (FAS 2)
> Verifierad mot kod 2026-08-10. Alla relationer är grep-/läs-verifierade (AR-5).
> Legenden: **sources.yaml** = kompliant källregistret · **bypass-stacken** = medvetet behållen
> per användarbeslut (se GOLDEN-STANDARD-REPORT), visas grått.
## 1. Router → källor
`services/api/workers/adaptive_router.py` bygger sourcingplan per marknad;
`services/api/sources/sources.yaml` är källregistret (kompliant sida). Skrapmotorn
(`services/scrapers/`) är den medvetet behållna bypass-sidan.
```mermaid
flowchart LR
subgraph Router["adaptive_router.py (workers)"]
R["plan_for_market(market) -> source_id-lista"]
end
subgraph Registry["sources.yaml (kompliant, 8 källor)"]
S1[gleif · global · api CC0]
S2[brreg · NO · api NLOD]
S3[companies_house · GB · api nyckel]
S4[prh · FI · api CC-BY]
S5[cvr · DK · api Virk]
S6[bolagsverket · SE · licensed]
S7[rdw · NL · bulk fordon]
S8[opensanctions · global · bulk screening]
end
subgraph Scraper["services/scrapers (medvetet behållen bypass)"]
W[waf_bypass.py: FlareSolverr/Tor/cloudscraper/curl_cffi]
E2[engine_v2.py]
C[clickhouse_pipeline.py]
end
R -->|NO| S2
R -->|GB| S3
R -->|FI| S4
R -->|DK| S5
R -->|SE| S6
R -->|NL| S7
R -->|global| S1
R -->|screening| S8
R -.->|"deep scraping (b0ts/legacy)"| E2
E2 --> W
E2 --> C
```
## 2. ST0RE-artefakter (lakehouse-write-vägen)
Enda skrivväg för Iceberg-state: `src/clients/st0re-lakehouse-client.ts` →
`/v1/st0re/lakehouse/*` (namespace → table → snapshot). Live-verifierad 2026-07-13.
```mermaid
flowchart LR
API["POST /api/0pt/lakehouse/mappings/{id}/writes"] --> WRITE[IcebergWriteService]
WRITE --> NS[registerNamespace<br/>X-Tenant-Id/X-Actor-Id]
NS --> T[registerTable<br/>IcebergTableInput]
T --> SNAP[createSnapshot<br/>manifestUri, aud0EventId]
SNAP --> MANI["Iceberg-manifest (bytes)<br/>N0D skriver faktiska filer"]
WRITE --> N0D[createJob /v1/n0d/jobs<br/>job_type=0pt.* heavy]
WRITE --> MAP["DatasetIcebergMapping (0pt, in-memory/Postgres mål)"]
MAP -.->|"mappingId->tableId"| T
```
## 3. N0D-jobb
`src/clients/n0d-client.ts` → `POST /v1/n0d/jobs`. 0pt begär jobb, äger aldrig
scheduling/GPU. Mock (`mock_job_*`) utan `N0D_URL` — testbar, inte verklig.
```mermaid
sequenceDiagram
participant S as Service (0pt)
participant N as N0D (POST /v1/n0d/jobs)
participant R as N0D-Runner
S->>N: createJob {tenant_id, project_id, job_type, input_artifact_ids, risk_level}
N-->>S: job_id (status=queued)
N->>R: scheduler -> worker
R-->>S: (0pt följer ej upp — poll/hook saknas, backlog)
```
## 4. AUD0-events (system of record)
`src/clients/aud0-client.ts` → `POST /v1/aud0/events` + `/v1/aud0/lineage/events`.
Event-typer som emiteteras i kod (grep-verifierat):
| event_type | Källa (service) | Linjage-event |
|---|---|---|
| `0pt.dataset_registered` | dataset-service.ts | — |
| `0pt.source_created` | source-service.ts | — |
| `0pt.source_rate_policy_created` | source-rate-policy-service.ts | — |
| `0pt.source_queried` | source-query-service.ts | — |
| `0pt.dataset_iceberg_table_mapped` | dataset-iceberg-mapping-service.ts | `lineage_0pt_dataset_iceberg_*` |
| `0pt.iceberg_write_requested` | iceberg-write-service.ts | — |
| `0pt.iceberg_snapshot_created` | iceberg-write-service.ts | `lineage_0pt_iceberg_snapshot_*` |
| `0pt.document_captured` | document-capture-service.ts | `lineage_0pt_document_captured_*` |
| `0pt.document_extracted` | document-extraction-service.ts | `lineage_0pt_document_extracted_*` |
| `0pt.external_record_written` | external-writeback-service.ts | `lineage_0pt_external_write_*` |
> ⚠️ Utan `AUD0_URL` är emissionen **no-op** (klientkontraktet) — lucka S6.
> Ingen live-AUD0-endpoint verifierad för 0pt ännu (klientdokkommentar).
## 5. Beroendepilar (AR-8, nedåt endast)
```mermaid
flowchart TD
UI[0pt.app UI] --> API[Next.js API-routes]
API --> CAP[src/ capability-lagret]
CAP --> CL[CL0UD policy · fail-open]
CAP --> ST[ST0RE artefakter/lakehouse]
CAP --> ND[N0D jobb]
CAP --> AU[AUD0 audit · no-op utan URL]
CAP --> EN[FastAPI-engine services/api]
EN --> SRC[Komplienta källor + bypass-stack]
CL -.->|K1| SAX[SIAX Cloud (K1) - endast nedåt, inga K2-K5]
ST -.->|K1| SAX
ND -.->|K1| SAX
AU -.->|K1| SAX
```
AR-8-status: **VERIFIERAT** — 0pt beror endast på K1-tjänster (CL0UD/ST0RE/N0D/AUD0/INF0)
+ externa data-/betalningskällor; inga kundrepon (K2–K5) refereras i koden.
## 6. Utfallsfil FAS 2
✅ `docs/compliance/RELATIONS.md` skapad med 4 Mermaid-diagram.