mcpField
E
expense-report-generator

expense-report-generator

github.com/dkyazzentwatwa文档处理12471 次安装29 周前更新
代码仓库

关于 expense-report-generator

expense-report-generator 可从 CSV、JSON 或手动录入的数据生成 PDF 报销报告,适用于员工和项目团队。它结合费用分类、政策检查、审批状态及报销金额跟踪。

主要功能

  1. 01支持 CSV、JSON 和手动录入
  2. 02分类费用并计算总额
  3. 03将收据关联到费用项目
  4. 04标记政策违规和缺失收据
  5. 05跟踪审批及报销状态
  6. 06导出排版后的 PDF 报告

适用场景

  1. 01生成员工月度报销报告
  2. 02按配置限额检查费用
  3. 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 报告包括:

  1. 页眉

    • 公司徽标(可选)
    • 报告标题和日期范围
    • 员工信息
  2. 摘要部分

    • 总金额
    • 类别明细
    • 报销状态
  3. 费用明细表

    • 日期、描述、类别
    • 金额、收据状态
    • 备注
  4. 类别图表

    • 按类别划分支出的饼图
    • 每日支出柱状图
  5. 合规备注

    • 违反政策的情况(如有)
    • 缺失的收据
  6. 审批部分

    • 员工签名栏
    • 审批人签名栏
    • 日期栏

示例工作流

员工月度报告
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