Files
Jyotisha/scripts/career_analysis.py
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

154 lines
6.7 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Career Analysis(事业分析)引擎 v1.0
超越 vedic-astro-skills 的 AI prompt,实现结构化引擎级分析
核心分析链:
D10(Dashamsa)事业盘 → 10宫主状态 → Saturn/Jupiter角色 → Dasha事业窗口 → Yogas
"""
from typing import Dict, List, Any
SIGNS = ['Aries','Taurus','Gemini','Cancer','Leo','Virgo',
'Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces']
CAREER_SIGN_INDICATORS = {
'Aries': ['军事/执法','工程/技术','创业/先驱','外科医学'],
'Taurus': ['金融/银行','艺术/设计','餐饮/食品','奢侈品'],
'Gemini': ['媒体/传播','教育/培训','销售/贸易','IT/编程'],
'Cancer': ['医疗/护理','房地产','酒店/旅游','心理学/咨询'],
'Leo': ['管理/领导','娱乐/表演','政府/政治','教育/学术'],
'Virgo': ['数据分析','会计/审计','编辑/校对','医疗技术'],
'Libra': ['法律/司法','艺术/美学','公共关系','人力资源'],
'Scorpio': ['投资/风控','研究/侦探','心理学/精神分析','保险/精算'],
'Sagittarius': ['国际商务','教育/哲学','法律/宗教','出版/写作'],
'Capricorn': ['管理/行政','土木工程','政府/政策','传统行业'],
'Aquarius': ['科技/创新','NGO/公益','科学/研究','网络/电商'],
'Pisces': ['艺术/影视','医疗/康复','慈善/NGO','创意/设计'],
}
PLANET_CAREER_ROLES = {
'Sun': {'domain': '领导/管理','strength': '威权、决策、独立执业'},
'Moon': {'domain': '公众/服务','strength': '人际、关怀、变动适应'},
'Mars': {'domain': '执行/技术','strength': '行动力、工程、军事'},
'Mercury': {'domain': '信息/沟通','strength': '智力、商业、IT'},
'Jupiter': {'domain': '指导/教育','strength': '教导、咨询、法律'},
'Venus': {'domain': '艺术/财富','strength': '审美、金融、奢侈'},
'Saturn': {'domain': '管理/组织','strength': '纪律、行政、工业'},
'Rahu': {'domain': '创新/涉外','strength': '科技、外企、非传统'},
'Ketu': {'domain': '研究/灵性','strength': '分析、玄学、幕后'},
}
D10_HOUSE_MEANINGS = {
1: '事业身份/职业形象', 2: '事业财富/收入来源', 3: '事业沟通/技能',
4: '事业根基/安稳度', 5: '事业创意/子女相关', 6: '事业竞争/服务',
7: '事业合作/客户', 8: '事业变革/危机管理', 9: '事业远见/高等教育',
10: '事业成就/社会地位', 11: '事业收益/人脉', 12: '事业幕后/海外',
}
def analyze_career(planets: Dict, asc_sign: str = 'Aries',
d10_positions: Dict = None, dasha_info: Dict = None,
shadbala: Dict = None) -> Dict:
"""
完整事业分析引擎。
Args:
planets: D1行星位置 {planet: {'sign','house','degree',...}}
asc_sign: 上升星座
d10_positions: D10分盘行星位置(可选,提升精度)
dasha_info: 当前大运/小运信息(可选)
shadbala: Shadbala结果(可选)
Returns:
结构化事业分析
"""
analysis = {'indicators': [], 'strengths': [], 'challenges': [], 'timing': [], 'fields': []}
# 1. 10宫分析
asc_idx = SIGNS.index(asc_sign) if asc_sign in SIGNS else 0
h10_sign = SIGNS[(asc_idx + 9) % 12]
h10_lord = {'Aries':'Mars','Taurus':'Venus','Gemini':'Mercury','Cancer':'Moon',
'Leo':'Sun','Virgo':'Mercury','Libra':'Venus','Scorpio':'Mars',
'Sagittarius':'Jupiter','Capricorn':'Saturn','Aquarius':'Saturn','Pisces':'Jupiter'}[h10_sign]
# 10宫主状态
h10_data = planets.get(h10_lord, {})
h10_house = h10_data.get('house', 0)
h10_dignity = h10_data.get('dignity', 'neutral')
analysis['indicators'].append({
'type': '10宫主分析',
'lord': h10_lord,
'sign': h10_sign,
'house': h10_house,
'dignity': h10_dignity,
'potential_fields': CAREER_SIGN_INDICATORS.get(h10_sign, []),
})
# 2. 行星角色分配
for planet in ['Sun','Moon','Mars','Mercury','Jupiter','Venus','Saturn']:
pd = planets.get(planet, {})
if not pd:
continue
house = pd.get('house', 0)
if house in (1, 4, 7, 10):
analysis['strengths'].append({
'planet': planet,
'role': PLANET_CAREER_ROLES.get(planet, {}).get('domain', ''),
'detail': PLANET_CAREER_ROLES.get(planet, {}).get('strength', ''),
'house': house,
'note': f'{planet}在角宫({house}) — 事业核心驱动力',
})
# 3. Saturn角色(事业核心指示星)
saturn = planets.get('Saturn', {})
saturn_house = saturn.get('house', 0)
if saturn_house in (10, 6):
analysis['strengths'].append({'planet':'Saturn','role':'事业纪律','detail':'Saturn在事业/服务宫,职业路径明确且循序渐进'})
if saturn_house in (8, 12):
analysis['challenges'].append({'planet':'Saturn','issue':'事业迟发','detail':f'Saturn在{saturn_house}宫,事业成熟较晚但后劲充足'})
# 4. 事业领域推荐
scored_fields = {}
# 10宫星座
for field in CAREER_SIGN_INDICATORS.get(h10_sign, []):
scored_fields[field] = scored_fields.get(field, 0) + 3
# 10宫主
if h10_lord in PLANET_CAREER_ROLES:
scored_fields[PLANET_CAREER_ROLES[h10_lord]['domain']] = scored_fields.get(PLANET_CAREER_ROLES[h10_lord]['domain'], 0) + 2
# D10分析(如果有)
if d10_positions:
d10_h10_sign = SIGNS[((asc_idx + d10_positions.get('asc_offset', 0)) % 12)]
for field in CAREER_SIGN_INDICATORS.get(d10_h10_sign, []):
scored_fields[field] = scored_fields.get(field, 0) + 1
top_fields = sorted(scored_fields.items(), key=lambda x: x[1], reverse=True)[:5]
analysis['fields'] = [{'field': f, 'score': s} for f, s in top_fields]
# 5. 时间窗口
if dasha_info:
md = dasha_info.get('maha_dasha', '')
ad = dasha_info.get('antar_dasha', '')
analysis['timing'].append({
'current': f'{md}-{ad}',
'note': f'当前{md}大运{ad}小运期间,{PLANET_CAREER_ROLES.get(md,{}).get("domain","")}领域活跃',
})
# 6. 综合评估
if shadbala:
h10_strength = shadbala.get(h10_lord, {}).get('total_rupas', 3)
if h10_strength > 5:
level = '事业驱动力强,职业路径明确'
elif h10_strength > 3:
level = '事业基础稳固,需策略性发展'
else:
level = '事业需要额外努力和策略规划'
else:
level = '基于10宫主状态,事业潜力为中等偏上'
analysis['assessment'] = level
return analysis