Claude-skill-registry expense-report-generator
Generate formatted expense reports from receipt data or CSV. Create professional PDF reports with categorization, totals, and approval workflows.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/expense-report-generator" ~/.claude/skills/majiayu000-claude-skill-registry-expense-report-generator && rm -rf "$T"
manifest:
skills/data/expense-report-generator/SKILL.mdsource content
Expense Report Generator
Create professional expense reports from receipt data with automatic categorization and totals.
Features
- Multiple Input Formats: CSV, JSON, or manual entry
- Auto-Categorization: Classify expenses by type
- Receipt Tracking: Link receipts to expenses
- Approval Workflow: Status tracking and approver info
- Policy Compliance: Flag out-of-policy expenses
- PDF Export: Professional formatted reports
- Reimbursement Calculation: Track paid/unpaid amounts
Quick Start
from expense_report import ExpenseReportGenerator report = ExpenseReportGenerator() # Set report info report.set_employee("John Doe", "EMP001", "Engineering") report.set_period("2024-01-01", "2024-01-31") # Add expenses report.add_expense( date="2024-01-15", description="Client dinner", category="Meals", amount=125.50, receipt="receipt_001.jpg" ) report.add_expense( date="2024-01-18", description="Uber to airport", category="Transportation", amount=45.00 ) # Generate report report.generate_pdf("expense_report.pdf")
CLI Usage
# From CSV python expense_report.py --input expenses.csv --employee "John Doe" --output report.pdf # With date range python expense_report.py --input data.csv --start 2024-01-01 --end 2024-01-31 -o report.pdf # Set department and approver python expense_report.py --input data.csv --employee "Jane Smith" --dept Sales \ --approver "Bob Manager" -o report.pdf # With policy limits python expense_report.py --input data.csv --policy policy.json -o report.pdf
Input Format
CSV Format
date,description,category,amount,receipt,notes 2024-01-15,Client dinner at Restaurant,Meals,125.50,receipt_001.jpg,Met with ABC Corp 2024-01-16,Uber to client site,Transportation,32.00,, 2024-01-17,Office supplies,Supplies,45.99,receipt_002.jpg, 2024-01-18,Flight to NYC,Travel,450.00,flight_confirm.pdf,Project kickoff
JSON Format
{ "employee": "John Doe", "employee_id": "EMP001", "department": "Engineering", "period": {"start": "2024-01-01", "end": "2024-01-31"}, "expenses": [ { "date": "2024-01-15", "description": "Client dinner", "category": "Meals", "amount": 125.50, "receipt": "receipt_001.jpg" } ] }
Policy Configuration
{ "limits": { "Meals": 75, "Transportation": 100, "Lodging": 250, "Supplies": 200 }, "requires_receipt": 25, "requires_approval": 500, "prohibited": ["Alcohol", "Personal items"] }
API Reference
ExpenseReportGenerator Class
class ExpenseReportGenerator: def __init__(self) # Report Setup def set_employee(self, name: str, employee_id: str = None, department: str = None) -> 'ExpenseReportGenerator' def set_period(self, start: str, end: str) -> 'ExpenseReportGenerator' def set_approver(self, name: str, title: str = None) -> 'ExpenseReportGenerator' def set_project(self, project_name: str, project_code: str = None) -> 'ExpenseReportGenerator' # Adding Expenses def add_expense(self, date: str, description: str, category: str, amount: float, receipt: str = None, notes: str = None, reimbursable: bool = True) -> 'ExpenseReportGenerator' def load_csv(self, filepath: str) -> 'ExpenseReportGenerator' def load_json(self, filepath: str) -> 'ExpenseReportGenerator' # Policy def set_policy(self, policy: Dict) -> 'ExpenseReportGenerator' def check_compliance(self) -> List[Dict] # Analysis def get_summary(self) -> Dict def by_category(self) -> Dict[str, float] def by_date(self) -> Dict[str, float] def get_total(self) -> float # Export def generate_pdf(self, output: str) -> str def generate_html(self, output: str) -> str def to_csv(self, output: str) -> str def to_json(self, output: str) -> str
Expense Categories
Standard categories:
- Meals: Business meals and entertainment
- Transportation: Taxi, rideshare, rental car, parking
- Travel: Flights, trains, hotels
- Lodging: Hotel, accommodation
- Supplies: Office supplies, equipment
- Communication: Phone, internet
- Professional: Conferences, training, memberships
- Other: Miscellaneous expenses
Report Summary
summary = report.get_summary() # Returns: # { # "employee": "John Doe", # "period": {"start": "2024-01-01", "end": "2024-01-31"}, # "total_expenses": 1250.50, # "expense_count": 15, # "categories": { # "Meals": 325.00, # "Transportation": 180.50, # "Travel": 650.00, # "Supplies": 95.00 # }, # "reimbursable": 1150.50, # "non_reimbursable": 100.00, # "receipts_attached": 12, # "receipts_missing": 3 # }
Policy Compliance
# Set spending limits report.set_policy({ "limits": { "Meals": 75, # Per transaction limit "Daily_meals": 100 # Daily limit }, "requires_receipt": 25, # Receipts required above this "requires_approval": 500 # Manager approval above this }) # Check compliance violations = report.check_compliance() # Returns: # [ # {"expense_id": 3, "type": "over_limit", "category": "Meals", # "amount": 125.50, "limit": 75}, # {"expense_id": 7, "type": "missing_receipt", "amount": 45.00} # ]
Generated Report Contents
The PDF report includes:
-
Header
- Company logo (optional)
- Report title and date range
- Employee information
-
Summary Section
- Total amount
- Category breakdown
- Reimbursement status
-
Expense Details Table
- Date, description, category
- Amount, receipt status
- Notes
-
Category Charts
- Pie chart of spending by category
- Daily spending bar chart
-
Compliance Notes
- Policy violations (if any)
- Missing receipts
-
Approval Section
- Employee signature line
- Approver signature line
- Date fields
Example Workflows
Monthly Employee Report
report = ExpenseReportGenerator() report.set_employee("Sarah Johnson", "EMP042", "Marketing") report.set_period("2024-02-01", "2024-02-29") report.set_approver("Mike Director", "VP Marketing") # Load from tracking spreadsheet report.load_csv("february_expenses.csv") # Check policy violations = report.check_compliance() if violations: print(f"Warning: {len(violations)} policy violations") # Generate report report.generate_pdf("sarah_feb_expenses.pdf") print(f"Total: ${report.get_total():,.2f}")
Project Expense Tracking
report = ExpenseReportGenerator() report.set_employee("Project Team") report.set_project("Website Redesign", "PRJ-2024-001") report.set_period("2024-01-01", "2024-03-31") # Add project expenses report.add_expense("2024-01-15", "Design software license", "Software", 299.00) report.add_expense("2024-02-01", "User testing incentives", "Research", 500.00) report.add_expense("2024-02-20", "Stock photos", "Creative", 150.00) summary = report.by_category() print("Project Expenses by Category:") for cat, amount in summary.items(): print(f" {cat}: ${amount:,.2f}")
Dependencies
- pandas>=2.0.0
- reportlab>=4.0.0
- matplotlib>=3.7.0