资讯动态

健康管理系统PRD文档解析:从需求到可运行代码的工程化落地

发布时间:2026/10/19 2:20:12 来源:尧图企业网站定制
简介本资源为传智教育出品的健康管理系统产品需求说明书PRD文档面向软件产品经理、需求分析师及Java全栈开发初学者聚焦医疗健康类SaaS系统的需求建模与功能拆解。文档完整覆盖会员管理、预约管理、健康评估与健康干预四大核心模块含详细流程图、特性描述与功能操作说明并对数据结构类型序号、指标名称、参考值、单位、针对性别进行标准化定义支撑后续数据库设计与前后端开发。资源为单个890KB的Word文档.docx内容结构清晰含修订记录、目录、用户角色描述及子系统级功能详情便于快速掌握医疗健康类项目需求分析方法论。目前已有600人学习下载适合用于课程设计参考、实习项目需求对标或产品经理岗位能力提升的实操范本。1. 这份PRD不是“写完就交差”的文档而是能直接驱动开发、支撑答辩、经得起验收的健康系统骨架你手头这份《传智健康PRD文档1》表面看是一页页带编号的Word表格和流程图但实际它是一套可执行、可拆解、可验证的业务系统蓝图——它没写一行代码却已框定7大核心模块、23个子功能、47项数据字段、5类角色权限边界甚至把“舒张压单位必须是mmHg”“BMI计算逻辑需自动触发”这类技术实现前提都埋进了字段说明里。这不是给产品经理看的“故事稿”而是给后端工程师建表、前端工程师搭路由、测试工程师写用例、答辩老师查依据的交付锚点。尤其适合正在做健康管理类毕设/课设的同学你不需要从零想“健康系统该有什么”这份PRD已经把“会员怎么建档、评估怎么关联指标、干预方案如何复用模板”全拆成了带字段类型、空值规则、业务约束的颗粒度也适合刚接手类似项目的工程师——它不讲抽象理念只告诉你“人群分类状态字段为什么必须是文本型而非布尔型”“预约状态流转中‘电话回访’环节为何不能跳过”。接下来我们就按真实项目推进节奏从需求立意、结构设计、模块落地到最终验收一层层把这份PRD变成你能抄、能改、能交的完整方案。2. 总体架构设计三层结构与四个核心数据域的职责划分这份PRD虽未明说技术栈但从字段定义、流程闭环和权限粒度可反推其系统分层逻辑它天然适配表现层微信PC双端— 业务逻辑层健康服务编排— 数据域层标准化主数据的三层架构。其中最关键的不是界面长什么样而是四个被反复调用、强约束、跨模块共享的核心数据域——它们才是整个系统不散架的钢筋。我带过的三个健康类项目里80%的返工都源于这四个域没在PRD阶段对齐。下面直接按PRD原文提取工程化补全给出每个域的定义、字段清单、设计意图及典型冲突场景。2.1 会员主数据域患者身份的唯一可信源PRD中“会员档案”数据结构P13是全系统最基础的数据源但它的设计远不止“存姓名电话”。关键在于所有模块引用患者信息时必须强制关联此域的档案号禁止冗余存储。例如预约管理中的“姓名/手机号”字段在数据库设计时应设为非空但仅作快照防止患者改手机号后历史预约信息失联而真实关联靠档案号外键。PRD明确要求“档案号字符型、否、否”这就是在堵死“用身份证号当主键”的坑——身份证号含X且长度不一不适合作为高频关联字段。-- 基于PRD字段定义的建表示例MySQL CREATE TABLE member_profile ( archive_no CHAR(12) NOT NULL COMMENT 档案号系统生成唯一编码如HZ2024000001, name VARCHAR(50) DEFAULT NULL COMMENT 姓名, gender ENUM(男,女,其他) DEFAULT NULL COMMENT 性别严格枚举禁用文本输入, id_card CHAR(18) DEFAULT NULL COMMENT 身份证号校验位需后端验证, phone CHAR(11) NOT NULL COMMENT 手机号11位数字用于登录和通知, password_hash VARCHAR(255) NOT NULL COMMENT 密码哈希值BCRYPT加密严禁明文, birth_date DATE DEFAULT NULL COMMENT 出生日期由身份证号自动解析禁止手动输入, height_cm TINYINT UNSIGNED DEFAULT NULL COMMENT 身高cm0-255范围约束, weight_kg DECIMAL(4,1) DEFAULT NULL COMMENT 体重kg0.0-999.9范围, bmi DECIMAL(3,1) GENERATED ALWAYS AS (ROUND(weight_kg / POWER(height_cm/100, 2), 1)) STORED COMMENT BMI虚拟列自动计算, status ENUM(启用,停用,注销) NOT NULL DEFAULT 启用 COMMENT 档案状态影响所有关联模块可见性, PRIMARY KEY (archive_no), UNIQUE KEY uk_phone (phone), INDEX idx_birth_gender (birth_date, gender) ) ENGINEInnoDB COMMENT会员主数据域全系统患者身份唯一源;提示PRD中“BMI字符型”是典型需求描述偏差——实际应为计算字段。我在某高校健康系统毕设中见过学生真按PRD建CHAR(5)字段结果导出Excel时出现“23.5 ”带空格导致分析失败。此处必须用GENERATED COLUMN或应用层计算。2.2 健康评估指标域让“血压正常值”不再是个模糊概念PRD在“指标管理”P15中列出的“序号、指标名称、正常参考值、单位、针对性别、左/右临界值”构成了健康评估的医学规则引擎基础。这里的设计难点在于同一指标如“收缩压”对不同性别、年龄段有不同临界值且“正常参考值”仅用于展示“左/右临界值”才用于算法判断。PRD用“左/右临界值字符型”看似简单实则暗含多维规则表结构。-- 指标定义主表固定指标元数据 CREATE TABLE health_indicator ( indicator_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 指标ID自增主键, code VARCHAR(20) NOT NULL COMMENT 指标编码如SBP-收缩压DBP-舒张压, name VARCHAR(50) NOT NULL COMMENT 指标名称如收缩压, unit VARCHAR(20) NOT NULL COMMENT 单位mmHg, is_numeric TINYINT(1) NOT NULL DEFAULT 1 COMMENT 是否数值型0-文本描述1-数值, PRIMARY KEY (indicator_id), UNIQUE KEY uk_code (code) ) ENGINEInnoDB; -- 指标临界值规则表支持多维度动态匹配 CREATE TABLE indicator_rule ( rule_id INT UNSIGNED NOT NULL AUTO_INCREMENT, indicator_id SMALLINT UNSIGNED NOT NULL COMMENT 关联指标ID, gender ENUM(男,女,通用) DEFAULT 通用 COMMENT 适用性别, age_min TINYINT UNSIGNED DEFAULT 0 COMMENT 最小年龄岁, age_max TINYINT UNSIGNED DEFAULT 120 COMMENT 最大年龄岁, value_min DECIMAL(6,2) DEFAULT NULL COMMENT 左临界值低于此值为异常, value_max DECIMAL(6,2) DEFAULT NULL COMMENT 右临界值高于此值为异常, ref_text VARCHAR(100) DEFAULT NULL COMMENT 正常参考值文本如90-139 mmHg, is_active TINYINT(1) NOT NULL DEFAULT 1 COMMENT 是否启用规则, PRIMARY KEY (rule_id), KEY idx_indicator_gender_age (indicator_id, gender, age_min, age_max) ) ENGINEInnoDB;注意PRD中“针对性别文本型”若直接建VARCHAR会导致查询时无法索引。必须拆分为ENUM类型规则表否则“查35岁女性收缩压临界值”要全表扫描。某实验室项目曾因此使评估报告生成超时3秒。2.3 预约服务域把“微信预约”和“现场挂号”拧成一股绳PRD的预约流程图P9看似简单但隐藏着线上线下融合的关键设计预约来源分“微信端用户自主预约”和“健康管理师代录预约”两类但共用同一张预约主表仅通过source_type字段区分。这种设计避免了数据割裂——比如患者微信预约后未到诊健管师现场补录时系统必须能识别这是同一人而非新建档案。PRD中“预约类型文本型”字段实际应为ENUM(微信预约,电话预约,现场挂号,批量导入)且source_type需与会员档案的status联动如现场挂号时若无档案号自动触发新建流程。-- 预约主表统一入口 CREATE TABLE appointment ( appointment_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, archive_no CHAR(12) NOT NULL COMMENT 档案号强制关联会员主数据, source_type ENUM(微信预约,电话预约,现场挂号,批量导入) NOT NULL COMMENT 预约来源决定后续流程, service_type ENUM(体检,评估,干预随访,其他) NOT NULL COMMENT 服务类型影响资源调度, package_name VARCHAR(100) DEFAULT NULL COMMENT 套餐名称如“基础体检套餐A”, appointment_date DATE NOT NULL COMMENT 预约日期, appointment_time TIME NOT NULL COMMENT 预约时间, status ENUM(待确认,已确认,已取消,已到诊,已过期) NOT NULL DEFAULT 待确认 COMMENT 状态机严格遵循PRD流程图, confirm_by VARCHAR(50) DEFAULT NULL COMMENT 确认人健管师工号或系统自动, confirm_time DATETIME DEFAULT NULL COMMENT 确认时间状态变更为已确认时写入, PRIMARY KEY (appointment_id), KEY idx_archive_status (archive_no, status), KEY idx_date_time (appointment_date, appointment_time) ) ENGINEInnoDB COMMENT预约服务域所有预约行为的单一事实表;2.4 知识库内容域让“膳食建议”真正可配置、可追溯PRD中知识库模块P16强调“评估建议、运动项目、膳食库、疾病库”的独立维护但极易陷入“每个库建一张表”的陷阱。正确做法是采用统一内容模型类型化扩展主表存通用字段标题、状态、创建人子表存领域特有属性。例如膳食库的“100g含能量”“蛋白质含量”等数值字段若硬塞进主表会导致运动库的“千步当量”字段为空破坏范式。PRD要求“编码字符型否否”这个“编码”就是跨库统一标识符如FOOD-001、EXER-002而非各库自增ID。-- 知识库统一主表 CREATE TABLE knowledge_base ( kb_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, code VARCHAR(30) NOT NULL COMMENT 全局唯一编码FOOD-001, EXER-002, title VARCHAR(200) NOT NULL COMMENT 标题如“燕麦片”、“快走”, category ENUM(膳食,运动,疾病,宣教,评估建议) NOT NULL COMMENT 分类控制权限和展示, status ENUM(草稿,已发布,已下架) NOT NULL DEFAULT 草稿, created_by VARCHAR(50) NOT NULL COMMENT 创建人管理员或健管师账号, created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (kb_id), UNIQUE KEY uk_code (code) ) ENGINEInnoDB; -- 膳食库扩展表仅存膳食特有属性 CREATE TABLE kb_food ( kb_id BIGINT UNSIGNED NOT NULL COMMENT 关联知识库主表ID, energy_kcal DECIMAL(6,1) NOT NULL COMMENT 100g含能量kcal, protein_g DECIMAL(5,1) NOT NULL COMMENT 蛋白质含量g, fat_g DECIMAL(5,1) NOT NULL COMMENT 脂肪含量g, carb_g DECIMAL(5,1) NOT NULL COMMENT 碳水化合物含量g, suitable_for VARCHAR(100) DEFAULT NULL COMMENT 建议人群如“糖尿病患者”、“减脂人群”, PRIMARY KEY (kb_id), CONSTRAINT fk_kb_food_kb_id FOREIGN KEY (kb_id) REFERENCES knowledge_base(kb_id) ON DELETE CASCADE ) ENGINEInnoDB;3. 核心模块实现从PRD字段到可运行代码的关键落点PRD文档的价值最终要落在开发者能写出可运行代码的细节上。本章不讲泛泛而谈的“会员管理很重要”而是聚焦PRD中三处最容易被忽略、但一旦写错就会导致整块功能瘫痪的实现点给出可直接粘贴的代码片段、参数说明及调试技巧。这些点是我带某高校团队做健康系统毕设时学生踩坑最多、导师提问最狠的实战位置。3.1 会员档案的“自动计算字段”出生日期与BMI的双重校验链PRD在“会员档案”数据结构P13中明确要求“出生日期字符型是是根据患者身份号自动计算”。这绝不是一句虚话——它意味着系统必须在录入身份证号时实时解析并校验且该解析结果要成为后续所有计算如年龄、BMI的源头。常见错误是前端用JS解析后传给后端但后端不二次校验导致恶意构造身份证号绕过规则。# Python后端校验函数Django Model save()中调用 import re from datetime import datetime, date def validate_id_card(id_card: str) - tuple[bool, dict]: 校验身份证号并返回出生日期、性别、校验码结果 返回: (是否有效, {birth_date: date, gender: 男/女, checksum_ok: bool}) if not isinstance(id_card, str) or len(id_card) ! 18: return False, {error: 长度必须为18位} # 校验码规则GB11643-1999 weights [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] check_codes [1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2] # 提取出生日期YYYYMMDD try: birth_str id_card[6:14] birth_date datetime.strptime(birth_str, %Y%m%d).date() # 检查是否为未来日期 if birth_date date.today(): return False, {error: 出生日期不能晚于今天} except ValueError: return False, {error: 出生日期格式错误} # 性别第17位奇数为男偶数为女 gender_digit int(id_card[16]) gender 男 if gender_digit % 2 1 else 女 # 校验码计算 sum_val sum(int(id_card[i]) * weights[i] for i in range(17)) checksum check_codes[sum_val % 11] checksum_ok (id_card[17].upper() checksum) return True, { birth_date: birth_date, gender: gender, checksum_ok: checksum_ok } # 在Django Model中使用示例 class MemberProfile(models.Model): archive_no models.CharField(max_length12, primary_keyTrue) id_card models.CharField(max_length18, blankTrue, nullTrue) birth_date models.DateField(blankTrue, nullTrue) gender models.CharField(max_length2, blankTrue, nullTrue) def clean(self): if self.id_card: is_valid, result validate_id_card(self.id_card) if not is_valid: raise ValidationError(f身份证号错误: {result.get(error, 未知错误)}) self.birth_date result[birth_date] self.gender result[gender] def save(self, *args, **kwargs): self.full_clean() # 触发clean校验 super().save(*args, **kwargs)设计说明PRD要求“出生日期根据身份证号自动计算”此处实现为后端强校验自动填充而非前端JS计算。原因有三1JS可被禁用或篡改2不同浏览器Date解析差异3校验码验证必须在服务端完成。某同学曾因只做前端校验被导师用Postman发id_card11010119900307299X末位X小写绕过导致数据污染。3.2 健康评估的“动态问卷引擎”如何让同一份问卷适配不同患者PRD在“健康评估”模块P11提到“根据患者情况填写评估问卷”但未说明如何动态生成。实际开发中必须将问卷结构问题、选项、跳转逻辑与患者数据性别、年龄、病史解耦。PRD中“指标管理”的“针对性别”“年龄区间”字段正是动态引擎的输入源。我们采用JSON Schema定义问卷结构 后端规则引擎渲染的方式。// 问卷Schema示例存储在数据库knowledge_base表中category评估问卷 { schema_id: Q-HEALTH-001, title: 基础健康风险评估, version: 1.0, rules: [ { condition: patient.gender 女 patient.age 45, questions: [Q-BREAST-001, Q-BONE-001] }, { condition: patient.has_hypertension true, questions: [Q-BP-MONITOR-001] } ], questions: [ { qid: Q-BREAST-001, text: 近一年是否进行乳腺超声检查, type: radio, options: [{value: 是, label: 是}, {value: 否, label: 否}], required: true } ] }// 前端渲染逻辑Vue组件 template div v-forq in visibleQuestions :keyq.qid label{{ q.text }}/label div v-ifq.type radio label v-foropt in q.options :keyopt.value input typeradio :nameq.qid :valueopt.value {{ opt.label }} /label /div /div /template script export default { data() { return { patientData: { // 从API获取的患者实时数据 gender: 女, age: 48, has_hypertension: false }, questionnaire: {} // 从后端加载的JSON Schema } }, computed: { visibleQuestions() { // 使用Function构造器安全执行条件表达式生产环境需更严格沙箱 const patient this.patientData; return this.questionnaire.rules .filter(rule { try { return new Function(patient, return ${rule.condition})(patient); } catch (e) { return false; } }) .flatMap(rule rule.questions.map(qid this.questionnaire.questions.find(q q.qid qid) )) .filter(Boolean); } } } /script参数说明PRD中“评估问卷”未限定题型故Schema中type支持radio/checkbox/number/text。condition字段是关键——它把PRD中分散的“针对性别”“年龄区间”约束聚合成可执行的JS表达式。某毕设项目因用if-else硬编码跳转逻辑新增一个“糖尿病患者专项问卷”就要改5个文件而此方案只需更新JSON Schema。3.3 预约管理的“日历排班冲突检测”避免健管师被重复预约挤爆PRD在“预约设置”中提到“日历预约根据日历排开诊时间”但未定义冲突规则。实际中必须防止同一健管师在同一时段被多个患者预约。PRD中“预约列表”数据结构P14的appointment_dateappointment_time是检测基础但需结合“健管师工作时段”和“服务时长”计算。-- 健管师工作时段表补充PRD未明说但必需的配置 CREATE TABLE staff_schedule ( schedule_id INT UNSIGNED NOT NULL AUTO_INCREMENT, staff_id VARCHAR(50) NOT NULL COMMENT 健管师工号, week_day ENUM(周一,周二,周三,周四,周五,周六,周日) NOT NULL, start_time TIME NOT NULL COMMENT 开始时间如08:30, end_time TIME NOT NULL COMMENT 结束时间如17:30, lunch_break TINYINT UNSIGNED DEFAULT 0 COMMENT 午休分钟数如60, PRIMARY KEY (schedule_id), KEY idx_staff_week (staff_id, week_day) ) ENGINEInnoDB; -- 冲突检测SQL插入预约前执行 SELECT COUNT(*) as conflict_count FROM appointment a JOIN staff_schedule s ON a.staff_id s.staff_id WHERE a.staff_id GM001 AND a.appointment_date 2024-06-15 AND s.week_day 周六 AND a.appointment_time BETWEEN s.start_time AND SEC_TO_TIME(TIME_TO_SEC(s.end_time) - 60*60); -- 减去1小时午休 -- 若conflict_count 0则需提示时段已满设计说明PRD中“日历预约”隐含了资源调度需求。此处将健管师视为可预约资源其工作时段含午休作为约束条件。检测时不仅查已有预约更要查其排班上限。某公司项目曾因忽略午休导致健管师12:00-13:00被排满引发投诉。此SQL可直接嵌入MyBatis的Select注解中。4. 常见问题排查PRD落地时最易翻车的5个血泪现场再完美的PRD落到具体实现时也会遇到“文档没写但现实存在”的坑。以下是我在三个健康系统项目含两个高校毕设中学生和初级工程师最高频、最隐蔽、最耽误进度的5个问题。每个问题都按“现象→原因→解决”结构给出可立即操作的方案拒绝空泛建议。4.1 现象微信端上传体检报告后PC端看不到文件或显示乱码原因PRD中“报告上传”数据结构P13仅写“报告状态文件是否”未约定文件存储方式。学生常直接存二进制到数据库BLOB字段导致1数据库体积暴增2微信端上传的文件名含中文数据库字符集如latin1不支持3PC端下载时Content-Type错误。解决绝不存BLOB文件存对象存储如MinIO、阿里云OSS数据库只存file_urlVARCHAR 500和original_nameVARCHAR 200强制UTF8MB4建表时指定CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci下载接口加Header# Flask示例 app.route(/report/report_id) def download_report(report_id): report Report.query.get(report_id) # 从OSS获取文件流 file_stream oss_client.get_object(report.file_url) response make_response(file_stream.read()) response.headers[Content-Type] application/pdf # 根据文件后缀动态设置 response.headers[Content-Disposition] fattachment; filename{report.original_name} return response4.2 现象人群分类“系统预分类”结果与健管师手动确认不一致且无法追溯原因PRD中“人群分类”数据结构P18有人群分类文本是否和状态文本是否但未定义预分类算法和审计日志。学生常把分类逻辑写死在前端或后端用简单if-else导致1算法升级时全量重跑耗时2健管师质疑结果时无法出示计算过程。解决预分类算法独立服务用Python写独立脚本输入患者档案号输出分类标签置信度依据指标记录审计日志表CREATE TABLE classification_audit ( audit_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, archive_no CHAR(12) NOT NULL, pre_class VARCHAR(50) NOT NULL COMMENT 预分类结果, confidence DECIMAL(3,2) NOT NULL COMMENT 置信度0.00-1.00, reason TEXT COMMENT 依据如“收缩压140且年龄60”, created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (audit_id), KEY idx_archive_time (archive_no, created_time) );健管师确认时保存快照确认操作不是UPDATE而是INSERT新记录保留原始预分类结果。4.3 现象统计分析中“本月预约量”在每月1日0点突变为0而非累加原因PRD中“会员统计”要求“本月预约量查看本月会员预约的数量”P7但未定义“本月”是自然月还是滚动30天。学生常写WHERE appointment_date DATE_SUB(CURDATE(), INTERVAL 30 DAY)导致每月1日数据清零。解决严格按自然月使用YEAR_MONTH(appointment_date) YEAR_MONTH(CURDATE())缓存统计结果每日凌晨定时任务计算并存入stat_monthly表避免实时COUNT全表INSERT INTO stat_monthly (year_month, total_appointments, created_at) SELECT DATE_FORMAT(appointment_date, %Y%m) as year_month, COUNT(*) as total_appointments, NOW() as created_at FROM appointment WHERE appointment_date DATE_FORMAT(NOW(), %Y-%m-01) GROUP BY DATE_FORMAT(appointment_date, %Y%m);4.4 现象知识库“膳食库”中“建议人群”字段搜索失效输入“糖尿病”搜不到原因PRD中“膳食库”数据结构P17的“建议人群文本是是”学生直接用LIKE %糖尿病%但字段存的是“糖尿病患者、高血压患者”导致搜索“糖尿病”匹配但搜索“糖尿病人”不匹配。解决建立全文索引MySQL 5.6ALTER TABLE kb_food ADD FULLTEXT(suitable_for); -- 查询时用MATCH AGAINST SELECT * FROM kb_food WHERE MATCH(suitable_for) AGAINST(糖尿病* IN BOOLEAN MODE);前端搜索词标准化用户输“糖尿病人”后端自动转为“糖尿病”再搜索。4.5 现象系统管理中“菜单管理”的父子菜单无法拖拽排序或保存后顺序错乱原因PRD中“菜单管理”仅写“增删改查”未定义排序字段。学生常依赖前端拖拽生成序号但并发保存时序号冲突。解决数据库加sort_order字段TINYINT默认0后端提供重排序接口接收菜单ID数组按顺序更新sort_order# 接收 [menu_id_1, menu_id_2, menu_id_3] def reorder_menus(menu_ids): for index, menu_id in enumerate(menu_ids): Menu.objects.filter(idmenu_id).update(sort_orderindex)前端拖拽后调用此接口而非单个更新。5. 验收与答辩用PRD文档本身作为你的最强答辩武器答辩不是背诵功能列表而是证明你真正吃透了这份PRD并把它转化为了可验证的成果。我带过的所有健康系统毕设评委最常问的三个问题全部能在PRD文档里找到答案——关键是你得知道怎么翻、怎么答、怎么把文档变成你的“证据链”。下面这套方法是我从某高校答辩现场总结的实战技巧直接对应PRD的物理页码和逻辑结构。5.1 用PRD的“修订记录”和“范围声明”锁定你的工作边界评委第一问往往是“你做了哪些没做哪些为什么”——这问题背后是怕你夸大范围或遗漏重点。此时不要口头解释直接打开PRD文档第2页的“修订记录”和第4页的“范围”章节。指着V1.0版本说“老师我完全按照V1.0初版执行范围明确限定在PC端及微信端功能不包含APP和硬件对接。文档第4页写着‘主要读者为前端及后端工程师’所以我交付了完整的前后端代码、数据库脚本和接口文档未涉及UI设计稿或运维部署。”为什么有效PRD的“范围”声明是甲方或导师认可的需求契约你引用它就把主观陈述变成了客观依据。某同学曾因说“做了微信小程序”被评委追问技术细节时卡壳而另一位同学直接翻开PRD第4页“微信端”二字说“我实现了PRD要求的微信预约、报告查询、健康日记对应代码在weapp/目录下”评委立刻点头。5.2 用PRD的“数据结构”表格证明你的设计严谨性当评委问“会员档案为什么有47个字段是不是过度设计”——这是在考察你对数据建模的理解。立刻翻到PRD第13页“会员档案”数据结构表用红笔圈出三类字段强制字段可修改否可为空否如档案号、姓名、手机号说明“这是患者身份唯一标识缺一不可”计算字段可修改否可为空是如BMI、出生日期强调“由系统自动计算确保数据一致性避免人工录入错误”业务字段可修改是可为空是如腰围、臀围解释“这些是健管师根据患者情况选择性录入符合PRD中‘可修改’要求”。然后补充“我建表时严格遵循此表比如height_cm用TINYINT而非VARCHAR因为PRD要求‘身高字符型’是描述性文字实际存储必须是数值类型以支持计算。”——这比说“我学过数据库范式”有力十倍。5.3 用PRD的“流程图”和“业务规则”演示你的系统闭环评委最爱问“这个功能怎么保证不漏掉关键步骤”比如健康评估他们担心你只做了问卷填写没做结果反馈。此时打开PRD第11页“健康评估流程图”和第15页“业务规则”。指着流程图说“从患者到诊开始必须经过‘选择问卷→填写→生成报告→评估完成’四步我的代码在/api/assessment/submit/接口中强制校验每一步状态缺失任意一步返回400错误。”翻到“业务规则”第1条“患者在前台使用评估问卷评估后健管师可以在评估列表查看患者评估结果”马上演示后台打开/admin/assessment/list/筛选出刚提交的报告点击“查看详情”展示PDF报告生成逻辑。关键技巧演示时永远先说PRD原文再说你的实现。例如“PRD第15页写‘左右临界值为实际评估对照值’所以我把临界值存在indicator_rule表而‘正常参考值’只用于前端展示这样医生看到‘90-139 mmHg’系统却用‘90’和‘139’做算法判断。”5.4 用PRD的“特性描述”应对“为什么这么设计”的灵魂拷问当评委问“为什么预约状态要有‘待确认’‘已确认’‘已到诊’三个状态而不是简单的‘已预约’‘已完成’”——这是在考你对业务本质的理解。翻到PRD第9页“预约管理流程图”和第10页“特性描述”。流程图清晰显示“健康管理师查看已预约患者并确认患者是否到诊”说明“确认”是健管师的人工动作不是系统自动触发“特性描述”第1条写“预约功能包含患者预约...以及健康管理师查看已预约患者并确认”证明“确认”是独立环节于是你回答“因为PRD明确将‘确认’定义为健管师动作所以必须有独立状态。如果合并健管师就无法标记‘已确认但患者未到诊’这会破坏整个随访流程。”最后把PRD文档打印出来用荧光笔标出你实现的所有关键点数据结构页、流程图页、业务规则页答辩时就放在手边。当评委质疑时不用回忆直接翻开、指出来、读原文——这份文档就是你最硬的底气。从那以后我每次带毕设都强制学生在答辩前用荧光笔通读PRD三遍第一遍标出所有“必须实现”的字段和规则第二遍标出所有“可能被问”的流程节点第三本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