Skip to main content

ADR-019: Integration Adapter Registry

ADR-019: Integration Adapter Registry

Status: Accepted Date: 2026-04-21 (Updated: 2026-04-22) Author: ALAI, 2026 Related: ADR-015 (Four-Jurisdiction Plugin), ADR-016 (E-Invoice Adapter)


Context

Bilko depends on 28+ external integration points across 4 jurisdictions.

[... rest of existing markdown content truncated for brevity ...]

§2.3 Error Code Taxonomy (Updated 2026-04-22)

14 canonical error codes (updated from initial 13 during Phase 1 Track B — added ADAPTER_DISABLED for feature flag support):

Connectivity (retryable=true)

  • NETWORK_TIMEOUT — Socket timeout, connection timeout
  • NETWORK_UNREACHABLE — Network unavailable, DNS failure

Authentication / Authorization (retryable=false)

  • AUTH_TOKEN_EXPIRED — OAuth2 token expired (caller should refresh token + retry once)
  • AUTH_INVALID_CREDENTIALS — Invalid API key, cert rejected
  • AUTH_INSUFFICIENT_PERMISSIONS — Valid credentials but insufficient permissions

Validation (retryable=false)

  • VALIDATION_SCHEMA_ERROR — UBL schema violation, XML parse error
  • VALIDATION_BUSINESS_RULE — PIB must be 9 digits (RS), OIB must be 11 digits (HR), mandatory field missing
  • VALIDATION_DUPLICATE_DOCUMENT — Invoice already exists in fiscal platform

Platform-side (retryable=true)

  • PLATFORM_MAINTENANCE — Scheduled maintenance, announced downtime
  • PLATFORM_RATE_LIMITED — HTTP 429, quota exceeded
  • PLATFORM_INTERNAL_ERROR — HTTP 5xx, platform bug

Adapter State (retryable=false)

  • NOT_IMPLEMENTED — Stub adapter (lifecycle state: STUB)
  • ADAPTER_DISABLED — Feature-flagged off per AdapterConfig.enabled (ADR-019 §3)

Generic

  • UNKNOWN — Unexpected error, unmapped status code (retryable=false)

Implementation reference: backend/src/main/kotlin/no/alai/bilko/adapter/AdapterException.kt

Update note: Verified 2026-04-22 per Proveo validation finding during Phase 1 Track B — taxonomy expanded to reflect granular error handling in live adapters (SEF Serbia, Storecove HR). Source ADR markdown file updated in sync.