API
הפרויקט מספק גם REST API וגם CLI לתהליכי עיבוד הודעות תשלום תפעוליים.
הערות יישום
- השתמשו ביצירה סינכרונית לבדיקות תפעוליות ואצוות קטנות כאשר הקורא מצפה ל-XML מיידית.
- השתמשו ביצירה אסינכרונית כאשר קבצי הקלט גדולים, כאשר יש צורך בניסיונות חוזרים, או כאשר היצירה היא חלק ממנוע תיאום רחב יותר.
- שמרו גם את נתוני הקלט המקוריים וגם את דוח האימות כדי שצוותי התמיכה יוכלו לשחזר את פלט ה-XML בזמן תקלה.
- קבעו את נתיבי התבניות ו-XSD בתצורת הפריסה כדי להימנע משדרוגים שקטים.
התקנה
התקן את החבילה מ-PyPI. נדרש Python 3.10 ומעלה.
python -m pip install pacs008
REST API
הפעל את שרת FastAPI המובנה כדי לחשוף נקודות קצה HTTP לאימות ולייצור.
הפעלת השרת
uvicorn pacs008.api.app:app --reload --host 0.0.0.0 --port 8000
נקודות קצה
| Endpoint | תיאור |
|---|---|
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— דוח סטטוס תשלום בין מוסדות פיננסייםpacs.003.001.09— חיוב ישיר ללקוח בין מוסדות פיננסייםpacs.004.001.11— החזר תשלוםpacs.007.001.11— היפוך תשלום בין מוסדות פיננסייםpacs.008.001.13— העברת אשראי ללקוח בין מוסדות פיננסייםpacs.009.001.10— העברת אשראי בין מוסדות פיננסייםpacs.010.001.05— חיוב ישיר בין מוסדות פיננסייםpacs.028.001.05— בקשת סטטוס תשלום בין מוסדות פיננסיים
דוגמת אימות
שלח נתוני תשלום לאימות לפני יצירת 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": []
}
דוגמת יצירה סינכרונית
יצירת קובץ XML מסוג pacs.008.001.13 מנתוני 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
יצירה א-סינכרונית
לקבצים גדולים יותר או לשימוש ב-pipeline, שלח משימה א-סינכרונית וסקר עד להשלמה.
# 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
ממשק שורת הפקודה מקבל קובץ נתונים, גרסת הודעה, תבנית וסכמה. הוא מאמת את הקלט וכותב את ה-XML שנוצר לספריית הפלט.
שימוש בסיסי
pacs008 -t \
-m \
-s \
-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
מצב ריצה יבשה
השתמש ב---dry-run לאימות נתוני קלט ללא יצירת XML. קוד היציאה מציין אם האימות עבר (0) או נכשל (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
הוסף --verbose לפלט מפורט במהלך היצירה.
Python API
השתמש בספרייה ישירות בסקריפטים או בשירותי Python.
יצירת XML מרשימה של רשומות תשלום
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)
בדיקת תאימות SWIFT
אמת ונקה נתונים מול כללי מערך התווים ואורך השדה של SWIFT לפני היצירה.
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
הפעל את ה-API בקונטיינר באמצעות קובץ ה-Dockerfile המצורף.
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
אימות IBAN ו-BIC
אמת מזהים פיננסיים באופן עצמאי מיצירת 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)
עיבוד זרימתי
טען מערכי נתונים גדולים בקבוצות מוגדרות להגבלת השימוש בזיכרון.
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())
שירות אימות
הפעל את צינור האימות המלא לפני יצירה באופן תכנותי.
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)
שדות נתונים נדרשים
כל רשומת תשלום חייבת לכלול את השדות הבאים. שדות ספציפיים לגרסה מצוינים בהתאם.
| שדה | תיאור | אילוץ |
|---|---|---|
msg_id | מזהה הודעה | מקסימום 35 תווים |
creation_date_time | חותמת זמן יצירה | פורמט ISO 8601 |
nb_of_txs | מספר עסקאות | מספר שלם חיובי |
settlement_method | שיטת סליקה | CLRG ,INDA ,COVE או INGA |
end_to_end_id | מזהה קצה לקצה | מקסימום 35 תווים |
interbank_settlement_amount | סכום סליקה בין-בנקאי | עשרוני, למשל `25000.00` |
interbank_settlement_currency | מטבע סליקה | קוד ISO 4217 |
charge_bearer | נושא העמלות | DEBT ,CRED ,SHAR או SLEV |
debtor_name | שם החייב | מקסימום 140 תווים |
debtor_agent_bic | BIC של סוכן החייב | 8 או 11 תווים |
creditor_agent_bic | BIC של סוכן הנושה | 8 או 11 תווים |
creditor_name | שם הנושה | מקסימום 140 תווים |
שדות ספציפיים לגרסה
| שדה | תיאור | אילוץ |
|---|---|---|
uetr | מזהה עסקה ייחודי קצה לקצה | פורמט UUID — זמין מגרסה v08 |
mandate_id | מזהה הרשאה | זמין מגרסה v10 |
expiry_date_time | חותמת זמן תפוגת הודעה | זמין בגרסה v13 |