Soalan

Soalan Lazim Pain001: Perbendaharaan, Operasi dan Audit

Jawapan yang jelas untuk pegawai perbendaharaan, operasi pembayaran, jurutera dan juruaudit, dirangka sebagaimana orang benar-benar bertanya.

Jawapan yang jelas untuk pegawai perbendaharaan, operasi pembayaran, jurutera dan juruaudit. Soalannya dirangka sebagaimana orang benar-benar menanyakannya. Untuk butiran teknikal yang lebih mendalam, lihat Rujukan Teknikal.


Untuk pemimpin perbendaharaan dan kewangan#

pain.001 ialah mesej ISO 20022 yang dihantar oleh pelanggan kepada banknya untuk memulakan pindahan kredit. Ia ialah pengganti XML bagi format seperti SWIFT MT101 dan fail rata domestik. Bank anda mengesahkannya terhadap sesuatu skema dan rulebook skim sebelum menerimanya. Pain001 (perisiannya) menghasilkan fail tersebut daripada data yang sudah anda miliki dan membuktikan bahawa fail itu sah sebelum anda menghantarnya.

Arah aliran dananya. pain.001 memulakan pindahan kredit: anda menolak wang keluar. pain.008 memulakan debit terus: anda mengutip wang yang terhutang kepada anda di bawah sesuatu mandat. Pain001 menjana kedua-duanya: sepuluh versi pain.001 (.001.03 hingga .001.12) dan pain.008.001.02.

Sangat mendesak. SWIFT menamatkan mesej MT kategori 1, 2 dan 9 bagi arahan pembayaran antara bank rentas sempadan pada November 2025; saluran korporat yang masih menerima MT berbuat demikian atas budi bicara setiap bank dan hanya buat sementara waktu. Loader MT101 menukarkan aliran MT101 sedia ada kepada pain.001 yang disahkan tanpa perlu menaip semula apa-apa.

Swift merancang untuk berhenti menerima alamat pos yang tidak berstruktur sepenuhnya dalam pembayaran rentas sempadan CBPR+ pada November 2026. Pada Ogos 2026 Swift menangguhkan tarikh itu dan akan mengumumkan tarikh baharu selewat-lewatnya Disember 2026, tetapi peraturannya tidak berubah: alamat mesti berstruktur atau hibrid, menggunakan elemen berasingan seperti bandar (<TwnNm>) dan negara (<Ctry>) dan bukannya baris teks bebas. Jika data induk anda menyimpan alamat sebagai gumpalan teks, kerjanya terletak pada data anda, bukan pada sambungan bank anda. Mulakan di situ. Taklimat 2026 membincangkan garis masanya secara terperinci.

Tiada kos. Bahagian terasnya berlesen dwi Apache-2.0 / MIT; pakej pendampingnya berlesen Apache-2.0. Penggunaan komersial, pengubahsuaian dan pengedaran semula semuanya dibenarkan. Sebagai rujukan skala, SDK terjemahan SWIFT sahaja disenaraikan pada €10,000–30,000 setahun.


Untuk operasi pembayaran#

Empat punca yang berulang: pelanggaran skema (elemen salah, versi salah, namespace salah), pengecam yang tidak sah (kegagalan checksum IBAN, BIC yang cacat), jumlah kawalan yang rosak (NbOfTxs / CtrlSum tidak sepadan dengan transaksinya) dan aksara di luar set Latin ISO 20022. Pain001 memeriksa kesemua empat sebelum fail itu wujud: pengesahan JSON Schema bagi setiap rekod, pemeriksaan IBAN mod-97 dan BIC ISO 9362, jumlah kawalan yang dikira semula, transliterasi set aksara, serta pengesahan XSD akhir terhadap XML yang telah dijana.

Boleh. Gunakan pain001 --dry-run (atau subperintah validate, atau POST /api/v1/validate). Kod keluar 0 bermakna sah; 1 bermakna pengesahan gagal dengan ralat pada peringkat medan. Sambungkannya ke CI atau ke senarai semak sebelum penghantaran.

