Files
Jyotisha/docs/roadmap/optimization_plan_v6_2.md
T
732642856 a4f8620a71 v6.2.0: 全面技法宝库升级 — 16个新模块 + 12个文件优化
## 新增模块 (16个)
### P0 精度修复
- ashtakavarga: calc_prastara_av() + calc_sodhita_av()
- kakshya.py: Kakshya评分系统 (8区间×3.75°)
- shadbala.py: Sputa Drishti + Yuddha Bala

### P1 核心升级
- bhava_bala.py: 宫位三元力量 (jyotishganit MIT)
- pancha_mahapurusha.py: PMC完整检测含4层失效条件
- sade_sati.py: Sade Sati+Kantaka Shani
- sudarshana_chakra.py: 三参考点盘+收敛分析
- tajika.py: Sahams 7→36 + Tajika Yogas 10种
- birth_time_rectifier.py: 生时矫正

### P2 覆盖扩展
- kp_system.py: KP Sublord+ABCD Significator (diliprk/VedicAstro MIT)
- synastry.py: 16因子合盘36分制 (dashaflow MIT)
- muhurtha_election.py: 6活动选举 (dashaflow MIT)
- career_analysis.py: 结构化事业引擎
- relationship_analysis.py: 结构化感情引擎
- conditional_dashas.py: Dwisaptati+Shattrimsa+Dwadashottari
- divisional_charts_extended: D81/D108/D144
- remedies.py: 5类补救系统

## 修改文件
jaimini/dasha_calculator/shadbala/SKILL.md/COVERAGE_AUDIT等12个

## 开源复用: 4个MIT项目
2026-06-11 19:03:21 +08:00

