Sign In

@ar-agents/banking-bcra

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ar-agents/banking-bcra

BCRA Central de Deudores agent toolkit for the Vercel AI SDK 6. Read-only credit-history lookup for Argentine CUITs against the BCRA's public Central de Deudores + ChequesRechazados endpoints. The B2B credit-check default before extending any non-trivial

Source
npmnpm
Version
0.2.0
Version published
Weekly downloads
41
95.24%
Maintainers
1
Weekly downloads
 
Created
Source

@ar-agents/banking-bcra

BCRA Central de Deudores agent toolkit for the Vercel AI SDK 6+. Read-only credit-history lookup for Argentine CUITs against BCRA's public Central de Deudores + ChequesRechazados endpoints. The B2B credit-check default before extending any non-trivial line of credit.

pnpm add @ar-agents/banking-bcra

What's inside

  • HttpBcraAdapter — real adapter against the public BCRA host (api.bcra.gob.ar). No auth, no key, no token. BCRA enforces ~100 req/min at their edge — use middleware to throttle if you're bulk-checking.
  • InMemoryBcraAdapter — deterministic seeded adapter for tests. Returns BcraNotFoundError for unseeded CUITs (BCRA-realistic semantics).
  • UnconfiguredBcraAdapter — explicit throwing default.
  • summarizeDebt + riskBand — pure helpers that turn the multi-row BCRA response into a single risk band ready to gate on.
  • 4 Vercel AI SDK toolsbcra_get_debt, bcra_get_debt_summary (the one you want), bcra_get_historical_debt, bcra_get_bounced_checks.

Quick start

import { HttpBcraAdapter, bcraTools, riskBand, summarizeDebt } from "@ar-agents/banking-bcra";

const bcra = new HttpBcraAdapter();

// Direct: one CUIT, one risk band.
const raw = await bcra.getDebt("30-50000001-8");
const summary = summarizeDebt(raw);
const band = riskBand(summary);
//   "clean" → no records or zero entidades
//   "low"   → worst situación ≤ 2, no flags
//   "watch" → situación = 3 OR refinanciaciones
//   "high"  → situación ≥ 4 OR proceso judicial / fraude

if (band === "high") refuseCredit();

// As agent tools:
import { Experimental_Agent as Agent } from "ai";
import { anthropic } from "@ai-sdk/anthropic";

const agent = new Agent({
  model: anthropic("claude-sonnet-4-7"),
  tools: bcraTools({ adapter: bcra }),
  system: "Eres un agente de credit underwriting para SaaS B2B argentino.",
});

The situación scale (BCRA convention)

situaciónmeaning
1Normal
2Riesgo bajo / con seguimiento especial
3Problemas potenciales
4Con alto riesgo de insolvencia
5Irrecuperable
6Irrecuperable por disposición técnica

Lower is better. Each entidad reports independently; the BCRA aggregates monthly. The worstSituacion field in DebtSummary is the max across all reporting entidades — the right number to gate on.

Important: 404 = "clean", not an error

BCRA returns HTTP 404 for CUITs they have no records on. This is the BEST possible answer for a credit check — the taxpayer has never been reported as a debtor. The adapter translates 404 into BcraNotFoundError so it's distinguishable from a 5xx, but in your business logic treat it as the "clean" branch:

try {
  const summary = await bcra.getDebt(cuit);
  return riskBand(summarizeDebt(summary));
} catch (err) {
  if (err instanceof BcraNotFoundError) return "clean";
  throw err;
}

Errors

import {
  BcraError,
  BcraValidationError,    // bad CUIT shape, do NOT retry
  BcraNotFoundError,      // 404 — treat as "clean", NOT a failure
  BcraApiError,           // non-404 non-2xx — 5xx/429 are retryable
  BcraUnconfiguredError,
} from "@ar-agents/banking-bcra";

Constraints

  • montoEnMiles is in ARS thousands per BCRA convention. entryAmountCentavos() + summarizeDebt().totalCentavos convert to centavos for unit-consistent math.
  • periodo is YYYYMM (BCRA wire format).
  • No auth — the API is public. Don't add an Authorization header; the adapter doesn't.

License

MIT — Nazareno Clemente naza@naza.ar

Keywords

bcra

FAQs

Package last updated on 25 May 2026

Related posts