Weight deep Ashtakavarga support in finance scoring
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# Ashtakavarga Deep Support Weighting v1
|
||||
|
||||
Date: 2026-06-28
|
||||
|
||||
## Scope
|
||||
|
||||
This pass upgrades the newly bridged finance evidence layers from visibility-only into controlled low-weight score modifiers:
|
||||
|
||||
- `PAV / Prastara AV`
|
||||
- `Sodhita AV`
|
||||
- `Kakshya`
|
||||
|
||||
## Weighting
|
||||
|
||||
The v1 weights are intentionally small:
|
||||
|
||||
- `PAV supportive`: `+2`
|
||||
- `Kakshya supportive`: `+2`
|
||||
- `Sodhita obstructive`: `-2`
|
||||
- `Kakshya obstructive`: `-2`
|
||||
|
||||
## Boundary
|
||||
|
||||
These weights are not allowed to directly mint or revoke:
|
||||
|
||||
- `dominant_label`
|
||||
- `payout_label`
|
||||
|
||||
They only adjust the route score through the existing threshold system.
|
||||
|
||||
## Why This Matters
|
||||
|
||||
The project already computed these layers, but they were previously dead weight inside strict adjudication.
|
||||
|
||||
This pass keeps the scoring conservative while letting deeper Ashtakavarga and degree-trigger signals actually influence finance ranking.
|
||||
|
||||
## Still Open
|
||||
|
||||
- calibrating whether `PAV` should distinguish contributor identity more sharply
|
||||
- deciding whether `Sodhita` should also have a positive support path
|
||||
- tying `Kakshya` more directly to transit timing instead of route-average usage
|
||||
- validating the weights against external oracle cases before claiming mature timing precision
|
||||
|
||||
+11
-3
@@ -969,6 +969,17 @@ def _derive_event_judgement(route: str, present: Dict[str, Any], missing: List[s
|
||||
score += 5
|
||||
elif ashtakavarga_finance.get("level") == "obstructive":
|
||||
score -= 5
|
||||
pav_finance_support = present.get("pav_finance_support") or {}
|
||||
if pav_finance_support.get("level") == "supportive":
|
||||
score += 2
|
||||
sodhita_finance_support = present.get("sodhita_finance_support") or {}
|
||||
if sodhita_finance_support.get("level") == "obstructive":
|
||||
score -= 2
|
||||
kakshya_finance_support = present.get("kakshya_finance_support") or {}
|
||||
if kakshya_finance_support.get("level") == "supportive":
|
||||
score += 2
|
||||
elif kakshya_finance_support.get("level") == "obstructive":
|
||||
score -= 2
|
||||
score += 20 if wealth_promise_level == "strong" else 10 if wealth_promise_level == "moderate" else 0
|
||||
score += 5 if wealth_promise_diversity >= 2 else 0
|
||||
score += max(
|
||||
@@ -1026,13 +1037,10 @@ def _derive_event_judgement(route: str, present: Dict[str, Any], missing: List[s
|
||||
shadbala_component_audit = present.get("shadbala_component_audit") or {}
|
||||
if shadbala_component_audit.get("status") in {"blocked", "incomplete"}:
|
||||
secondary_context.append("shadbala_component_gap")
|
||||
pav_finance_support = present.get("pav_finance_support") or {}
|
||||
if pav_finance_support.get("level") == "supportive":
|
||||
secondary_context.append("pav_finance_support")
|
||||
sodhita_finance_support = present.get("sodhita_finance_support") or {}
|
||||
if sodhita_finance_support.get("level") == "obstructive":
|
||||
secondary_context.append("sodhita_wealth_friction")
|
||||
kakshya_finance_support = present.get("kakshya_finance_support") or {}
|
||||
if kakshya_finance_support.get("level") == "supportive":
|
||||
secondary_context.append("kakshya_finance_support")
|
||||
elif kakshya_finance_support.get("level") == "obstructive":
|
||||
|
||||
@@ -144,6 +144,117 @@ def test_finance_source_diversity_adds_small_bump_without_changing_verdict_band(
|
||||
assert high_diversity["score"] == low_diversity["score"] + 5
|
||||
|
||||
|
||||
def test_finance_deep_ashtakavarga_supports_add_small_score_bump_without_label_override() -> None:
|
||||
base = _derive_event_judgement(
|
||||
"finance",
|
||||
{
|
||||
"wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"career_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"},
|
||||
"narayana_current": {"sign": "Taurus", "lord": "Venus"},
|
||||
"wealth_promise_strength": {
|
||||
"level": "strong",
|
||||
"primary_source": "dhana_yogas",
|
||||
"supporting_sources": ["dhana", "lakshmi"],
|
||||
"source_diversity": 2,
|
||||
"count": 1,
|
||||
},
|
||||
},
|
||||
[],
|
||||
)
|
||||
weighted = _derive_event_judgement(
|
||||
"finance",
|
||||
{
|
||||
"wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"career_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"},
|
||||
"narayana_current": {"sign": "Taurus", "lord": "Venus"},
|
||||
"wealth_promise_strength": {
|
||||
"level": "strong",
|
||||
"primary_source": "dhana_yogas",
|
||||
"supporting_sources": ["dhana", "lakshmi"],
|
||||
"source_diversity": 2,
|
||||
"count": 1,
|
||||
},
|
||||
"pav_finance_support": {
|
||||
"level": "supportive",
|
||||
"source": "ashtakavarga_pav_bridge_v1",
|
||||
"signals": ["pav_finance_support"],
|
||||
"top_planets": ["Venus"],
|
||||
},
|
||||
"kakshya_finance_support": {
|
||||
"level": "supportive",
|
||||
"source": "kakshya_finance_bridge_v1",
|
||||
"signals": ["kakshya_finance_support"],
|
||||
"average_strength": 6.8,
|
||||
},
|
||||
},
|
||||
[],
|
||||
)
|
||||
|
||||
assert base["dominant_label"] == "public_wealth_status"
|
||||
assert weighted["dominant_label"] == "public_wealth_status"
|
||||
assert weighted["score"] == base["score"] + 4
|
||||
|
||||
|
||||
def test_finance_sodhita_and_kakshya_friction_reduce_score_without_forcing_label_swap() -> None:
|
||||
base = _derive_event_judgement(
|
||||
"finance",
|
||||
{
|
||||
"wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"career_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"},
|
||||
"narayana_current": {"sign": "Taurus", "lord": "Venus"},
|
||||
"wealth_promise_strength": {
|
||||
"level": "strong",
|
||||
"primary_source": "dhana_yogas",
|
||||
"supporting_sources": ["dhana", "lakshmi"],
|
||||
"source_diversity": 2,
|
||||
"count": 1,
|
||||
},
|
||||
},
|
||||
[],
|
||||
)
|
||||
weighted = _derive_event_judgement(
|
||||
"finance",
|
||||
{
|
||||
"wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"career_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
|
||||
"vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"},
|
||||
"narayana_current": {"sign": "Taurus", "lord": "Venus"},
|
||||
"wealth_promise_strength": {
|
||||
"level": "strong",
|
||||
"primary_source": "dhana_yogas",
|
||||
"supporting_sources": ["dhana", "lakshmi"],
|
||||
"source_diversity": 2,
|
||||
"count": 1,
|
||||
},
|
||||
"sodhita_finance_support": {
|
||||
"level": "obstructive",
|
||||
"source": "ashtakavarga_sodhita_bridge_v1",
|
||||
"signals": ["sodhita_wealth_friction"],
|
||||
"target_houses": [2, 11],
|
||||
"raw_scores": {"2": 18, "11": 17},
|
||||
},
|
||||
"kakshya_finance_support": {
|
||||
"level": "obstructive",
|
||||
"source": "kakshya_finance_bridge_v1",
|
||||
"signals": ["kakshya_finance_friction"],
|
||||
"average_strength": 4.1,
|
||||
},
|
||||
},
|
||||
[],
|
||||
)
|
||||
|
||||
assert base["dominant_label"] == "public_wealth_status"
|
||||
assert weighted["dominant_label"] == "public_wealth_status"
|
||||
assert weighted["score"] == base["score"] - 4
|
||||
|
||||
|
||||
def test_collect_strict_evidence_finance_derives_wealth_promise_from_dhana_yogas() -> None:
|
||||
result = {
|
||||
"modules": {
|
||||
|
||||
Reference in New Issue
Block a user