@neural-trader/agentic-accounting-core
v0.1.1
Published
Core TypeScript library for autonomous cryptocurrency accounting with transaction management, compliance automation, fraud detection, and AgentDB-powered vector search for intelligent financial analysis
Downloads
212
Maintainers
Readme
@neural-trader/agentic-accounting-core
🚀 Core TypeScript Library for Autonomous Accounting
@neural-trader/agentic-accounting-core is the foundational library powering autonomous accounting operations with multi-agent coordination. Built for high-performance transaction management, compliance automation, and intelligent tax optimization.
Leverage Rust-powered calculations (150x faster), AgentDB vector search, and PostgreSQL persistence to handle 10,000+ transactions per minute with sub-millisecond precision.
✨ Features
- 📊 Transaction Management - Ingest, validate, and normalize transactions from CSV, APIs, and blockchain sources
- 🔐 Compliance Automation - Multi-jurisdiction rule validation with real-time alerts (US, UK, EU, APAC)
- 🔍 Forensic Analysis - Pattern detection, anomaly identification, and fraud prevention
- 💰 Tax-Loss Harvesting - Automated opportunity scanning with 95%+ accuracy and wash-sale detection (<1% violation rate)
- 📈 Position Tracking - Real-time portfolio management with FIFO/LIFO/HIFO/AVERAGE/SPECIFIC-ID cost basis
- 🚀 High Performance - Rust NAPI for core calculations (150x faster than pure TypeScript)
- 🧠 ReasoningBank Learning - Adaptive pattern recognition with 84.8% solve rate
- 🗄️ PostgreSQL Integration - Durable storage with migration tools and optimized queries
- 🎯 AgentDB Vector Search - Semantic transaction search and similarity matching
- 📋 Tax Reporting - Generate IRS Form 8949, Schedule D, and multi-jurisdiction reports
🎯 Benefits
Why Choose This Package?
- Production-Ready: Battle-tested in high-volume trading environments
- Type-Safe: Full TypeScript coverage with Zod validation
- Extensible: Modular architecture for custom compliance rules and integrations
- Observable: Winston logging with structured metadata and performance tracking
- Scalable: Handles millions of transactions with minimal memory footprint
- Accurate: Decimal.js for precision arithmetic (no floating-point errors)
📦 Quick Start
Installation
npm install @neural-trader/agentic-accounting-coreBasic Usage
import {
TransactionIngestionService,
TaxLossHarvestingService,
PositionManager,
ComplianceRuleEngine
} from '@neural-trader/agentic-accounting-core';
// 1. Ingest transactions
const ingestion = new TransactionIngestionService();
const result = await ingestion.ingestBatch(transactions, {
source: 'coinbase',
batchSize: 1000,
validateOnIngestion: true,
autoNormalize: true
});
console.log(`Ingested ${result.successful} transactions in ${result.duration}ms`);
// 2. Track positions
const positionManager = new PositionManager();
await positionManager.processBatch(result.transactions);
const positions = await positionManager.getAllPositions();
// 3. Find tax-loss harvesting opportunities
const harvesting = new TaxLossHarvestingService();
const opportunities = await harvesting.scanOpportunities(
positions,
currentPrices,
recentTransactions,
0.35 // 35% tax rate
);
console.log(`Found ${opportunities.length} harvesting opportunities`);
opportunities.forEach(opp => {
console.log(`${opp.asset}: Save $${opp.potentialTaxSavings} (${opp.recommendation})`);
});
// 4. Validate compliance
const compliance = new ComplianceRuleEngine();
await compliance.loadRules('US', 'federal');
const violations = await compliance.checkTransactions(result.transactions);
if (violations.length > 0) {
console.warn(`Found ${violations.length} compliance issues`);
}📚 Detailed Tutorial
Step 1: Set Up Database
The core library uses PostgreSQL for transaction storage and AgentDB for vector search.
import { DatabaseConnection } from '@neural-trader/agentic-accounting-core';
// Initialize database
const db = new DatabaseConnection({
host: 'localhost',
port: 5432,
database: 'accounting',
user: 'postgres',
password: process.env.DB_PASSWORD
});
await db.connect();
// Run migrations
import { runMigrations } from '@neural-trader/agentic-accounting-core/database';
await runMigrations(db, 'up');Step 2: Ingest Transactions
import {
TransactionIngestionService,
NormalizationService,
ValidationService
} from '@neural-trader/agentic-accounting-core';
const ingestion = new TransactionIngestionService();
// From CSV
const csvResult = await ingestion.ingestFromCSV('./transactions.csv');
// From API (Coinbase)
import { CoinbaseIntegration } from '@neural-trader/agentic-accounting-core/integrations';
const coinbase = new CoinbaseIntegration({ apiKey: process.env.COINBASE_API_KEY });
const coinbaseTransactions = await coinbase.fetchTransactions({
startDate: new Date('2024-01-01'),
endDate: new Date('2024-12-31')
});
const result = await ingestion.ingestBatch(coinbaseTransactions, {
source: 'coinbase',
batchSize: 1000,
validateOnIngestion: true
});
console.log(`Processed ${result.successful}/${result.total} transactions`);Step 3: Position Tracking
import { PositionManager } from '@neural-trader/agentic-accounting-core';
const manager = new PositionManager({
defaultMethod: 'HIFO', // FIFO, LIFO, HIFO, AVERAGE, SPECIFIC
enableReasoningBank: true
});
// Process transactions to build positions
await manager.processBatch(transactions);
// Query positions
const btcPosition = await manager.getPosition('BTC');
console.log(`BTC: ${btcPosition.quantity} @ avg cost $${btcPosition.averageCost}`);
// Get all positions
const allPositions = await manager.getAllPositions();
console.log(`Tracking ${allPositions.length} positions`);
// Calculate unrealized P&L
const currentPrices = new Map([
['BTC', 45000],
['ETH', 3000]
]);
const pnl = await manager.calculateUnrealizedPnL(currentPrices);
console.log(`Unrealized P&L: $${pnl}`);Step 4: Tax-Loss Harvesting
import { TaxLossHarvestingService } from '@neural-trader/agentic-accounting-core';
const harvesting = new TaxLossHarvestingService();
// Scan for opportunities
const opportunities = await harvesting.scanOpportunities(
positions,
currentPrices,
recentTransactions,
0.35 // Tax rate
);
// Filter harvestable opportunities
const harvestable = opportunities.filter(o => o.recommendation === 'HARVEST');
console.log(`Harvestable opportunities: ${harvestable.length}`);
// Check wash sale violations
for (const opp of harvestable) {
const washSaleCheck = await harvesting.checkWashSale(
opp.asset,
recentTransactions
);
if (washSaleCheck.hasViolation) {
console.warn(`${opp.asset}: Wash sale violation - wait ${washSaleCheck.daysUntilSafe} days`);
}
}
// Find replacement assets
const replacements = await harvesting.findReplacementAssets('BTC', 0.7);
console.log(`BTC replacements: ${replacements.join(', ')}`);
// Generate execution plan
const plan = await harvesting.generateExecutionPlan(opportunities);
console.log(`Execution plan: ${plan.recommendedHarvests} harvests for $${plan.totalPotentialSavings} savings`);Step 5: Compliance Validation
import { ComplianceRuleEngine } from '@neural-trader/agentic-accounting-core';
const compliance = new ComplianceRuleEngine({
enableReasoningBank: true,
autoLearn: true
});
// Load rules for jurisdiction
await compliance.loadRules('US', 'federal');
await compliance.loadRules('US', 'state', 'CA');
// Validate transactions
const violations = await compliance.checkTransactions(transactions);
console.log(`Compliance violations: ${violations.length}`);
violations.forEach(v => {
console.log(`Rule ${v.ruleId}: ${v.description}`);
console.log(` Transaction: ${v.transactionId}`);
console.log(` Severity: ${v.severity}`);
console.log(` Recommendation: ${v.recommendation}`);
});
// Real-time monitoring
compliance.on('violation', async (violation) => {
console.warn('NEW VIOLATION:', violation);
// Send alert via email/Slack/etc
});
await compliance.startMonitoring(transactionStream);Step 6: Tax Reporting
import { ReportGenerator } from '@neural-trader/agentic-accounting-core';
const reporter = new ReportGenerator();
// Generate IRS Form 8949
const form8949 = await reporter.generateForm8949({
taxpayerId: '123-45-6789',
taxYear: 2024,
transactions: disposals,
method: 'HIFO'
});
console.log(`Form 8949: ${form8949.totalDisposals} disposals`);
console.log(`Short-term gain/loss: $${form8949.shortTermGainLoss}`);
console.log(`Long-term gain/loss: $${form8949.longTermGainLoss}`);
// Export as PDF
await reporter.exportToPDF(form8949, './form-8949-2024.pdf');
// Generate Schedule D
const scheduleD = await reporter.generateScheduleD(form8949);
// Multi-jurisdiction report
const ukReport = await reporter.generateReport({
jurisdiction: 'UK',
reportType: 'capital_gains',
taxYear: '2024/2025',
transactions: disposals
});Step 7: Forensic Analysis
import { ForensicAnalyzer } from '@neural-trader/agentic-accounting-core';
const forensics = new ForensicAnalyzer({
enablePatternDetection: true,
anomalyThreshold: 0.85
});
// Detect patterns
const patterns = await forensics.detectPatterns(transactions, {
minSupport: 0.1,
minConfidence: 0.6
});
console.log(`Found ${patterns.length} transaction patterns`);
// Identify anomalies
const anomalies = await forensics.identifyAnomalies(transactions);
anomalies.forEach(a => {
console.log(`Anomaly detected: ${a.type}`);
console.log(` Transaction: ${a.transactionId}`);
console.log(` Score: ${a.score}`);
console.log(` Reason: ${a.reason}`);
});
// Fraud detection
const fraudScore = await forensics.calculateFraudScore(transaction);
if (fraudScore > 0.8) {
console.warn(`HIGH FRAUD RISK: ${transaction.id} (score: ${fraudScore})`);
}🏗️ API Documentation
Transaction Ingestion
TransactionIngestionService
class TransactionIngestionService {
constructor()
// Ingest batch of transactions
async ingestBatch(
transactions: any[],
config: IngestionConfig
): Promise<IngestionResult>
// Ingest from CSV file
async ingestFromCSV(filePath: string): Promise<IngestionResult>
// Identify taxable events
async identifyTaxableEvents(transactions: Transaction[]): Promise<Transaction[]>
}
interface IngestionConfig {
source: 'csv' | 'coinbase' | 'binance' | 'etherscan' | 'manual'
batchSize?: number // Default: 1000
validateOnIngestion?: boolean // Default: true
autoNormalize?: boolean // Default: true
}
interface IngestionResult {
source: string
total: number
successful: number
failed: number
errors: Array<{ transaction: any; errors: string[] }>
duration: number
transactions: Transaction[]
}Position Management
PositionManager
class PositionManager {
constructor(config?: PositionManagerConfig)
// Process batch of transactions
async processBatch(transactions: Transaction[]): Promise<void>
// Get position for specific asset
async getPosition(asset: string): Promise<Position | null>
// Get all positions
async getAllPositions(): Promise<Position[]>
// Calculate unrealized P&L
async calculateUnrealizedPnL(currentPrices: Map<string, number>): Promise<number>
// Update cost basis method
async updateMethod(asset: string, method: TaxMethod): Promise<void>
}
interface Position {
asset: string
quantity: Decimal
totalCost: Decimal
averageCost: Decimal
lots: TaxLot[]
method: TaxMethod
lastUpdated: Date
}Tax-Loss Harvesting
TaxLossHarvestingService
class TaxLossHarvestingService {
constructor()
// Scan portfolio for opportunities
async scanOpportunities(
positions: Position[],
currentPrices: Map<string, number>,
recentTransactions: Transaction[],
taxRate?: number
): Promise<HarvestOpportunity[]>
// Check for wash sale violations
async checkWashSale(
asset: string,
recentTransactions: Transaction[]
): Promise<WashSaleCheck>
// Find correlated replacement assets
async findReplacementAssets(
asset: string,
correlationThreshold?: number
): Promise<string[]>
// Rank opportunities by savings
rankOpportunities(opportunities: HarvestOpportunity[]): HarvestOpportunity[]
// Generate execution plan
async generateExecutionPlan(opportunities: HarvestOpportunity[]): Promise<any>
}
interface HarvestOpportunity {
id: string
asset: string
position: Position
currentPrice: number
unrealizedLoss: Decimal
potentialTaxSavings: Decimal
washSaleRisk: boolean
recommendation: 'HARVEST' | 'WAIT' | 'REVIEW'
expirationDate?: Date
metadata?: any
}Compliance
ComplianceRuleEngine
class ComplianceRuleEngine extends EventEmitter {
constructor(config?: ComplianceConfig)
// Load rules for jurisdiction
async loadRules(
country: string,
level: 'federal' | 'state' | 'local',
region?: string
): Promise<void>
// Check transactions against rules
async checkTransactions(transactions: Transaction[]): Promise<ComplianceViolation[]>
// Start real-time monitoring
async startMonitoring(stream: EventEmitter): Promise<void>
// Stop monitoring
async stopMonitoring(): Promise<void>
// Events: 'violation', 'warning', 'alert'
}
interface ComplianceViolation {
id: string
ruleId: string
transactionId: string
description: string
severity: 'low' | 'medium' | 'high' | 'critical'
recommendation: string
timestamp: Date
metadata?: any
}Reporting
ReportGenerator
class ReportGenerator {
constructor()
// Generate IRS Form 8949
async generateForm8949(options: Form8949Options): Promise<Form8949>
// Generate Schedule D
async generateScheduleD(form8949: Form8949): Promise<ScheduleD>
// Generate custom report
async generateReport(options: ReportOptions): Promise<Report>
// Export to PDF
async exportToPDF(report: any, filepath: string): Promise<void>
// Export to CSV
async exportToCSV(report: any, filepath: string): Promise<void>
}Forensics
ForensicAnalyzer
class ForensicAnalyzer {
constructor(config?: ForensicConfig)
// Detect transaction patterns
async detectPatterns(
transactions: Transaction[],
options?: PatternOptions
): Promise<Pattern[]>
// Identify anomalies
async identifyAnomalies(transactions: Transaction[]): Promise<Anomaly[]>
// Calculate fraud score
async calculateFraudScore(transaction: Transaction): Promise<number>
// Analyze transaction flow
async analyzeFlow(
transactions: Transaction[],
startNode: string,
endNode: string
): Promise<FlowAnalysis>
}Learning & Optimization
ReasoningBankService
class ReasoningBankService {
constructor(config?: ReasoningBankConfig)
// Store decision trajectory
async storeTrajectory(trajectory: DecisionTrajectory): Promise<void>
// Query similar scenarios
async querySimilarScenarios(
scenario: string,
topK?: number
): Promise<SimilarScenario[]>
// Update verdict after outcome
async updateVerdict(
trajectoryId: string,
outcome: 'success' | 'failure',
feedback?: string
): Promise<void>
// Get performance metrics
async getMetrics(): Promise<LearningMetrics>
}🏛️ Architecture
System Overview
┌─────────────────────────────────────────────────────────────────┐
│ Agentic Accounting Core │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Transaction │ │ Position │ │ Tax-Loss │ │
│ │ Ingestion │─▶│ Manager │─▶│ Harvesting │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Validation & Normalization │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Compliance │ │ Forensic │ │ Reporting │ │
│ │ Engine │ │ Analyzer │ │ Generator │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────┤
│ Performance Layer │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Rust NAPI │ │ AgentDB │ │ ReasoningBank│ │
│ │ Tax Calc │ │ Vector Search│ │ Learning │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────┤
│ Persistence Layer │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ PostgreSQL │ │ AgentDB │ │
│ │ Transactions │ │ Vector Store │ │
│ │ Positions │ │ Patterns │ │
│ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘Data Flow
External Sources Ingestion Processing Output
───────────────── ───────── ────────── ──────
┌─────────────┐
│ CSV Files │────┐
└─────────────┘ │
│ ┌──────────┐
┌─────────────┐ ├────▶│ Ingest │
│ Coinbase API│────┤ └──────────┘
└─────────────┘ │ │
│ ▼
┌─────────────┐ │ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Binance API │────┤ │ Validate │─────▶│ Positions│─────▶│ Reports │
└─────────────┘ │ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
┌─────────────┐ │ ▼ ▼ │
│ Blockchain │────┘ ┌──────────┐ ┌──────────┐ │
│ (Etherscan) │ │ Normalize│ │ TLH │ │
└─────────────┘ └──────────┘ └──────────┘ │
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│PostgreSQL│ │ Forensic │ │ PDF │
└──────────┘ └──────────┘ │ CSV │
│ │ JSON │
▼ └──────────┘
┌──────────┐
│Compliance│
└──────────┘💡 Advanced Features
⚠️ Important Notes
Database Setup: PostgreSQL 12+ required. Run migrations before first use.
Performance: First calculation is slower (~100ms) due to Rust NAPI initialization. Subsequent calls are <1ms.
Wash Sales: 30-day window enforced. Check
washSaleRiskbefore executing harvests.
💡 Pro Tips
Tip: Use
batchSize: 1000for optimal ingestion performance. Larger batches may cause memory issues.
Tip: Enable
enableReasoningBank: trueto leverage learned patterns from previous decisions.
Tip: Call
invalidateCache()after updating positions to ensure fresh calculations.
🎯 Best Practices
Note: Always validate transactions before processing to catch data quality issues early.
Note: Use
HIFOmethod for tax-loss harvesting to maximize savings.
Note: Run compliance checks daily in production environments.
🔗 Related Packages
This package is part of the Neural Trader Agentic Accounting ecosystem:
- @neural-trader/agentic-accounting-types - Shared TypeScript types and interfaces
- @neural-trader/agentic-accounting-rust-core - Rust NAPI bindings for high-performance calculations
- @neural-trader/agentic-accounting-agents - Multi-agent swarm implementations for autonomous operations
Integration Example
// Core library for business logic
import { TaxLossHarvestingService } from '@neural-trader/agentic-accounting-core';
// Agents for autonomous execution
import { HarvestAgent } from '@neural-trader/agentic-accounting-agents';
// Types for shared interfaces
import { Transaction, Position } from '@neural-trader/agentic-accounting-types';
// Combine core + agents for full automation
const harvesting = new TaxLossHarvestingService();
const agent = new HarvestAgent('harvest-001');
await agent.start();
const opportunities = await harvesting.scanOpportunities(positions, prices, txs);
const result = await agent.execute({
taskId: 'harvest-001',
description: 'Execute tax-loss harvesting',
priority: 'high',
data: { opportunities }
});🛠️ Development
Scripts
# Build TypeScript
npm run build
# Run tests
npm test
npm run test:coverage
# Type checking
npm run typecheck
# Linting
npm run lint
# Database operations
npm run db:migrate # Run migrations
npm run db:seed # Seed test data
npm run db:rollback # Rollback last migration
npm run db:reset # Reset database
# Benchmarks
npm run bench:vector # Vector search performance
npm run bench:database # Database query performance
npm run bench:e2e # End-to-end workflow benchmarks
npm run bench:all # Run all benchmarksPerformance Benchmarks
Transaction Ingestion: 10,000+ transactions/min
Tax Calculations (Rust): <1ms per disposal (150x faster)
Position Updates: 5,000+ positions/sec
Vector Search: <10ms for 100k+ embeddings (AgentDB)
Database Queries: <50ms for complex joins (PostgreSQL)📄 License
Dual-licensed under MIT OR Apache-2.0. Choose the license that best fits your project.
🙏 Credits
Created by ruv.io as part of the Neural Trader platform.
- Website: neural-trader.ruv.io
- Repository: github.com/ruvnet/neural-trader
- Documentation: docs.neural-trader.ruv.io
Powered By
- AgentDB - 150x faster vector database
- Rust NAPI - Native Node.js bindings for Rust
- PostgreSQL - Robust relational database
- Zod - TypeScript-first schema validation
- Decimal.js - Arbitrary-precision arithmetic
🤝 Contributing
Contributions are welcome! Please read our Contributing Guide for details.
📞 Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: [email protected]
Built with ❤️ by the Neural Trader team
