441 lines
19 KiB
Python
441 lines
19 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
在现有PRD基础上补充完善内容
|
||
"""
|
||
from docx import Document
|
||
from docx.shared import Pt, Inches
|
||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||
import os
|
||
|
||
def add_enhanced_sections(doc):
|
||
"""添加增强的章节内容"""
|
||
|
||
# ========== 10. 审核流程详细说明 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('10. 审核流程详细说明', 1)
|
||
|
||
doc.add_heading('10.1 审核角色定义', 2)
|
||
doc.add_paragraph('系统需支持以下审核角色:')
|
||
|
||
roles = [
|
||
('部门负责人', '审核本部门员工提交的立项申请、启动申请等,一级审核节点'),
|
||
('经营管理部', '审核立项申请、启动申请等,二级审核节点'),
|
||
('组长', '审核执业工程师提交的项目成果(初稿、对账、最终成果)'),
|
||
('总经理(王总)', '审核立项申请、启动申请、成果等,最终审核节点'),
|
||
('总经理(戚总)', '审核最终成果,最终审核节点'),
|
||
('财务', '审核开票申请'),
|
||
('出纳', '执行请款放款操作')
|
||
]
|
||
|
||
table = doc.add_table(rows=1, cols=2)
|
||
table.style = 'Light Grid Accent 1'
|
||
hdr = table.rows[0].cells
|
||
hdr[0].text = '角色'
|
||
hdr[1].text = '职责说明'
|
||
|
||
for role, desc in roles:
|
||
row = table.add_row().cells
|
||
row[0].text = role
|
||
row[1].text = desc
|
||
|
||
doc.add_heading('10.2 审核流程规则', 2)
|
||
|
||
doc.add_heading('10.2.1 立项审核流程', 3)
|
||
doc.add_paragraph('1. 申请人提交立项申请')
|
||
doc.add_paragraph('2. 系统自动流转至经营管理部(部门负责人)')
|
||
doc.add_paragraph('3. 经营管理部审核通过后,自动流转至总经理')
|
||
doc.add_paragraph('4. 总经理审核通过后,项目状态变为"已立项"')
|
||
doc.add_paragraph('5. 任一环节审核驳回,流程终止,申请人可修改后重新提交')
|
||
doc.add_paragraph('6. 审核超时处理:超过3个工作日未审核,系统发送提醒通知')
|
||
|
||
doc.add_heading('10.2.2 启动审核流程', 3)
|
||
doc.add_paragraph('流程与立项审核类似:经营管理部 → 总经理')
|
||
|
||
doc.add_heading('10.2.3 成果审核流程', 3)
|
||
doc.add_paragraph('1. 初稿/对账审核流程:')
|
||
doc.add_paragraph(' • 执业工程师提交成果(初稿或对账)')
|
||
doc.add_paragraph(' • 多人同时提交时,需等待所有人员提交完成')
|
||
doc.add_paragraph(' • 组长审核所有提交的成果')
|
||
doc.add_paragraph(' • 组长审核通过后,流转至领导(王总)审核')
|
||
doc.add_paragraph(' • 审核通过后,状态更新')
|
||
|
||
doc.add_paragraph('2. 最终成果审核流程:')
|
||
doc.add_paragraph(' • 执业工程师提交最终成果')
|
||
doc.add_paragraph(' • 多人同时提交时,需等待所有人员提交完成')
|
||
doc.add_paragraph(' • 组长审核所有提交的成果')
|
||
doc.add_paragraph(' • 组长审核通过后,流转至领导(王总、戚总)审核')
|
||
doc.add_paragraph(' • 审核通过后,状态更新为"最终成果已确认"')
|
||
|
||
doc.add_heading('10.2.4 审核流程配置', 3)
|
||
doc.add_paragraph('系统需支持审核流程的配置化,包括:')
|
||
items = [
|
||
'审核节点可配置(可增加或减少审核节点)',
|
||
'审核人可配置(可指定特定人员或角色)',
|
||
'审核条件可配置(如金额超过阈值需额外审核)',
|
||
'审核超时时间可配置',
|
||
'审核提醒规则可配置'
|
||
]
|
||
for item in items:
|
||
doc.add_paragraph(item, style='List Bullet')
|
||
|
||
doc.add_heading('10.3 审核记录要求', 2)
|
||
doc.add_paragraph('所有审核操作需记录以下信息:')
|
||
items = [
|
||
'审核时间',
|
||
'审核人',
|
||
'审核意见(通过/驳回)',
|
||
'审核备注(驳回原因等)',
|
||
'审核节点',
|
||
'审核顺序'
|
||
]
|
||
for item in items:
|
||
doc.add_paragraph(item, style='List Bullet')
|
||
doc.add_paragraph('审核记录不可修改,支持查询和导出。')
|
||
|
||
# ========== 11. 附件管理详细规则 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('11. 附件管理详细规则', 1)
|
||
|
||
doc.add_heading('11.1 附件类型限制', 2)
|
||
doc.add_paragraph('系统支持以下附件格式:')
|
||
formats = [
|
||
'文档类:PDF、Word(.doc, .docx)、Excel(.xls, .xlsx)',
|
||
'图片类:JPG、PNG、GIF',
|
||
'压缩包:ZIP、RAR(需解压后查看)'
|
||
]
|
||
for fmt in formats:
|
||
doc.add_paragraph(fmt, style='List Bullet')
|
||
|
||
doc.add_heading('11.2 附件大小限制', 2)
|
||
doc.add_paragraph('单个附件大小限制:')
|
||
doc.add_paragraph('• 单个文件不超过50MB')
|
||
doc.add_paragraph('• 单个单据附件总大小不超过200MB')
|
||
doc.add_paragraph('• 超过限制时,系统提示并阻止上传')
|
||
|
||
doc.add_heading('11.3 附件存储规则', 2)
|
||
doc.add_paragraph('• 附件存储在服务器,支持分布式存储')
|
||
doc.add_paragraph('• 附件需定期备份,防止数据丢失')
|
||
doc.add_paragraph('• 附件命名规则:项目编号_附件类型_上传时间_文件名')
|
||
doc.add_paragraph('• 附件访问权限:仅相关审核人和申请人可查看和下载')
|
||
|
||
doc.add_heading('11.4 附件下载规则', 2)
|
||
doc.add_paragraph('• 支持在线预览(PDF、图片等)')
|
||
doc.add_paragraph('• 支持批量下载')
|
||
doc.add_paragraph('• 下载需记录日志(谁、何时、下载了哪些附件)')
|
||
|
||
# ========== 12. 状态流转完整说明 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('12. 状态流转完整说明', 1)
|
||
|
||
doc.add_heading('12.1 项目状态定义', 2)
|
||
states = [
|
||
('待提交', '立项申请已保存但未提交'),
|
||
('待审核', '已提交,等待审核'),
|
||
('审核中', '正在审核流程中'),
|
||
('已立项', '立项审核通过'),
|
||
('投标中', '项目处于投标阶段'),
|
||
('已中标', '投标成功'),
|
||
('已签合同', '已签订合同'),
|
||
('已启动', '项目已启动执行'),
|
||
('执行中', '项目正在执行'),
|
||
('初稿已完成', '初稿已提交并审核通过'),
|
||
('对账中', '正在对账阶段'),
|
||
('对账完成', '对账已完成'),
|
||
('最终成果已完成', '最终成果已提交并审核通过'),
|
||
('已开票', '已申请开票并完成开票'),
|
||
('已回款', '款项已收到'),
|
||
('已完成', '项目全部完成'),
|
||
('已驳回', '审核被驳回'),
|
||
('已取消', '项目已取消')
|
||
]
|
||
|
||
table = doc.add_table(rows=1, cols=2)
|
||
table.style = 'Light Grid Accent 1'
|
||
hdr = table.rows[0].cells
|
||
hdr[0].text = '状态'
|
||
hdr[1].text = '说明'
|
||
|
||
for state, desc in states:
|
||
row = table.add_row().cells
|
||
row[0].text = state
|
||
row[1].text = desc
|
||
|
||
doc.add_heading('12.2 状态流转规则', 2)
|
||
doc.add_paragraph('1. 状态只能按既定流程流转,不可跳过中间状态')
|
||
doc.add_paragraph('2. 状态流转需触发相应通知')
|
||
doc.add_paragraph('3. 部分状态可回退(如"已驳回"可修改后重新提交)')
|
||
doc.add_paragraph('4. 特殊状态说明:')
|
||
doc.add_paragraph(' • "已立项"后可直接变为"已启动"(跳过投标和合同)')
|
||
doc.add_paragraph(' • "已签合同"后必须变为"已启动"才能继续后续流程')
|
||
doc.add_paragraph(' • "已启动"后根据项目类型进入不同的成果提交流程')
|
||
|
||
# ========== 13. 消息通知机制 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('13. 消息通知机制', 1)
|
||
|
||
doc.add_heading('13.1 通知触发条件', 2)
|
||
triggers = [
|
||
('审核待办', '有新的审核任务时,通知审核人'),
|
||
('审核结果', '审核通过或驳回时,通知申请人'),
|
||
('流程流转', '流程流转到下一节点时,通知相关人'),
|
||
('对账差异提醒', '初稿金额与对账金额差异超过阈值时,通知相关人员'),
|
||
('回款提醒', '项目达到回款条件时,提醒商务人员'),
|
||
('请款提醒', '请款申请审核通过后,提醒出纳'),
|
||
('项目状态变更', '项目状态发生重要变更时,通知相关人员'),
|
||
('系统提醒', '系统维护、升级等通知所有用户')
|
||
]
|
||
|
||
table = doc.add_table(rows=1, cols=2)
|
||
table.style = 'Light Grid Accent 1'
|
||
hdr = table.rows[0].cells
|
||
hdr[0].text = '通知类型'
|
||
hdr[1].text = '触发条件'
|
||
|
||
for trigger, condition in triggers:
|
||
row = table.add_row().cells
|
||
row[0].text = trigger
|
||
row[1].text = condition
|
||
|
||
doc.add_heading('13.2 通知方式', 2)
|
||
doc.add_paragraph('系统支持以下通知方式:')
|
||
methods = [
|
||
'站内消息(系统内消息中心)',
|
||
'邮件通知(发送至用户注册邮箱)',
|
||
'短信通知(重要通知,需配置短信接口)',
|
||
'移动端推送(移动端应用推送通知)',
|
||
'桌面提醒(PC端桌面弹窗提醒)'
|
||
]
|
||
for method in methods:
|
||
doc.add_paragraph(method, style='List Bullet')
|
||
|
||
doc.add_paragraph('用户可在个人设置中选择接收通知的方式。')
|
||
|
||
doc.add_heading('13.3 通知模板', 2)
|
||
doc.add_paragraph('系统需提供通知模板配置功能,支持自定义通知内容模板。')
|
||
doc.add_paragraph('示例模板:')
|
||
doc.add_paragraph('【审核待办】您有一个待审核的立项申请:项目编号{project_no},项目名称{project_name},请及时处理。')
|
||
doc.add_paragraph('【审核结果】您的立项申请({project_no})已通过/驳回,驳回原因:{reject_reason}。')
|
||
|
||
# ========== 14. 数据权限详细说明 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('14. 数据权限详细说明', 1)
|
||
|
||
doc.add_heading('14.1 查看权限', 2)
|
||
doc.add_paragraph('数据查看权限分为三个层级:')
|
||
|
||
levels = [
|
||
('个人数据', '仅查看自己创建或参与的数据', '普通员工查看自己提交的申请、自己参与的项目等'),
|
||
('部门数据', '查看本部门所有数据', '部门负责人可查看本部门所有项目数据'),
|
||
('全部数据', '查看公司所有数据', '总经理、系统管理员可查看所有数据')
|
||
]
|
||
|
||
table = doc.add_table(rows=1, cols=3)
|
||
table.style = 'Light Grid Accent 1'
|
||
hdr = table.rows[0].cells
|
||
hdr[0].text = '权限层级'
|
||
hdr[1].text = '权限范围'
|
||
hdr[2].text = '适用角色'
|
||
|
||
for level, scope, role in levels:
|
||
row = table.add_row().cells
|
||
row[0].text = level
|
||
row[1].text = scope
|
||
row[2].text = role
|
||
|
||
doc.add_heading('14.2 编辑权限', 2)
|
||
doc.add_paragraph('数据编辑权限规则:')
|
||
rules = [
|
||
'申请人可编辑自己提交的未审核数据',
|
||
'审核人可编辑审核意见,但不可编辑原始申请数据',
|
||
'项目负责人可编辑自己负责的项目信息',
|
||
'执业工程师可编辑自己负责的项目成果',
|
||
'财务人员可编辑财务相关数据(开票金额、回款金额等)',
|
||
'系统管理员可编辑所有数据(需有操作日志)'
|
||
]
|
||
for rule in rules:
|
||
doc.add_paragraph(rule, style='List Bullet')
|
||
|
||
doc.add_heading('14.3 删除权限', 2)
|
||
doc.add_paragraph('删除权限严格控制:')
|
||
doc.add_paragraph('• 普通用户只能删除自己创建的草稿数据(未提交状态)')
|
||
doc.add_paragraph('• 已提交的数据不可删除,只能取消或作废')
|
||
doc.add_paragraph('• 系统管理员可删除数据,但需记录详细日志')
|
||
doc.add_paragraph('• 删除操作需二次确认,防止误操作')
|
||
|
||
# ========== 15. 异常场景处理 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('15. 异常场景处理', 1)
|
||
|
||
doc.add_heading('15.1 审核人异常', 2)
|
||
scenarios = [
|
||
('审核人离职', '管理员重新分配审核人,或由上级代为审核'),
|
||
('审核人请假', '支持设置代理审核人,或自动流转至上级'),
|
||
('审核人账号禁用', '自动流转至上级或管理员重新分配'),
|
||
('审核超时', '系统发送提醒,超过期限自动流转至上级或管理员处理')
|
||
]
|
||
|
||
table = doc.add_table(rows=1, cols=2)
|
||
table.style = 'Light Grid Accent 1'
|
||
hdr = table.rows[0].cells
|
||
hdr[0].text = '异常场景'
|
||
hdr[1].text = '处理方案'
|
||
|
||
for scenario, solution in scenarios:
|
||
row = table.add_row().cells
|
||
row[0].text = scenario
|
||
row[1].text = solution
|
||
|
||
doc.add_heading('15.2 数据异常', 2)
|
||
doc.add_paragraph('数据异常处理:')
|
||
items = [
|
||
'数据不一致:如立项金额与合同金额差异过大,系统提示并阻止操作',
|
||
'编号重复:系统自动检测并重新生成编号',
|
||
'关联数据丢失:如立项项目被删除,启动单显示关联异常,需管理员处理',
|
||
'计算错误:产值、费用计算异常时,系统记录日志并提示管理员'
|
||
]
|
||
for item in items:
|
||
doc.add_paragraph(item, style='List Bullet')
|
||
|
||
doc.add_heading('15.3 系统异常', 2)
|
||
doc.add_paragraph('系统异常恢复:')
|
||
doc.add_paragraph('• 系统宕机恢复后,自动恢复未完成的操作')
|
||
doc.add_paragraph('• 数据备份恢复:支持按时间点恢复数据')
|
||
doc.add_paragraph('• 操作日志:所有关键操作记录日志,便于问题追溯')
|
||
doc.add_paragraph('• 异常监控:系统监控异常情况,及时告警')
|
||
|
||
# ========== 16. 报表导出格式 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('16. 报表导出格式', 1)
|
||
|
||
doc.add_heading('16.1 Excel导出格式', 2)
|
||
doc.add_paragraph('Excel导出要求:')
|
||
items = [
|
||
'文件格式:.xlsx',
|
||
'文件命名:报表名称_导出时间.xlsx',
|
||
'工作表命名:使用中文,清晰表达内容',
|
||
'表头格式:第一行为表头,加粗显示,背景色区分',
|
||
'数据格式:数字格式统一,日期格式统一(YYYY-MM-DD)',
|
||
'列宽自适应:自动调整列宽,确保内容完整显示',
|
||
'支持分页:大数据量自动分多个工作表',
|
||
'冻结首行:导出后首行冻结,方便查看'
|
||
]
|
||
for item in items:
|
||
doc.add_paragraph(item, style='List Bullet')
|
||
|
||
doc.add_heading('16.2 PDF导出格式', 2)
|
||
doc.add_paragraph('PDF导出要求(可选功能):')
|
||
items = [
|
||
'文件格式:.pdf',
|
||
'页面设置:A4纸张,横向或纵向根据内容自动选择',
|
||
'页眉页脚:包含报表名称、导出时间、页码',
|
||
'样式统一:使用统一的字体、颜色、样式',
|
||
'支持打印:导出PDF可直接打印'
|
||
]
|
||
for item in items:
|
||
doc.add_paragraph(item, style='List Bullet')
|
||
|
||
# ========== 17. 移动端详细功能 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('17. 移动端详细功能', 1)
|
||
|
||
doc.add_heading('17.1 移动端可用功能', 2)
|
||
doc.add_paragraph('移动端支持以下功能:')
|
||
|
||
available = [
|
||
('待办事项', '查看待审核事项,快速审核(通过/驳回)'),
|
||
('消息通知', '接收系统通知、审核提醒等'),
|
||
('项目查询', '查询项目基本信息、状态等(简化版)'),
|
||
('成果提交', '提交项目成果,上传附件(小文件)'),
|
||
('简单报表', '查看关键数据报表(产值、回款等汇总)'),
|
||
('个人信息', '查看个人信息、修改密码等')
|
||
]
|
||
|
||
table = doc.add_table(rows=1, cols=2)
|
||
table.style = 'Light Grid Accent 1'
|
||
hdr = table.rows[0].cells
|
||
hdr[0].text = '功能'
|
||
hdr[1].text = '说明'
|
||
|
||
for func, desc in available:
|
||
row = table.add_row().cells
|
||
row[0].text = func
|
||
row[1].text = desc
|
||
|
||
doc.add_heading('17.2 移动端不可用功能', 2)
|
||
doc.add_paragraph('以下功能仅在PC端可用:')
|
||
unavailable = [
|
||
'复杂报表查询和导出(移动端仅查看简化版)',
|
||
'批量操作(批量审核、批量导出等)',
|
||
'大文件上传(移动端限制单文件10MB以内)',
|
||
'组织架构管理、账号管理等系统设置',
|
||
'详细的数据分析功能'
|
||
]
|
||
for item in unavailable:
|
||
doc.add_paragraph(item, style='List Bullet')
|
||
|
||
doc.add_heading('17.3 移动端界面要求', 2)
|
||
doc.add_paragraph('移动端界面需满足以下要求:')
|
||
requirements = [
|
||
'响应式设计,适配不同尺寸手机屏幕',
|
||
'操作简洁,核心功能一键直达',
|
||
'支持横屏和竖屏切换',
|
||
'网络异常时提示并支持离线查看缓存数据',
|
||
'支持手势操作(滑动、长按等)',
|
||
'性能优化,页面加载快速'
|
||
]
|
||
for req in requirements:
|
||
doc.add_paragraph(req, style='List Bullet')
|
||
|
||
# ========== 18. 系统集成要求 ==========
|
||
doc.add_page_break()
|
||
doc.add_heading('18. 系统集成要求(可选)', 1)
|
||
|
||
doc.add_paragraph('系统需考虑未来可能的集成需求:')
|
||
integrations = [
|
||
'与财务系统集成:同步财务数据',
|
||
'与OA系统集成:统一待办、消息通知',
|
||
'与邮件系统集成:发送邮件通知',
|
||
'与短信平台集成:发送短信通知',
|
||
'与第三方存储集成:如阿里云OSS、腾讯云COS等',
|
||
'提供API接口:供其他系统调用'
|
||
]
|
||
for item in integrations:
|
||
doc.add_paragraph(item, style='List Bullet')
|
||
doc.add_paragraph('注:集成需求需在开发阶段提前规划接口设计。')
|
||
|
||
def main():
|
||
print("正在读取现有文档...")
|
||
input_file = "需求文档_详细版.docx"
|
||
|
||
if not os.path.exists(input_file):
|
||
print(f"错误:找不到文件 {input_file}")
|
||
print("请先运行 generate_detailed_prd.py 生成基础文档")
|
||
return
|
||
|
||
doc = Document(input_file)
|
||
|
||
print("正在补充完善内容...")
|
||
add_enhanced_sections(doc)
|
||
|
||
output_file = "需求文档_完整版.docx"
|
||
doc.save(output_file)
|
||
|
||
print(f"✓ 文档完善成功!")
|
||
print(f" 输入文件: {input_file}")
|
||
print(f" 输出文件: {output_file}")
|
||
print(f" 新增内容:")
|
||
print(f" - 审核流程详细说明")
|
||
print(f" - 附件管理详细规则")
|
||
print(f" - 状态流转完整说明")
|
||
print(f" - 消息通知机制")
|
||
print(f" - 数据权限详细说明")
|
||
print(f" - 异常场景处理")
|
||
print(f" - 报表导出格式")
|
||
print(f" - 移动端详细功能")
|
||
print(f" - 系统集成要求")
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
|