Files
dpb/doc/桃育种系统模块扩展需求规格.v1.0.md
34047007@qq.com b95053c52c init: 初始化 dpb 桃育种系统代码库
前后端 + 后端 FastAPI 全量源码、部署脚本与文档。
2026-08-06 00:17:49 +08:00

20 KiB
Raw Permalink Blame History

桃育种系统 · 模块扩展需求规格(V2 草案)

编制日期:2026-07-28 依据:通用育种软件功能清单(用户提供) + 国际成熟方案(BrAPI / BMS·Breedbase / RosBREED / MIAPPE + doc\果树所\育种\yz.sql 真实桃性状 + 现有 14 个 breeding 域 状态:草案,待评审。字段取值/枚举以「待确认」标注处需与业务方对齐后再落地(遵循"不确定不擅自动手"准则)。


0. 设计原则(本规格的宪法)

  1. 性状与观测分离(对标 BrAPI ObservationVariable + Observation:所有表型(含物候)走 trait(性状字典)+ observation(通用测量值),不再把性状写死成列。新增桃性状只加字典、不动表结构。这是与现有 tree_evaluation 架构最大的升级,也是统计/决策层能成立的前提。
  2. Program/Trial/Study 三层(对标 BrAPI:把"多年多点试验"从 site/plot 里抽象出来,支持同一品系跨生态点、跨年同步试验(MET, Multi-Environment Trial)。
  3. 桃语义而非大田语义:清单里的「P/F1/F2 世代、拔节期/抽穗期、播种季节、随机区组/间比」是按一年生大田作物(玉米/小麦)写的,对桃(多年生无性繁殖果树)必须语义替换(见 §1)。
  4. 砧木–接穗建模:桃特有的「嫁接繁殖」维度,现有系统完全缺失,必须补齐。
  5. 预留分子层marker/genotype_sample/genotype_call 对齐 BrAPI Sample+Calls,未来接 GBS / PeachSNP170K 做基因组选择(GS)不改骨架。
  6. 统计与决策是地基不是补丁:上面的数据模型必须能让 V1.1 统计引擎(R sommer/lme4 做 ABLUP/EBV、选择指数)与 V3.0 AI 决策直接消费,不做"先堆数据再补分析"的短视设计。

1. 桃育种语义替换表(清单 → 桃)

清单原文(大田作物语境) 桃系统应改为 落点
P / F1 / F2 世代 选择阶段 stage:杂交实生苗 → 初选株 → 复选株 → 品系 → 区试品系 → 新品种 germplasm/tree/cross/selection 统一 stage
拔节期 / 抽穗期 桃物候:萌芽 / 开花(初花·盛花) / 坐果 / 果实发育 / 成熟 / 落叶 observation(物候类变量)
播种季节 桃用嫁接 / 定植(砧木 + 接穗),非播种 planting.rootstock_id
自交系 桃为克隆(无性繁殖),入选株 = 待审定克隆,需砧木关联 germplasm.is_rootstock / tree.rootstock_id
随机区组 / 间比试验 桃果园株数少,简化为 区组 + 重复 + 对照轻量设计 trial.design_type
材料编号 accession_no(唯一 accession 编号) germplasm.accession_no

stage 枚举(提案,待确认)germplasm_seed(种质资源)/ parent(亲本)/ seedling_pop(杂交实生群体)/ SP(初选株 Single Plant/ AP(复选株 Advanced/ line(品系)/ regional_trial(区试品系)/ released(新品种)。注:RosBREED 用 DNA-informed 多周期筛选,实际取值以业务方口径为准。


2. 目标模块总览(共 21 个)

A. 现有 14 域(保留 + 字段调整) germplasm / site / plot / target / cross_combination / pollination / seed_treatment / seedling / planting / tree / tree_evaluation / tree_photo / selection_result / personnel

B. 新增 7 个业务模块(P0–P2)

模块 表名 BrAPI 映射 优先级
trait(性状字典) breeding_trait ObservationVariable P0 地基
observation(通用观测) breeding_observation Observation P0 地基
field_operation(农事操作) breeding_field_operation Event P0
trial(多年多点试验) breeding_trial + breeding_trial_study Trial / Study P1
group(分组/标签) breeding_group + breeding_group_member List P1
statistics(统计报表) breeding_report(配置)+ 聚合端点 P2
分子基因型层 breeding_marker / breeding_genotype_sample / breeding_genotype_call Sample / Calls / Marker V2.0(地基先建)

重要简化(避免模块膨胀)

  • 物候期不单列模块 → 只是 observation 中「物候类变量」的观测。
  • 系谱树不单列模块 → 靠 cross_combination.parent_combination_id 自链 + germplasm.pedigree 字符串 + 前端 D3 树图 + /pedigree/{id} 聚合端点。

3. 新模块字段规格

3.1 breeding_trait(性状字典,P0

字段 类型 约束 说明
id int PK
trait_code varchar(64) UNIQUE, NOT NULL brixfruit_weightbloom_date
trait_name varchar(128) NOT NULL 中文名:可溶性固形物、单果重…
category varchar(32) NOT NULL fruit/flower/plant/disease/phenology/yield/quality/rootstock
data_type varchar(16) NOT NULL numeric / categorical / date / boolean
unit varchar(32) g、%、°Brix、mm、date
method varchar(256) 测定方法(如折射仪、游标卡尺)
scale_json jsonb 量表/选项(categorical 时存选项数组;numeric 时存 min/max/step
is_preset bool default false 是否系统内置(种子数据)
remark varchar(512)
created_time / updated_time / is_deleted 标准 来自 ModelMixin

种子数据来源doc\果树所\育种\yz.sqlpa_four(~40 字段:单果重/果形/果核/可溶性固形物/成熟期/离粘核/风味…)与物候类变量,导入为 is_preset=true 的桃专用性状字典。

3.2 breeding_observation(通用观测,P0

字段 类型 约束 说明
id int PK
unit_type varchar(16) NOT NULL tree / plot / combination(观测单元类型,多态)
unit_id int NOT NULL 对应单元 idtree_id / plot_id / combination_id
trait_id int FK→breeding_trait NOT NULL 测了哪个性状
value_numeric numeric(12,4) data_type=numeric 时
value_text varchar(512) categorical / boolean 存此
value_date date data_type=date 时
obs_year int 观测年份(MET 聚合键)
obs_date date 具体日期
site_id int FK→breeding_site 观测地点
person_id int FK→breeding_personnel 观测人
remark varchar(512)

索引(unit_type, unit_id, trait_id) 复合索引;(obs_year)(trait_id)语义:单株评价、物候期、小区测定全部走这张表,取代 tree_evaluation 的硬编码列(见 §4 过渡方案)。

3.3 breeding_field_operation(农事操作,P0

字段 类型 约束 说明
id int PK
op_type varchar(32) NOT NULL 施肥/灌溉/植保/除草/修剪/病害防治/其他
unit_type varchar(16) NOT NULL tree / plot
unit_id int NOT NULL 作用对象 id
op_date date NOT NULL 操作日期
material varchar(128) 药剂/肥料名
dosage varchar(64) 用量
method varchar(128) 方式(叶面/根施…)
operator_id int FK→breeding_personnel 操作人
site_id / plot_id int FK 定位
remark varchar(512)
索引(unit_type, unit_id)(op_date)

3.4 breeding_trial + breeding_trial_study(多年多点试验,P1

breeding_trial

字段 类型 说明
id int PK
trial_code varchar(64) UNIQUE 试验编号
trial_name varchar(128) NOT NULL
target_id int FK→breeding_breeding_target 关联育种目标
design_type varchar(32) 随机区组/对比/间比/简约
description varchar(512)
years varchar(64) 跨年计划,如 2026-2028
remark varchar(512)

breeding_trial_studyTrial×Location×Year

字段 类型 说明
id int PK
trial_id int FK→breeding_trial
site_id int FK→breeding_site 试验点
year int 年份
replicate int 重复次数
control_germplasm_id int FK→breeding_germplasm 对照品种
layout_json jsonb 田间种植图(小区排布坐标)
remark varchar(512)

试验单元(哪株种在哪)复用 breeding_tree + plot,通过 trial_study 关联;布局图由前端可视化 + 轻量排布算法生成(不照搬大田作物复杂设计)。

3.5 breeding_group + breeding_group_member(分组/标签,P1

breeding_group

字段 类型 说明
id int PK
group_name varchar(128) NOT NULL
group_type varchar(32) 项目/品系群/目标/临时选系集(待确认维度)
target_id int FK 关联育种目标(可选)
owner_team varchar(64) 归属团队
description varchar(512)

breeding_group_member

字段 类型 说明
id int PK
group_id int FK→breeding_group
germplasm_id int FK→breeding_germplasm 成员种质
tree_id int FK→breeding_tree 或成员单株
note varchar(256)

分组维度(group_type 取值)待确认:按项目 / 品系群 / 育种目标 / 临时选系集。不臆造,等对齐。

3.6 breeding_report(统计报表配置,P2

字段 类型 说明
id int PK
report_name varchar(128) NOT NULL 报表名
report_type varchar(32) 育种进度/世代汇总/杂交组合统计/材料库存/MET分析
query_json jsonb 报表查询参数(保存配置,便于复用)
created_by varchar(64)

配套:只读聚合端点(不建大表):

  • GET /breeding/statistics/progress 育种进度
  • GET /breeding/statistics/generation-summary 世代汇总
  • GET /breeding/statistics/cross-stats 杂交组合统计
  • GET /breeding/statistics/inventory 材料库存
  • GET /breeding/statistics/met 多年多点分析(钩子,V1.1 R 引擎)

3.7 分子基因型层(V2.0,地基先建)

breeding_marker(标记/位点)

字段 类型 说明
id int PK
marker_name varchar(64) UNIQUE 如 SNP_Chr01_123456
chromosome varchar(16) 染色体
position int 物理位置
marker_type varchar(16) SSR / SNP / InDel
remark varchar(512)

breeding_genotype_sample(基因型样品)

字段 类型 说明
id int PK
source_type varchar(16) germplasm / tree
source_id int 来源 id
sample_type varchar(16) DNA / leaf
sample_date date
method varchar(64) 测序/芯片(GBS / PeachSNP170K
lab varchar(128) 检测单位
remark varchar(512)

breeding_genotype_call(基因型调用)

字段 类型 说明
id int PK
sample_id int FK→breeding_genotype_sample
marker_id int FK→breeding_marker
allele varchar(32) 基因型编码(AA/AT/TT 或 0/1/2
remark varchar(256)

索引(sample_id, marker_id) 复合唯一。


4. 现有模块字段调整(非新增模块)

模块 新增字段 说明
germplasm accession_no(varchar UNIQUE)、pedigree(varchar 系谱串)、stage(varchar 选择阶段)、storage_type(varchar 田间/离体/种子/DNA)、is_rootstock(bool)、rootstock_id(int FK 自关联) 种质档案补全 + 桃特有维度
cross_combination cross_type(varchar 杂交/自交/开放)、parent_combination_id(int 自链 FK)、reason(varchar 选配理由)、stage 系谱链 + 选配理由
pollination bagging_date(date 套袋)、emasculation_date(date 去雄) 田间杂交登记补全
planting rootstock_id(int FK→germplasm) 砧木–接穗建模
tree stage(varchar 选择阶段)、rootstock_id(int FK→germplasm) 世代/阶段标记(4.x 全流程依赖)
site soil_type(varchar 土壤类型) 试验地块补全
selection_result 对齐 stage 晋级流转(建议加 from_stage/to_stage + approved_by 晋级审批流

tree_evaluation 定位(复审定稿:混合模型)tree_evaluation 保留并作为固定列「评分卡」(承载桃稳定高频的 ~30–40 个果实质/农艺性状,源自 yz.sqlpa_four),这是 90% 报表与 SQL 聚合的主路径;observation 仅作为扩展层承载物候期时序观测 + 字典中标记为 is_core=false 的新增/临时性状。详见 §8.4。原则修订:§0「性状与观测分离」对单作物程序过严,改为「核心性状固定列 + 扩展性状 EAV」。


5. 统计分析与决策地基(关键要求)

用户明确要求"统计分析与决策,需要基础能够支持"。数据模型须满足:

  1. 任意性状可聚合observation 通用表使「按性状×年份×地点×阶段」的切片聚合无需改表——这是 ABLUP/EBV 与选择指数的输入。
  2. MET 结构就绪trial/trial_study 提供 environment(地点×年) 维度,V1.1 用 sommer/lme4 做混合模型 BLUP,输出单株 EBV。
  3. 选择指数可计算observation(表型) + genotype_call(基因型) → 多维选择指数(RosBREED DNA-informed 思路),按 stage 分层筛选。
  4. 决策支撑selection_result(晋级/淘汰) + stage 流转 + EBV 排名 → 前端决策视图(哪些株晋级/淘汰、依据的 EBV)。
  5. 溯源闭环tree→combination→父/母本 germplasm + observation/field_operation/pollination 全 FK → 任意品系反向追溯(需求 7.1)。

6. 实施路线(建议)

阶段 内容
地基(先做) trait + observation + 现有模块 stage/rootstock/accession_no/pedigree 字段;数据权限/options 沿用现有生成器
P0 field_operation
P1 trial(+study)、group(+member)
P2 statistics 聚合端点
V2.0 marker + genotype_sample + genotype_call(地基先建表,分析后置)
V1.1 R 统计引擎接入 observation/trial 做 BLUP/EBV
V3.0 AI 决策(Agno + DeepSeek)消费 EBV/选择指数

工程约定:新模块按现有 _gen_specs.pyMOD 规格 + 生成器产出(6 文件 + 菜单 + options),与 14 域完全一致;改字段后跑 deploy.bat migratefix_breeding_columns.py)再重启后端。


7. 待用户确认项(不臆造)

  1. stage 具体取值清单(§1 提案为草案,以业务方口径为准)。
  2. group_type 分组维度(项目/品系群/目标/临时选系集)。
  3. tree_evaluation 过渡策略(同步落 observation / 弃用迁移)。
  4. trait 字典首批字段:是否直接以 yz.sqlpa_four ~40 字段为种子,哪些 category 划分。
  5. design_type 试验设计类型在桃场景下的具体取值(简化到哪几种)。

8. 复审补充:遗漏与替代思路(2026-07-28 复审)

本节为第一稿(§0–§7)的批判性复审结论,针对"还有哪些遗漏 / 不同思路"自省。改变范围的项标注「待拍板」。

8.1 原稿遗漏的关键项

  1. generation(遗传世代)与 selection_stage(选择阶段)混为一谈:桃虽以无性选择为主,但回交转育(BC1/BC2)、自交分离(F2)仍是真实遗传世代,与"选到第几轮"是两回事。建议拆字段:generationF1/BC1/BC2…,跟 cross_type 联动)+ selection_stage(实生苗/初选株/复选株/品系/区试/新品种)。
  2. 缺"树→种质"晋升链路(克隆生命周期):入选株应晋升为 clone/accessiongermplasm)被命名扩繁。需 tree.germplasm_id,否则基因型(测在 germplasm)与表型(测在 tree)无法在 GS 中拼接。
  3. 原清单 1.4「按团队权限隔离」无 team 实体:现有 _build_conditions 仅按 created_id 过滤,系统无 team/organization。若需多团队数据隔离,须新增 team 模块 + 用户-团队映射,数据权限改按 owner_team 隔离。【待拍板】
  4. "材料库存"被弱化成纯报表:库存是事务性的(种子批/ lot、在圃株数、离体/DNA 管数、活力)。应加 germplasm_stock/seed_lot 表(数量、批次、位置、活力、出入库),报表只是视图。【待拍板】
  5. 缺环境/气象数据(G×E 统计地基):多年多点分析核心是基因型×环境互作,无环境协变量(site×year 的需冷量/积温/降雨)BLUP 只能粗估。建议加 environment_conditionsite×year),可复用 yz.sql 的"天气"字段。
  6. 分子层缺"预测模型"表(GS 反馈环断裂):RosBREED 是闭环(表型+基因型→训练模型→输出 EBV→指导下轮选配)。需 breeding_prediction(模型/性状/精度 accuracy/预测日期/被预测个体)。
  7. 克隆繁殖/苗圃未建模(桃主繁殖方式):现有 seedling/seed_treatment 仅种子实生苗;桃入选后主要靠嫁接/芽接扩繁,缺 propagation(接穗来源→成活→出圃)。【待拍板】
  8. 统一修改日志/审计缺失:晋级审批、全程可追溯需"谁/何时/改了什么"轨迹,现有仅 updated_time。建议轻量 breeding_audit_log(或接系统操作日志)。
  9. 小遗漏tree_photo 应可关联 observation(某次测量的果实照片,为 CV/AI 预留);observation 应可挂 trial_study_id(区分试验观测 vs 果园日常观测);编号生成策略未定义(accession_no/combination_code/tree_no/trial_code 需统一自动编号服务)。

8.2 替代思路与推荐

  • A. EAV 纯通用 vs 混合固定列 → 推荐混合固定列(详 §8.4)。理由:桃果实质性状稳定且高频(yz.sql 已验证 40 固定字段沿用多年)、报表是核心需求(固定列 SQL 聚合极快)、现有 tree_evaluation 已在工作——纯 EAV 会牺牲报表性能并浪费已建代码。
  • B. 分组 vs 标签 → 建议并行group(正式项目组/品系群)+ 自由 tag(多对多,如"抗褐腐""高Brix""区试备选")。
  • C. 直接对齐 BrAPI API(战略级):当前自定义 /breeding/...;若未来对接 Breedbase/Flapjack/国际交换,实现 BrAPI 兼容端点可省适配。数据模型已对齐 BrAPI,是铺路,不一定要现在做。
  • D. MIAPPE 合规(远期):若数据要共享/投稿,Investigation/Study/Assessment 三层对齐 MIAPPE 比自定 trial 抽象更标准,作一致性检查项。

8.3 复审后模块清单(原 21 模块基础上)

  • 新增:team(若多团队隔离)、germplasm_stock/seed_lot(库存批次)、environment_condition(site×year 环境因子,统计地基)、breeding_predictionGS 模型/育种值,V2.0)、propagation(克隆扩繁/苗圃)、breeding_audit_log(审计)。
  • 字段细化:tree.germplasm_id + generation 字段;observation.trial_study_idtree_photo.observation_id;统一编号生成服务。
  • 物候期仍走 observation(时序,非固定列);系谱树仍靠 cross_combination.parent_combination_id 自链 + 前端树图。

8.4 EAV 决策详述(对应 §4 tree_evaluation

结论:混合固定列(Hybrid)。

  • 固定列层 = tree_evaluation:承载桃稳定高频的 ~30–40 个核心果实质/农艺性状(单果重、果形、果核、可溶性固形物、成熟期、离粘核、风味、硬度…,源自 yz.sql pa_four)。一树一年一行,表单/报表直读,SQL 聚合无需 pivot。
  • EAV 扩展层 = observation:仅承载①物候期时序观测(萌芽/开花/坐果/成熟,一树多期,天然时序)②trait 字典中 is_core=false 的新增/临时性状。
  • 防双源规则trait.is_core 标志——核心性状只存固定列,非核心只存 observation,禁止同一性状两处重复记录。
  • 对统计引擎(V1.1:读取两者——核心性状走固定列、扩展性状走 observation,统计层归一化后做 BLUP/EBV。
  • 对 GS/决策:表型来自固定列 + observation,基因型来自 genotype_call,经 tree.germplasm_id 桥接,由 breeding_prediction 输出育种值。
  • 代价:新增核心性状需改表(但低频,且走 migrate 脚本已固化);换来报表性能与已建代码保留。对本单作物程序,此代价可接受。

确认后据此实施,不先行编码。