Computes all 10 Tajika Saham (sensitive points) for a Varshaphal solar return chart. Sahams are the Tajika equivalent of Arabic Parts — mathematically derived zodiac points that focus the annual horoscope on specific life themes.
SECTION: WHAT THIS TOOL COVERS
Saham formula: (A - B + Ascendant) % 360, with a conditional +30° correction applied when the Ascendant does not fall in the forward zodiacal arc from B to A. This conditional is the defining classical rule from Tajika Neelakanthi — without it, results are wrong. Day and night formulas differ: the Minuend and Subtrahend swap based on whether the solar return falls during daytime or nighttime at the birth location. Punya Saham (Fortune) is always computed first because Yashas (Fame) and Mahatmya (Status) use it as an operand. The Saham lord (planet ruling the sign where the Saham falls) is the Sahamesha — its strength, house placement, and Tajika aspects to the Varsha Ascendant determine whether the theme manifests positively or is obstructed.
10 Sahams returned:
punya — Fortune and Luck (Moon-Sun day / Sun-Moon night)
vidya — Education and Learning (Sun-Jupiter day)
yashas — Fame and Reputation (Jupiter-Punya day) — uses Punya as operand
mitra — Friends and Allies (Jupiter-Venus day)
mahatmya — Greatness and Status (Punya-Mars day) — uses Punya as operand
asha — Desires and Fulfillment (Saturn-Venus day)
karmakarya — Action and Profession (Mars-Mercury day)
vyapara — Business and Trade (Mars-Saturn day)
vivaha — Marriage and Relationships (Venus-Saturn day)
santapa — Sorrow and Stress (Saturn-Moon day)
SECTION: WORKFLOW
BEFORE: RECOMMENDED — asterwise_get_varshaphal — understand the base solar return chart (year lord, Muntha, Varsha Ascendant) before interpreting Saham lords. The Saham is meaningless without knowing which house it occupies from the Varsha Ascendant.
AFTER: asterwise_get_varshaphal_harsha_bala — assess the Saham lord's positional happiness score to determine ease or difficulty of manifestation.
SECTION: INPUT CONTRACT
Same as asterwise_get_varshaphal — BirthData plus target_year.
target_year (required int): The Gregorian calendar year of the solar return. Not age — the civil year (e.g. 2026). Feeding age instead of year silently produces the wrong return.
time (required): Solar return Ascendant is time-sensitive. Accurate birth time is required for reliable Saham interpretation.
SECTION: OUTPUT CONTRACT
data.target_year (int — calendar year of the solar return)
data.ayanamsa (string — ayanamsa system used, e.g. 'lahiri')
data.solar_return_utc (string — ISO UTC timestamp of solar return moment)
data.is_day_return (bool — true if solar return occurs between sunrise and sunset; determines which Saham formula variant is used)
data.varshaphal_ascendant_longitude (float — Varsha Ascendant in degrees; all 10 Saham longitudes are computed relative to this)
data.total (int — always 10)
data.sahams[] — 10 objects in order [punya, vidya, yashas, mitra, mahatmya, asha, karmakarya, vyapara, vivaha, santapa]:
slug (string — lowercase key, e.g. 'punya')
name (string — full display name, e.g. 'Punya Saham')
theme (string — life area, e.g. 'Fortune and Luck')
longitude (float — Saham longitude in degrees 0–360)
rashi_index (int — 0–11, 0=Mesha)
rashi (string — Sanskrit sign name, e.g. 'Mesha')
degree_in_sign (float — degrees within the sign)
saham_lord (string — classical lord of the sign where Saham falls)
formula_used (string — describes whether day or night formula was applied and which planets were operands, e.g. 'day: Moon - Sun + Asc')
data.classical_note (string — methodology note)
SECTION: RESPONSE FORMAT
response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.
SECTION: COMPUTE CLASS
SLOW_COMPUTE — internally runs the full solar return computation (binary-search Sun longitude + house computation) before deriving Sahams.
SECTION: ERROR CONTRACT
INVALID_PARAMS (local — caught before upstream call): None — BirthData Pydantic only.
INVALID_PARAMS (upstream): None — upstream rejection surfaces as MCP INTERNAL_ERROR.
INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR
Edge cases:
— Day/night determination uses sunrise/sunset at the birth coordinates for the solar return date. Polar latitudes where sunrise cannot be computed → MCP INTERNAL_ERROR.
— target_year is a Gregorian year, not age — always verify the caller passes the civil year.
SECTION: DO NOT CONFUSE WITH
asterwise_get_varshaphal — returns the full base solar return chart including Muntha, year lord, and planet positions; Saham points are not included there.
asterwise_get_varshaphal_harsha_bala — scores planet positional happiness; this tool computes zodiac points, not planet positions.
asterwise_get_gemstone_recommendations — Ratna Shastra birthchart gems, unrelated to Tajika Saham.