packages/FinevoConnect.Yos.Shared — Ortak Çekirdek
İki uygulamanın paylaştığı tek doğruluk kaynağı: varlıklar (durum makineleri), enum'lar, sabitler, arayüzler, model'ler ve EF şeması. Tüm ID'ler tipli (UserId, HhsConnectionId...) ve düz-string olarak serileştirilir.
Varlıklar (durum makineleri)
Her varlık, geçersiz durum geçişlerini engelleyen guard'lı metotlara sahiptir.
HhsConnectionEntities · tablo HhsConnectionsBir kullanıcının bir bankaya/kuruma rızası (durum makinesi). Şifreli token'lar (owned PaymentConsentTokenSet), GroupId, RowVersion. (UserId,HhsId) 'connected' filtered unique.
| MarkConsentCreated / MarkAuthorized / MarkConnected / MarkConvertedToOrder / MarkCancelled(detay kodu) / MarkExpired / MarkFailed / MarkConsentStatusSynced / IsConnected |
SyncIntentEntities · tablo SyncIntentsNiyet kutusu (outbox). Payload (JSON, polymorphic), GroupId, TraceId, AttemptCount. Index (Status,NextAttemptTime,CreateTime).
| MarkDispatched (AttemptCount++) / MarkConsumed / MarkRetryScheduled(reason,next) / MarkDead(reason) |
ClientApplication + User + RefreshTokenEntities · Applications/Users/RefreshTokensİstemci uygulama (AppKeyHash — X-App-Key ile doğrulanır; AllowedRedirectHosts — istekle gelen dönüş adresleri için izinli host listesi, noktalı virgül ayrık, en fazla 10) + kullanıcı (ApplicationId + UserKey + CustomerNo benzersiz üçlüsü, tercih dili) + yenileme token'ları.
| ClientApplication: RotateKey / Suspend / IsActive / SetAllowedRedirectHosts / IsRedirectHostAllowed | |
| User: Suspend / IsActive | |
| RefreshToken: IsActive(now) / Revoke(now) |
HhsEntities · tablo HhsBanka/Kurum ana verisi: kod, ad, BaseUrl, JWKS URL, YÖS kod, olay-abonelik referansı.
| Enable / Disable / SetEventSubscriptionReference / IsEnabled |
Account + TransactionEntities · Accounts/TransactionsHesap (IBAN maskeli+şifreli, owned Balance, senkron zamanları) + işlem geçmişi (KeysetSeq sayfalama, yön).
| Account: SyncSnapshot / MarkTransactionsSynced |
Card + alt tablolarEntities · Cards/CardDetail/...Kart (maskeli PAN, tür/segment) + detay + işlem + ekstre-tipi + taksit + puan (5 alt tablo).
| Card: SyncSnapshot |
PaymentOrderEntities · PaymentOrdersÖdeme emri (durum makinesi); alıcı bilgisi (şifreli IBAN), tutar, PaymentSystem (banka/kurum belirler), idempotency key unique, keyset.
| MarkConsentCreated / StoreTokens / MarkSubmitted(ref,status,odmStm) / UpdateStatus / MarkFailed |
RecurringPayment + ExecutionEntities · RecurringPaymentsDüzenli ödeme talimatı (sıklık, ödeme sayısı, sonraki tarih) + her gerçekleşme kaydı.
| AttachInstruction / SyncStatus / Cancel / Complete / MarkFailed |
ForwardDatedPaymentEntities · ForwardDatedPaymentsİleri tarihli ödeme (planlanan tarih, durum makinesi).
| AttachInstruction / MarkExecuted / Cancel / SyncStatus / MarkFailed |
HhsQueryQuotaEntities · HhsQueryQuotasBağlantı+sorgu-tipi başına kota penceresi (CallCount/Limit, WindowStart/ResetTime).
| RegisterCall / IsExhausted |
Outbox / OutboxConsumed / Idempotency / AuditLogEntities · altyapıOlay yayını + tüketim işareti; Idempotency (key+user PK, reserve→complete); denetim izi.
| Outbox: MarkInFlight/Delivered/Retry/Dead | |
| Idempotency: Complete / IsCompleted |
Enum'lar (yaşam döngüsü + protokol)
| Enum | Değerler / akış |
|---|---|
ConnectionStatus | Pending → Authorized → Connected → ConvertedToOrder / Cancelled / Expired / Failed |
SyncIntentStatus | Pending → Dispatched → Consumed / Failed |
PaymentOrderStatus | Pending → ApprovedPending → Sent → Processing → Completed / PartiallyCompleted / Cancelled / Failed |
RecurringPaymentStatus | PendingAuthorization / Active / Paused / Cancelled / Completed / Failed |
ForwardDatedPaymentStatus | PendingAuthorization → Scheduled → Executed / Failed / Cancelled |
ConsentType | AccountInformation / Payment / Recurring / ForwardDated |
GkdMethod | Redirect / Decoupled |
IdentityType | Tckn / Vkn / Mno / Ykn / Pno |
PsuInitiator → wire | UserPresent=E · HhsInitiated=O · Autonomous=H |
RefreshReason → PSU | UserRequested→E · Autonomous→H · EventTriggered→O |
LiveQueryKind | Accounts / AccountTransactions / Cards / CardDetail / CardTransactions / ConnectionStatus |
SyncIntentKind | ConsentCreate / AuthorizationComplete / InitialFetch / BalanceRefresh / TransactionRefresh / CardRefresh / ConsentStatusSync / PaymentOrderSubmit / *AuthorizationComplete / *Cancel / RecurringPlanSync / ForwardDatedStatusSync ... |
OhvpsPermission | BasicAccount(01) / DetailedAccount(02) / Balance(03) / BasicTransaction(04) / DetailedTransaction(05) / RealtimeBalance(06) / CardInfo(07) / DetailedCardInfo(08) / CardTransaction(09) |
TransactionDirection | Debit / Credit / Neutral |
DataFreshness | Live / Cached / Stale |
Sabit aileleri (Domain/Constants)
İş kodunda çıplak string/sayı yok — her değer tipli bir sabitin arkasında (ADR-YOS-055 istisnası: public route template'leri düz literal).
OhvpsPathsConstants/ApiÖHVPS wire path'leri (EN const adı ↔ TR path). HBH: erisim-belirteci, hesap-bilgisi-rizasi, hesaplar, bakiye, kartlar, islemler, yetkilendirme-kodu, olay-abonelik. OBH: odeme-emri-rizasi, odeme-emri, duzenli-*, ileri-tarihli-*.
OhvpsPsuValuesConstants/ApipsuInitiated wire: UserPresent=E, HhsInitiated=O, Autonomous=H + PsuInitiatorToWire sözlüğü.
ApiHeadersConstants/ApiIdempotency-Key, x-request-id, x-group-id, X-ASPSP/TPP-Code, x-jws-signature, PSU-* , X-Internal-Secret.
YosErrorCodesConstants/Errors49 hata kodu (dot.snake_case) — error.redirect_url.{invalid,host_not_allowed} dahil. Errors.{tr,en}.json ile eşleşir.
ConfigKeysConstants/ConfigurationEnv/config anahtarları: JWT_SIGNING_KEY, OHVPS_*, BATCH_LIVE_QUERY_*, DataProtection.
Limits aileleriConstants/LimitsConsentLimits (yetki-timeout, erişim-ay), PaymentLimits (tutar, min-ödeme-sayısı), OhvpsQueryLimits (kota tavanları + pencere), ConsumerRedirectLimits (URL 2048, host 10, ';' ayraç), LiveFetchWaitLimits, PagingLimits.
OhvpsPermissionRules / OhvpsQueryWindowRules / ConsumerRedirectUrlRulesCommonİzin bağımlılık kuralları (01/07 zorunlu, 05→04, 06→03...) + işlem sorgu penceresi (PSU-present bireysel 6ay/kurumsal 12ay; sistem 24s; ±12ay çapa) + dönüş adresi biçim kuralları (mutlak URL, ≤2048, https — http yalnız localhost).
Arayüzler (Abstractions)
Repository arayüzleri (~20)Abstractions/RepositoriesIHhsConnectionRepository, ISyncIntentRepository, IAccountRepository, ICardRepository, IPaymentOrderRepository, IHhsQueryQuotaRepository, IIdempotencyStore, IOutboxStore, IInboundEventStore... Veri erişimi.
Servis arayüzleriAbstractions/ServicesIHhsConnectionService, IAccountAggregationService, ICardService, I*PaymentService, ISyncIntentService, ILiveRefreshCoordinator, IConsentActivationService, ILiveQueryService, IConnectionSyncService.
Entegrasyon arayüzleriAbstractions/IntegrationIOhvps{Consent,Account,Payment,Token,Event}Client(+Factory), IJwsSigner/Verifier, IOhvpsRequestContext, ILiveQueryClient, IHhsResolver, IYosCallbackUrlProvider.
Yardımcı arayüzleriAbstractionsIClock, IIdGenerator, ITokenProtector, ICurrentUser, IUnitOfWork, IAppKeyHasher, IJwtTokenGenerator, IFeatureFlags, IExceptionLogger.
Persistence (FinevoConnect.Yos.Shared.Persistence)
AppDbContext + 25 tablo
EF Core 10 code-first. Her tablo bir IEntityTypeConfiguration. Tam PascalCase (tablo+kolon). datetime2(7), decimal(18,2), enum nvarchar + HasConversion<string>.
Eşzamanlılık + indeks
RowVersion (iyimser kilit), keyset sayfalama indeksleri (KeysetSeq), filtered unique (rıza 'connected', idempotency key). Owned tipler: PaymentConsentTokenSet, Balance.