| | |
| | """ |
| | Example usage of the Tax Optimization API |
| | Demonstrates how to send transaction data and get optimization recommendations |
| | """ |
| | import requests |
| | import json |
| | from datetime import datetime, timedelta |
| |
|
| | |
| | BASE_URL = "http://localhost:8000" |
| | OPTIMIZE_ENDPOINT = f"{BASE_URL}/v1/optimize" |
| |
|
| | |
| | def example_employed_individual(): |
| | """Example: Employed individual with salary and some deductions""" |
| | |
| | |
| | transactions = [] |
| | |
| | |
| | for month in range(1, 13): |
| | date_str = f"2025-{month:02d}-28" |
| | |
| | |
| | transactions.append({ |
| | "type": "credit", |
| | "amount": 500000, |
| | "narration": "SALARY PAYMENT FROM ABC COMPANY LTD", |
| | "date": date_str, |
| | "balance": 750000, |
| | "metadata": { |
| | "basic_salary": 300000, |
| | "housing_allowance": 120000, |
| | "transport_allowance": 60000, |
| | "bonus": 20000 |
| | } |
| | }) |
| | |
| | |
| | transactions.append({ |
| | "type": "debit", |
| | "amount": 24000, |
| | "narration": "PENSION CONTRIBUTION TO XYZ PFA RSA", |
| | "date": date_str, |
| | "balance": 726000 |
| | }) |
| | |
| | |
| | transactions.append({ |
| | "type": "debit", |
| | "amount": 7500, |
| | "narration": "NHF CONTRIBUTION DEDUCTION", |
| | "date": date_str, |
| | "balance": 718500 |
| | }) |
| | |
| | |
| | transactions.append({ |
| | "type": "debit", |
| | "amount": 50000, |
| | "narration": "LIFE INSURANCE PREMIUM PAYMENT", |
| | "date": "2025-01-15", |
| | "balance": 700000 |
| | }) |
| | |
| | |
| | for month in range(1, 13): |
| | transactions.append({ |
| | "type": "debit", |
| | "amount": 150000, |
| | "narration": "RENT PAYMENT TO LANDLORD", |
| | "date": f"2025-{month:02d}-05", |
| | "balance": 550000 |
| | }) |
| | |
| | |
| | payload = { |
| | "user_id": "user_12345", |
| | "transactions": transactions, |
| | "taxpayer_profile": { |
| | "taxpayer_type": "individual", |
| | "employment_status": "employed", |
| | "location": "Lagos" |
| | }, |
| | "tax_year": 2025, |
| | "tax_type": "PIT", |
| | "jurisdiction": "state" |
| | } |
| | |
| | print("=" * 80) |
| | print("EXAMPLE: Employed Individual Tax Optimization") |
| | print("=" * 80) |
| | print(f"\nSending {len(transactions)} transactions for analysis...") |
| | print(f"Annual gross income: ₦{500000 * 12:,.0f}") |
| | print(f"Current pension: ₦{24000 * 12:,.0f}/year") |
| | print(f"Current life insurance: ₦50,000/year") |
| | print(f"Annual rent paid: ₦{150000 * 12:,.0f}") |
| | |
| | |
| | try: |
| | response = requests.post(OPTIMIZE_ENDPOINT, json=payload, timeout=120) |
| | response.raise_for_status() |
| | |
| | result = response.json() |
| | |
| | |
| | print("\n" + "=" * 80) |
| | print("OPTIMIZATION RESULTS") |
| | print("=" * 80) |
| | |
| | print(f"\nTax Summary:") |
| | print(f" Baseline Tax: ₦{result['baseline_tax_liability']:,.2f}") |
| | print(f" Optimized Tax: ₦{result['optimized_tax_liability']:,.2f}") |
| | print(f" Potential Savings: ₦{result['total_potential_savings']:,.2f}") |
| | print(f" Savings Percentage: {result['savings_percentage']:.1f}%") |
| | |
| | print(f"\nIncome & Deductions:") |
| | print(f" Total Annual Income: ₦{result['total_annual_income']:,.2f}") |
| | print(f" Current Deductions:") |
| | for key, value in result['current_deductions'].items(): |
| | if key != 'total': |
| | print(f" - {key.replace('_', ' ').title()}: ₦{value:,.2f}") |
| | print(f" Total: ₦{result['current_deductions']['total']:,.2f}") |
| | |
| | print(f"\nRecommendations ({result['recommendation_count']}):") |
| | for i, rec in enumerate(result['recommendations'][:5], 1): |
| | print(f"\n {i}. {rec['strategy_name']}") |
| | print(f" Savings: ₦{rec['annual_tax_savings']:,.2f}") |
| | print(f" Description: {rec['description']}") |
| | print(f" Risk: {rec['risk_level'].upper()} | Complexity: {rec['complexity'].upper()}") |
| | if rec['implementation_steps']: |
| | print(f" Next Steps:") |
| | for step in rec['implementation_steps'][:3]: |
| | print(f" • {step}") |
| | |
| | print(f"\nTransaction Analysis:") |
| | ts = result['transaction_summary'] |
| | print(f" Total Transactions: {ts['total_transactions']}") |
| | print(f" Categorized: {ts['categorized']} ({ts.get('categorization_rate', 0)*100:.1f}%)") |
| | print(f" High Confidence: {ts['high_confidence']}") |
| | |
| | |
| | with open("optimization_result_example.json", "w") as f: |
| | json.dump(result, f, indent=2) |
| | print(f"\n[SUCCESS] Full results saved to: optimization_result_example.json") |
| | |
| | except requests.exceptions.RequestException as e: |
| | print(f"\n[ERROR] {e}") |
| | if hasattr(e, 'response') and e.response is not None: |
| | print(f"Response: {e.response.text}") |
| |
|
| |
|
| | def example_self_employed(): |
| | """Example: Self-employed individual with business income""" |
| | |
| | transactions = [] |
| | |
| | |
| | business_payments = [ |
| | ("2025-01-15", 800000, "CLIENT PAYMENT - PROJECT A"), |
| | ("2025-02-20", 1200000, "INVOICE PAYMENT - CLIENT B"), |
| | ("2025-03-10", 600000, "CONSULTING FEE - CLIENT C"), |
| | ("2025-04-25", 950000, "PROJECT PAYMENT - CLIENT D"), |
| | ("2025-06-15", 1100000, "SALES REVENUE - JUNE"), |
| | ("2025-08-30", 750000, "CLIENT PAYMENT - PROJECT E"), |
| | ("2025-10-12", 1300000, "INVOICE SETTLEMENT - CLIENT F"), |
| | ] |
| | |
| | for date_str, amount, narration in business_payments: |
| | transactions.append({ |
| | "type": "credit", |
| | "amount": amount, |
| | "narration": narration, |
| | "date": date_str, |
| | "balance": amount |
| | }) |
| | |
| | |
| | for month in [1, 4, 7, 10]: |
| | transactions.append({ |
| | "type": "debit", |
| | "amount": 100000, |
| | "narration": "VOLUNTARY PENSION CONTRIBUTION", |
| | "date": f"2025-{month:02d}-15", |
| | "balance": 500000 |
| | }) |
| | |
| | payload = { |
| | "user_id": "user_67890", |
| | "transactions": transactions, |
| | "taxpayer_profile": { |
| | "taxpayer_type": "individual", |
| | "employment_status": "self_employed", |
| | "location": "Abuja" |
| | }, |
| | "tax_year": 2025, |
| | "tax_type": "PIT" |
| | } |
| | |
| | print("\n" + "=" * 80) |
| | print("EXAMPLE: Self-Employed Individual") |
| | print("=" * 80) |
| | |
| | try: |
| | response = requests.post(OPTIMIZE_ENDPOINT, json=payload, timeout=120) |
| | response.raise_for_status() |
| | result = response.json() |
| | |
| | print(f"\n[SUCCESS] Optimization completed!") |
| | print(f" Baseline Tax: ₦{result['baseline_tax_liability']:,.2f}") |
| | print(f" Potential Savings: ₦{result['total_potential_savings']:,.2f}") |
| | print(f" Recommendations: {result['recommendation_count']}") |
| | |
| | except requests.exceptions.RequestException as e: |
| | print(f"\n[ERROR] {e}") |
| |
|
| |
|
| | def example_minimal(): |
| | """Minimal example with just a few transactions""" |
| | |
| | payload = { |
| | "user_id": "test_user", |
| | "transactions": [ |
| | { |
| | "type": "credit", |
| | "amount": 400000, |
| | "narration": "MONTHLY SALARY", |
| | "date": "2025-01-31", |
| | "balance": 400000 |
| | }, |
| | { |
| | "type": "debit", |
| | "amount": 32000, |
| | "narration": "PENSION DEDUCTION", |
| | "date": "2025-01-31", |
| | "balance": 368000 |
| | } |
| | ], |
| | "tax_year": 2025 |
| | } |
| | |
| | print("\n" + "=" * 80) |
| | print("EXAMPLE: Minimal Transaction Set") |
| | print("=" * 80) |
| | |
| | try: |
| | response = requests.post(OPTIMIZE_ENDPOINT, json=payload, timeout=60) |
| | response.raise_for_status() |
| | result = response.json() |
| | |
| | print(f"\n[SUCCESS] Analysis completed!") |
| | print(f" Income: ₦{result['total_annual_income']:,.2f}") |
| | print(f" Tax: ₦{result['baseline_tax_liability']:,.2f}") |
| | print(f" Savings Opportunity: ₦{result['total_potential_savings']:,.2f}") |
| | |
| | except requests.exceptions.RequestException as e: |
| | print(f"\n[ERROR] {e}") |
| |
|
| |
|
| | if __name__ == "__main__": |
| | print("\nKaanta Tax Optimization API - Examples\n") |
| | print("Make sure the API is running: uvicorn orchestrator:app --reload --port 8000\n") |
| | |
| | |
| | example_employed_individual() |
| | |
| | |
| | |
| | |
| | |
| | print("\n" + "=" * 80) |
| | print("✅ Examples completed!") |
| | print("=" * 80) |
| |
|