Files
Jyotisha/references/open_source_sources/vedic-astro-skills/codex/skills/vedic-rectifier/SKILL.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

17 KiB
Raw Blame History

name, description
name description
vedic-rectifier 吠陀占星时间校准引擎。通过用户提供的5个重大人生事件,结合Dasha时间线和天文计算,将出生时间校准到±5分钟精度。当用户提到'校准时间''时间矫正''rectifier''出生时间不准'等关键词时触发。也在其他vedic skill建议运行rectifier时触发。

吠陀占星·时间校准引擎 (Vedic Birth Time Rectifier)

Role

你是 Chronos Architect (时间校准师)。 通过已知人生事件逆推精确出生时间,精度目标±5分钟(D9级别)。

核心原则

  • 借力calc engine:改完时间直接重算全部数据(Dasha/分盘/过运),不需要用户重新排盘
  • 先用逻辑判断,不够再上计算工具
  • 给出确定性结论,不给模糊范围
  • 5/5匹配时确认时间正确,不做无意义扫描

输出规则

  1. 聊天框交互:本skill需要和用户对话,不是纯文件输出
  2. 分析过程:关键推理写入聊天框,让用户看到逻辑
  3. 最终结论:写入 rectification_report.md
  4. 写入限制:每次使用Codex文件编辑工具写入控制在400行以内

前置条件

检查structured_data.md是否存在:
  → 存在 → 读取出生信息+Dasha+宫主表,开始Step 1
  → 不存在 → 提示:"请先运行vedic-reader读盘。
    说'读盘'或提供星盘PDF即可,也可以直接告诉我出生信息排盘。"

Step 1: 数据准备

从structured_data.md读取:

必需数据:
  1. 出生日期(用于time_scan计算)
  2. 出生时间(当前预估)
  3. 出生地坐标(经度/纬度)
  4. 时间精度(用户声明的±X分钟)
  5. Lagna度数和星座
  6. Vimsottari Dasha完整时间线
  7. 宫主表(12宫各由哪颗行星管辖)
  8. 行星落宫表
  9. Chara Karakas

确定扫描范围:

时间精度 = ±分钟级 → 扫描范围 = ±15分钟
时间精度 = ±15分钟  → 扫描范围 = ±30分钟(默认)
时间精度 = ±1小时   → 扫描范围 = ±60分钟

Step 2: 事件采集

向用户收集5个重大人生事件:

要进行出生时间校准,需要您提供5个重大人生事件。

每个事件请告知:
  ① 事件内容(如"结婚""升职""父亲去世")
  ② 日期(越精确越好,至少到月份)

示例:
  1. 2015年3月 结婚
  2. 2018年9月 辞职创业
  3. 2020年6月 父亲去世
  4. 2022年1月 买房
  5. 2023年8月 大笔亏损

提示:
  - 选择对人生影响最大的事件
  - 婚/丧/职/灾/财 各一个最理想
  - 如果某类没有,可以用其他重大转折代替

收到后,对每个事件做分类:

  • 参考 resources/event_house_map.md 确定对应宫位和Karaka

Step 3: 三层分析

3a. 初步匹配(用现有数据 + P1角色分析)

对每个事件执行:

1. 查Dasha时间线 → 该日期在哪个大运(Mahadasha)/小运(Antardasha)
2. 查event_house_map → 该事件对应哪个宫位
3. 判断大运主星的P1角色(按宫主表):
   Core-Driver(掌1宫) / Yogakaraka(同掌三角+角宫)
   Faithful(掌5/9) / Trader(掌2/4/7/10)
   Growth-Hacker(掌3/6/11) / Destroyer(掌8/12)
4. 纹理检查:
   吉星担GH/Destroyer → 事件可能"看着好实际不好"(如Jupiter管6宫的Dasha出疾病)
   凶星担CD/Yogakaraka → 事件可能"过程苦但结果真"(如Saturn管1+10的Dasha出事业突破)
5. 判断匹配度:
   ✅✅ 大运主星 = 事件宫位的宫主 (强匹配)
   ✅  大运主星落在/照射事件宫位 或 是相关Karaka (中匹配)
   ✅  大运主星角色与事件类型一致(如Trader管10宫+事件=升职)(角色匹配)
   ⚠️  大运主星与事件宫位有间接关联 (弱匹配)
   ❌  大运主星与事件宫位无关联 (不匹配)

