“আজ একাদশী তিথি”—এই তথ্য এবং “আজ একাদশীর উপবাস”—এই সিদ্ধান্ত এক নয়। প্রথমটি Sun–Moon angular separation থেকে পাওয়া astronomical state; দ্বিতীয়টি sunrise, অরুণোদয়, তিথির দৈর্ঘ্য, পরের sunrise, দ্বাদশী ও নির্বাচিত পরম্পরার বিধি মিলিয়ে পাওয়া observance result।
একই একাদশী তিথিতে আলাদা উপবাস-দিন কেন?
তিথির কোনো midnight boundary নেই। চন্দ্র ও সূর্যের নিরয়ণ দ্রাঘিমার পার্থক্য প্রতি ১২° অতিক্রম করলে নতুন তিথি শুরু হয়। ফলে একাদশী সকাল, বিকেল বা গভীর রাতে শুরু/শেষ হতে পারে। একটি একাদশী:
- একটি sunrise স্পর্শ করতে পারে;
- দুটি consecutive sunrise স্পর্শ করতে পারে;
- দুই sunrise-এর মাঝখানে শুরু ও শেষ হয়ে কোনো sunrise-ই স্পর্শ না করতে পারে;
- sunrise-এ চললেও তার ৯৬ মিনিট আগে অরুণোদয়ে দশমী থাকতে পারে;
- প্রথম sunrise-এর পর ৪৫ দণ্ড অতিক্রম করে গভীর রাত পর্যন্ত থাকতে পারে;
- পরের দ্বাদশী খুব ছোট বা বিশেষ নক্ষত্র-যোগযুক্ত হতে পারে।
এই pattern-গুলোর জন্য school-specific সিদ্ধান্ত আলাদা হয়। একটি ভালো app সব profile-এর ফল পাশাপাশি দেখাবে, কিন্তু “একটিই সর্বজনীন সঠিক তারিখ” বলে অন্যগুলো লুকাবে না।
প্রথম স্তর: একটিই astronomical timeline
School নির্বাচন করার আগে calculation engine একটি নিরপেক্ষ timeline তৈরি করবে:
TithiIndex = floor(Elongation ÷ ১২°) + ১
একাদশী = index ১১ অথবা ২৬
দ্বাদশী = index ১২ অথবা ২৭
শুক্লপক্ষ ও কৃষ্ণপক্ষের একাদশী আলাদা index হলেও rule-engine-এ দুটিকেই normalized lunar-day number ১১ হিসেবে রাখা যায়। Root solver দিয়ে একাদশীর exact start ও end absolute instant বের করুন। তারপর প্রতিটি candidate local date-এর:
- Project sunrise;
- অরুণোদয় = sunrise − ৯৬ মিনিট;
- পরবর্তী sunrise;
- sunrise + ৪৫ দণ্ড;
- দ্বাদশীর start/end এবং Hari-vāsara end;
- প্রাসঙ্গিক nakṣatra interval
একবার calculate করুন। School profiles কেবল এই একই timeline-এর ওপর পৃথক predicates প্রয়োগ করবে। কোনো profile-এর জন্য lunar longitude বা তিথির boundary বদলানো যাবে না।
প্রয়োজনীয় পরিভাষা
| শব্দ | Calculation-এ অর্থ |
|---|---|
| উদয়ব্যাপিনী | নির্বাচিত local sunrise-এ তিথি উপস্থিত |
| অরুণোদয় | Project sunrise-এর ৯৬ absolute minutes বা ৪ দণ্ড আগে |
| দশমী-বিদ্ধা | নির্বাচিত Vaiṣṇava profile-এর critical pre-sunrise moment/window-এ দশমীর স্পর্শ |
| শুদ্ধ একাদশী | Profile-defined impurity test উত্তীর্ণ একাদশী |
| ক্ষয় | একাদশী দুই sunrise-এর মাঝখানে শুরু ও শেষ; কোনো sunrise স্পর্শ করে না |
| বৃদ্ধি | একাদশী দুই consecutive sunrise স্পর্শ করে |
| মহাদ্বাদশী | বিশেষ tithi বা nakṣatra condition-এ উপবাস দ্বাদশীতে স্থানান্তরিত |
| পারণ | উপবাসের পর অনুমোদিত সময়ে ব্রতভঙ্গ |
| Hari-vāsara | দ্বাদশীর প্রথম চতুর্থাংশ; selected profile-এ পারণ-বর্জিত interval |
“বিদ্ধা”র সূক্ষ্ম শ্রেণি—vedha, ativedha, mahāvedha—কিছু source-এ অরুণোদয় window-এর কত অংশ দশমী দ্বারা স্পর্শিত তার ওপর নির্ভর করে। Project যদি এই subtypes দেখায়, threshold-গুলো profile metadata-তে স্পষ্ট করুন; একটি generic boolean-এ সবকিছু হারাবেন না।
তিনটি project profile এক নজরে
| Profile ID | Primary test | Later-day trigger |
|---|---|---|
smarta-sunrise-v1 | একাদশী local sunrise-এ আছে কি না | দুই-day/ক্ষয় case-এর স্মার্ত tie-break |
goswami-arunodaya-v1 | Sunrise এবং ৯৬ মিনিট আগের অরুণোদয় | দশমী-বিদ্ধা, বৃদ্ধি বা Mahādvādaśī override |
nimbarka-45-danda-v1 | প্রথম sunrise এবং sunrise+৪৫ দণ্ড boundary | একাদশী ৪৫ দণ্ড অতিক্রম করলে পরের দিন |
নাম নয়, profile ID result-এ সংরক্ষণ করুন। ভবিষ্যতে authority বা boundary interpretation বদলালে v2 তৈরি করুন; পুরোনো v1 silentভাবে পরিবর্তন করলে historical export পুনরুৎপাদন করা যাবে না।
স্মার্ত profile: sunrise প্রথম anchor
Project-এর basic স্মার্ত profile-এ যে local date-এর sunrise-এ একাদশী চলমান থাকে, সেই দিন fasting candidate। সাধারণ pattern:
- একাদশীর start/end absolute instant নিন;
- যে প্রথম sunrise
[EkadashiStart, EkadashiEnd)-এর মধ্যে পড়ে তা খুঁজুন; - একটি sunrise থাকলে সেই local date নির্বাচন করুন;
- দুটি sunrise থাকলে profile-এর first-day/alternate-day rule প্রকাশ করুন;
- কোনো sunrise না থাকলে kṣaya fallback প্রয়োগ করুন;
- পরের দিন dvādaśī-তে পারণ window তৈরি করুন।
Public calendar-এ দুই-day case হলে “স্মার্ত” ও “বিকল্প/বৈষ্ণব” আলাদা label দেখানো যায়। কোনো website-এর first/second day convention copy করার আগে তার target community ও rule source মিলিয়ে নিন।
গোস্বামী/গৌড়ীয় profile: অরুণোদয়-শুদ্ধি ও Mahādvādaśī
এই project-এর গোস্বামী profile sunrise-এর আগে চার দণ্ড বা ৯৬ মিনিটের অরুণোদয় instant পরীক্ষা করে:
Pure(D) = Ekadashi.Contains(Arunodaya(D))
DashamiViddha(D) = Dashami.Contains(Arunodaya(D))
একাদশী sunrise-এর কয়েক মিনিট আগে শুরু হলেও অরুণোদয়ে দশমী চলতে পারে। তখন sunrise-state “একাদশী”, কিন্তু profile অনুযায়ী দিনটি দশমী-বিদ্ধা; fasting পরের eligible day বা Mahādvādaśī-তে যেতে পারে।
দুই sunrise-এ একাদশী থাকলে later day-কে Dvādaśī-yukta preference দেওয়া হতে পারে। আবার একাদশী কোনো sunrise স্পর্শ না করলে, অথবা dvādaśī নিজেই অস্বাভাবিকভাবে ক্ষয়প্রাপ্ত হলে, Mahādvādaśī classification আগে করতে হবে। তাই implementation order:
→ Arunodaya purity
→ sunrise count
→ school tie-break
→ fasting date
→ Pāraṇa window
শুধু if (tithiAtSunrise == Ekadashi) ব্যবহার করলে Dashami-viddha, Unmīlanī, Vyañjulī বা Trispṛśā case ধরা পড়বে না।
নিম্বার্ক profile: ৪৫ দণ্ড boundary
এই project-এ printed Bengali Panjika comparison-এর জন্য ব্যবহৃত nimbarka-45-danda-v1 profile-এর operational rule:
৪৫ দণ্ড = ১,০৮০ মিনিট = ১৮ ঘণ্টা
Cutoff(D) = Sunrise(D) + ৪৫ absolute দণ্ড
যদি EkadashiEnd > Cutoff(D), later candidate day
অন্যথায় first sunrise day
উদাহরণস্বরূপ, কোনো দিনের sunrise ৬:০০ AM হলে ৪৫ দণ্ড boundary রাত ১২:০০। একাদশী বিকেল ৪টায় শেষ হলে first day; রাত ২টায় শেষ হলে এই profile later day নির্বাচন করতে পারে—যদিও পরের sunrise-এর আগেই একাদশী শেষ হয়ে যায়। এ কারণেই নিম্বার্ক result স্মার্ত ও গোস্বামী result থেকে কখনও আলাদা হয়।
Exact equality—EkadashiEnd == Cutoff—এর policy configuration-এ রাখুন। এই article-এর sample > ব্যবহার করে; printed authority যদি boundary-touch later day হিসেবে নেয়, >= profile version তৈরি করুন। Floating-point degree equality নয়, solved instants-এর UTC ticks compare করুন।
ক্ষয়, বৃদ্ধি ও দুই সূর্যোদয়ের pattern
| Pattern | Timeline | কেন special rule লাগে |
|---|---|---|
| Ordinary | একাদশী একটি sunrise স্পর্শ করে | Primary school test যথেষ্ট হতে পারে |
| Dashami-viddha | অরুণোদয়ে দশমী, sunrise-এ একাদশী | গোস্বামী date later হতে পারে |
| Kṣaya | এক sunrise-এর পরে শুরু, next sunrise-এর আগে শেষ | কোনো sunrise candidate নেই |
| Vṛddhi | একাদশী দুই sunrise স্পর্শ করে | First বনাম second-day preference |
| Late Ekadashi | First sunrise-এ আছে, ৪৫ দণ্ডের পরে শেষ | Nimbarka profile later day নিতে পারে |
| Dvādaśī-kṣaya | দ্বাদশী sunrise-গুলোর মাঝে দ্রুত শেষ | Pāraṇa ও Mahādvādaśī special handling |
Sunrise count করার সময় range অন্তত একাদশী শুরুর আগের local date থেকে শেষের পরের দুই date পর্যন্ত নিন। শুধু civil date of EkadashiStart এবং পরের date পরীক্ষা করলে timezone-এর কারণে candidate বাদ পড়তে পারে।
মহাদ্বাদশী: fasting-day selection-এর override
গোস্বামী/গৌড়ীয় calculation-এ কিছু বিশেষ tithi বা nakṣatra pattern-এ একাদশীর উপবাস দ্বাদশীতে হয়। বহুল উল্লিখিত আট প্রকার:
| নাম | Core trigger-এর সংক্ষিপ্ত ধারণা | Engine input |
|---|---|---|
| উন্মীলনী (Unmīlanī) | একাদশীর বৃদ্ধি/দুই sunrise pattern | Ekadashi interval + sunrises |
| ব্যঞ্জুলী (Vyañjulī) | দীর্ঘ দ্বাদশী, বিশেষ sunrise-spanning condition | Dvadashi interval + sunrises |
| ত্রিস্পৃশা (Trispṛśā) | একাদশী–দ্বাদশী–ত্রয়োদশীর বিশেষ তিন-স্পর্শ pattern | তিন তিথির transitions |
| পক্ষবর্ধিনী (Pakṣavardhinī) | পরবর্তী অমাবস্যা বা পূর্ণিমার বৃদ্ধি | Fortnight-এর later tithi spans |
| জয়া (Jayā) | শুক্লপক্ষের relevant দিন ও পুনর্বসু-যোগ | Pakṣa + Punarvasu interval |
| বিজয়া (Vijayā) | শুক্ল দ্বাদশীতে শ্রবণা-যোগ | Dvadashi + Shravana |
| জয়ন্তী (Jayantī) | শুক্ল দ্বাদশীতে রোহিণী-যোগ | Dvadashi + Rohini |
| পাপনাশিনী (Pāpanāśinī) | শুক্ল দ্বাদশীতে পুষ্যা-যোগ | Dvadashi + Pushya |
উপরের table detection-এর outline, সম্পূর্ণ śāstric adjudication নয়। “যোগ” বলতে sunrise, whole day, sunset বা নির্দিষ্ট overlap—কোন threshold নেওয়া হবে তা authority-specific। Hari-bhakti-vilāsa বা নির্বাচিত institutional calendar থেকে exact predicate লিখে profile test fixture বানান। নাম দেখে আন্দাজে event বসাবেন না।
Mahādvādaśī detector fasting-date selector-এর আগে চলবে, কিন্তু raw tithi result বদলাবে না। Daily page-এ লেখা উচিত: “আজ তিথি: দ্বাদশী; উপবাস: Vijaya Mahādvādaśī।” এতে astronomical date ও ritual observance দুইটিই সত্য থাকে।
পারণ: fasting date নির্বাচনের পরে নতুন calculation
পারণ শুধু “পরদিন সকালে” নয়। একটি সাধারণ Vaiṣṇava profile-এ:
HariVasaraEnd = DvadashiStart + DvadashiLength ÷ ৪
BasicStart = max(ParanaDaySunrise, HariVasaraEnd)
BasicEnd = min(DvadashiEnd, PratahEnd)
PratahEnd হলো sunrise-to-sunset daylight-এর প্রথম পঞ্চমাংশের end। যদি BasicStart < BasicEnd, এটি preferred window হতে পারে। না হলে school-specific fallback দরকার—যেমন dvādaśī শেষ হওয়ার আগে short window, Madhyāhna এড়িয়ে Aparāhna, অথবা dvādaśī sunrise-এর আগেই শেষ হলে exception।
অতএব parana result-এ একটিমাত্র start/end নয়, reason code রাখুন:
AFTER_SUNRISE;AFTER_HARI_VASARA;BEFORE_DVADASHI_END;WITHIN_PRATAH;APARAHNA_FALLBACK;DVADASHI_ENDED_BEFORE_SUNRISE_EXCEPTION।
Fasting day যদি Mahādvādaśī-তে shift করে, parana day-ও তার পরের local day হবে। আগে থেকে “EkadashiStart-এর civil date + 2” hard-code করবেন না।
প্রস্তাবিত calculation pipeline
- Location, Windows time-zone ID ও solar profile resolve করুন;
- Relevant fortnight-এর Dashami–Trayodashi transition instants solve করুন;
- Candidate dates-এর sunrise, arunodaya, sunset ও next sunrise তৈরি করুন;
- Ekadashi interval কতটি sunrise স্পর্শ করে count করুন;
- Kṣaya, vṛddhi, Dashami-viddha ও late-45-daṇḍa flags তৈরি করুন;
- Mahādvādaśī tithi-based detectors চালান;
- Mahādvādaśī nakṣatra-based detectors চালান;
- প্রতিটি school profile-এর fasting date select করুন;
- Selected fasting date থেকে parana day derive করুন;
- Dvādaśī, Hari-vāsara ও daytime intervals থেকে parana window বানান;
- Decision trace, source/profile version ও warnings result-এ রাখুন;
- HTML, calendar grid, print, API ও XML একই result model render করবে।
এই pipeline-এ astronomy এবং religious policy আলাদা। Ephemeris বদলালে transition instants বদলাতে পারে; policy বদলালে selection বদলাতে পারে। Result metadata দেখে কোন স্তরে পরিবর্তন হয়েছে বোঝা যায়।
C# 5-compatible data model
public enum EkadashiSchool
{
Smarta,
GoswamiGaudiya,
Nimbarka45Danda
}
public sealed class EkadashiRuleProfile
{
public string Id { get; set; }
public EkadashiSchool School { get; set; }
public int ArunodayaMinutes { get; set; }
public int LateCutoffDandas { get; set; }
public bool LaterDayOnCutoffEquality { get; set; }
public bool EnableMahadvadashi { get; set; }
public string AuthorityNote { get; set; }
}
public sealed class TithiSpan
{
public int NumberInPaksha { get; set; }
public DateTimeOffset Start { get; set; }
public DateTimeOffset End { get; set; }
public bool Contains(DateTimeOffset instant)
{
DateTime utc = instant.UtcDateTime;
return utc >= Start.UtcDateTime && utc < End.UtcDateTime;
}
}
Candidate observation:
public sealed class EkadashiCandidate
{
public DateTime LocalDate { get; set; }
public DateTimeOffset Sunrise { get; set; }
public DateTimeOffset Arunodaya { get; set; }
public DateTimeOffset FortyFiveDandaCutoff { get; set; }
public bool EkadashiAtSunrise { get; set; }
public bool EkadashiAtArunodaya { get; set; }
public bool DashamiAtArunodaya { get; set; }
public bool EkadashiPastFortyFiveDandas { get; set; }
}
static DateTimeOffset AddAbsoluteMinutes(
DateTimeOffset instant,
int minutes,
TimeZoneInfo zone)
{
DateTimeOffset utc = instant.ToUniversalTime().AddMinutes(minutes);
return TimeZoneInfo.ConvertTime(utc, zone);
}
Candidate builder:
static EkadashiCandidate Observe(
DateTime localDate,
SunDayResult sun,
TithiSpan dashami,
TithiSpan ekadashi,
EkadashiRuleProfile profile,
TimeZoneInfo zone)
{
DateTimeOffset arunodaya = AddAbsoluteMinutes(
sun.Sunrise, -profile.ArunodayaMinutes, zone);
DateTimeOffset cutoff = AddAbsoluteMinutes(
sun.Sunrise, profile.LateCutoffDandas * 24, zone);
bool afterCutoff = profile.LaterDayOnCutoffEquality
? ekadashi.End.UtcDateTime >= cutoff.UtcDateTime
: ekadashi.End.UtcDateTime > cutoff.UtcDateTime;
return new EkadashiCandidate
{
LocalDate = localDate.Date,
Sunrise = sun.Sunrise,
Arunodaya = arunodaya,
FortyFiveDandaCutoff = cutoff,
EkadashiAtSunrise = ekadashi.Contains(sun.Sunrise),
EkadashiAtArunodaya = ekadashi.Contains(arunodaya),
DashamiAtArunodaya = dashami.Contains(arunodaya),
EkadashiPastFortyFiveDandas = afterCutoff
};
}
School selector-এর simplified skeleton:
static DateTime SelectOrdinaryFastingDate(
EkadashiRuleProfile profile,
EkadashiCandidate first,
EkadashiCandidate second)
{
if (profile.School == EkadashiSchool.Smarta)
return first.EkadashiAtSunrise
? first.LocalDate : second.LocalDate;
if (profile.School == EkadashiSchool.GoswamiGaudiya)
return first.EkadashiAtSunrise &&
first.EkadashiAtArunodaya &&
!first.DashamiAtArunodaya
? first.LocalDate : second.LocalDate;
if (profile.School == EkadashiSchool.Nimbarka45Danda)
return first.EkadashiAtSunrise &&
!first.EkadashiPastFortyFiveDandas
? first.LocalDate : second.LocalDate;
throw new ArgumentOutOfRangeException("profile");
}
Pāraṇa model:
public sealed class ParanaWindow
{
public DateTime LocalDate { get; set; }
public DateTimeOffset Start { get; set; }
public DateTimeOffset End { get; set; }
public string RuleCode { get; set; }
public bool IsException { get; set; }
}
static DateTimeOffset HariVasaraEnd(TithiSpan dvadashi)
{
long ticks = (dvadashi.End.UtcDateTime
- dvadashi.Start.UtcDateTime).Ticks;
return dvadashi.Start.ToUniversalTime().AddTicks(ticks / 4L);
}
Time arithmetic UTC instant-এ করুন। DST change-এর রাতে local wall-clock AddHours(18) দেখলে একই instant পেলেও offset ভুলভাবে বহন হতে পারে; UTC-তে যোগ করে selected zone-এ ফেরত আনুন।
Daily page ও calendar grid-এ কী দেখাবেন?
একটি compact block:
স্মার্ত: ৮ অক্টোবর · পারণ ৯ অক্টোবর ৬:০৪–৮:২১
গোস্বামী: ৯ অক্টোবর · পারণ ১০ অক্টোবর ৬:০৫–৮:২২
নিম্বার্ক: ৯ অক্টোবর · পারণ ১০ অক্টোবর ৬:০৫–৮:২২
কারণ: ৮ অক্টোবর sunrise-এ একাদশী, কিন্তু অরুণোদয়ে দশমী; একাদশী ৪৫ দণ্ডও অতিক্রম করেছে।
উপরের তারিখ-সময় illustrative। Production result-এ calculated values আসবে। Calendar cell-এ school-specific badges ব্যবহার করা যায়:
- স্মার্ত একাদশী
- গোস্বামী একাদশী
- নিম্বার্ক একাদশী
- মহাদ্বাদশী
- পারণ
User preference-এ default school রাখা যেতে পারে, তবে details page-এ অন্য ফলগুলো expandable comparison হিসেবে দেখান। Printed report-এর footer-এ profile ID বা human label থাকা উচিত।
কলকাতা, ঢাকা ও নিউ ইয়র্কে তারিখ বদলাতে পারে
তিথির start/end একই absolute astronomical instant, কিন্তু sunrise ও arunodaya স্থানীয়। New York sunrise-এ যে তিথি চলছে, একই instant sequence-এর মধ্যে Kolkata sunrise অন্য অবস্থানে পড়তে পারে। তাই:
- এক শহরের একাদশী date অন্য শহরে copy করবেন না;
- coordinates ছাড়া শুধু timezone যথেষ্ট নয়;
- DST-aware historical time-zone rules ব্যবহার করুন;
- Arunodaya প্রত্যেক local sunrise থেকে আলাদাভাবে বের করুন;
- ৪৫ দণ্ড cutoff-ও local sunrise-anchored;
- Parana day-এর sunrise পুনরায় solve করুন;
- Cache key-তে latitude, longitude, timezone এবং profile ID রাখুন।
এই কারণেই ponjika.com, /bd ও /ny landing profiles একই engine ব্যবহার করলেও পৃথক location defaults রাখবে। URL-এ city/date দিলে API-ও সেই location-এর observance ফেরাবে।
Validation checklist
- Dashami, Ekadashi, Dvadashi ও Trayodashi transitions absolute instants;
- Tithi intervals half-open
[start, end); - Sunrise একই project solar profile থেকে;
- Arunodaya exactly sunrise − ৯৬ absolute minutes;
- ৪৫ দণ্ড exactly ১,০৮০ absolute minutes;
- ৪৫-দণ্ড equality policy versioned;
- একাদশী কত sunrise স্পর্শ করেছে count করা হয়েছে;
- No-sunrise Ekadashi kṣaya হিসেবে classified;
- Two-sunrise Ekadashi vṛddhi হিসেবে classified;
- Dashami at arunodaya detected;
- Ekadashi at sunrise কিন্তু not arunodaya case tested;
- Ekadashi end ৪৫ দণ্ডের এক second আগে test;
- Ekadashi end exactly ৪৫ দণ্ডে test;
- Ekadashi end ৪৫ দণ্ডের এক second পরে test;
- Mahādvādaśī detectors ordinary selector-এর আগে চলে;
- Unmīlanī regression case আছে;
- Vyañjulī regression case আছে;
- Trispṛśā regression case আছে;
- Pakṣavardhinī later Purnima/Amavasya span পরীক্ষা করে;
- Punarvasu, Shravana, Rohini ও Pushya যোগ পৃথকভাবে tested;
- Hari-vāsara = Dvadashi-এর প্রথম quarter;
- Parana sunrise-এর আগে খোলে না;
- Parana Hari-vāsara চলাকালে খোলে না;
- Ordinary parana Dvadashi end অতিক্রম করে না;
- Pratah window proportional daylight থেকে;
- Late Hari-vāsara fallback reason code দেয়;
- Mahādvādaśī fasting-এর পরের day-এ parana;
- DST spring-forward/fall-back tests আছে;
- Kolkata, Dhaka ও New York একই fixture-এ তুলনা করা হয়েছে;
- International Nimbarka calendar-এর known dates regression tested;
- Goswami profile Hari-bhakti-vilāsa/selected calendar fixtures-এর সঙ্গে তুলনা করা হয়েছে;
- Result-এ school/profile ID আছে;
- Result-এ selection reason আছে;
- HTML, print, XML ও API একই model ব্যবহার করে;
- Profile update করলে historical cache invalidated হয়।
উপসংহার
একাদশী নির্ণয়ে প্রথমে astronomy, পরে observance policy। একাদশীর start/end, local sunrise এবং Dvādaśī interval সবার জন্য একই raw data; কিন্তু স্মার্ত sunrise rule, গোস্বামী অরুণোদয়-শুদ্ধি ও Mahādvādaśī rule, এবং project-এর নিম্বার্ক ৪৫-দণ্ড rule আলাদা প্রশ্নের উত্তর দেয়। তাই ভিন্ন fasting date সবসময় calculation error নয়।
নির্ভরযোগ্য app প্রতিটি school-কে versioned profile হিসেবে রাখবে, special tithi pattern আগে classify করবে, তারপর fasting date এবং শেষে parana window নির্ণয় করবে। User-facing result-এ শুধু তারিখ নয়—sunrise, arunodaya, ৪৫-দণ্ড cutoff, Mahādvādaśī type এবং parana reason দেখালে সিদ্ধান্তটি গবেষণাযোগ্য ও পুনরুৎপাদনযোগ্য হয়।
সবশেষে স্থানীয় গুরু, মঠ বা মন্দিরের সিদ্ধান্ত ধর্মীয় আচরণে অগ্রাধিকার পেতে পারে। Software-এর লক্ষ্য সেই সিদ্ধান্তকে প্রতিস্থাপন করা নয়; ব্যবহৃত astronomical data ও rule profile সৎভাবে প্রকাশ করা।
তথ্যসূত্র ও আরও পাঠ
- Hari-bhakti-vilāsa, Vilāsa 12—Ekādaśī-nirṇayaḥ; Vaiṣṇava Ekādaśī determination-এর পাঠ ও অনুবাদ।
- Hari-bhakti-vilāsa, Vilāsa 13; Mahādvādaśī classification ও observance material.
- International Nimbarka Society—Calendar of Events; published Nimbarka observance dates ও Mahādvādaśī examples.
- Advaita-L archive—Ekādaśī tithi nirṇaya; চার ঘটিকা অরুণোদয় এবং vedha/ativedha/mahāvedha distinction-এর আলোচনা।
- ISKCON Desire Tree—Rules of Ekadashi; kṣaya, Mahādvādaśī ও later-day observance-এর explanatory outline.
- Drik Panchang—Ekadashi fasting days; Smārta ও alternate/Vaiṣṇava date presentation.
- PanchangTime—How Ekadashi Is Dated; local sunrise, ৯৬-minute arunodaya ও parana chain-এর worked explanation.
- Vaiṣṇava Calendar—Mahādvādaśī notes; tithi-based ও nakṣatra-based Mahādvādaśī classification.
- সূর্য সিদ্ধান্ত পঞ্জিকা project specification;
smarta-sunrise-v1,goswami-arunodaya-v1এবং printed-Panjika-fitnimbarka-45-danda-v1profiles.
মন্তব্য, আলোচনা ও প্রশ্ন