Roughly every three years the Hindu lunisolar calendar inserts an extra month. Understanding why is the clearest way to see how the calendar reconciles two incompatible cycles.
The arithmetic problem
A lunar month is about 29.53 days, so twelve of them come to roughly 354 days. A solar year is about 365.24 days. The lunar year falls behind by about 11 days annually.
Left uncorrected, festivals would drift through the seasons — which is exactly what happens in a purely lunar calendar. Since Hindu festivals are tied to seasons as well as lunar phases, the drift has to be absorbed.
The correction
Every two to three years an extra lunar month, adhika maas, is inserted. The accumulated 11-day deficits add up to roughly a full lunar month, and inserting one resets the alignment.
How it is identified
A lunar month normally contains exactly one sankranti — one solar ingress into a new zodiac sign. When a lunar month contains no sankranti at all, that month is adhika: an intercalary month. It takes the name of the following month with the prefix "Adhika".
The inverse case exists too and is much rarer: a lunar month containing two sankrantis is kshaya, a lost month. These occur only in certain centuries and are a genuine edge case worth testing for.
Why it matters to your code
Most festivals are skipped during an adhika maas — the rule declares it explicitly. If your application computes "the second month after Chaitra" arithmetically, it will land on the wrong month in an adhika year and place festivals a month out.
This is why our rules declare a month system and an adhika policy rather than counting months. The rule states which month it targets and whether an adhika maas should be skipped; the engine resolves that against real month boundaries.