Files
Jyotisha/frontend/src/lib/birth-rectification-payload.ts
T
Jesse_Chen b6a70aa7df fix(ayanamsa): pin Lahiri on reference sets and add a user setting
Product default stays Raman. Public-case revalidation and fixture dashas now pass --ayanamsa lahiri; profiles store the four selectable values.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-03 16:33:46 +08:00

41 lines
1.6 KiB
TypeScript

import { chinaLocations } from "@/data/china-locations";
import { resolveAyanamsa, type AyanamsaName } from "@/lib/ayanamsa";
import { finiteBirthNumber, resolveMissingBirthTimezoneOffset } from "@/lib/birth-profile-timezone";
export type BirthRectificationProfile = {
date?: string;
time?: string;
provinceCode?: string;
cityCode?: string;
districtCode?: string;
latitude?: number | null;
longitude?: number | null;
timezoneId?: string;
timezoneOffset?: number | null;
ayanamsa?: AyanamsaName | string | null;
};
export async function payloadFromProfile(profile: BirthRectificationProfile) {
if (!profile.date || !profile.time) return null;
const resolved = await resolveMissingBirthTimezoneOffset(profile, {
preferredTime: profile.time,
}) as BirthRectificationProfile;
const province = chinaLocations.country.provinces.find((item) => item.code === profile.provinceCode);
const city = province?.cities.find((item) => item.code === profile.cityCode);
const district = city?.districts.find((item) => item.code === profile.districtCode);
const location = district ?? city;
const lat = finiteBirthNumber(resolved.latitude) ?? location?.center[1] ?? null;
const lon = finiteBirthNumber(resolved.longitude) ?? location?.center[0] ?? null;
const tz = finiteBirthNumber(resolved.timezoneOffset) ?? (location ? chinaLocations.country.timezone : null);
if (lat === null || lon === null || tz === null) return null;
return {
birth_time: `${profile.date} ${profile.time}`,
uncertainty_minutes: 30,
step_minutes: 2,
lat,
lon,
tz,
ayanamsa: resolveAyanamsa(resolved),
};
}