Files
Jyotisha/skills/jyotish-full-reading-integration/SKILL.md
T

504 lines
15 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.
---
name: jyotish-full-reading-integration
description: 印度占星 full-reading 历史集成方案(供审计与迁移参考,当前真源以主 SKILL.md 与 registry 为准)
version: 4.4.0
author: 助手
tags: [jyotish, integration, full-reading, karaka-jh-mode, jyotish-engine]
related_skills: [jyotish-engine-modules, jyotish-vedic-astrology]
---
# 印度占星 Full-Reading 历史集成方案
本文档记录把 5 个模块整合进 `jyotish_engine.py` 的历史方案,主要用于审计、迁移和比对旧调用链。
当前项目的唯一对外真源以以下文件为准:
1. `<repo>/SKILL.md`
2. `<repo>/references/technique_registry.json`
3. `<repo>/references/strict-workflow-router.md`
如果本文件与主 skill/registry 的成熟度、边界或步骤定义不一致,必须以后者为准。
## 当前使用边界
本文件的定位是:
1. 记录 full-reading 历史调用链如何演进
2. 方便审计旧版整合方案与迁移痕迹
3. 帮助识别“哪些能力早已存在,只是后来入口或描述变化了”
本文件**不是**当前 skill 精度闭环、成熟度分级或对标完成度的最终依据。
## 判断原则(与主 skill 保持一致)
1. 先判断当前主仓是否已经存在对应模块与执行链;若已存在,优先补入口、补边界、补解释层,不重复实现。
2. 凡涉及 `covered``complete` 的区分,以主 skill 和 registry 为准,不得因为历史 full-reading 曾调用某模块,就推断该能力已经完全闭环。
3. 凡涉及 MIT / Apache / BSD 资产,可继续作为合法复用来源;GPL / AGPL / 闭源方案只做黑盒 benchmark,不复制实现。
4. 凡涉及 `Dasha``Shadbala``KP/Prashna``Tajika/Varshaphala/Sahams` 的传统软件级冻结,必须额外经过外部 oracle 或公开样本闭环。
## 核心变化
### 版本升级
- **v4.1.0** → **v4.4.0**
- 调用步骤:**16步** → **21步**
- 新增 5 个插入点
### 21步调用链完整流程
```
Step 1 → chart (基础星盘)
Step 1.5 → special-lagnas (特殊上升点) ✨新增
Step 2 → dasha (行星时期)
Step 3 → yoga (组合配置)
Step 4 → varga-full (标准分盘)
Step 4.5 → vimsopaka (分盘力量) ✨新增
Step 4.6 → varga-extended (扩展分盘) ✨新增
Step 5 → aspects (相位)
Step 6 → jaimini (+karaka-jh) ✨JH兼容模式
Step 7 → nakshatra-adv (星宿高级)
Step 8 → argala (干预力量)
Step 9 → tajika (年运)
Step 10 → shadbala (六力)
Step 10.5 → avasthas (行星状态) ✨新增
Step 11 → ashtakavarga (八分法)
Step 12 → validate (验证)
Step 13 → audit (审计)
Step 14 → actionable-context (可执行上下文)
Step 15 → congregation (汇总)
Step 16 → vivah-saham (婚姻点)
```
## 5个新模块插入点详解
### 1. Step 1.5 - Special Lagnas(特殊上升点)
**位置**Chart 之后,Dasha 之前
**模块**`special_lagnas.py`
**功能**
- Bhava Lagna(宫位上升)
- Hora Lagna(时辰上升)
- Ghati LagnaGhati上升)
- Vighati LagnaVighati上升)
- Varnada LagnaVarnada上升)
- Sree Lagna(财富上升)
**调用示例**
```python
from scripts.special_lagnas import SpecialLagnasCalculator
special_lagnas = SpecialLagnasCalculator.calculate(
asc_degree=chart_data['ascendant'],
sun_degree=chart_data['planets']['Sun'],
moon_degree=chart_data['planets']['Moon'],
birth_time_ghatis=chart_data['ghatis']
)
```
### 2. Step 4.5 - Vimsopaka(分盘力量)
**位置**Varga 之后,Aspects 之前
**模块**`vimsopaka_calculator.py`
**功能**
- 16分盘权重系统(Shodasavarga
- 10分盘权重系统(Dasavarga
- Varga Dignity 尊严等级判定
- Vimsopaka Bala 总分计算
**调用示例**
```python
from scripts.vimsopaka_calculator import VimsopakaCalculator
vimsopaka_16 = VimsopakaCalculator.calculate_shodasavarga(
planet='Sun',
varga_positions=varga_data
)
vimsopaka_10 = VimsopakaCalculator.calculate_dasavarga(
planet='Sun',
varga_positions=varga_data
)
```
### 3. Step 4.6 - Varga Extended(扩展分盘)
**位置**Vimsopaka 之后,Aspects 之前
**模块**`divisional_charts_extended.py`
**功能**
- D5Panchamsa- 权力/名声
- D6Shashthamsa- 健康/疾病
- D8Ashtamsa- 突发事件/隐秘
- D11Ekadasamsa- 收益/成就
**调用示例**
```python
from scripts.divisional_charts_extended import DivisionalChartsExtended
extended_vargas = DivisionalChartsExtended.calculate_extended(
chart_data=chart_data,
divisions=[5, 6, 8, 11]
)
```
### 4. Step 6+ - Karaka JH CompatibleJH兼容模式)
**位置**Jaimini 内部
**模块**`karaka_calculator.py`
**功能**
- **JH_COMPATIBLE 模式**Rahu 强制降级到 MKMarana Karaka
- 输出三种 Karaka 分配:
- `chara_karaka_7`:标准 BPHS 7星制
- `chara_karaka_8`:标准 BPHS 8星制
- `chara_karaka_jh`**Jagannatha Hora 兼容模式**
**调用示例**
```python
from scripts.karaka_calculator import KarakaCalculator, KarakaMode
# 标准 BPHS 8星制
karaka_8 = KarakaCalculator.calculate(
planets=chart_data['planets'],
mode=KarakaMode.BPHS_8
)
# JH 兼容模式(Rahu 限制在 MK)
karaka_jh = KarakaCalculator.calculate(
planets=chart_data['planets'],
mode=KarakaMode.JH_COMPATIBLE
)
```
**JH 模式核心逻辑**
```python
# Rahu 在 JH 模式下强制降级
if mode == KarakaMode.JH_COMPATIBLE:
if 'Rahu' in sorted_planets:
rahu_index = sorted_planets.index('Rahu')
# 确保 Rahu 只能是 MK(第8位)
if rahu_index < 7:
sorted_planets.remove('Rahu')
sorted_planets.append('Rahu')
```
### 5. Step 10.5 - Avasthas(行星状态)
**位置**Shadbala 之后,Ashtakavarga 之前
**模块**`avastha_calculator.py`
**功能**
- Bala Avastha(年龄状态):婴儿/少年/青年/老年/死亡
- Jagrat Avastha(警觉状态):清醒/梦境/深睡
- Deeptadi Avastha(情绪状态):15种状态
- Lajjitadi Avastha(荣辱状态):6种状态
- Shayanadi Avastha(姿态状态):12种状态
**调用示例**
```python
from scripts.avastha_calculator import AvasthaCalculator
avasthas = AvasthaCalculator.calculate_all(
planet='Sun',
degree=chart_data['planets']['Sun'],
house=chart_data['houses']['Sun'],
aspects=aspect_data
)
```
## jyotish_engine.py 修改要点
### 1. 导入新模块
```python
# 在文件顶部添加
from scripts.karaka_calculator import KarakaCalculator, KarakaMode
from scripts.special_lagnas import SpecialLagnasCalculator
from scripts.vimsopaka_calculator import VimsopakaCalculator
from scripts.avastha_calculator import AvasthaCalculator
from scripts.divisional_charts_extended import DivisionalChartsExtended
```
### 2. 修改 full_reading() 函数
```python
def full_reading(birth_data):
"""
完整解盘(21步调用链)
v4.4.0 - 整合 5 个新模块
"""
result = {
'version': '4.4.0-full-reading',
'modules': {}
}
# Step 1: Chart
result['modules']['chart'] = calculate_chart(birth_data)
# Step 1.5: Special Lagnas ✨新增
result['modules']['special_lagnas'] = SpecialLagnasCalculator.calculate(
asc_degree=result['modules']['chart']['ascendant'],
sun_degree=result['modules']['chart']['planets']['Sun'],
moon_degree=result['modules']['chart']['planets']['Moon'],
birth_time_ghatis=birth_data['ghatis']
)
# Step 2: Dasha
result['modules']['dasha'] = calculate_dasha(birth_data)
# Step 3: Yoga
result['modules']['yoga'] = calculate_yoga(result['modules']['chart'])
# Step 4: Varga Full
result['modules']['varga_full'] = calculate_varga_full(result['modules']['chart'])
# Step 4.5: Vimsopaka ✨新增
result['modules']['vimsopaka'] = {}
for planet in result['modules']['chart']['planets']:
result['modules']['vimsopaka'][planet] = {
'shodasavarga': VimsopakaCalculator.calculate_shodasavarga(
planet=planet,
varga_positions=result['modules']['varga_full']
),
'dasavarga': VimsopakaCalculator.calculate_dasavarga(
planet=planet,
varga_positions=result['modules']['varga_full']
)
}
# Step 4.6: Varga Extended ✨新增
result['modules']['varga_extended'] = DivisionalChartsExtended.calculate_extended(
chart_data=result['modules']['chart'],
divisions=[5, 6, 8, 11]
)
# Step 5: Aspects
result['modules']['aspects'] = calculate_aspects(result['modules']['chart'])
# Step 6: Jaimini (含 JH 兼容模式) ✨修改
result['modules']['jaimini'] = {
'chara_karaka_7': KarakaCalculator.calculate(
planets=result['modules']['chart']['planets'],
mode=KarakaMode.BPHS_7
),
'chara_karaka_8': KarakaCalculator.calculate(
planets=result['modules']['chart']['planets'],
mode=KarakaMode.BPHS_8
),
'chara_karaka_jh': KarakaCalculator.calculate(
planets=result['modules']['chart']['planets'],
mode=KarakaMode.JH_COMPATIBLE
)
}
# Step 7-9: 保持原有逻辑
result['modules']['nakshatra_adv'] = calculate_nakshatra_advanced(result['modules']['chart'])
result['modules']['argala'] = calculate_argala(result['modules']['chart'])
result['modules']['tajika'] = calculate_tajika(birth_data)
# Step 10: Shadbala
result['modules']['shadbala'] = calculate_shadbala(result['modules']['chart'])
# Step 10.5: Avasthas ✨新增
result['modules']['avasthas'] = {}
for planet in result['modules']['chart']['planets']:
result['modules']['avasthas'][planet] = AvasthaCalculator.calculate_all(
planet=planet,
degree=result['modules']['chart']['planets'][planet],
house=result['modules']['chart']['houses'][planet],
aspects=result['modules']['aspects']
)
# Step 11-16: 保持原有逻辑
result['modules']['ashtakavarga'] = calculate_ashtakavarga(result['modules']['chart'])
result['modules']['validate'] = validate_chart(result['modules']['chart'])
result['modules']['audit'] = audit_calculations(result)
result['modules']['actionable_context'] = generate_actionable_context(result)
result['modules']['congregation'] = congregate_results(result)
result['modules']['vivah_saham'] = calculate_vivah_saham(result['modules']['chart'])
# 添加版本说明
result['summary'] = {
'version': '4.4.0-full-reading',
'total_steps': 21,
'new_modules': [
'special_lagnas (Step 1.5)',
'vimsopaka (Step 4.5)',
'varga_extended (Step 4.6)',
'karaka_jh_compatible (Step 6+)',
'avasthas (Step 10.5)'
],
'next_step': '使用 karaka_jh 模式与 Jagannatha Hora 保持一致'
}
return result
```
## 使用方法
### 1. 复制修改后的 jyotish_engine.py
```bash
# 假设你已经有修改后的文件
cp jyotish_engine.py ~/Projects/yinduzhanxing/scripts/
```
### 2. 提交到 GitHub
```bash
cd ~/Projects/yinduzhanxing
git add scripts/jyotish_engine.py
git commit -m "feat: Integrate 5 new modules into full-reading chain (v4.4.0)
- Step 1.5: special_lagnas (特殊上升点)
- Step 4.5: vimsopaka (分盘力量)
- Step 4.6: varga_extended (扩展分盘)
- Step 6+: karaka_jh_compatible (JH兼容模式)
- Step 10.5: avasthas (行星状态)
调用链从 16 步扩展到 21 步
版本号:v4.1.0 → v4.4.0"
git push origin main
```
### 3. 测试完整调用链
```bash
cd ~/Projects/yinduzhanxing
# 运行 full-reading
python3 scripts/jyotish_engine.py --mode full-reading \
--birth-date "1990-01-01" \
--birth-time "12:00:00" \
--latitude 28.6139 \
--longitude 77.2090 \
--timezone "Asia/Kolkata"
```
### 4. 验证输出
检查输出 JSON 是否包含:
```json
{
"version": "4.4.0-full-reading",
"modules": {
"chart": {...},
"special_lagnas": {...},
"dasha": {...},
"yoga": {...},
"varga_full": {...},
"vimsopaka": {...},
"varga_extended": {...},
"aspects": {...},
"jaimini": {
"chara_karaka_7": {...},
"chara_karaka_8": {...},
"chara_karaka_jh": {...}
},
"nakshatra_adv": {...},
"argala": {...},
"tajika": {...},
"shadbala": {...},
"avasthas": {...},
"ashtakavarga": {...},
"validate": {...},
"audit": {...},
"actionable_context": {...},
"congregation": {...},
"vivah_saham": {...}
},
"summary": {
"version": "4.4.0-full-reading",
"total_steps": 21,
"new_modules": [...]
}
}
```
## JH 兼容模式使用指南
### 为什么需要 JH 兼容模式?
Jagannatha HoraJH)软件在 Chara Karaka 计算中有特殊规则:
- **Rahu 强制降级到 MKMarana Karaka,第8位)**
- 即使 Rahu 的星座内度数更高,也不会超过 MK
### 三种 Karaka 模式对比
| 模式 | Rahu 处理 | 适用场景 |
|------|-----------|----------|
| **BPHS_7** | 不包含 Rahu | 传统 BPHS 7星制 |
| **BPHS_8** | Rahu 按度数排序 | 标准 BPHS 8星制 |
| **JH_COMPATIBLE** | Rahu 限制在 MK | 与 JH 软件保持一致 |
### 如何选择模式?
```python
# 如果你的 PDF 星盘来自 Jagannatha Hora
karaka = result['modules']['jaimini']['chara_karaka_jh']
# 如果使用标准 BPHS 8星制
karaka = result['modules']['jaimini']['chara_karaka_8']
# 如果使用传统 7星制(不含 Rahu)
karaka = result['modules']['jaimini']['chara_karaka_7']
```
### 验证 JH 模式
```bash
# 单独测试 Karaka 计算器
python3 scripts/karaka_calculator.py \
--mode jh \
--planets "Sun:45.5,Moon:120.3,Mars:200.1,Mercury:50.8,Jupiter:180.5,Venus:90.2,Saturn:250.7,Rahu:150.4"
# 输出应该显示 Rahu 固定在 MK 位置
```
## 常见问题
### Q1: 如何确认新模块已正确集成?
```bash
# 检查 jyotish_engine.py 的导入
grep "from scripts" scripts/jyotish_engine.py
# 应该看到 5 个新模块的导入
```
### Q2: 如果某个模块报错怎么办?
```bash
# 单独测试每个模块
python3 scripts/special_lagnas.py --test
python3 scripts/karaka_calculator.py --test
python3 scripts/vimsopaka_calculator.py --test
python3 scripts/avastha_calculator.py --test
python3 scripts/divisional_charts_extended.py --test
```
### Q3: 如何回退到 v4.1.0
```bash
cd ~/Projects/yinduzhanxing
git log --oneline # 找到 v4.1.0 的 commit hash
git checkout <commit-hash> scripts/jyotish_engine.py
```
### Q4: JH 模式和 BPHS 模式结果差异大吗?
通常只有 Rahu 的 Karaka 位置不同,其他行星保持一致。如果你的 PDF 来自 JH 软件,务必使用 JH 模式。
## 性能优化建议
1. **缓存分盘计算**Vimsopaka 和 Varga Extended 计算量大,建议缓存结果
2. **并行计算**:Avasthas 可以对每个行星并行计算
3. **按需加载**:如果不需要全部 21 步,可以传入 `steps` 参数选择性执行
```python
# 只执行特定步骤
result = full_reading(birth_data, steps=[1, 1.5, 2, 6])
```
## 下一步
1. ✅ 完成 5 个模块集成
2. ⏳ 添加单元测试覆盖
3. ⏳ 优化性能(缓存/并行)
4. ⏳ 生成 PDF 报告模板
5. ⏳ 添加 Web API 接口
## 相关 Skills
- `jyotish-engine-modules`5个核心模块的完整代码
- `jyotish-vedic-astrology`:印度占星专业解盘系统
## 更新日志
### v4.4.0 (2026-05-03)
- 新增 5 个模块插入点
- 调用链从 16 步扩展到 21 步
- 支持 JH 兼容模式
- 版本号从 v4.1.0 升级到 v4.4.0