Довідник API pacs008
Dự án cung cấp cả REST API và CLI cho quy trình xử lý thông điệp thanh toán vận hành.
Ghi chú triển khai
- Dùng tạo sinh đồng bộ cho các kiểm tra vận hành và lô nhỏ khi bên gọi cần XML ngay lập tức.
- Dùng tạo sinh bất đồng bộ khi tệp đầu vào lớn, tác vụ cần thử lại hoặc việc tạo sinh là một phần của bộ điều phối lớn hơn.
- Lưu cả dữ liệu đầu vào nguồn và báo cáo xác thực để đội hỗ trợ có thể tái tạo đầu ra XML khi có sự cố.
- Cố định các đường dẫn mẫu và XSD trong cấu hình triển khai để tránh nâng cấp âm thầm.
Cài đặt
Cài đặt gói từ PyPI. Yêu cầu Python 3.10 trở lên.
python -m pip install pacs008
REST API
Khởi động máy chủ FastAPI tích hợp để cung cấp các HTTP endpoint cho việc xác thực và tạo tệp.
Khởi động máy chủ
uvicorn pacs008.api.app:app --reload --host 0.0.0.0 --port 8000
Các endpoint
| Endpoint | Mô tả |
|---|---|
GET /api/health | Health check that returns service status |
POST /api/validate | Validate payment data without generating XML |
POST /api/generate | Generate XML now and return the file |
POST /api/generate/async | Submit an async generation job |
GET /api/status/{job_id} | Check job status by ID |
GET /api/download/{job_id} | Download XML after the job completes |
DELETE /api/jobs/{job_id} | Cancel a pending or running job |
GET /api/docs | Swagger UI for testing all endpoints |
pacs.002.001.12— Báo cáo trạng thái thanh toán giữa các tổ chức tài chínhpacs.003.001.09— Ghi nợ trực tiếp khách hàng giữa các tổ chức tài chínhpacs.004.001.11— Hoàn trả thanh toánpacs.007.001.11— Đảo ngược thanh toán giữa các tổ chức tài chínhpacs.008.001.13— Chuyển khoản tín dụng khách hàng giữa các tổ chức tài chínhpacs.009.001.10— Chuyển khoản tín dụng giữa các tổ chức tài chínhpacs.010.001.05— Ghi nợ trực tiếp giữa các tổ chức tài chínhpacs.028.001.05— Yêu cầu trạng thái thanh toán giữa các tổ chức tài chính
Ví dụ xác thực
Gửi dữ liệu thanh toán để xác thực trước khi tạo XML.
curl -X POST http://localhost:8000/api/validate \
-H "Content-Type: application/json" \
-d '{
"message_type": "pacs.008.001.13",
"data": [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA"
}]
}'
{
"valid": true,
"message_type": "pacs.008.001.13",
"errors": [],
"warnings": []
}
Ví dụ tạo tệp đồng bộ
Tạo tệp XML pacs.008.001.13 từ dữ liệu JSON.
curl -X POST http://localhost:8000/api/generate \
-H "Content-Type: application/json" \
-d '{
"message_type": "pacs.008.001.13",
"template": "pacs008/templates/pacs.008.001.13/template.xml",
"schema": "pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
"data": [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"tx_id": "TX-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA"
}]
}' --output pacs008_output.xml
Tạo tệp bất đồng bộ
Đối với các tệp lớn hơn hoặc sử dụng trong pipeline, hãy gửi tác vụ bất đồng bộ và truy vấn đến khi hoàn tất.
# Submit the job
JOB=$(curl -s -X POST http://localhost:8000/api/generate/async \
-H "Content-Type: application/json" \
-d '{"message_type":"pacs.008.001.13","data":[...]}')
JOB_ID=$(echo $JOB | jq -r '.job_id')
# Poll for completion
curl http://localhost:8000/api/status/$JOB_ID
# Download the result
curl http://localhost:8000/api/download/$JOB_ID --output result.xml
{
"job_id": "8f7f0d4b-7df9-4d1a-8d47-19f4f28b6d38",
"status": "completed",
"message_type": "pacs.008.001.13",
"download_url": "/api/download/8f7f0d4b-7df9-4d1a-8d47-19f4f28b6d38"
}
CLI
Giao diện dòng lệnh nhận một tệp dữ liệu, phiên bản thông điệp, mẫu và lược đồ. Nó xác thực đầu vào và ghi XML đã tạo vào thư mục đầu ra.
Sử dụng cơ bản
pacs008 -t \
-m \
-s \
-d
Ví dụ
pacs008 -t pacs.008.001.13 \
-m pacs008/templates/pacs.008.001.13/template.xml \
-s pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd \
-d payments.csv
Chế độ chạy thử
Dùng --dry-run để xác thực dữ liệu đầu vào mà không tạo XML. Mã thoát cho biết xác thực đã thành công (0) hay thất bại (1).
pacs008 -t pacs.008.001.13 \
-m pacs008/templates/pacs.008.001.13/template.xml \
-s pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd \
-d payments.csv \
--dry-run
Thêm --verbose để xem đầu ra chi tiết trong quá trình tạo tệp.
Python API
Sử dụng thư viện trực tiếp trong các script hoặc dịch vụ Python.
Tạo XML từ danh sách bản ghi thanh toán
from pacs008 import generate_xml_string
payments = [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"tx_id": "TX-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA",
}]
xml = generate_xml_string(
payments,
"pacs.008.001.13",
"pacs008/templates/pacs.008.001.13/template.xml",
"pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
)
print(xml)
Kiểm tra tuân thủ SWIFT
Xác thực và làm sạch dữ liệu theo các quy tắc bộ ký tự và độ dài trường của SWIFT trước khi tạo tệp.
from pacs008.compliance import cleanse_data_with_report
raw = [{"debtor_name": "Müller & Söhne™", "msg_id": "X" * 50}]
clean, report = cleanse_data_with_report(raw)
print(report.summary())
Docker
Chạy API trong container sử dụng Dockerfile đi kèm.
docker build -t pacs008:latest .
docker run -p 8000:8000 pacs008:latest
docker run --rm -e PACS008_LOG_LEVEL=INFO -v $PWD/examples:/data -p 8000:8000 pacs008:latest
Xác thực IBAN và BIC
Xác thực mã định danh tài chính độc lập với việc tạo XML.
from pacs008.validation import validate_iban, validate_bic
is_valid, error = validate_iban("DE89370400440532013000", strict=False)
is_valid, error = validate_bic("DEUTDEFF", strict=False)
Xử lý luồng
Tải tập dữ liệu lớn theo từng phần có thể cấu hình để giới hạn sử dụng bộ nhớ.
from pacs008.data.loader import load_payment_data_streaming
for chunk in load_payment_data_streaming("large_payments.csv", chunk_size=500):
print(f"Processing {len(chunk)} records")
from pacs008.validation import validate_batch
for chunk in load_payment_data_streaming("large_payments.csv", chunk_size=500):
report = validate_batch(chunk, "pacs.008.001.13")
print(report.summary())
Dịch vụ xác thực
Chạy toàn bộ pipeline xác thực trước khi tạo theo phương thức lập trình.
from pacs008.validation import ValidationService, ValidationConfig
service = ValidationService()
report = service.validate_all(ValidationConfig(
xml_message_type="pacs.008.001.13",
xml_template_file_path="pacs008/templates/pacs.008.001.13/template.xml",
xsd_schema_file_path="pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
data_file_path="payments.csv",
))
print(report.is_valid, report.errors)
Các trường dữ liệu bắt buộc
Mỗi bản ghi thanh toán phải bao gồm các trường sau. Các trường theo phiên bản cụ thể được ghi chú khi áp dụng.
| Trường | Mô tả | Ràng buộc |
|---|---|---|
msg_id | Mã định danh thông điệp | Tối đa 35 ký tự |
creation_date_time | Dấu thời gian tạo | Định dạng ISO 8601 |
nb_of_txs | Số lượng giao dịch | Số nguyên dương |
settlement_method | Phương thức thanh toán bù trừ | CLRG, INDA, COVE hoặc INGA |
end_to_end_id | Mã định danh đầu-cuối | Tối đa 35 ký tự |
interbank_settlement_amount | Số tiền thanh toán liên ngân hàng | Số thập phân, ví dụ `25000.00` |
interbank_settlement_currency | Tiền tệ thanh toán bù trừ | Mã ISO 4217 |
charge_bearer | Bên chịu phí | DEBT, CRED, SHAR hoặc SLEV |
debtor_name | Tên con nợ | Tối đa 140 ký tự |
debtor_agent_bic | BIC đại lý con nợ | 8 hoặc 11 ký tự |
creditor_agent_bic | BIC đại lý chủ nợ | 8 hoặc 11 ký tự |
creditor_name | Tên chủ nợ | Tối đa 140 ký tự |
Các trường theo phiên bản cụ thể
| Trường | Mô tả | Ràng buộc |
|---|---|---|
uetr | Tham chiếu giao dịch đầu-cuối duy nhất | Định dạng UUID — có từ v08 |
mandate_id | Mã định danh ủy quyền | Có từ v10 |
expiry_date_time | Dấu thời gian hết hạn thông điệp | Có trong v13 |