Skip to content
Documentation · all sections

Annual Charts & Sensitive Points

panchang · v5.4.0 · MIT

Varshaphala with 27 Sahams, Tithi Pravesha, Arudha padas, Hora/Ghati/Bhava/Sripati lagnas, Upagrahas, and Argala.

Varshaphala — the Tajik annual chart

import { computeVarshaphala, ALL_SAHAM_NAMES } from 'panchang-ts';

// Annual chart for the Nth solar return.
const v = computeVarshaphala(birth, 30, loc);
v.solarReturnInstant;                // 2025-08-14T21:58:09.170Z
v.varshaLagna.rashi.name;            // 'Mithuna'
v.muntha.rashi; v.muntha.house;      // 0, 11 — muntha = (natalLagnaRashi + 30) mod 12
v.yearLord;                          // 'Mercury' — strongest of 4 candidates by Shadbala
v.sahams.Punya.house;                // 5
v.sahams.Vivaha.rashi;               // 7
ALL_SAHAM_NAMES.length;              // 27

There are 27 Sahams: Punya, Vidya, Yasas, Mitra, Karma, Vivaha, Putra, Roga, Marana, Rajya, Raja, Bandhu, Dharma, Gnati, Apamrityu, Bhratri, Matri, Pitri, Sama, Bandhana, Karyasiddhi, Vyapara, Sastra, Asha, Labha, Susha, Tapas. The list is exported as ALL_SAHAM_NAMES in TypeScript and AllSahamNames() in Go. In TypeScript the SahamName and SahamFormula types are there for building your own tables. Go has types.SahamName but no formula type.

The year lord is the strongest of the four candidates by Shadbala, so the 5.4 correction to Nathonatha Bala (see Strength & Yogas) can change it. For the birth above, 3 of the first 40 years change lord: year 7 from the Moon to Venus, year 11 from the Moon to Mercury, and year 37 from Jupiter to the Moon. Year 30 is still Mercury. Recompute any year lord you stored.

Tithi Pravesha

import { computeTithiPravesha } from 'panchang-ts';

// Annual chart cast when the Sun-Moon separation returns to its natal value,
// at the match near the solar return that has the Sun in its natal sidereal sign.
const tp = computeTithiPravesha(birth, 30, loc);
tp.natalTithi === tp.praveshTithi;   // true
tp.praveshInstant;                   // 2025-08-13T17:33:40.062Z
tp.natalTithi;                       // 19

When two matches near the solar return have the Sun in its natal sign, the nearer one is taken. When neither does, which can happen because the Sun crosses Vrischika, Dhanu or Makara in less than the 29.5 days between matches, the nearer one is taken anyway and the Sun is in an adjacent sign. The match is found to about 1e-4° of separation, so praveshTithi equals natalTithi except when the natal separation lies that close to a tithi boundary.

Arudha padas

import { computeArudhas } from 'panchang-ts';

// Image/reflection of each bhava. Arudha[0] = Arudha Lagna (AL).
const a = computeArudhas(d1);
a[0]!.bhava;            // 1 — AL
a[0]!.arudhaRashi;      // 3 (0..11)
a[6]!.bhava;            // 7 — Darapada (spouse pada)
a[6]!.arudhaRashiName;  // 'Kumbha'

Special lagnas

import {
  computeHoraLagna, computeGhatiLagna, computeBhavaLagna, computeSripatiLagna,
} from 'panchang-ts';

// Time-derived sensitive points from sunrise on/before birth.
computeHoraLagna(birth, loc).rashi.name;     // 'Makara' — 30°/hour
computeGhatiLagna(birth, loc).rashi.name;    // 'Simha'  — 75°/hour
computeBhavaLagna(birth, loc).rashi.name;    // 'Tula'   — 15°/hour
computeSripatiLagna(birth, loc);             // = natal lagna (cusp 1)

Ask for the Sripati cusps and you also get bhavas 2 to 12: four angular cusps with the intermediate ones trisected between them. They come back at every latitude, where Placidus cusps can fail beyond the polar circles. There, though, the four angles come out of order for part of the day, and the trisected cusps then overlap. In Go they come from a method of their own, ComputeSripatiLagnaWithCusps, new in 5.4.

// Sripati cusps 2–12 are opt-in.
const sripati = computeSripatiLagna(birth, loc, 'lahiri', 'en', { includeCusps: true });
sripati.cusps;  // number[12] of bhava madhyas; cusps[0/3/6/9] = ASC/IC/DSC/MC
                // [184.99, 215.61, 246.24, 276.86, …]

Upagrahas

import { computeUpagrahas } from 'panchang-ts';

// Gulika and Mandi (rising ascendant at the start / midpoint of Saturn's
// segment), plus the Sun-derived Dhuma, Vyatipata, Parivesha, Indrachapa
// and Upaketu.
const u = computeUpagrahas(birth, loc);
u.gulika.longitude;  // 203.39
u.gulika.rashi;      // 6
u.gulika.house;      // 1

Argala

import { computeArgala } from 'panchang-ts';

// Planets in 2/4/11 from a bhava form Argala (intervention);
// 3/10/12 form Virodhargala (counter). Each planet hits exactly 6 of 12 bhavas.
const arg = computeArgala(d1);
arg[0]!.argala.map(p => p.planet);        // ['Mercury', 'Jupiter']
arg[0]!.virodhargala.map(p => p.planet);  // ['Sun', 'Mars', 'Venus']

Trikonargala adds the 5/9 trine and is opt-in. Ketu reverses it: the 5th-from placement becomes the virodhaka and the 9th-from becomes the source.

const argT = computeArgala(d1, { includeTrikonargala: true });
argT[0]!.trikona!.sources.map(p => p.planet);      // ['Saturn']
argT[0]!.trikona!.virodhakas;                      // []