Ascendant
Developer guides

Ashtakavarga

Calculate Bhinnashtakavarga, Sarvashtakavarga, reduced tables, and Shodhya Pinda from shared placements, and read them by sign and house.

Ashtakavarga is a classical Parashari scoring system. Each of eight contributors, the Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, and the Lagna, gives a benefic point, called a bindu, to some of the twelve signs. The scores for a sign are then added up in several ways.

Ascendant calculates the whole system from the Placements you already have. This guide runs the calculation, explains each table in the result, and shows how to read a score by sign and by house.

What goes in and what comes out

SAV.calculate takes only the placements. It reads the sign of each of the seven classical planets and of the Lagna. Rahu and Ketu take no part. It needs no moment or location, because everything it uses is already in the placements.

Result fieldWhat it holds
bhinnaThe Bhinnashtakavarga (BAV): twelve sign scores for each of the eight entities.
sarvaThe Sarvashtakavarga (SAV): twelve sign scores, the sum of the seven planetary BAVs. The Lagna is not included.
reducedThe seven planetary BAVs after Trikona and then Ekadhipatya reduction.
shodhya_pindaFor each planet, its Rashi Pinda, Graha Pinda, and their sum, the Shodhya Pinda.
totalsThe total of each BAV table, plus the SAV total.
provenanceThe method that made the result: Parashari bphs-bav-trikona-ekadhipatya.

Calculate

import { Chart, Runtime, SAV } from "astro-ascendant";
import { DateTime, ManagedRuntime } from "effect";

const runtime = ManagedRuntime.make(Runtime.MainLayer);

const located = Chart.LocatedMoment.make({
  moment: Chart.Moment.make({ date: DateTime.makeUnsafe("2000-01-01T12:00:00Z") }),
  latitude: 12.9716,
  longitude: 77.5946,
});

const { placements, charts } = await runtime.runPromise(Chart.generate(located));
const ashtakavarga = await runtime.runPromise(SAV.calculate(placements));

Read the tables

Every table is keyed by sign name. A BAV table is keyed by entity first:

ashtakavarga.bhinna.Sun.Leo; // 6
ashtakavarga.bhinna.Lagna.Cancer; // 6
ashtakavarga.sarva.Leo; // 34

For the birth above, these are the scores by sign:

SignSun BAVLagna BAVSAV
Aries4429
Taurus5322
Gemini1222
Cancer3626
Leo6334
Virgo5533
Libra5330
Scorpio4430
Sagittarius5528
Capricorn2421
Aquarius4532
Pisces4530

The other six planets have their own BAV tables under bhinna, keyed the same way.

Checksums

Each BAV table totals a fixed number, and the SAV totals 337. The totals field returns the sums so you can display or assert them:

EntityTotal
Sun48
Moon49
Mars39
Mercury54
Jupiter56
Venus52
Saturn39
Lagna49
SAV337

Ascendant checks these against the classical values on every calculation. If a table does not match, the calculation fails with a typed SAVCalculationError and names the entity, the total it found, and the total it expected, so you never receive a table that breaks the rules.

Reduced tables and Shodhya Pinda

reduced applies two reductions to the seven planetary BAVs, Trikona first and then Ekadhipatya. The Ekadhipatya step looks at each pair of signs one planet rules and reduces it by whether the seven planets occupy them. Reduced scores are smaller, and many signs drop to zero:

ashtakavarga.reduced.Sun;
// Leo: 2, Virgo: 3, Libra: 4, Scorpio: 1, Sagittarius: 1, Aquarius: 3,
// and 0 in every other sign

shodhya_pinda builds on the reduced tables. For each planet it holds a Rashi Pinda (weighted by signs), a Graha Pinda (weighted by the signs the seven planets occupy), and their sum, the Shodhya Pinda:

PlanetRashi PindaGraha PindaShodhya Pinda
Sun11361174
Moon10043143
Mars12378201
Mercury9662158
Jupiter55863
Venus13069199
Saturn59564

Use these as they are. A Shodhya Pinda is a weighted total for one planet, not a probability and not a prediction.

Score a house

Ashtakavarga scores belong to signs. To score a house, find the sign of that house in D1 and look it up:

const [d1] = charts;

const tenth = d1.houses[10].sign; // "Pisces"
ashtakavarga.sarva[tenth]; // 30
ashtakavarga.bhinna.Sun[tenth]; // 4

To score all twelve houses at once:

const houseScores = Object.entries(d1.houses).map(([house, { sign }]) => ({
  house: Number(house),
  sign,
  sav: ashtakavarga.sarva[sign],
}));

For the birth above, with Gemini rising, the SAV scores of houses 1 to 12 are 22, 26, 34, 33, 30, 30, 28, 21, 32, 30, 29, and 22. The highest is the third house, Leo, at 34.

Houses and house systems

The sign scores do not depend on the house system. They were identical across all 13 house systems for this birth. The ayanamsa can change them, because it moves each planet's longitude and so can move it into a different sign. Which sign a house maps to does depend on the house system. With a cusp-based system such as Placidus, a house starts at a cusp and houses[n].sign is the sign of that cusp. For Parashari work, where each house is one whole sign, use the Lahiri and whole-sign settings from Choose a school and settings.

Terms in this guide

TermMeaning
BinduOne benefic point assigned to a sign by one contributor. A sign's score is its number of bindus.
BAVThe twelve sign scores for one entity. There are eight tables.
SAVThe sum of the seven planetary BAV tables. It excludes the Lagna.
Reduced BAVThe seven planetary BAVs after Trikona and Ekadhipatya reduction.
Shodhya PindaA planet's weighted total: its Rashi Pinda plus its Graha Pinda.

On this page