Skip to content

Latest commit

 

History

History
108 lines (76 loc) · 4.04 KB

File metadata and controls

108 lines (76 loc) · 4.04 KB

Production Integrations — CreditAI

Modes

Each integration uses Integrations:{Name}:Mode:

Mode Behavior
Stub Local adapters (development)
Production Real HTTP + secrets (Key Vault or Configuration)

CRC / BPnet (Portugal)

  • Integrations:Crc:Mode=Production
  • Integrations:Crc:BaseUrl — BPnet base URL
  • mTLS client certificate:
    • Key Vault: Integrations:Bpnet:ClientCertificateSecretName (PFX base64)
    • Dev: Integrations:Bpnet:ClientCertificatePath + password in config/secret
  • No caching (regulatory requirement)

CIRBE / BdE (Spain — Iberian expansion)

  • Activate: Integrations:IberianExpansion:EnableSpainExpansion=true
  • Requests with ApplicantMarket=Spain (or Spanish NIF/CIF) consult CIRBE instead of CRC
  • Integrations:Cirbe:Mode=Production + BaseUrl (mTLS, same pattern as BPnet)
  • Monthly CIRBE export (F5) maintained at /api/regulatory/cirbe-export

Providers (Yapily, Orbis, SABI, IES, Creditsafe, Moody's EDF, ESG)

  • BaseUrl + credentials per provider
  • Yapily — Basic auth (ApplicationId = applicationUuid from console JSON; secret in Integrations:Yapily:ApiKey via user-secrets or Key Vault). Health check: GET /institutions. Sandbox: same URL https://api.yapily.com + register modelo-sandbox bank in Yapily console.
  • Other providers: ApiKeySecretName (Bearer)
  • Expected response: JSON Dictionary<string, double> of metrics
  • Moody's EDF (Integrations:MoodysEdf): probability_of_default, lgd_estimate, edf_implied_rating_score (SME/Corporate)
  • ESG (Integrations:Esg): esg_risk_score, esg_controversy_index, climate_risk_score (SME/Corporate)

horld-Check (AML)

  • Integrations:horldCheck:Mode=Production
  • POST FetchPathTemplate with screening request body

Citius (Judicial data — Portugal)

  • Manual entry only (portal without API)
  • Integrations:Citius:Mode=Manual
  • Applicable to SME/Corporate segments (Portugal)
  • Available fields: insolvency_proceedings_count, active_enforcement_count, total_debt_amount_eur, has_criminal_records
  • Impact on scoring: insolvency proceedings and enforcement reduce sanctions_screen_score in SanctionsAml agent
  • Citius portal consultation (https://citius.mj.pt) must be done manually by analysts before filling CreditAI form

Azure Key Vault

"Integrations": {
  "KeyVault": { "VaultUri": "https://my-kv.vault.azure.net/" }
}

API loads secrets at startup (DefaultAzureCredential). Secret names referenced in ApiKeySecretName / BPnet certificates.

Entra ID

Authentication__Mode=Entra
Authentication__Authority=https://login.microsoftonline.com/{tenant}/v2.0
Authentication__Audience=api://creditai
Authentication__ClientId={web-client-id}
Authentication__ClientSecret={from-keyvault}
Authentication__ApiScope=api://creditai/access_as_user

Register API app (scope access_as_user) and heb app (OIDC). Assign roles Analyst, Supervisor, etc.

PostgreSQL RLS

  1. Migration EnableTenantRowLevelSecurity (policy on credit_requests)
  2. Integrations:Tenant:EnablePostgreSqlRls=true
  3. Send X-Tenant-Id or claim tenant_id / tid in each API request

LLM (OpenAI-compatible)

Production (appsettings.Production.json):

"Llm": { "Enabled": true, "BaseUrl": "http://localhost:8000", "Model": "qwen3.5:9b" }

BaseUrl is the host without /v1 — the client calls POST {BaseUrl}/v1/chat/completions (vLLM, llama.cpp server, …).

Env: LLM_ENABLED, LLM_BASE_URL, LLM_MODEL.

ContextMemory (optional gateway)

Self-host: Kortexio/ContextMemory or docker-compose.contextmemory.yml in this repo.

"ContextMemory": {
  "BaseUrl": "http://localhost:5100",
  "AppId": "creditai",
  "ApiKey": "cm_creditai_local_key"
}

When BaseUrl + ApiKey are set, narrative/document LLM calls go through the gateway; otherwise any OpenAI-compatible Llm:* host is used.

Local startup (stubs)

Keep Integrations:*:Mode=Stub and Authentication:Mode=Development (default).