Lima rulebook skim disertakan secara terbina dalam: SEPA Credit Transfer (sepa-sct), SEPA Instant (sepa-inst), SEPA Direct Debit Core (sepa-sdd), SEPA B2B (sepa-b2b) dan pindahan kredit rentas sempadan (xborder-ct). Gunakan --scheme <name> --explain untuk melihat setiap peraturan yang lulus atau gagal.

Excel secara senyap menukarkan rentetan yang menyerupai IBAN kepada nombor. Loader Excel membaca .xlsx/.xlsm secara terus dan berhenti terus jika lajur IBAN mengandungi sel berangka, jadi kerosakan itu ditangkap semasa pemuatan, bukan di bank.

--streaming memproses input dalam bahagian yang terbatas memori (lalai 1,000 transaksi), setiap satunya dikeluarkan sebagai fail XML tersendiri dengan jumlah kawalan yang dikira semula dengan betul. REST API menawarkan POST /api/v1/generate/async dengan pemantauan kerja atas sebab yang sama.


Untuk jurutera dan arkitek#

Ketiga-tiganya wujud sebagai permukaan kelas pertama: Python API bertaip, CLI dengan kod keluar yang mesra CI, dan perkhidmatan mikro FastAPI (pain001 serve) dengan titik akhir segerak, kerja tak segerak, kesihatan dan metrik Prometheus. Saluran pengesahan yang sama berada di sebaliknya, jadi hasilnya tidak pernah berbeza antara permukaan.

Amaun ialah decimal.Decimal dari hujung ke hujung dalam penjanaan dan pengesahan skim. Ia dihurai sebagai perpuluhan tepat, dijumlahkan sebagai perpuluhan tepat, dan dijana tanpa perwakilan apungan. Jumlah kawalan dikira semula daripada rekod yang telah disahkan, tidak pernah dipercayai terus daripada input.

Semua penghuraian XML disalurkan melalui defusedxml (menyekat serangan XXE dan pengembangan entiti); tiada lxml dalam pepohon kebergantungan. Input melalui pengesah path traversal. Imej Docker berjalan sebagai bukan root. SBOM CycloneDX dijana bagi keluaran teras, dan penemuan plugin pihak ketiga boleh dilumpuhkan sepenuhnya dengan PAIN001_DISABLE_PLUGINS=1.

Liputan baris dan cabang 100% sebagai get CI yang tegas pada bahagian teras (boleh disahkan: 3,828 baris, 926 cabang pada 100%), mypy ketat, liputan docstring 100%, linting keselamatan Bandit dan pip-audit, serta imbasan CodeQL. Pakej pendampingnya mengamalkan disiplin liputan 100% yang sama.

Boleh, melalui empat kumpulan entry point plugin (pain001.loaders, pain001.validators, pain001.schemes, pain001.writers). Loader Excel itu sendiri ialah plugin yang menggunakan protokol awam tersebut, jadi ia sekali gus menjadi pelaksanaan rujukan.


Untuk juruaudit dan pematuhan#

Boleh. Kunci versi pakejnya, mainkan semula input yang sama, dan outputnya bersifat deterministik. Oleh sebab rantaian alatannya bersumber terbuka, jejak auditnya menjangkau sehingga ke laluan kodnya sendiri, bukan sekadar atestasi vendor.

Tidak. Setiap komponen (CLI, pustaka, REST API, pelayan MCP, LSP) dijalankan secara setempat. Tiada telemetri, tiada panggilan balik SaaS, tiada perkhidmatan pengesahan luaran. Pelayan MCP hanya berkomunikasi melalui stdio dan kesemua 17 alatnya dianotasikan sebagai read-only dan idempoten.

Sebastien Rousseau, seorang pemimpin kejuruteraan fintech yang berpangkalan di London, bersama para penyumbang komuniti. Pembangunannya terbuka kepada umum di GitHub, keluarannya diterbitkan ke PyPI, dan changelog-nya diberi versi pada setiap keluaran.