Dasha System (Vimsottari)¶
The Vimsottari Dasha is the primary planetary period system in Jyotish. It assigns 120 years across 9 planets based on the Moon's nakshatra at birth. Each planet rules a Maha Dasha (major period) which is further subdivided into Bhukti (sub-period), Antara (sub-sub), and Pratyantara (sub-sub-sub).
Planet Periods¶
| Planet | Maha Dasha Duration |
|---|---|
| Ketu | 7 years |
| Venus | 20 years |
| Sun | 6 years |
| Moon | 10 years |
| Mars | 7 years |
| Rahu | 18 years |
| Jupiter | 16 years |
| Saturn | 19 years |
| Mercury | 17 years |
| Total | 120 years |
DasaLevel Enum¶
| Value | Level |
|---|---|
MAHA |
Major period (~years) |
BHUKTI |
Sub-period (~months) |
ANTARA |
Sub-sub-period (~weeks) |
PRATYANTARA |
Sub-sub-sub-period (~days) |
Functions¶
get_nakshatra_ruler¶
Returns the planet code that rules the given nakshatra (1–27). The sequence of rulers repeats the 9-planet cycle in the order: Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury.
calculate_dasa_start_planet_and_fraction¶
calculate_dasa_start_planet_and_fraction(
nakshatra_number: int,
nakshatra_pada: int
) -> tuple[str, float]
Determines the ruling planet of the first Maha Dasha after birth and the fraction of that period already elapsed at birth (based on which pada the Moon occupied within its nakshatra).
calculate_current_dasa_period¶
calculate_current_dasa_period(
birth_date: date,
current_date: date,
birth_nakshatra: int
) -> DasaPeriod
Computes the currently running dasha period at current_date.
Returns: DasaPeriod with fields:
| Field | Type | Description |
|---|---|---|
maha_dasha |
str |
Current Maha Dasha planet code |
bhukti |
str |
Current Bhukti planet code |
antara |
str |
Current Antara planet code |
maha_start |
date |
Maha Dasha start date |
maha_end |
date |
Maha Dasha end date |
bhukti_start |
date |
Bhukti start date |
bhukti_end |
date |
Bhukti end date |
get_dasa_sequence_from_planet¶
Returns the ordered sequence of sub-period planets and their duration (as a fraction of the parent period) starting from the given planet.
levels=1returns Bhukti sequence within a Maha Dasha.levels=2returns Antara sequence.
calculate_dasa_change_dates¶
calculate_dasa_change_dates(
birth_date: date,
birth_nakshatra: int,
future_years: int = 10
) -> list[dict]
Projects all Maha Dasha and Bhukti transitions for the next future_years years from today. Useful for predictive timeline generation.
Returns: List of dicts with planet, level, start_date, end_date.
get_dasa_interpretation¶
Returns a narrative interpretation string for a planet's Dasha at the given level (Maha / Bhukti / Antara).
Sequence Example¶
For a native born with Moon in Rohini (nakshatra 4, ruled by Moon):
The fraction elapsed at birth is derived from how deep into Rohini the Moon is (0–13°20′ span).
Precision & Accuracy vs Traditional Platforms¶
Why NDAstro gives different dates¶
NDAstro API uses NASA JPL DE440T via Skyfield for all Moon position calculations — the most accurate modern ephemeris. Traditional platforms (JHora, DrikPanchang, AstroSage) share two systematic deviations that cause their dasa dates to be earlier than NDAstro’s:
Deviation 1 — IAU-1940 Lahiri constants: They use Swiss Ephemeris SIDM_LAHIRI_1940
(epoch constants published in 1940) instead of modern SIDM_LAHIRI, producing an ayanamsa
~53 arcsec lower. A lower ayanamsa increases the sidereal Moon longitude by 53 arcsec.
Deviation 2 — Double Delta-T (software bug): Their SE wrapper pre-converts birth UT
to TT manually, then calls swe.calc_ut() which adds Delta-T again (~69 s in 2025).
This advances the Moon by a further ~43 arcsec.
Combined: ~96 arcsec extra Moon advance = ~3.9 days earlier Sun Mahadasa start.
Expected offsets from NDAstro "lahiri" mode¶
| Dasa Lord | Period | Offset (traditional platforms vs NDAstro) |
|---|---|---|
| Sun | 6 years | ~3.9 days earlier |
| Mars / Ketu | 7 years | ~4.6 days earlier |
| Moon | 10 years | ~6.5 days earlier |
| Jupiter | 16 years | ~10.5 days earlier |
| Rahu | 18 years | ~11.8 days earlier |
| Saturn | 19 years | ~12.4 days earlier |
| Venus | 20 years | ~13.1 days earlier |
NDAstro’s "lahiri" dates are astronomically correct. Traditional platforms’ dates are
systematically shifted by the older epoch constants and the double-DeltaT bug.
true_lahiri compatibility mode¶
To reproduce JHora/DrikPanchang/AstroSage dasa dates for client comparison, pass
ayanamsa="true_lahiri" to the dasa endpoint. This replicates both deviations
(Skyfield IERS Delta-T + IAU-1940 constants) and produces dates within ~4 hours of
traditional platforms. No additional dependencies are required.