关于 expense-report-generator
expense-report-generator 可从 CSV、JSON 或手动录入的数据生成 PDF 报销报告,适用于员工和项目团队。它结合费用分类、政策检查、审批状态及报销金额跟踪。
主要功能
- 01支持 CSV、JSON 和手动录入
- 02分类费用并计算总额
- 03将收据关联到费用项目
- 04标记政策违规和缺失收据
- 05跟踪审批及报销状态
- 06导出排版后的 PDF 报告
适用场景
- 01生成员工月度报销报告
- 02按配置限额检查费用
- 03跟踪项目费用和报销状态
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dkyazzentwatwa/ chatgpt-skills --skill expense-report-generator安装后在 Claude Code 中输入/expense-report-generator确认已加载。
附带文件scripts/expense_report.pyscripts/requirements.txt
详细介绍
费用报告生成器
根据收据数据创建专业费用报告,并自动分类和计算总额。
功能
- 多种输入格式:CSV、JSON 或手动输入
- 自动分类:按类型对费用进行分类
- 收据跟踪:将收据关联到费用
- 审批工作流:跟踪状态和审批人信息
- 政策合规性:标记不符合政策的费用
- PDF 导出:生成专业排版的报告
- 报销金额计算:跟踪已支付和未支付金额
快速开始
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 用法
# 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
输入格式
CSV 格式
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 格式
{
"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"
}
]
}
政策配置
{
"limits": {
"Meals": 75,
"Transportation": 100,
"Lodging": 250,
"Supplies": 200
},
"requires_receipt": 25,
"requires_approval": 500,
"prohibited": ["Alcohol", "Personal items"]
}
API 参考
ExpenseReportGenerator 类
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
费用类别
标准类别:
- 餐饮:商务餐饮和娱乐
- 交通:出租车、网约车、租车、停车
- 旅行:航班、火车、酒店
- 住宿:酒店、住宿
- 用品:办公用品、设备
- 通信:电话、互联网
- 专业发展:会议、培训、会员资格
- 其他:杂项费用
报告摘要
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
# }
政策合规性
# 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}
# ]
生成的报告内容
PDF 报告包括:
-
页眉
- 公司徽标(可选)
- 报告标题和日期范围
- 员工信息
-
摘要部分
- 总金额
- 类别明细
- 报销状态
-
费用明细表
- 日期、描述、类别
- 金额、收据状态
- 备注
-
类别图表
- 按类别划分支出的饼图
- 每日支出柱状图
-
合规备注
- 违反政策的情况(如有)
- 缺失的收据
-
审批部分
- 员工签名栏
- 审批人签名栏
- 日期栏
示例工作流
员工月度报告
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}")
项目费用跟踪
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}")
依赖项
- pandas>=2.0.0
- reportlab>=4.0.0
- matplotlib>=3.7.0
评论
支持 Markdown