অধ্যায় ৪.১ — বুকিং লাইফসাইকেল
১. উদ্দেশ্য
একটি বুকিং তৈরি থেকে সমাপ্তি পর্যন্ত যে স্টেটগুলো অতিক্রম করে এবং প্রতিটি ট্রানজিশনে কী হিসাবগত প্রভাব পড়ে।
২. কেন এটি গুরুত্বপূর্ণ
বুকিং স্টেট মেশিন সিস্টেমের কেন্দ্রীয় নিয়ম। ভুল ট্রানজিশন = ভুল অ্যাকাউন্টিং। সম্ভাব্য সমস্ত স্টেট এবং নিয়ম স্পষ্টভাবে সংজ্ঞায়িত।
৩. স্টেট মেশিন
DRAFT → HELD → PENDING_PAYMENT
→ PENDING_APPROVAL
→ ISSUED → PARTIALLY_USED → COMPLETED
→ CANCELLED_BEFORE_ISSUE
→ CANCELLED_AFTER_ISSUE
→ PARTIALLY_REFUNDED
→ EXPIRED (TTL)
৪. স্টেট বিবরণ
| স্টেট | অর্থ | অ্যাকাউন্টিং প্রভাব |
|---|---|---|
DRAFT |
তৈরি, সরবরাহকারী হোল্ড নেই | কোনো JE নেই |
HELD |
সরবরাহকারী হোল্ড, মূল্য লক | কোনো JE নেই |
PENDING_PAYMENT |
ক্যাশ ফ্লো; পেমেন্ট অপেক্ষা | কোনো JE নেই |
PENDING_APPROVAL |
থ্রেশহোল্ডের উপরে; অনুমোদক অপেক্ষা | কোনো JE নেই |
ISSUED |
টিকেট ইস্যু, সরবরাহকারী-নিশ্চিত | সম্পূর্ণ JE পোস্ট |
PARTIALLY_USED |
কমপক্ষে একটি সেগমেন্ট উড়েছে | কোনো নতুন JE নেই |
COMPLETED |
সব সেগমেন্ট ব্যবহৃত / ট্রিপ শেষ | কোনো নতুন JE নেই |
CANCELLED_BEFORE_ISSUE |
টিকেটিং-পূর্বে বাতিল | কোনো JE নেই |
CANCELLED_AFTER_ISSUE |
ভয়েড বা সম্পূর্ণ রিফান্ড | রিভার্সিং JE |
EXPIRED |
TTL অতিক্রম | কোনো JE নেই |
৫. ক্রিটিক্যাল: ইস্যুয়েন্স প্যাটার্ন
ইস্যুয়েন্স সবচেয়ে সংবেদনশীল ট্রানজিশন কারণ: - GDS কল = বাহ্যিক, ধীর, ব্যর্থ হতে পারে - টিকেট নম্বর = আর্থিক দায়বদ্ধতা - আংশিক ব্যর্থতা = অরফান টিকেট (GDS আছে, আমাদের কাছে নেই)
প্যাটার্ন:
১. ডিবি ট্রানজ্যাকশন শুরু → বুকিং রো লক
২. idempotency কী চেক — ইতিমধ্যে কল হয়েছে?
৩. `supplier_request_log` এ "pending" রেকর্ড INSERT
৪. ডিবি ট্রানজ্যাকশন কমিট (লক রিলিজ)
৫. **GDS কল ট্রানজ্যাকশনের বাইরে** — দীর্ঘ ও পার্শ্ব-প্রভাবক
৬. GDS রেসপন্সে ticket নম্বর
৭. নতুন ডিবি ট্রানজ্যাকশন → ticket রেকর্ড + JE + booking state=ISSUED → কমিট
যদি ধাপ ৭ ব্যর্থ হয়: GDS-এ টিকেট আছে কিন্তু আমাদের ডিবিতে নেই = orphan। reconciler কাজ এটি ধরে এবং পুনঃ-চেষ্টা করে।
৬. হোল্ড উইন্ডো
সরবরাহকারী-অনুসারে ভিন্ন: - এয়ারলাইন: সাধারণত 24-72 ঘণ্টা - হোটেল: প্রায়ই deposit-only বুকিং - ট্যুর: প্রায় তাৎক্ষণিক কনফার্মেশন
hold_expires_at ফিল্ড ট্র্যাক; TTL অতিক্রম হলে স্বয়ংক্রিয়ভাবে CANCELLED।
৭. অনুমোদন প্রবাহ
থ্রেশহোল্ডের উপরে বুকিং → PENDING_APPROVAL → অনুমোদক নোটিফিকেশন → অনুমোদন/প্রত্যাখ্যান। থ্রেশহোল্ড পার্টনার-কনফিগারেবল।
৮. অডিট
প্রতিটি স্টেট পরিবর্তন অডিট লগে: পুরাতন স্টেট → নতুন স্টেট, ব্যবহারকারী, কারণ, টাইমস্ট্যাম্প।
৯. সাধারণ ফাঁদ
- ⚠️ ট্রানজ্যাকশনের ভিতরে GDS কল — দীর্ঘ লক, ডেডলক ঝুঁকি
- ⚠️ idempotency কী ছাড়া রেট্রাই — ডবল ইস্যুয়েন্স
- ⚠️ HELD থেকে DRAFT-এ ফেরত — সরবরাহকারী হোল্ড ফাঁস হতে পারে
- ⚠️ EXPIRED না করা stale বুকিং — অপারেশনাল ভিজ্যুয়াল ক্লাটার