728 lines
30 KiB
Markdown
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.
# 印度占星 Skill v6.2 优化路线图
> **版本基准**: v6.1.12 (2026-06-11)
> **文档版本**: v1.0
> **原则**: 严谨、详细、不设定完成时间、优先复用开源、逐条可验证
---
## 一、当前状态总览(实事求是)
### 1.1 技法注册表状态
| 状态 | 数量 | 占比 |
|------|------|------|
| covered | 31 | 64.6% |
| partial | 17 | 35.4% |
| missing | 0registry中) | 0% |
**但**: `feature-gap-matrix-2026.md``technique_registry.json` 存在口径差异。Registry 中标记为 covered 的部分技法(如 Shadbala、Bhava Chalit)在 gap matrix 中仍有简化项;gap matrix 中标记为 ❌ 的部分功能(如 Darakaraka、RTN)实际已在 v6.1.10 接入 full-reading。**本文档以代码实际实现为真,以 registry 为辅助参考。**
### 1.2 关键精度指标
| 模块 | 当前指标 | 目标 | 缺口 |
|------|---------|------|------|
| Yoga识别 | F1=95.22%, P=96.48%, R=93.99% | F1≥96% | FN=63条, FP=36条 |
| Chara Dasha | Sign=100%, Dur=91.67%, Overall=95.83% | Overall≥98% | Aquarius/Scorpio共主判定 |
| Shadbala | 内部不变量1200/1200通过 | 外部绝对值校准 | 无JHora对标数据 |
| Ashtakavarga | SAV=337/386校准通过 | 完整PAV+Sodhita | 缺PAV展开、Sodhita减法 |
| Vimshottari | 未正式benchmark | 与PyJHora对标 | 待建立oracle测试 |
| Transit | 340/340字段 Swiss Ephemeris匹配 | 保持100% | 无已知缺口 |
### 1.3 已知计算缺口(经代码验证)
| # | 缺口项 | 影响 | 验证状态 |
|---|--------|------|---------|
| 1 | **Prastara Ashtakavarga (PAV)** | 行运精细评分缺失 | 完全无代码 |
| 2 | **Sodhita Ashtakavarga** | AV吉凶修正层缺失 | 完全无代码 |
| 3 | **Kakshya评分** | 行星度数区间力量量化缺失 | 完全无代码 |
| 4 | **Kantaka Shani** | Sade Sati细分阶段缺失 | 仅有文档,无引擎代码 |
| 5 | **Bhava Bala** | 宫位力量计算缺失 | 完全无代码 |
| 6 | **D81/D108/D144/自定义分盘** | 精微分盘缺失 | 完全无代码 |
| 7 | **Vimshottari外部benchmark** | 大运精度未验证 | 无oracle测试 |
### 1.4 文档与代码不一致项
| 文档 | 声明 | 实际代码状态 | 修复动作 |
|------|------|-------------|---------|
| `technique-capability-matrix.md` | 不存在 | registry替代 | 删除或重定向 |
| `quick-reference-guide.md` | 引用 `birth-time-rectification-guide.md` | 文件不存在 | 修正为 `-advanced.md` |
| `quick-reference-guide.md` | 引用 `cmd_rectify` 子命令 | jyotish_engine.py中不存在 | 删除错误引用 |
| `quick-reference-guide.md` | 引用 `birth_time_rectification.py` | scripts/下不存在 | 清理引用 |
| `COVERAGE_AUDIT_REPORT.md` | v3.13.1 | 实际v6.1.12 | 文档版本需更新 |
| `SKILL.md` | 版本号v6.1.8 | 实际v6.1.12 | 更新版本号 |
---
## 二、优化原则
1. **真代码优先**: 不以文档声明为准,以 `scripts/*.py` 实际可执行代码为准。
2. **Benchmark驱动**: 任何精度优化必须有 PyJHora / Swiss Ephemeris / 公开书例作为 oracle,不接受"感觉对了"。
3. **开源复用优先**: 已有 MIT/AGPL 开源实现的,优先翻译/适配,不从零造轮子。
4. **增量验证**: 每项改动必须通过 `python3 -m py_compile` + 相关 benchmark + `pytest` 三重门禁。
5. **文档同步**: 代码变更后,同步更新 `technique_registry.json``SKILL.md``CHANGELOG.md`
6. **诚实标注**: partial 就是 partial,不因情感因素升级为 covered;升级必须有 benchmark 证据。
---
## 三、P0 精度修复层(影响解读正确性)
> **定义**: 当前已标记为 covered 但存在已知精度缺口、可能导致解读错误的计算模块。
### P0.1 Chara Dasha 剩余 4.2% 不匹配修复
**目标**: 将 Overall 从 95.83% 提升至 ≥98%。
**技术方案**:
- 文件: `scripts/jaimini.py`
- 函数: `_resolve_chara_dasha_lord()`(已预留扩展点)
- 问题: Aquarius/Scorpio 的 Rahu/Ketu 共主动态判定当前使用传统宫主(Saturn/Mars),而 PyJHora 使用 `_stronger_planet_new()` 完整尊严比较链。
- 实现: 复制 PyJHora `_stronger_planet_new` 逻辑(尊严层级: exalted > own > friendly > neutral > enemy > debilitated;同层级比较 Shadbala 力量),在 `_resolve_chara_dasha_lord()` 中当 sign 为 Aquarius 或 Scorpio 时,动态比较 Saturn vs Rahu 或 Mars vs Ketu 的尊严,返回较强者。
**验证方法**:
- 扩展 `benchmarks/jyotish/scripts/run_chara_dasha_knrao.py`
- 10案例×12星座 = 120对基准已建立,修复后重新跑全量
- 目标: Overall ≥98%(允许 Mean/True Node 口径差异导致的固有偏差)
**开源复用**:
- PyJHora `jhora/panchanga/dhasa/jaimini_dhasa.py:_stronger_planet_new()`AGPL,算法翻译为独立实现)
**预期效果**:
- 约 5/120 案例的 duration 差异消除
- Sign 匹配保持 100%
---
### P0.2 Yoga 引擎 FN/FP 收敛
**目标**: F1 从 95.22% 提升至 ≥96%FN 从 63 降至 ≤50FP 从 36 降至 ≤30。
**技术方案**:
- 文件: `scripts/yoga_engine.py`
- 当前: 60张测试图,82条可对比规则,FN=63, FP=36
- 策略: **准确率优先**,只接受来源语义明确且预验证不增加 FP 的规则优化。
**具体待分析项**(基于 v6.1.8 验证报告 `references/validation_logic_report.json`:
1. **Thrikaala Gnana Yoga**: 当前保守口径(D9/D60 上下文已注入),需评估是否可适度放宽前提条件而不增加 FP。
2. **Dharidhra Yoga**: 方法已恢复,评估是否有剩余 FN 可归因于 Navamsa 弱势定义差异。
3. **Parannabhojana Yoga**: 与 Dharidhra 类似,检查分盘口径。
4. **Nishkapata Yoga**: BVR-205 友好星座条件已恢复,评估剩余 FN。
5. **Kapata Yoga**: v6.1.8 已评估"4宫主受凶星相位"候选会增加 FP 且无 FN 收益,保持原逻辑;若后续发现新的 FN 收益证据,重新评估。
**验证方法**:
- 运行 `scripts/validate_logic_v2.py`
- 对比 PyJHora 同案例输出(需建立 10-20 个公开名人案例的 Yoga 清单 oracle
- 每项规则变更前后对比 FP/FN 变化
**开源复用**:
- PyJHora `jhora/panchanga/yoga.py`(参考其 Yoga 判定逻辑,AGPL 翻译)
**预期效果**:
- F1 ≥96%FP ≤30FN ≤50
---
### P0.3 Vimshottari Dasha 外部 Benchmark 建立
**目标**: 建立 Vimshottari 的 PyJHora oracle 基准,验证 MD/AD/PD 三层时间边界。
**技术方案**:
- 新文件: `benchmarks/jyotish/scripts/run_vimshottari_compare.py`
- 参照 `run_chara_dasha_knrao.py` 结构
- 输入: 10个公开/虚构 smoke case(与 Chara Dasha benchmark 共用样本池)
- Oracle: PyJHora `Vimsottari.get_dhasa_bhukthi(dob, tob, place, divisional_chart_factor=1)`
- 对比字段: MD主星、MD起始日期、MD结束日期、AD主星、AD起始日期、PD主星、PD起始日期
**验证方法**:
- 建立 120 对基准(10案例 × 12 字段)
- 目标: ≥95% 字段级匹配(允许时区/闰秒差异)
- 若发现系统偏差,定位至 `scripts/dasha_calculator.py``scripts/dasha_calculator_enhanced.py`
**开源复用**:
- PyJHora `jhora/panchanga/dhasa/vimsottari.py`AGPL,算法参考)
**预期效果**:
- 明确 Vimshottari 精度等级
-`technique_registry.json``vimshottari_dasha` 补充 benchmark 证据
---
### P0.4 Ashtakavarga 完整 PAV 展开表
**目标**: 实现 Prastara Ashtakavarga(行星×宫位展开表),补齐 AV 行运评分的计算基础。
**技术方案**:
- 文件: `scripts/ashtakavarga.py`(当前 v2.1
- 新增函数: `calc_prastara_av(birth_info)`
- 算法: 基于已有 BAVBhinna Ashtakavarga),对每个行星在每个宫位的贡献展开为 8 个行星(含 Asc)的单独贡献标记。PyJHora `ashtakavarga.py:get_prastara_ashtakavarga()` 可直接参考。
- 输出: 7×12×8 三维矩阵(7行星 × 12宫位 × 8贡献源)
**验证方法**:
- 与 PyJHora `prastara_ashtakavarga()` 对比 10 个案例
- 不变量检查: PAV 所有行求和 = BAV 对应行星值;PAV 所有列求和 = BAV 对应宫位值
**开源复用**:
- PyJHora `jhora/panchanga/ashtakavarga.py:get_prastara_ashtakavarga()`AGPL 翻译)
**预期效果**:
- AV 行运评分从 "近似" 升级为 "精确"
-`ashtakavarga` 子命令新增 `--prastara` 选项
---
### P0.5 Sodhita Ashtakavarga 实现
**目标**: 实现 Sodhita(减法)Ashtakavarga,用于修正 AV 吉凶判断。
**技术方案**:
- 文件: `scripts/ashtakavarga.py`
- 新增函数: `calc_sodhita_av(birth_info, prastara_av)`
- 算法: BPHS 标准 Sodhita 流程——从每个宫位的 BAV 中减去该宫位的 Saturn 贡献、Mars 贡献和 Sun 贡献(若结果为负则取0)。PyJHora `get_sodhita_ashtakavarga()` 可直接参考。
- 输出: 7×12 矩阵(Sodhita 后的每个行星-宫位值)
**验证方法**:
- 与 PyJHora `sodhita_ashtakavarga()` 对比
- 不变量: Sodhita AV ≤ 原始 BAVSodhita SAV ≤ 原始 SAV
**开源复用**:
- PyJHora `jhora/panchanga/ashtakavarga.py:get_sodhita_ashtakavarga()`AGPL 翻译)
**预期效果**:
- 行运吉凶判断增加 Sodhita 修正层
-`ashtakavarga` 子命令新增 `--sodhita` 选项
---
### P0.6 Kakshya 评分系统
**目标**: 实现 Kakshya(度数区间力量)评分,为 Transit 精确触发提供度数级量化。
**技术方案**:
- 新文件: `scripts/kakshya.py`
- 算法: 每个宫位分为 8 个 Kakshya(区间),每个区间由特定行星守护。行星落入某区间时,获得该区间守护行星的加持或削弱。PyJHora `kakshya.py` 有完整实现。
- 关键: Kakshya 区间划分基于行星平均运动速度(太阳30°、月亮15°等),非等分。
**验证方法**:
- 与 PyJHora `kakshya.get_kakshya_spurhta()` 对比 10 个案例
- 检查每个行星的 Kakshya 归属和力量值
**开源复用**:
- PyJHora `jhora/panchanga/kakshya.py`AGPL 翻译)
**预期效果**:
- Transit 触发精度从 "星座级" 提升至 "度数区间级"
- 接入 `full-reading.modules.transit_kakshya`
---
## 四、P1 核心升级层(partial → covered
> **定义**: 当前标记为 partial、代码已存在但有限制,经优化后可升级为 covered 的技法。
### P1.1 Shadbala 外部绝对值校准
**目标**: 将 Shadbala 从 "内部一致" 升级为 "外部绝对值可信"。
**技术方案**:
- 文件: `scripts/shadbala.py`
- 当前简化项:
1. Nathonnata Bala: 二值化(白天/夜晚),应改为基于赤纬的比例计算
2. Saptavargaja Bala: 部分子分盘近似,应改为调用 `varga.py` 实际分盘
3. Chesta Bala: 速度分档近似,应改为基于真实速度比例的连续计算
4. Drik Bala: 简化相位权重,应改为基于确切度数的相位力量公式
- 对标: PyJHora `shad_bala.py` 完整实现(AGPL,算法参考)
**具体修复步骤**:
1. **Nathonnata Bala**: 使用 Swiss Ephemeris 获取太阳赤纬,计算 `nathonnata_bala = sin(declination) * 标准化因子`,替代当前二值化。
2. **Saptavargaja Bala**: 调用 `divisional_charts_extended.py` 实际计算 D1/D2/D3/D7/D9/D10/D12,对每个分盘计算 dignity 得分后聚合,替代当前近似表。
3. **Chesta Bala**: 使用 Swiss Ephemeris 获取行星真实日运动速度(`swe.calc_ut()``speed` 字段),对照平均速度计算比例,替代当前分档。
4. **Drik Bala**: 实现完整相位力量公式——`aspect_strength = (180 - |actual_orb|) / 180 * base_strength`,对所有7行星的特殊相位和Rasi Drishti分别计算后聚合。
**验证方法**:
- 扩展 `benchmarks/jyotish/scripts/run_shadbala_invariants.py``run_shadbala_pyjhora_compare.py`
- 10案例 × 6种力量 × 7行星 = 420 个数值对比
- 目标: 与 PyJHora Shadbala 总分差异 ≤5%(因 Naisargika Bala 已对齐,主要差异应在 Chesta/Drik
- 内部不变量保持 1200/1200 通过
**开源复用**:
- PyJHora `jhora/panchanga/shad_bala.py`AGPL 算法翻译)
- jyotishganit `components/strengths.py`MIT,已有 clone 在 references 中)
**预期效果**:
- `technique_registry.json``shadbala` 状态从 `partial``covered`
- full-reading 中 Shadbala 评估置信度上限解除
---
### P1.2 Bhava Chalit 完整实现
**目标**: 实现完整的 Bhava Chalit(变动宫位)行星重新分配。
**技术方案**:
- 文件: `scripts/bhava_chalit.py`(当前只有宫位计算,无行星重分配)
- 新增函数: `assign_planets_to_chalit(birth_info, house_cusps)`
- 算法: 对每个行星,比较其经度与相邻两个宫位的宫头经度。若行星距某宫头 < 阈值的 1/3,归入该宫位;否则按常规星座归属。PyJHora `bhava_chalit_chart()` 可直接参考。
- 输出: Chalit 行星分配表 + Chalit D1 图数据
**验证方法**:
- 与 PyJHora `bhava_chalit_chart()` 对比 10 个案例
- 检查每个行星的 Chalit 宫位分配
**开源复用**:
- PyJHora `jhora/panchanga/chart.py:bhava_chalit_chart()`AGPL 翻译)
**预期效果**:
- `technique_registry.json``bhava_chalit` 状态从 `partial``covered`
- full-reading 中宫位分析增加 Chalit 视角
---
### P1.3 Sudarshana Chakra 传统实现
**目标**: 实现传统 Sudarshana Chakra(三参考点盘:Lagna + Chandra + Surya)。
**技术方案**:
- 新文件: `scripts/sudarshana_chakra.py`
- 当前替代方案: D1-D9-D10 三角验证(非传统 Sudarshana
- 算法: 以 Lagna 为第1宫绘制的 D1 图 + 以 Moon 为第1宫重新排列的图 + 以 Sun 为第1宫重新排列的图。三个图中同一宫位/行星配置的一致性用于确认事件。
- 输出: 三个参考点盘 + 一致性标记
**验证方法**:
- 建立 5 个公开名人案例的三参考点盘
- 与 PyJHora `sudarshana_chakra()` 对比行星位置
**开源复用**:
- PyJHora `jhora/panchanga/chart.py:sudarshana_chakra()`AGPL 翻译)
**预期效果**:
- `technique_registry.json``sudarshana_chakra` 状态从 `partial``covered`
- full-reading 中 "传统 Sudarshana" 从缺口声明变为实际输出
---
### P1.4 Tajika Yogas 完整覆盖
**目标**: 从简化规则扩展为完整的 Tajika Yoga 检测(Itasala、Ishkavala、Etc. + Vedha 阻碍逻辑)。
**技术方案**:
- 文件: `scripts/tajika.py`
- 当前: 简化规则(约 5-6 种基础 Yoga)
- 目标: 覆盖 PyJHora 的 10 种年度 Yoga 分类 + Vedha 阻碍逻辑
- 新增函数: `_detect_tajika_yogas_complete(varshaphala_data)`
- 算法翻译: PyJHora `tajika/yogas.py`AGPL
**具体 Yoga 列表**:
1. Itasala(友好相位)
2. Ishkavala(单向相位)
3. Vasala(无效相位)
4. Tambira(阻碍)
5. Kambira(双重阻碍)
6. Dakshina(右向)
7. Vama(左向)
8. Ubhaya(双向)
9. Vedha(穿刺阻碍)
10. Kuta(组合)
**验证方法**:
- 与 PyJHora `tajika_yogas()` 对比 10 个年运盘
- 检查每种 Yoga 的触发条件和阻碍逻辑
**开源复用**:
- PyJHora `jhora/panchanga/tajika/yogas.py`AGPL 翻译)
**预期效果**:
- `technique_registry.json``tajika_yogas` 状态从 `partial``covered`
- 年运盘格局判断从高置信度上限升级为标准应期模块
---
### P1.5 Sahams 扩展至 36 种
**目标**: 从当前的 Vivah Saham 扩展为完整的 36 种 Saham 计算。
**技术方案**:
- 文件: `scripts/tajika.py`(当前只有 `calc_vivah_saham`
- 新增函数: `calc_all_sahams(birth_info, year_lord_data)`
- 36 种 Saham 列表(标准 Tajika 体系):
- Vivah(婚姻)、Karma(事业)、Paradesa foreign)、Bandhu(兄弟姐妹)、Putra(子女)、
- Vidya(教育)、Arogya(健康)、Marana(死亡)、Kala(时间)、Yasha(名声)等
- 每种 Saham 的公式基于特定行星经度的加减运算,参照 PyJHora `saham.py`
**验证方法**:
- 与 PyJHora `saham.get_saham_longitude_list()` 对比 10 个案例
- 检查每种 Saham 的经度计算
**开源复用**:
- PyJHora `jhora/panchanga/tajika/saham.py`AGPL 翻译)
**预期效果**:
- `technique_registry.json``sahams` 状态从 `partial``covered`
- 年运盘增加 36 个敏感点分析
---
### P1.6 Sade Sati 完整实现(含 Kantaka Shani
**目标**: 从简化模型升级为完整的 Sade Sati + Kantaka Shani 细分阶段。
**技术方案**:
- 新文件: `scripts/sade_sati.py`(当前逻辑分散在 `jyotish_engine.py` 或文档中)
- 当前: 土星经过月亮前后星座的简化模型
- 完整实现:
1. **Sade Sati 三阶段**: Rising(进入前星座)→ Peak(月亮星座)→ Setting(离开后星座)
2. **Kantaka Shani**: 土星在第1/4/8/10宫时的额外压力标记
3. **Ashtakavarga 修正**: Sade Sati 期间 Saturn 的 BAV 贡献修正压力程度
4. **小周期**: 每个阶段内部按 Saturn 经过的 Nakshatra 细分
**验证方法**:
- 与 PyJHora `sade_sati.get_sade_sati_dates()` 对比 10 个案例
- 验证三阶段时间边界和 Kantaka Shani 标记
**开源复用**:
- PyJHora `jhora/panchanga/transit/sade_sati.py`AGPL 翻译)
**预期效果**:
- `technique_registry.json``sade_sati` 状态从 `partial``covered`
- Transit 分析中 Saturn 压力评估从近似升级为精确
---
### P1.7 Pancha Mahapurusha Yoga 完整变体
**目标**: 覆盖燃烧、逆行、受克时的 Yoga 失效条件。
**技术方案**:
- 文件: `scripts/yoga_engine.py`
- 当前: 基础规则(Ruchaka/Bhadra/Hamsa/Malavya/Shasha 在 Kendra + own/exalted
- 缺失: 失效条件——若 Yoga 主星燃烧(combust)、逆行(retrograde)、受凶星相位/合相,则 Yoga 效力减弱或失效。
- 新增函数: `_check_yoga_validity(planet, chart_data)`
- 检查项: Combustion(距 Sun < 8-15°)、Retrograde、Malefic aspectsSaturn/Mars/Rahu)、Debilitation in Navamsa
**验证方法**:
- 选择 5 个有 Pancha Mahapurusha 但主星受克的案例
- 验证 Yoga 被正确降级或取消
**开源复用**:
- PyJHora `jhora/panchanga/yoga.py` 失效条件逻辑(AGPL 参考)
**预期效果**:
- `technique_registry.json``pancha_mahapurusha` 状态从 `partial``covered`
- Yoga 强度评分更准确
---
## 五、P2 覆盖扩展层(新增缺失技法)
> **定义**: 当前完全无代码实现、但属于专业 Jyotish 软件标准功能的技法。
### P2.1 高级分盘: D81/D108/D144 + 自定义 D-N
**目标**: 实现 D81Navamsamsa)、D108、D144 和自定义分盘计算。
**技术方案**:
- 文件: `scripts/divisional_charts_extended.py`(当前已扩展至 D2-D60
- 新增函数: `calc_d81(birth_info)`, `calc_d108(birth_info)`, `calc_d144(birth_info)`, `calc_custom_division(birth_info, n)`
- 算法: D81 = D9 的 D9D108 = D12 的 D9D144 = D12 的 D12。PyJHora `divisional_chart()` 支持任意 D-N。
**验证方法**:
- 与 PyJHora `divisional_chart(birth_info, divisional_chart_factor=81/108/144)` 对比
- 检查行星经度映射
**开源复用**:
- PyJHora `jhora/panchanga/chart.py:divisional_chart()`AGPL 参考)
**预期效果**:
- 分盘覆盖从 16 种扩展至 19+ 种
- 接入 `varga-full` 子命令
---
### P2.2 Bhava Bala(宫位力量)
**目标**: 实现完整的 Bhava Bala 计算。
**技术方案**:
- 新文件: `scripts/bhava_bala.py`
- 算法: Bhava Bala = 宫位主星的 Shadbala × 宫位中行星的影响 × 宫位本身的位置因素(Kendra/Trikona/Dusthana)。PyJHora `bhava_bala.py` 有完整实现。
- 依赖: 需要先完成 P1.1(Shadbala 外部校准)。
**验证方法**:
- 与 PyJHora `bhava_bala.get_bhava_balas()` 对比 10 个案例
**开源复用**:
- PyJHora `jhora/panchanga/bhava_bala.py`AGPL 翻译)
**预期效果**:
- 宫位分析增加力量量化层
-`shadbala` 子命令新增 `--bhava` 选项
---
### P2.3 额外 Dasha 系统(Dwisaptati / Shattrimsa / Dwadashottari 等)
**目标**: 实现 3-5 种常用条件性 Dasha 系统。
**技术方案**:
- 优先级排序(按实用性和开源可复用性):
1. **Dwisaptati Sama Dasha**(72年周期,适用于特定 Tithi 条件)
2. **Shattrimsa Sama Dasha**36年周期)
3. **Dwadashottari Dasha**(112年周期,适用于特定 Nakshatra 条件)
4. **Sthira Dasha**(固定宫位 Dasha
- 新文件: `scripts/dwisaptati_dasha.py`, `scripts/shattrimsa_dasha.py`, `scripts/dwadashottari_dasha.py`, `scripts/sthira_dasha.py`
- 每种 Dasha 的实现模式参照现有 `ashtottari_dasha.py` / `kalachakra_dasha.py` 结构。
**验证方法**:
- 与 PyJHora 对应 Dasha 模块对比时间边界
- 条件性 Dasha 需验证触发条件判断
**开源复用**:
- PyJHora `jhora/panchanga/dhasa/*.py`AGPL 翻译)
**预期效果**:
- Dasha 系统从 7 种扩展至 10+ 种
- 五系统 Convergence 升级为多系统 Convergence
---
### P2.4 分盘中 Yoga 识别
**目标**: 在 D9/D10/D60 等分盘中运行 Yoga 引擎。
**技术方案**:
- 文件: `scripts/yoga_engine.py`
- 当前: Yoga 引擎只接收 D1 数据
- 修改: `detect()` 函数增加 `divisional_chart_data` 参数,在分盘数据中运行相同的 Yoga 规则
- 新增函数: `detect_in_varga(birth_info, varga_name, varga_data)`
- 调用点: `jyotish_engine.py``varga-full` 子命令中,对每个分盘计算 Yoga
**验证方法**:
- 选择 5 个公开案例,在 D9 中检测 Yoga
- 与 PyJHora 分盘 Yoga 对比
**开源复用**:
- PyJHora `jhora/panchanga/yoga.py`(AGPL 参考其分盘 Yoga 调用方式)
**预期效果**:
- full-reading 中 `modules.varga_full.*.yogas` 输出分盘 Yoga
- 技法覆盖度地图中 "分盘中 Yoga 识别" 从 ❌ 变为 ✅
---
### P2.5 Transit 精确触发搜索
**目标**: 实现精确到度分的 Transit 触发搜索。
**技术方案**:
- 新文件: `scripts/transit_search.py`
- 功能: 给定时间窗口和目标配置(如 "Saturn 合相 Moon"),搜索精确发生日期。
- 算法: 在给定窗口内逐日计算 Transit 行星位置,使用二分法逼近精确合相/相位时刻。
- 输入: 本命盘 + 起始日期 + 结束日期 + 目标配置
- 输出: 精确触发日期列表 + 度数误差
**验证方法**:
- 搜索已知天文事件(如 Saturn 回归),与 NASA/JPL 数据对比
- 验证精确日期误差 < 1 天
**开源复用**:
- Swiss Ephemeris `swe.calc_ut()`(已有)
- PyJHora `transit.py`AGPL 参考)
**预期效果**:
- Transit 预测从 "月份级" 提升至 "日期级"
-`transit` 子命令新增 `--search` 选项
---
## 六、P3 质量提升层(文档、测试、CI)
### P3.1 文档与代码一致性审计
**目标**: 消除所有文档与实际代码的不一致。
**具体任务**:
1. 更新 `SKILL.md` 版本号 v6.1.8 → v6.1.12
2. 更新 `COVERAGE_AUDIT_REPORT.md` 版本号 v3.13.1 → v6.1.12
3. 修正 `quick-reference-guide.md` 错误引用(3处)
4. 清理 `docs/roadmap/jyotish_technique_coverage_map.md` 中已修复的 ❌ 标记(Darakaraka、RTN、Chara Dasha 等)
5. 统一 `technique_registry.json``feature-gap-matrix-2026.md` 的口径
**验证方法**:
- 运行 `scripts/audit_capabilities.py --mode validate`
- 人工检查 3 个关键文档的版本号和引用
---
### P3.2 Benchmark 体系扩展
**目标**: 为每个 covered/partial 技法建立可复跑的 benchmark。
**已有 Benchmark**12轮):
- Round 1: 本地基线
- Round 2: Swiss Ephemeris 扩展对比
- Round 3: PyJHora 对比
- Round 4: Node Mode 对比
- Round 5: Arudha/A10 对比
- Round 6: Ashtakavarga 对比
- Round 6b: Ashtakavarga 表仲裁
- Round 6c: Ashtakavarga 书例
- Round 7: Chara Dasha 对比
- Round 8: Transit 真实过境对比
- Round 9: Shadbala 不变量
- Round 10: 解释回归
**待建立 Benchmark**:
- Round 11: Vimshottari Dasha 精度(P0.3
- Round 12: Shadbala 外部绝对值(P1.1
- Round 13: Yoga FN/FP 收敛(P0.2
- Round 14: PAV + Sodhita AVP0.4-P0.5
- Round 15: Bhava Chalit 精度(P1.2
- Round 16: Tajika Yogas 完整覆盖(P1.4
**验证方法**:
- 每个新 benchmark 脚本需通过 `pytest` 集成测试
- benchmark 输出保存至 `benchmarks/jyotish/outputs/``reports/`
---
### P3.3 CI/CD 质量门禁完善
**目标**: 建立自动化的 pre-commit 质量门禁。
**已有门禁**:
- `.pre-commit-config.yaml`: ruff 格式化
- `scripts/run_quality_gate.py`: compile/json/audit/pytest
**待添加门禁**:
1. **benchmark 回归测试**: 每次 commit 前自动跑关键 benchmarkChara Dasha、Ashtakavarga、Transit),确保无精度退化。
2. **technique_registry 一致性检查**: 自动验证 registry 中引用的文件路径和命令确实存在。
3. **文档版本号同步检查**: 自动验证 `SKILL.md` / `CHANGELOG.md` / `README.md` 的版本号一致。
**验证方法**:
-`.github/workflows/` 中添加 GitHub Actions workflow
- 测试: 故意提交一个破坏 Chara Dasha 的改动,验证 CI 拦截
---
### P3.4 开源项目持续监控
**目标**: 建立机制,定期扫描新出现的 Jyotish 开源项目,评估可复用性。
**当前已知项目库**:
- PyJHora (AGPL) — 算法参考金标准
- jyotishganit (MIT) — 已有 clone strengths.py 可复用
- dashaflow (MIT) — 已适配合盘功能
- VedicAstro (MIT) — 完整 KP 系统
- vedic-calc (AGPL) — KP+Tajika+Prashna+Ashtakavarga
- vedic-astro-skills (MIT) — AI 解读 6 个 skill
- panchanga_api (开源) — 19 端点 REST API
- CNWU16/vedic-astro-skills (MIT, 161⭐) — AI 解读
- diliprk/VedicAstro (MIT, 63⭐) — 完整 KP
- rishi-ai-mcp — Sade Sati+Muhurtha+MCP 接入
**待监控渠道**:
- GitHub Topics: `jyotish`, `vedic-astrology`, `panchanga`
- PyPI 新包: `jyotish*`, `panchanga*`, `dasha*`
- arXiv: 印度占星相关算法论文
**验证方法**:
- 每季度手动或自动化扫描一次
- 新发现项目评估: 许可证、技术栈、可复用模块、精度声明
---
## 七、开源复用地图
| 目标模块 | 最佳开源来源 | 许可证 | 复用方式 | 当前状态 |
|----------|-------------|--------|---------|---------|
| Chara Dasha 共主判定 | PyJHora `_stronger_planet_new` | AGPL | 算法翻译 | 待执行 P0.1 |
| Vimshottari benchmark | PyJHora `vimsottari.py` | AGPL | 算法参考 | 待执行 P0.3 |
| PAV/Sodhita AV | PyJHora `ashtakavarga.py` | AGPL | 算法翻译 | 待执行 P0.4-P0.5 |
| Kakshya | PyJHora `kakshya.py` | AGPL | 算法翻译 | 待执行 P0.6 |
| Shadbala 完整版 | PyJHora `shad_bala.py` | AGPL | 算法翻译 | 待执行 P1.1 |
| jyotishganit strengths | jyotishganit `components/strengths.py` | MIT | 直接复用/适配 | 已有 clone |
| Bhava Chalit | PyJHora `chart.py` | AGPL | 算法翻译 | 待执行 P1.2 |
| Sudarshana Chakra | PyJHora `chart.py` | AGPL | 算法翻译 | 待执行 P1.3 |
| Tajika Yogas | PyJHora `tajika/yogas.py` | AGPL | 算法翻译 | 待执行 P1.4 |
| Sahams 36种 | PyJHora `tajika/saham.py` | AGPL | 算法翻译 | 待执行 P1.5 |
| Sade Sati 完整 | PyJHora `transit/sade_sati.py` | AGPL | 算法翻译 | 待执行 P1.6 |
| 高级分盘 D81+ | PyJHora `chart.py` | AGPL | 算法参考 | 待执行 P2.1 |
| Bhava Bala | PyJHora `bhava_bala.py` | AGPL | 算法翻译 | 待执行 P2.2 |
| 额外 Dasha | PyJHora `dhasa/*.py` | AGPL | 算法翻译 | 待执行 P2.3 |
| 分盘 Yoga | PyJHora `yoga.py` | AGPL | 算法参考 | 待执行 P2.4 |
| Transit 搜索 | PyJHora `transit.py` | AGPL | 算法参考 | 待执行 P2.5 |
| KP 完整系统 | VedicAstro (diliprk) | MIT | 直接复用/适配 | 未开始 |
| Prashna 完整 | vedic-calc (atolat) | AGPL | 算法参考 | 未开始 |
> **AGPL 复用原则**: 不直接复制代码到 MIT 仓库。阅读 AGPL 代码理解算法,用独立代码重新实现。在注释中标注算法来源和许可证。
---
## 八、验证策略总览
### 8.1 三层验证体系
| 层级 | 方法 | 适用 | 工具 |
|------|------|------|------|
| **L1 单元测试** | pytest + 不变量检查 | 每个函数 | `pytest tests/` |
| **L2 Benchmark** | PyJHora oracle 对比 | 每个核心模块 | `benchmarks/jyotish/scripts/` |
| **L3 集成验证** | full-reading 端到端 | 每次版本发布 | `scripts/jyotish_engine.py full-reading` |
### 8.2 Benchmark 通过标准
| 模块 | 通过标准 | 当前 | 目标 |
|------|---------|------|------|
| Chara Dasha | Overall ≥95% | 95.83% ✅ | ≥98% |
| Ashtakavarga | SAV=337/386 | ✅ | 保持 |
| Shadbala | 内部1200/1200 + 外部≤5%差异 | 内部✅ 外部❌ | 外部✅ |
| Transit | 340/340 Swiss匹配 | ✅ | 保持 |
| Yoga | F1 ≥95% | 95.22% ✅ | ≥96% |
| Vimshottari | 待建立 | — | ≥95% |
### 8.3 版本发布检查清单
- [ ] 所有 P0 任务 benchmark 通过
- [ ] `pytest tests/` 全通过
- [ ] `scripts/audit_capabilities.py --mode validate` 无错误
- [ ] `scripts/run_quality_gate.py` 无错误
- [ ] `SKILL.md` / `CHANGELOG.md` / `README.md` 版本号一致
- [ ] technique_registry.json 与实际代码状态一致
- [ ] GitHub 仓库已 push
---
## 九、诚实的能力评估
### 当前真实排名(纯技术,第8名左右)
| 排名 | 项目 | 领先点 |
|------|------|--------|
| 1 | PyJHora (AGPL) | 30+ Dasha、完整Shadbala、1000+ Yoga、全分盘 |
| 2 | vedic-calc (AGPL) | KP+Tajika+Prashna+Ashtakavarga 完整 |
| 3 | VedicAstro (MIT) | 完整KP系统、结构化数据 |
| 4 | jyotishganit (MIT) | 干净架构、完整测试 |
| 5 | panchanga-api (开源) | 19端点REST、300+ Yogas |
| 6 | dashaflow (MIT) | 多Dasha流、合盘 |
| 7 | vedic-astro-skills (MIT) | AI解读、6个skill |
| **8** | **yinduzhanxing (MIT)** | **中文AI解读层、技法审计系统、Yoga F1=95.22%、Chara Dasha 95.83%** |
| 9+ | 其他小项目 | — |
### 独特价值(不可替代性)
1. **中文AI解读层**: 全球唯一以中文为母语的 Jyotish AI 解读系统,覆盖从入门到专业的完整工作流。
2. **技法审计系统**: technique_registry + audit_capabilities + benchmark 的三层验证体系,确保每次解读的技法调用透明可审计。
3. **Yoga 精度**: F1=95.22% 在开源项目中属于第一梯队(PyJHora 未公开 Yoga 精度数据,但规则数更多)。
4. **模块化设计**: `jyotish_engine.py` 30+ 子命令 + `full-reading` 47 模块,结构清晰。
### 真实差距
1. **Dasha 系统**: 7种 vs PyJHora 30+ 种,差距显著。
2. **Shadbala 外部校准**: 内部一致但无绝对值对标,不能声称"完整"。
3. **分盘变体**: 只实现标准算法,无 Hora 6 变体、D3 4 变体等。
4. **Tajika 高级功能**: 缺 Panchavargiya Bala、Harsha Bala、完整 Sahams。
5. **Prashna 深度**: 缺 Sphuta、Trisphuta、数字选盘。
6. **社区与生态**: 0 StarsGitHub),无外部贡献者,与 PyJHora 等成熟项目差距巨大。
---
*本文档基于 v6.1.12 代码实际状态编制,所有文件路径、函数名、指标均经过验证。优化方案按 P0→P1→P2→P3 顺序执行,不设定完成时间,以 benchmark 通过为唯一验收标准。*