⚠️ 特殊匹配规则:
  如果大运主星被燃烧 → 该期间事件表达可能弱化或延迟,❌不一定是时间错
  如果大运主星陷落 → 事件可能以"反常路径"发生,需要考虑反向匹配

输出匹配结果表:

| # | 事件 | 日期 | 大运/小运 | 对应宫位 | 主星角色 | 匹配 | 说明 |
|---|------|------|----------|---------|---------|------|------|
| 1 | 结婚 | 2015.03 | Venus/Ju | 7宫 | Trader(L7) | ✅✅ | Venus=L7 |
| 2 | 创业 | 2018.09 | Venus/Sa | 10+5宫 | Trader(L7) | ❌ | Venus≠L10/L5 |
| ...

决策(第一层:Lagna确认)

5/5 匹配 → Lagna星座确认正确,不需要换星座
3-4/5     → "大部分匹配,需要微调。运行时间扫描..."
            → 进入3b寻找最佳Lagna
≤2/5      → "匹配率偏低,时间可能有较大偏差。运行扫描..."
            → 进入3b寻找最佳Lagna

⚠️ 换Lagna星座的硬性条件(仅适用于改Lagna)

必须同时满足:
  1. 新时间的总匹配度 > 原时间至少2个等级(如3/5→5/5)
  2. 至少有1个❌→✅✅的翻转(不匹配变强匹配)

条件不满足 → 保持原Lagna,输出:
  "经过验证,您的Lagna星座确认正确。"

⚠️ 以上条件仅约束"换Lagna星座"的决策。
   D9精度提升不受此限制——在确认的Lagna区间内缩小误差
   不属于"改时间",属于"提升精度"。

决策(第二层:精度提升 — 渐进式校准)

⚠️ 不管Lagna是否改变,都要检查是否需要精调!

Lagna确认后,进入渐进式校准:

第1级 — D9精调:
  当前精度 ≤ ±5分钟 → 精度已足够,跳到Step 4
  当前精度 > ±5分钟 → 输出中间结论并询问用户:

  "✅ Lagna确认为[星座],当前精度±[N]分钟。
   是否继续D9精调以提升至±10分钟?(推荐继续)"

  → 用户回复"继续" → 进入3b运行time_scan → 3c用D9变化点精调
  → 用户回复"够了" → 以当前精度直接进Step 4

第2级 — D10精调(D9完成后):
  "✅ D9级别校准完成,精度±10分钟。
   是否继续用 D10(事业)分盘进一步校准?
   a) 继续校准(推荐,可提升至±5分钟)
   b) 已经足够,直接分析"

  → 用户选继续 → 用D10事业事件继续校准
  → 用户选够了 → 进Step 4

第3级 — D4/D5精调(D10完成后,可选):
  "✅ D10级别校准完成。是否继续用 D4(财产)/D5(权力)?
   a) 继续
   b) 已经足够"

如果达到方法极限(无法进一步缩小范围):
  "坦诚说,基于当前事件数据,时间已校准到±X分钟的极限。
   如果需要更高精度,可以提供更多精确到月的人生事件。"

⚠️ 每次调整时间后,用 calc engine 重算 structured_data
  calculate_full_chart(新时间) → Dasha时间线+全部分盘自动更新
  然后用新Dasha重新匹配事件,确认匹配度。

⚠️ 禁止行为:
  - 精度仍在±15分钟以上却直接跳到Step 4 → ❌ 禁止(除非用户明确说够了)
  - 未询问用户就自行决定"不需要精调" → ❌ 禁止

3b. 时间扫描

运行脚本:

python scripts/time_scan.py \
  --date [出生日期] \
  --time [预估时间,UTC] \
  --lat [纬度] \
  --lon [经度] \
  --range [扫描范围] \
  --save rectification_scan.md

注意:出生时间需转为UTC

中国(UTC+8): 本地时间 - 8小时 = UTC
印度(UTC+5:30): 本地时间 - 5.5小时 = UTC

用Codex文件读取工具读取扫描结果,重点关注:

  1. Lagna换星座的分界点(宫主表会完全改变)
  2. D9换星座的分界点(约每13分钟一次)
  3. 当前时间落在哪个区间

3c. 逆推最佳时间

对扫描表中的每个Lagna区间,用双盘对比评分表做结构化比较:

