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