ট্রেজারার, পেমেন্ট অপারেশন, ইঞ্জিনিয়ার ও অডিটরদের জন্য সরাসরি উত্তর। প্রশ্নগুলি সেভাবেই সাজানো, মানুষ যেভাবে আসলে জিজ্ঞাসা করে। আরও গভীর প্রযুক্তিগত বিবরণের জন্য দেখুন প্রযুক্তিগত রেফারেন্স।
ট্রেজারি ও ফিন্যান্স নেতৃত্বের জন্য#
এক অনুচ্ছেদে pain.001 কী?
pain.001 হলো সেই ISO 20022 মেসেজ, যা একজন গ্রাহক ক্রেডিট ট্রান্সফার শুরু করতে তার ব্যাংকে পাঠায় — SWIFT MT101 ও দেশীয় ফ্ল্যাট ফাইলের মতো ফরম্যাটের XML উত্তরসূরি। আপনার ব্যাংক এটি গ্রহণ করার আগে একটি স্কিমা ও একটি স্কিম রুলবুকের বিপরীতে যাচাই করে। Pain001 (সফটওয়্যারটি) আপনার কাছে থাকা ডেটা থেকেই সেই ফাইলগুলি তৈরি করে এবং জমা দেওয়ার আগেই প্রমাণ করে যে সেগুলি বৈধ।
pain.001 ও pain.008-এর মধ্যে পার্থক্য কী?
অর্থপ্রবাহের দিক। pain.001 ক্রেডিট ট্রান্সফার শুরু করে — আপনি অর্থ বাইরে পাঠান। pain.008 ডাইরেক্ট ডেবিট শুরু করে — একটি ম্যান্ডেটের অধীনে আপনার প্রাপ্য অর্থ আপনি সংগ্রহ করেন। Pain001 দুটিই জেনারেট করে: pain.001-এর দশটি সংস্করণ (.001.03 থেকে .001.12) এবং pain.008.001.02।
আমরা এখনও MT101 ফাইল পাঠাই। মাইগ্রেশন কতটা জরুরি?
জরুরি। ক্রস-বর্ডার আন্তঃব্যাংক পেমেন্ট নির্দেশনার জন্য SWIFT নভেম্বর 2025-এ MT ক্যাটাগরি 1, 2 ও 9 মেসেজ প্রত্যাহার করেছে; যেসব কর্পোরেট চ্যানেল এখনও MT গ্রহণ করে, তারা প্রতিটি ব্যাংকের নিজস্ব বিবেচনায় এবং ধার করা সময়ের উপর ভর করেই তা করে। MT101 লোডার কিছুই পুনরায় টাইপ না করে বিদ্যমান MT101 প্রবাহকে ভ্যালিডেটেড pain.001-এ রূপান্তর করে।
নভেম্বর 2026-এর স্ট্রাকচার্ড অ্যাড্রেস সময়সীমা আমাদের জন্য কী অর্থ বহন করে?
নভেম্বর 2026-এর শেষ থেকে CBPR+ ক্রস-বর্ডার পেমেন্টে সম্পূর্ণ অস্ট্রাকচার্ড ডাক ঠিকানা আর গ্রহণযোগ্য নয়; ঠিকানা অবশ্যই স্ট্রাকচার্ড বা হাইব্রিড হতে হবে — মুক্ত-পাঠ্য লাইনের বদলে শহর () ও দেশ ()-এর মতো পৃথক উপাদান। আপনার মাস্টার ডেটায় ঠিকানা যদি অখণ্ড টেক্সট হিসেবে থাকে, তবে কাজটি আপনার ডেটায়, ব্যাংক সংযোগে নয়। সেখান থেকেই শুরু করুন। 2026 ব্রিফিং-এ সময়রেখা বিস্তারিতভাবে রয়েছে।
Pain001-এর খরচ কত?
কিছুই না। কোরটি দ্বৈত-লাইসেন্সপ্রাপ্ত Apache-2.0 / MIT; সহযোগী প্যাকেজগুলি Apache-2.0। বাণিজ্যিক ব্যবহার, পরিমার্জন ও পুনর্বণ্টন সবই অনুমোদিত। মাত্রা বোঝাতে: SWIFT-এর ট্রান্সলেশন SDK-এর তালিকাভুক্ত মূল্যই বছরে €10,000–30,000।
পেমেন্ট অপারেশনের জন্য#
ব্যাংক কেন পেমেন্ট ফাইল প্রত্যাখ্যান করে?
চারটি বারবার ঘটা কারণ: স্কিমা লঙ্ঘন (ভুল এলিমেন্ট, ভুল সংস্করণ, ভুল নেমস্পেস), ত্রুটিপূর্ণ শনাক্তকারী (IBAN চেকসাম ব্যর্থতা, ভুল গঠনের BIC), ভাঙা কন্ট্রোল টোটাল (NbOfTxs / CtrlSum লেনদেনের সঙ্গে না মেলা), এবং ISO 20022 ল্যাটিন সেটের বাইরের ক্যারেক্টার। ফাইলটি অস্তিত্বে আসার আগেই Pain001 চারটিই পরীক্ষা করে: প্রতি রেকর্ডে JSON Schema ভ্যালিডেশন, mod-97 IBAN ও ISO 9362 BIC পরীক্ষা, পুনর্গণিত কন্ট্রোল টোটাল, ক্যারেক্টার সেট ট্রান্সলিটারেশন এবং রেন্ডার করা XML-এর চূড়ান্ত XSD ভ্যালিডেশন।
কিছু জেনারেট না করেই কি আমরা একটি ফাইল ভ্যালিডেট করতে পারি?
হ্যাঁ — pain001 --dry-run (অথবা validate সাবকমান্ড, অথবা POST /api/v1/validate)। এক্সিট কোড 0 মানে বৈধ; 1 মানে ফিল্ড-স্তরের ত্রুটিসহ ভ্যালিডেশন ব্যর্থ হয়েছে। এটি CI-তে বা জমা দেওয়ার আগের চেকলিস্টে যুক্ত করুন।
কোন SEPA রুলবুকগুলি অন্তর্ভুক্ত?
পাঁচটি স্কিম রুলবুক অন্তর্নির্মিতভাবে আসে: SEPA Credit Transfer (sepa-sct), SEPA Instant (sepa-inst), SEPA Direct Debit Core (sepa-sdd), SEPA B2B (sepa-b2b) এবং ক্রস-বর্ডার ক্রেডিট ট্রান্সফার (xborder-ct)। উত্তীর্ণ বা ব্যর্থ প্রতিটি নিয়ম দেখতে --scheme ব্যবহার করুন।
আমাদের ডেটা Excel-এ থাকে। সমস্যাটা কোথায়?
Excel নীরবে IBAN-সদৃশ স্ট্রিংকে সংখ্যায় রূপান্তরিত করে। Excel লোডার সরাসরি .xlsx/.xlsm পড়ে এবং IBAN কলামে সাংখ্যিক সেল থাকলে সঙ্গে সঙ্গে থেমে যায় — বিকৃতিটি ব্যাংকে নয়, লোড করার সময়েই ধরা পড়ে।
500,000-সারির ব্যাচ এটি কীভাবে সামলায়?
--streaming ইনপুটকে মেমরি-সীমাবদ্ধ চাঙ্কে প্রক্রিয়া করে (ডিফল্ট 1,000টি লেনদেন), প্রতিটি চাঙ্ক সঠিকভাবে পুনর্গণিত কন্ট্রোল টোটালসহ নিজস্ব XML ফাইল হিসেবে নির্গত হয়। একই কারণে REST API জব পোলিংসহ POST /api/v1/generate/async সরবরাহ করে।
ইঞ্জিনিয়ার ও আর্কিটেক্টদের জন্য#
আমরা এটি কীভাবে ইন্টিগ্রেট করব — লাইব্রেরি, CLI, নাকি API?
তিনটিই প্রথম-শ্রেণির সারফেস হিসেবে বিদ্যমান: একটি টাইপড Python API, CI-বান্ধব এক্সিট কোডসহ একটি CLI, এবং সিঙ্ক, অ্যাসিঙ্ক-জব, হেলথ ও Prometheus মেট্রিক এন্ডপয়েন্টসহ একটি FastAPI মাইক্রোসার্ভিস (pain001 serve)। নিচে একই ভ্যালিডেশন পাইপলাইন, তাই সারফেসভেদে ফলাফল কখনও ভিন্ন হয় না।
XML জেনারেশন কি সত্যিই ফ্লোট রাউন্ডিং থেকে নিরাপদ?
জেনারেশন ও স্কিম ভ্যালিডেশনে অঙ্কগুলি শুরু থেকে শেষ পর্যন্ত decimal.Decimal — যথাযথ দশমিক হিসেবে পার্স করা, যথাযথ দশমিক হিসেবে যোগ করা, ফ্লোট উপস্থাপনা ছাড়াই রেন্ডার করা। কন্ট্রোল টোটাল ভ্যালিডেটেড রেকর্ড থেকে পুনর্গণনা করা হয়, ইনপুট থেকে কখনও বিশ্বাস করে নেওয়া হয় না।
নিরাপত্তা অবস্থান কেমন?
সব XML পার্সিং defusedxml-এর মধ্য দিয়ে যায় (XXE ও এনটিটি-এক্সপ্যানশন আক্রমণ প্রতিহত করে); ডিপেন্ডেন্সি ট্রিতে কোনো lxml নেই। ইনপুট একটি পাথ-ট্রাভার্সাল ভ্যালিডেটর পার হয়। Docker ইমেজটি নন-রুট হিসেবে চলে। কোর রিলিজের জন্য একটি CycloneDX SBOM তৈরি করা হয়, এবং PAIN001_DISABLE_PLUGINS=1 দিয়ে তৃতীয় পক্ষের প্লাগইন আবিষ্কার সম্পূর্ণভাবে বন্ধ করা যায়।
গুণমান কীভাবে নিশ্চিত করা হয়?
কোরে হার্ড CI গেট হিসেবে 100% লাইন ও ব্রাঞ্চ কভারেজ (যাচাইযোগ্যভাবে: 3,828 লাইন, 926 ব্রাঞ্চ 100%-এ), কঠোর mypy, 100% ডকস্ট্রিং কভারেজ, Bandit ও pip-audit সিকিউরিটি লিন্টিং এবং CodeQL স্ক্যানিং। সহযোগী প্যাকেজগুলিও একই 100% কভারেজ শৃঙ্খলা বজায় রাখে।
মালিকানাধীন কোনো ফরম্যাটের জন্য কি আমরা এটি সম্প্রসারণ করতে পারি?
হ্যাঁ — চারটি প্লাগইন এন্ট্রি-পয়েন্ট গ্রুপ (pain001.loaders, pain001.validators, pain001.schemes, pain001.writers)। Excel লোডার নিজেই পাবলিক প্রোটোকল ব্যবহার করা একটি প্লাগইন, তাই এটি রেফারেন্স ইমপ্লিমেন্টেশন হিসেবেও কাজ করে।
অডিটর ও কমপ্লায়েন্সের জন্য#
গত ত্রৈমাসিকে জেনারেট করা কোনো ফাইল কি আমরা পুনরুৎপাদন করতে পারি?
হ্যাঁ। প্যাকেজ সংস্করণ পিন করুন, একই ইনপুট পুনরায় চালান, আউটপুট ডিটারমিনিস্টিক। যেহেতু টুলচেইনটি ওপেন সোর্স, অডিট ট্রেইল কেবল বিক্রেতার প্রত্যয়নেই থেমে থাকে না — তা কোড পাথ পর্যন্ত বিস্তৃত।
পেমেন্ট ডেটা কি আমাদের পরিবেশ ছেড়ে যায়?
না। প্রতিটি উপাদান — CLI, লাইব্রেরি, REST API, MCP সার্ভার, LSP — স্থানীয়ভাবে চলে। কোনো টেলিমেট্রি নেই, কোনো SaaS কলব্যাক নেই, কোনো বাহ্যিক ভ্যালিডেশন সার্ভিস নেই। MCP সার্ভার কেবল stdio-তে কথা বলে এবং এর সব 17টি টুল রিড-অনলি ও আইডেমপোটেন্ট হিসেবে চিহ্নিত।
Pain001 কে রক্ষণাবেক্ষণ করেন?
Sebastien Rousseau, লন্ডন-ভিত্তিক একজন ফিনটেক ইঞ্জিনিয়ারিং নেতা, সঙ্গে কমিউনিটি অবদানকারীরা। উন্নয়ন প্রকাশ্যে GitHub-এ হয়, রিলিজ PyPI-তে প্রকাশিত হয়, এবং প্রতিটি রিলিজের সঙ্গে চেঞ্জলগ সংস্করণায়িত হয়।