Files
F-r-ldraledigplannerare/backend/app/scrapers/fk_scraper.py
T
2026-06-01 16:48:21 +02:00

47 lines
1.8 KiB
Python

"""Försäkringskassan headless-browser scraper — STUB.
⚠️ DO NOT SHIP without completing the legal/ToS + BankID review (§2.3).
This stub exists so the FetchDataService interface is complete and all code
paths that would use scraping can reference FKScraperService without a real
implementation. Enable via settings.scraper_enabled = True ONLY after:
1. Legal sign-off on automated access and BankID automation.
2. Security review of the sandboxed container setup.
3. Explicit product decision to ship scraping publicly.
Until then, ManualFetchService (fetch_data_service.py) handles all data entry.
"""
from uuid import UUID
from app.entities.parental_leave import ParentalLeaveFetch
from app.services.fetch_data_service import FetchDataService
_LEGAL_GATE_MSG = (
"FK scraping is disabled pending legal/ToS + BankID review. "
"See ARCHITECTURE.md §2.3. Set settings.scraper_enabled=True only after sign-off."
)
class FKScraperService(FetchDataService):
async def get_latest(
self, personal_data_uuid: UUID, child_id: UUID
) -> ParentalLeaveFetch | None:
raise NotImplementedError(_LEGAL_GATE_MSG)
async def list_history(
self, personal_data_uuid: UUID, child_id: UUID
) -> list[ParentalLeaveFetch]:
raise NotImplementedError(_LEGAL_GATE_MSG)
async def start_bankid_session(self) -> str:
"""Initialize a BankID session and return a QR-code payload for the client."""
raise NotImplementedError(_LEGAL_GATE_MSG)
async def poll_session(self, session_id: str) -> dict:
"""Poll auth + fetch status. Returns {status, qr_data, result}."""
raise NotImplementedError(_LEGAL_GATE_MSG)
async def cancel_session(self, session_id: str) -> None:
raise NotImplementedError(_LEGAL_GATE_MSG)