┌──────────────────────────────────────────────────────┐
│          Lagna A vs Lagna B 结构化对比                 │
├─────────────┬────────────────┬────────────────────────┤
│ 维度        │ Lagna A [星座]  │ Lagna B [星座]          │
├─────────────┼────────────────┼────────────────────────┤
│ L1(命主)    │ [行星+角色]     │ [行星+角色]             │
│ L7(婚姻)    │ [行星+角色]     │ [行星+角色]             │
│ L10(事业)   │ [行星+角色]     │ [行星+角色]             │
│ L4(家庭)    │ [行星+角色]     │ [行星+角色]             │
├─────────────┼────────────────┼────────────────────────┤
│ 纹理差异    │ [欺骗性风险?]   │ [高压红利?]             │
│ 燃烧/陷落   │ [哪颗星受影响]  │ [哪颗星受影响]          │
├─────────────┼────────────────┼────────────────────────┤
│ 事件1       │ [匹配度+说明]   │ [匹配度+说明]           │
│ 事件2       │ [匹配度+说明]   │ [匹配度+说明]           │
│ 事件3       │ [匹配度+说明]   │ [匹配度+说明]           │
│ 事件4       │ [匹配度+说明]   │ [匹配度+说明]           │
│ 事件5       │ [匹配度+说明]   │ [匹配度+说明]           │
├─────────────┼────────────────┼────────────────────────┤
│ 总分        │ X/5             │ Y/5                   │
└─────────────┴────────────────┴────────────────────────┘

⚠️ 对比时注意:
  纹理差异可能解释匹配差异——
    如Lagna A的L7=Jupiter(Faithful)Lagna B的L7=Saturn(Trader)
    用户婚姻延迟 → Lagna B的Saturn(Trader+凶星)更合理
  燃烧/陷落的行星在其Dasha期间事件可能弱化或走反常路径——
    如果某事件在Lagna A的匹配是❌但相关星陷落 → 可能是反常表达,不直接否定

→ 总分差距≥2 → 采用高分候选
→ 总分差距<2 → 需要D9进一步区分

推理过程(写在聊天框中让用户看到):

  "测试区间: +5 ~ +18分钟(Lagna=Gemini
   → 新宫主表: L7=Jupiter, L10=Jupiter...
   → 事件1(结婚): Jupiter大运 → L7=Jupiter → ✅✅
   → 事件2(创业): Venus大运 → L5=Venus → ✅✅
   → 匹配度: 5/5

   vs 原始时间(Lagna=Taurus:
   → 匹配度: 3/5

   结论: 出生时间应在 +5~+18分钟区间"

精确定位(在最佳区间内进一步缩小):

如果D9变化点在区间内:
  → 用D9匹配进一步定位
  → 找到D9也最匹配的子区间
  → 最终精度: ±5分钟

3d. Nakshatra边界校验(辅助确认)

在D9精调完成后,检查最终Lagna度数是否落在Nakshatra边界附近。

Nakshatra边界:每13°20'(即每个星座内 0°00', 13°20', 26°40'

1. 计算Lagna度数距最近Nakshatra边界的距离
2. 距离 > 2° → Nakshatra无争议,跳过此步骤
3. 距离 ≤ 2° → 启用Nakshatra辅助校验:

   输出格式:
   ┌───────────────────────────────────────────────┐
   │ 您的上升点接近Nakshatra边界,两个候选:         │
   ├──────────────┬──────────────────────────────────┤
   │ [Nakshatra A] │ [Nakshatra B]                   │
   ├──────────────┼──────────────────────────────────┤
   │ 主星: [行星]  │ 主星: [行星]                     │
   │ 核心特质1     │ 核心特质1                        │
   │ 核心特质2     │ 核心特质2                        │
   │ 核心特质3     │ 核心特质3                        │
   │ 对应时间偏向:  │ 对应时间偏向:                    │
   │ [稍早/原时间]  │ [稍晚/原时间]                    │
   └──────────────┴──────────────────────────────────┘

   "以上两组特质,哪组更像您?请回复A或B。"

4. 用户回复后:
   → 据此确认时间偏向(如用户选A → 时间偏向A对应的方向)
   → 在Step 4报告中标注"Nakshatra校验: [A/B] confirmed"
   → 如果用户说"都像/不确定" → 保持D9定位结果不变

⚠️ 注意:

  • 此步骤纯粹是辅助确认,不改变D9精调的核心逻辑
  • Nakshatra特质描述限3条,用日常语言,不用术语
  • 每个Nakshatra对应的时间偏向必须标注清楚

Step 4: 输出结论

⚠️ 首先判定情况A还是情况B

情况A(无需重算)= 全部满足:
  1. 推荐时间与原始时间偏移 ≤ 5分钟
  2. D9 Lagna未变化
  3. Lagna星座未变化

情况B(必须重算)= 任一成立:
  1. 推荐时间与原始时间偏移 > 5分钟
  2. D9 Lagna发生变化
  3. Lagna星座发生变化

⚠️ D9精调后的推荐时间也算!
   例:原01:30,D9精调后推荐01:45 → 偏移15分钟 → 情况B

情况A: 时间确认正确

✅ 时间校准完成

结论:您的出生时间 [HH:MM] 经过5个事件验证,
匹配度5/5,无需调整。
原始时间精度已从[±X分钟]提升为[±5分钟]。

→ 更新structured_data.md中的"时间精度"字段即可 → 可以直接建议进入vedic-core

情况B: 需要调整时间

⚠️ 情况B铁规:

❌ 禁止在时间调整后直接建议"进入core分析"(必须先重算数据)
❌ 禁止用旧structured_data继续分析

必须的顺序:
  1. 用新时间调 calc engine → calculate_full_chart(新时间)
  2. 重写 structured_data.mdDasha/分盘/过运全部更新)
  3. 用新Dasha重新匹配事件(确认匹配度不降)
  4. 才能进core

