Skip to main content

Nigeria Fintech Pack

Overview

NigeriaFintechCompliance is the canonical pack for AI agents in Nigerian financial services. It enforces all four Nigerian regulatory frameworks simultaneously, plus five universal agent-safety policies.

from comply54.sectors import NigeriaFintechCompliance

compliance = NigeriaFintechCompliance()
result = compliance.check(
action="transfer_funds",
params={"amount": 5_000_000, "currency": "NGN"},
context={"kyc_tier": 2},
)

Included packs

Pack IDRegulationAuthorityKey controls
nigeria/ndpaNDPA 2023NITDACross-border transfer restrictions §25, consent, data minimisation
nigeria/cbnCBN Transaction ControlsCBN₦10M NIP cap, KYC tier limits, PEP screening
nigeria/bvn-ninBVN/NIN FrameworkCBN/NIMCBiometric PII detection in outputs, transfer of identifiers
nigeria/nfiu-amlNFIU/MLPPA 2022NFIUCTR at ₦5M+, STR triggers, sanction list screening
universal/pii-leakageOWASP LLM01OWASPPAN, BVN, NIN, passport, SWIFT codes in outputs
universal/prompt-injectionOWASP LLM01OWASPJailbreak and indirect injection patterns
universal/tool-permissionsOWASP LLM08OWASPExcessive tool scope, IDOR-style access
universal/human-approvalOWASP LLM08OWASPHigh-value or irreversible actions require human sign-off

Decision matrix by action type

Fund transfers

AmountKYC TierDecisionReason
≤ ₦200,0001allowWithin Tier 1 single-transaction limit
≤ ₦5,000,0002allowBelow CBN NIP cap and CTR threshold
₦5,000,000–₦10,000,0003escalateNFIU CTR required within 24h
> ₦10,000,000anydenyExceeds CBN NIP Framework §4.2 single-transaction cap
any0 (no KYC)denyNo verified identity — CBN KYC policy

Data exports

DestinationData typeDecision
NigeriaAnyallow
ECOWAS / AU adequacy countryNon-sensitiveallow
Non-adequate countryPIIescalate (NDPA §25)
AnyBiometric (BVN/NIN)deny

Agent outputs

Output contentDecision
Contains BVN pattern (11 digits)deny
Contains NIN patterndeny
Contains raw PAN (card number)deny
Clean textallow

Usage

Standalone check

from comply54.sectors import NigeriaFintechCompliance

compliance = NigeriaFintechCompliance()

# Fund transfer check
result = compliance.check(
action="transfer_funds",
params={
"amount": 8_000_000,
"currency": "NGN",
"recipient_account": "0123456789",
},
context={"kyc_tier": 3, "pep_flag": False},
)

if result.blocked:
print(result.primary_violation.messages[0])
elif result.overall == "escalate":
# CTR required — log for compliance team
print(f"Escalation required — audit ID: {result.audit_id}")

With LangGraph (ReAct agent)

from comply54.langchain import Comply54Guard, comply54_route
from langgraph.graph import StateGraph, MessagesState
from langgraph.prebuilt import ToolNode

tools = [transfer_funds_tool, check_balance_tool]
guard = Comply54Guard(compliance, tools)

def build_graph():
graph = StateGraph(MessagesState)
graph.add_node("agent", agent_node)
graph.add_node("guard", guard)
graph.add_node("tools", ToolNode(tools))

graph.set_entry_point("agent")
graph.add_conditional_edges("agent", comply54_route, {"guard": "guard", "__end__": "__end__"})
graph.add_edge("guard", "tools")
graph.add_edge("tools", "agent")
return graph.compile()

Accessing all decisions

result = compliance.check(
action="transfer_funds",
params={"amount": 8_000_000, "currency": "NGN"},
)

for decision in result.decisions:
status = "✓" if decision.action == "allow" else "✗"
print(f"{status} {decision.pack}: {decision.action}")
for msg in decision.messages:
print(f" {msg}")

Properties

compliance = NigeriaFintechCompliance()
compliance.jurisdictions # ["NG"]
compliance.pack_ids # ["nigeria/ndpa", "nigeria/cbn", ...]
len(compliance.packs) # 8