Μετάβαση στο περιεχόμενο

Provider × Error scenario matrix

Συγκεντρωτικός πίνακας: για κάθε από τους 23 providers, ποιο HTTP status code παίρνει ο consumer σε κάθε από τα 6 σενάρια. Όλες οι τιμές παράγονται από τη ροή <Provider>ErrorHelper.TranslateGlobalExceptionHandlingMiddleware.

Σενάρια

# Σενάριο Περιγραφή
BUS Business rejection Provider rule failed (validation, duplicate, declined risk, κ.λπ.) — επιστρέφει έγκυρο error envelope
SOAP-FAULT SOAP fault Provider SOAP server πέταξε fault (auth, throttle, schema mismatch, κ.λπ.)
NET Network failure DNS lookup fail, TCP reset, connection refused, endpoint unreachable
HTTP-5xx Upstream 5xx REST provider γύρισε 500/502/503
HTTP-4xx Upstream 4xx no envelope REST provider γύρισε 400/401/403 χωρίς parsable error body
TIMEOUT Upstream timeout HttpClient/WCF timeout ή client cancellation

Master matrix

Provider Protocol BUS SOAP-FAULT NET HTTP-5xx HTTP-4xx TIMEOUT
Allianz REST 422 (X-Error header) N/A 502 502 (providerStatusCode) 502 (providerStatusCode) 504
Apeiron SOAP 422 502 502 N/A N/A 504
Atlanet SOAP 422 (MessageSeverity) 502 502 N/A N/A 504
ErgoHellas SOAP 422 (SAP envelope) 502 502 N/A N/A 504
Ethniki SOAP 422 (filler1=Y) 502 502 N/A N/A 504
Eurolife REST 422 (Success=false) N/A 502 502 (providerStatusCode) 502 (providerStatusCode) 504
Euroins SOAP 422 (ServiceError L≥2) 502 502 N/A N/A 504
Europe SOAP 422 (executor IsSuccess) 502 502 N/A N/A 504
EuroSos REST 422 (HTTP 400) N/A 502 502 (providerStatusCode) 502 (providerStatusCode) 504
Extra SOAP 422 (ExtraResultParser) 502 502 N/A N/A 504
Generali SOAP 422 (Report.Valid=false) 502 502 N/A N/A 504
Groupama REST 422 (envelope) N/A 502 502 (providerStatusCode) 502 (providerStatusCode) 504
Interamerican SOAP 422 (executor IsSuccess) 502 502 N/A N/A 504
Interfast SOAP 422 (parser + checks) 502 502 N/A N/A 504
InterLife SOAP 422 (ResponseResultCode≠0) 422 (wrapped) 502 N/A N/A 504
Intersalonica SOAP 422 (executor IsSuccess) 502 502 N/A N/A 504
Minetta SOAP 422 (ErrorMessages[]) 502 502 N/A N/A 504
Mondial SOAP 422 (response_status NOTOK/NOK) 422 (wrapped) 502 N/A N/A 504
Orizon SOAP 422 (ServiceError L≥2) 502 502 N/A N/A 504
PersonalIns SOAP 422 (Messages[]) 422 (wrapped) 502 N/A N/A 504
Soeasy REST 422 (envelope) N/A 502 502 (providerStatusCode) 502 (providerStatusCode) 504
Totalware REST 422 (Errors[] envelope) N/A 502 502 (providerStatusCode) 502 (providerStatusCode) 504
Ydrogeios SOAP 422 (ServiceError L≥2) 502 502 N/A N/A 504

Outliers

Οι InterLife, Mondial, PersonalIns μαπάρουν FaultException σε ProviderBusinessException (422 αντί 502). Λόγος: ο upstream SOAP fault συχνά μεταφέρει validation message ασφαλές για end-user. Όλοι οι υπόλοιποι SOAP providers θεωρούν το FaultException transport-level (502).

Note ανά protocol

  • REST providers (Allianz, Eurolife, EuroSos, Groupama, Soeasy, Totalware): μαπάρουν HttpRequestException/non-2xx σε ProviderApiException με UpstreamStatusCode. Στο 502 response εμφανίζεται extension providerStatusCode με το upstream HTTP status (401, 500, 503, κ.λπ.). Το BUS σενάριο εντοπίζεται είτε με header (Allianz X-Error), με HTTP 400 (EuroSos), ή με envelope inspection (Eurolife Success=false, Totalware Errors[], Groupama / Soeasy).
  • SOAP providers (οι υπόλοιποι 17): οι WCF exceptions (FaultException, CommunicationException, EndpointNotFoundException, TimeoutException) γίνονται ProviderApiException → 502/504. Δεν έχουν providerStatusCode extension — το πεδίο δεν εφαρμόζεται φυσικά στο SOAP (δεν υπάρχει numeric upstream status κατά τη διάρκεια του fault).

Πώς αξιοποιείται ο πίνακας

Per-endpoint retry strategy

Ο consumer μπορεί να χρησιμοποιήσει αυτό το matrix για να σχεδιάσει per-endpoint retry strategies. Όπου εμφανίζεται N/A, το σενάριο δεν εφαρμόζεται φυσικά για αυτόν τον provider (πχ SOAP fault σε REST provider, HTTP-5xx σε SOAP WCF endpoint).

  • 422: ποτέ retry — διορθώστε το input και ξαναστείλτε.
  • 502 / 504: idempotent retries OK με exponential backoff. Δείτε το providerStatusCode (REST providers) για observability — όχι για logic.
  • 500: σπάνιο. Υποδεικνύει ότι ένα exception δεν έγινε translate από τον provider helper — αξίζει escalation με το correlationId.

Σχετικά docs

  • Error handling — γενικό envelope contract και status code semantics

Πηγές

Για να επιβεβαιώσετε ή να ενημερώσετε τον πίνακα ανά provider, δείτε:

  • src/Estia.API.Providers.<Name>/Helpers/<Name>ErrorHelper.cs — translation rules ανά exception type
  • src/Estia.API.Infrastructure/Middleware/GlobalExceptionHandlingMiddleware.cs — final mapping σε HTTP status και ProblemDetails
  • Για REST providers, το <Name>ServiceBase (πχ AllianzServiceBase.EnsureAllianzSuccessAsync) περιέχει την business envelope detection