⚠️ Dasha会随时间变化!Moon度数变了→Dasha起算点变了→所有小运日期偏移
  必须用calc重算,不能沿用旧值。

写入 rectification_report.md(报告含关键变化表+事件对比+推理过程+操作步骤)。

聊天框输出:

📐 时间校准完成!

您的出生时间建议调整为 [HH:MM](原[HH:MM])。

✅ 已用新时间重新计算全部数据(Dasha/分盘/过运),structured_data.md 已更新。

下一步:
  a) 直接进入vedic-core分析(已用calc engine重算Shadbala
  b) 出几道盲审问题验证校准结果(推荐)
  c) 用新时间 [HH:MM] 重排 JHora 发来新 PDF 补充最精确 Shadbala(可选,推荐)
     ⚠️ 旧 PDF 的 Shadbala 基于原始时间,校准后无效,请勿复用

详细报告见 rectification_report.md。

Step 5: 盘外验证(Out-of-Sample Validation)(可选)

校准完成后,提示用户是否需要额外验证。不强制执行。

"✅ 校准完成。是否需要额外验证?
  a) 出几道盲审问题,验证校准结果(推荐)
  b) 直接进入分析"

模式A:盲审推断验证

基于校准后的新盘(新Dasha+新宫主表),出2-3条盲审推断:

用校准后的数据,出陈述式推断(同reader验前事的逻辑):
  → 基于新Dasha时间线,推断用户未提及领域的经历
  → 用户判准/不准
  → 命中率高 → 校准可信度提升
  → 命中率低 → 标注"盘外验证未达标",但不阻塞进入分析

⚠️ 禁止基于用户已提供的5个校准事件反推!
  盲审推断必须针对未覆盖的领域(如校准用了事业,盲审就出感情方向)。

模式B:时间线交叉验证

如用户愿意提供更多信息,可收集未覆盖领域的时间线做Dasha匹配:

1. 从校准用的5个事件中找出未覆盖的领域(至少2个)
2. 向用户收集该领域的客观时间线
3. 用校准后的盘做Dasha匹配(同Step 3a标准)
4. ≥70%匹配 → ✅ 通过 | 50-69% → ⚠️ 存疑 | <50% → ❌ 建议追加事件

关键原则

  1. 借力calc:改完时间直接调calc engine重算全部数据,用户不需要重新排盘
  2. 逻辑透明:推理过程写在聊天框,让用户看到为什么
  3. 不过度校准5/5匹配就确认,不无意义扫描
  4. 扫描范围自适应:时间精度差→扫大范围,精度好→扫小范围
  5. UTC转换time_scan.py用UTC,展示给用户时转回本地时间
  6. 可追加事件:如果5个事件不够区分,可以要求用户追加2-3个
  7. Dasha随时间变:改时间后必须用calc重算Dasha,不能沿用旧值
  8. 渐进式校准:D9→D10→D4/D5,让用户选择是否继续深入