someone-oa/generate_prd.py
2025-12-11 15:21:16 +08:00

111 lines
6.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
根据已有的需求 Markdown生成结构化的产品需求文档PRD到需求文档.docx。
"""
from pathlib import Path
from docx import Document
def build_prd(doc: Document):
# 标题
doc.add_heading("OA 系统产品需求文档PRD", level=0)
doc.add_paragraph("版本v1.0")
doc.add_paragraph("说明:依据《需求.md》内容整理的产品需求文档。")
# 一、总体需求
doc.add_heading("一、总体需求", level=1)
doc.add_heading("1.1 管理要求", level=2)
doc.add_paragraph("围绕项目全生命周期管理,要求可视化流程、状态跟踪、审核留痕。")
doc.add_heading("1.2 业务流程", level=2)
doc.add_paragraph("支持从商机立项→投标→合同→项目启动→成果→回款/请款→报表的端到端流程。")
doc.add_paragraph("注:实际可能存在直接启动(不投标/不签合同)的场景,系统需支持项目状态标识。")
# 二、功能建设(五大板块)
doc.add_heading("二、功能建设", level=1)
doc.add_paragraph("需求集中在项目过程、状态,以及产值与回款统计,功能分为五个板块。")
# 2.1 商机(立项)管理
doc.add_heading("2.1 商机(立项)管理", level=2)
doc.add_paragraph("主流程:立项 → 审核")
doc.add_paragraph("立项:商务提交表单,经营管理部及总经理依次审核。")
doc.add_paragraph("投标:修改项目状态为“投标”,可上传附件。")
doc.add_paragraph("合同:修改项目状态为“已签合同”,可上传合同附件。")
doc.add_paragraph("项目查询:按项目编号、名称、服务内容、状态等查询,展示状态与金额。")
doc.add_paragraph("规则:项目编号=年份+序号(当年递增);服务内容可选结算审计/概算/清单控制价/工程咨询/跟踪审计/项目管理/工程监理。")
doc.add_paragraph("结算类项目需提交初稿、对账、最终成果;其他类型可直接提交最终成果。")
# 2.2 项目过程管理
doc.add_heading("2.2 项目过程管理", level=2)
doc.add_paragraph("主流程:启动 → 成果 → 进度查询")
doc.add_paragraph("项目启动:可关联立项;可多次启动;可多人指派;启动单关联立项数据自动导入。")
doc.add_paragraph("启动编号规则:立项编号+项目类型数字+启动序号25-3-2-4")
doc.add_paragraph("服务内容子项分配:结算审计/工程咨询/跟踪审计/项目管理/工程监理等子项多选。")
doc.add_paragraph("成果管理:结算类需初稿/对账/最终成果;多人提交需组长与领导审核;初稿与对账差异大需提醒。")
doc.add_paragraph("进度查询:按名称、客户、执业者等条件查询执行中项目。")
doc.add_paragraph("计算公式参考:")
doc.add_paragraph("工程咨询:鄂价房字[2001]107号 * 折扣率")
doc.add_paragraph("工程造价:鄂价工服规[2012]149号 * 折扣率")
doc.add_paragraph("工程监理:发改价格[2007]670号 * 专业/复杂度/高程调整 * 折扣率")
doc.add_paragraph("工程设计:计价格[2002]10号 * 折扣率")
doc.add_paragraph("工程代建:财建[2016]504号 * 折扣率")
doc.add_paragraph("招标代理鄂建文202335号 * 折扣率")
# 2.3 财务管理
doc.add_heading("2.3 财务管理", level=2)
doc.add_paragraph("主流程:开票请款 → 回款")
doc.add_paragraph("回款流程:商务选项目(有合同或正式成果),提交开票申请;财务开票并填金额;回款后录入回款金额,状态变为“已回款”。")
doc.add_paragraph("请款流程商务提交请款GM 审核,出纳放款,状态变为“已付款”。")
# 2.4 报表管理
doc.add_heading("2.4 报表管理", level=2)
doc.add_paragraph("项目报表:项目明细表(立项到回款全链路),项目汇总表(按状态、负责人汇总)。")
doc.add_paragraph("产值报表:产值明细表(按执业者完成进度分解),产值汇总表(执业者维度、时间段统计)。")
doc.add_paragraph("产值计算比例参考结算审计30/30/10/30工程咨询30/20/50跟踪审计60/40项目管理40/60工程监理60/40。")
doc.add_paragraph("财务报表:应收账款汇总/明细(按客户)、应付账款明细/汇总(对应请款)。")
# 2.5 系统设置
doc.add_heading("2.5 系统设置", level=2)
doc.add_paragraph("组织架构:自定义部门层级。")
doc.add_paragraph("账号管理:账号角色、部门负责人/员工,权限可控;默认直属领导审核;执业人员仅看成果相关,财务看发票/请款。")
doc.add_paragraph("系统版本PC 版(资料提交、附件上传、报表查询)、手机版(流程审核、简单报表、提醒通知)。")
# 非功能/质量要求(补充)
doc.add_heading("三、非功能与质量要求(补充)", level=1)
doc.add_paragraph("权限与审核:全流程节点审核留痕;按角色/部门授权;附件留存。")
doc.add_paragraph("编号与一致性:项目/启动编号自动生成且唯一;跨单据数据自动带出。")
doc.add_paragraph("提醒与通知:审核待办、对账差异提醒、回款/请款节点提醒。")
doc.add_paragraph("多端支持PC + 移动端;移动端关注待办与通知。")
doc.add_paragraph("报表性能:支持按条件查询、导出;状态/人员维度汇总。")
# 里程碑(简版,可后续细化)
doc.add_heading("四、里程碑(示例)", level=1)
doc.add_paragraph("M1需求评审完成")
doc.add_paragraph("M2原型&交互确认")
doc.add_paragraph("M3开发完成含接口与前端")
doc.add_paragraph("M4联调与测试通过")
doc.add_paragraph("M5试运行与验收")
# 开发与验收要点(简版)
doc.add_heading("五、开发与验收要点(示例)", level=1)
doc.add_paragraph("1) 编号生成、跨单据数据带出需联调确认。")
doc.add_paragraph("2) 审核链可配置(经营管理部→总经理→财务/组长等)。")
doc.add_paragraph("3) 产值/费用/回款计算公式需与财务口径对齐。")
doc.add_paragraph("4) 报表字段、过滤条件、导出格式需评审确认。")
doc.add_paragraph("5) 移动端待办/提醒体验需验证。")
def main():
output = Path("需求文档.docx")
doc = Document()
build_prd(doc)
doc.save(output)
print(f"已生成: {output.resolve()}")
if __name__ == "__main__":
main()