akshit1229/credit-statement-intelligence
0
Credit Statement Intelligence Engine
A production-grade AI system for credit statement intelligence using RAG (Retrieval-Augmented Generation) and intent-based query routing.
๐ฏ Features
- PDF Ingestion: Parse multiple credit card statement PDFs with different formats
- Smart Data Extraction: Extract normalized transactions and statement metadata
- Vector Store: Semantic search using ChromaDB and sentence transformers
- Intent Classification: Route queries using 5 intent types (list, aggregate, compare, topn, generalexplanation)
- Evidence-Backed Answers: No hallucinations - all responses include source evidence
- Analytics & Reconciliation: Spend analysis, category breakdown, and data validation
- REST API: FastAPI with interactive documentation
๐ System Requirements
- Python 3.11+
- 2GB RAM minimum (4GB recommended for vector embeddings)
- Groq API key (for LLM-based intent classification)
๐ Quick Start
1. Installation
# Clone the repository
git clone <repository-url>
cd credit-statement-intelligence
# Create virtual environment
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux/Mac
# Install dependencies
pip install -r requirements.txt2. Configuration
Create a .env file in the project root:
GROQ_API_KEY=your_groq_api_key_here3. Run the Server
python main.pyThe server will start on http://localhost:8000
- API Docs: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
๐ก API Endpoints
๐ก Usage Examples
Upload a PDF Statement
curl -X POST "http://localhost:8000/ingest" \
-F "file=@statement.pdf" \
-F "statement_year=2023"Ask Questions
# Aggregate query
curl -X POST "http://localhost:8000/query" \
-H "Content-Type: application/json" \
-d '{"question": "How much did I spend on dining?"}'
# Top N query
curl -X POST "http://localhost:8000/query" \
-H "Content-Type: application/json" \
-d '{"question": "What are my top 5 expenses?"}'
# RAG query (general explanation)
curl -X POST "http://localhost:8000/query" \
-H "Content-Type: application/json" \
-d '{"question": "What fees are mentioned in my statement?"}'Get Analytics
# Summary with category breakdown, top merchants, time analysis
curl "http://localhost:8000/summary"
# Reconciliation report
curl "http://localhost:8000/reconciliation"
# Export to CSV
curl "http://localhost:8000/export/csv" -o transactions.csv๐๏ธ Architecture
credit-statement-intelligence/
โโโ app/
โ โโโ ingestion/ # PDF parsing and data extraction
โ โ โโโ parsers/ # PDF parser implementation
โ โ โโโ normalizers/ # Transaction normalization
โ โ โโโ storage.py # DuckDB storage layer
โ โโโ vector_store/ # ChromaDB vector store
โ โโโ query_router/ # Intent classification & query execution
โ โโโ analytics/ # Spending insights
โ โโโ reconciliation/ # Data validation
โ โโโ api/ # FastAPI routes
โโโ data/
โ โโโ raw/ # Uploaded PDFs
โ โโโ processed/ # Processed data
โ โโโ vector_db/ # ChromaDB persistence
โ โโโ statements.db # DuckDB database
โโโ outputs/ # CSV exports and reports
โโโ tests/ # Test suiteTechnology Stack
- Backend: FastAPI, Uvicorn
- PDF Parsing: pdfplumber
- Database: DuckDB (analytical queries)
- Vector Store: ChromaDB + sentence-transformers
- LLM: Groq (llama-3.3-70b-versatile)
- Data Processing: pandas, numpy
- Testing: pytest
๐งช Testing
Run Unit Tests
pytest tests/test_query_router.py -vTest Results: All 11 tests passed โ
- Intent classification (aggregate, list, topn, compare, generalexplanation)
- Query plan structure validation
- Multiple query type tests
Manual API Testing
- Start the server:
python main.py - Open http://localhost:8000/docs
- Test endpoints via Swagger UI
๐ Intent Classification
The system classifies user questions into 5 intents:
- list: "Show me all dining transactions"
- aggregate: "How much did I spend on groceries?"
- compare: "Compare January vs February spending"
- top_n: "What are my top 5 expenses?"
- general_explanation: "What is the annual fee?" (uses RAG)
Each query generates a structured query plan:
{
"intent": "aggregate",
"query_plan": {
"filters": {
"category": "dining",
"txn_type": "debit"
},
"operation": "sum",
"parameters": {}
},
"requires_rag": false,
"confidence": 0.95
}๐ Analytics Features
- Category Breakdown: Spending by category (dining, groceries, transportation, etc.)
- Top Merchants: Highest spending merchants
- Time Analysis: Monthly and weekly spending patterns
- Unusual Transactions: Flagged high-value or duplicate transactions
- Spending Patterns: Day-of-week and month-period analysis
๐ Data Safety
- No Hallucinations: All answers include evidence from actual data
- Source Attribution: Retrieved document chunks with page references
- Validation: Reconciliation against statement totals
- Error Handling: Proper validation when no data is available
๐ Design Decisions
Why DuckDB?
- Analytical query performance for aggregations
- SQL interface for complex filtering
- Efficient columnar storage
Why ChromaDB?
- Easy Python integration
- Good performance for moderate datasets
- Built-in persistence
Why Groq?
- Fast inference for intent classification
- Good structured output support
- Cost-effective for production use
๐ Assumptions
- PDF Format: Statements contain tabular transaction data
- Date Format: Transactions have parseable dates (DD/MM/YYYY or similar)
- Amount Format: Amounts are in decimal format with "Cr" suffix for credits
- Statement Year: May need to be provided if not in PDF
- Category Matching: Based on keyword matching in merchant names
๐ Known Issues / Future Improvements
- [ ] Support for more PDF formats (OCR for scanned PDFs)
- [ ] Multi-currency support
- [ ] User authentication and multi-tenant support
- [ ] Export to multiple formats (Excel, JSON)
- [ ] Advanced duplicate detection
- [ ] Machine learning for category classification
๐ Sample Outputs
After ingestion, the system generates:
transactions.csv: All extracted transactionssummary.json: Analytics summaryreconciliation_report.json: Validation report
See the outputs/ directory for examples.
๐ค Contributing
This is an assignment project. For production use, consider:
- Adding authentication/authorization
- Implementing rate limiting
- Adding comprehensive logging
- Database connection pooling
- Caching for frequent queries
๐ License
This is an educational project created as an assignment.
๐ Acknowledgments
Built using:
- FastAPI framework
- ChromaDB vector database
- Groq LLM API
- pdfplumber library
