Initial commit: Financial Crime domain exemplar
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
# Salesforce CRM
|
||||
|
||||
Salesforce CRM is the customer relationship source for onboarding, profile maintenance, and communication preferences. It contributes party identity, customer profile, and contact data used by KYC and due diligence workflows.
|
||||
|
||||
## Metadata
|
||||
|
||||
```yaml
|
||||
id: salesforce-crm
|
||||
owner: crm.platform@bank.com
|
||||
steward: data.governance@bank.com
|
||||
|
||||
change_model: real-time-cdc
|
||||
change_events:
|
||||
- Customer Created
|
||||
- Customer Updated
|
||||
- Contact Address Updated
|
||||
- Customer Preference Updated
|
||||
|
||||
update_frequency: real-time
|
||||
data_quality_tier: 1
|
||||
status: Production
|
||||
version: "1.0.0"
|
||||
```
|
||||
|
||||
## [Financial Crime](../../domain.md) Feeds
|
||||
|
||||
Canonical Entity | Transform File | Attributes Contributed | Change Model
|
||||
--- | --- | --- | ---
|
||||
[Party](../../entities/party.md#party) | [table_account](transforms/table_account.md) | Party Identifier, Party Status | real-time-cdc
|
||||
[Person](../../entities/person.md#person) | [table_contact](transforms/table_contact.md) | Given Name, Family Name, Date of Birth, PEP Status | real-time-cdc
|
||||
[Company](../../entities/company.md#company) | [table_account](transforms/table_account.md) | Legal Name, Registration Identifier | real-time-cdc
|
||||
[Customer](../../entities/customer.md#customer) | [table_account](transforms/table_account.md) | Customer Number, Onboarding Date, Segment | real-time-cdc
|
||||
[Contact Address](../../entities/contact_address.md#contact-address) | [table_contact_point](transforms/table_contact_point.md) | Address Purpose, Verification Status, Effective Dates | real-time-cdc
|
||||
[Customer Preferences](../../entities/customer-preferences.md#customer-preferences) | [table_preference](transforms/table_preference.md) | Preferred Contact Channel, Marketing Consent | event-driven
|
||||
@@ -0,0 +1,30 @@
|
||||
# [Salesforce CRM](../source.md)
|
||||
|
||||
## Account
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | ExternalPartyId | Text | 40 | | | no | Account-scoped party identifier | Party.Party Identifier
|
||||
2 | RecordStatus | Text | 20 | | | yes | Account lifecycle status from CRM | [Map Party Status](#map-party-status)
|
||||
3 | LegalEntityName | Text | 200 | | | yes | Registered legal entity name | Company.Legal Name
|
||||
4 | CompanyRegistrationNumber | Text | 80 | | | yes | Jurisdictional registration number | Company.Registration Identifier
|
||||
5 | CustomerNumber | Text | 100 | | | yes | CRM customer reference | Customer.Customer Number
|
||||
6 | OnboardingCompletedDate | Date | | | | yes | Date onboarding completed | Customer.Onboarding Date
|
||||
7 | CustomerSegmentCode | Text | 30 | | | yes | Commercial segment classification code | Customer.Segment
|
||||
|
||||
### Map Party Status
|
||||
|
||||
Translates CRM lifecycle status values into canonical party status.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Party · Party Status
|
||||
source:
|
||||
field: Account.RecordStatus
|
||||
cases:
|
||||
Active: "RecordStatus == 'Active'"
|
||||
Inactive: "RecordStatus == 'Inactive'"
|
||||
Suspended: "RecordStatus == 'Suspended'"
|
||||
Closed: "RecordStatus == 'Closed'"
|
||||
fallback: Inactive
|
||||
```
|
||||
@@ -0,0 +1,26 @@
|
||||
# [Salesforce CRM](../source.md)
|
||||
|
||||
## Contact
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | FirstName | Text | 120 | | | yes | Contact given name | Person.Given Name
|
||||
2 | LastName | Text | 120 | | | yes | Contact family name | Person.Family Name
|
||||
3 | Birthdate | Date | | | | yes | Contact date of birth | Person.Date of Birth
|
||||
4 | CompliancePepFlag | Text | 1 | | | yes | PEP indicator from compliance screening | [Derive PEP Status](#derive-pep-status)
|
||||
|
||||
### Derive PEP Status
|
||||
|
||||
Derives politically exposed person status from CRM compliance flag.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Person · PEP Status
|
||||
source:
|
||||
field: Contact.CompliancePepFlag
|
||||
cases:
|
||||
Confirmed: "CompliancePepFlag == 'Y'"
|
||||
Not PEP: "CompliancePepFlag == 'N'"
|
||||
Unknown: "CompliancePepFlag == null"
|
||||
fallback: Unknown
|
||||
```
|
||||
@@ -0,0 +1,41 @@
|
||||
# [Salesforce CRM](../source.md)
|
||||
|
||||
## ContactPoint
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | PurposeCode | Text | 40 | | | yes | Purpose classification for contact point | Contact Address.Address Purpose
|
||||
2 | VerificationResult | Text | 20 | | | yes | Verification workflow result | [Map Verification Status](#map-verification-status)
|
||||
3 | ValidFromDate | Date | | | | yes | Effective-from date | [Derive Effective Dates](#derive-effective-dates)
|
||||
4 | ValidToDate | Date | | | | yes | Effective-to date | [Derive Effective Dates](#derive-effective-dates)
|
||||
|
||||
### Map Verification Status
|
||||
|
||||
Maps verification outcome from CRM verification workflow.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Contact Address · Verification Status
|
||||
source:
|
||||
field: ContactPoint.VerificationResult
|
||||
cases:
|
||||
Verified: "VerificationResult == 'PASS'"
|
||||
Pending: "VerificationResult == 'PENDING'"
|
||||
Failed: "VerificationResult == 'FAIL'"
|
||||
fallback: Pending
|
||||
```
|
||||
|
||||
### Derive Effective Dates
|
||||
|
||||
Builds effective date range token from valid-from and valid-to values.
|
||||
|
||||
```yaml
|
||||
type: derived
|
||||
target: Contact Address · Effective Dates
|
||||
expression: "coalesce(Valid From, '') + '|' + coalesce(Valid To, '')"
|
||||
inputs:
|
||||
Valid From:
|
||||
field: ContactPoint.ValidFromDate
|
||||
Valid To:
|
||||
field: ContactPoint.ValidToDate
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
# [Salesforce CRM](../source.md)
|
||||
|
||||
## Preference
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | PreferredChannelCode | Text | 30 | | | yes | Preferred communication channel code | Customer Preferences.Preferred Contact Channel
|
||||
2 | MarketingOptInFlag | Text | 1 | | | yes | Opt-in indicator for marketing messages | [Map Marketing Consent](#map-marketing-consent)
|
||||
|
||||
### Map Marketing Consent
|
||||
|
||||
Maps marketing consent flag into canonical consent status.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Customer Preferences · Marketing Consent
|
||||
source:
|
||||
field: Preference.MarketingOptInFlag
|
||||
cases:
|
||||
Consented: "MarketingOptInFlag == 'Y'"
|
||||
Declined: "MarketingOptInFlag == 'N'"
|
||||
Unknown: "MarketingOptInFlag == null"
|
||||
fallback: Unknown
|
||||
```
|
||||
@@ -0,0 +1,36 @@
|
||||
# SAP Fraud Management
|
||||
|
||||
SAP Fraud Management is the analytical source for fraud and suspicious activity detection signals. It contributes risk outcomes and case-oriented enrichment used by AML, KYC, and transaction monitoring controls.
|
||||
|
||||
## Metadata
|
||||
|
||||
```yaml
|
||||
id: sap-fraud-management
|
||||
owner: fraud.operations@bank.com
|
||||
steward: compliance.officer@bank.com
|
||||
|
||||
change_model: event-driven
|
||||
change_events:
|
||||
- Fraud Alert Raised
|
||||
- Fraud Alert Closed
|
||||
- Transaction Risk Scored
|
||||
- Case Escalated
|
||||
|
||||
update_frequency: real-time
|
||||
data_quality_tier: 2
|
||||
status: Production
|
||||
version: "1.0.0"
|
||||
|
||||
tags:
|
||||
- Fraud
|
||||
- AML
|
||||
- Financial Crime
|
||||
```
|
||||
|
||||
## [Financial Crime](../../domain.md) Feeds
|
||||
|
||||
Canonical Entity | Transform File | Attributes Contributed | Change Model
|
||||
--- | --- | --- | ---
|
||||
[Transaction](../../entities/transaction.md#transaction) | [table_alert_case](transforms/table_alert_case.md) | Financial Crime Risk Score, Monitoring Outcome, Alert Reference | event-driven
|
||||
[Party](../../entities/party.md#party) | [table_sanctions_screening](transforms/table_sanctions_screening.md) | Sanctions Screen Status, Watchlist Match Indicator | batch-intraday
|
||||
[Customer](../../entities/customer.md#customer) | [table_customer_risk_profile](transforms/table_customer_risk_profile.md) | Risk Review Flag, Enhanced Due Diligence Trigger | event-driven
|
||||
@@ -0,0 +1,37 @@
|
||||
# [SAP Fraud Management](../source.md)
|
||||
|
||||
## AlertCase
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | TxRiskScore | Decimal | | 18 | 6 | yes | Computed transaction ML/TF risk score | Transaction.Financial Crime Risk Score
|
||||
2 | DecisionStatus | Text | 30 | | | yes | Alert workflow decision status | [Map Monitoring Outcome](#map-monitoring-outcome)
|
||||
3 | CaseId | Text | 64 | | | no | Unique SAP alert case identifier | Transaction.Alert Reference
|
||||
|
||||
### Map Monitoring Outcome
|
||||
|
||||
Maps alert decision outcome into canonical monitoring outcome.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Transaction · Monitoring Outcome
|
||||
source:
|
||||
field: AlertCase.DecisionStatus
|
||||
cases:
|
||||
Escalated: "DecisionStatus == 'ESCALATED'"
|
||||
Cleared: "DecisionStatus == 'CLEARED'"
|
||||
Under Review: "DecisionStatus == 'OPEN'"
|
||||
fallback: Under Review
|
||||
```
|
||||
|
||||
### Map Alert Reference
|
||||
|
||||
Maps SAP alert case identifier for downstream investigations.
|
||||
|
||||
```yaml
|
||||
type: direct
|
||||
target: Transaction · Alert Reference
|
||||
source:
|
||||
field: AlertCase.CaseId
|
||||
cast: string
|
||||
```
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# [SAP Fraud Management](../source.md)
|
||||
|
||||
## CustomerRiskProfile
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | ReviewRequiredFlag | Boolean | | | | yes | Indicates whether formal review is required | Customer.Risk Review Flag
|
||||
2 | EddTriggerCode | Text | 20 | | | yes | Enhanced due diligence trigger status code | [Map Enhanced Due Diligence Trigger](#map-enhanced-due-diligence-trigger)
|
||||
|
||||
### Map Enhanced Due Diligence Trigger
|
||||
|
||||
Derives EDD trigger based on high-risk profile and unresolved alerts.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Customer · Enhanced Due Diligence Trigger
|
||||
source:
|
||||
field: CustomerRiskProfile.EddTriggerCode
|
||||
cases:
|
||||
Triggered: "EddTriggerCode == 'TRIGGERED'"
|
||||
Not Triggered: "EddTriggerCode == 'NOT_TRIGGERED'"
|
||||
Pending: "EddTriggerCode == 'PENDING'"
|
||||
fallback: Pending
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
# [SAP Fraud Management](../source.md)
|
||||
|
||||
## SanctionsScreening
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | ResultCode | Text | 32 | | | yes | Screening engine outcome code | [Map Sanctions Screen Status](#map-sanctions-screen-status)
|
||||
2 | MatchFlag | Boolean | | | | yes | Whether a watchlist match was detected | Party.Watchlist Match Indicator
|
||||
|
||||
### Map Sanctions Screen Status
|
||||
|
||||
Maps sanctions screening outcome from SAP sanctions service.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Party · Sanctions Screen Status
|
||||
source:
|
||||
field: SanctionsScreening.ResultCode
|
||||
cases:
|
||||
Clear: "ResultCode == 'CLEAR'"
|
||||
Potential Match: "ResultCode == 'POTENTIAL_MATCH'"
|
||||
Confirmed Match: "ResultCode == 'CONFIRMED_MATCH'"
|
||||
fallback: Clear
|
||||
```
|
||||
@@ -0,0 +1,38 @@
|
||||
# Temenos Payment
|
||||
|
||||
Temenos Payment is the operational source for payment initiation and execution records. It emits high-volume transaction changes used for financial crime monitoring and downstream payment analytics.
|
||||
|
||||
## Metadata
|
||||
|
||||
```yaml
|
||||
id: temenos-payment
|
||||
owner: payments.platform@bank.com
|
||||
steward: data.governance@bank.com
|
||||
|
||||
change_model: real-time-cdc
|
||||
change_events:
|
||||
- Payment Initiated
|
||||
- Payment Executed
|
||||
- Payment Reversed
|
||||
- Payment Rejected
|
||||
|
||||
update_frequency: real-time
|
||||
data_quality_tier: 1
|
||||
status: Production
|
||||
version: "1.0.0"
|
||||
|
||||
tags:
|
||||
- Payments
|
||||
- Core Banking
|
||||
- Financial Crime
|
||||
```
|
||||
|
||||
## [Financial Crime](../../domain.md) Feeds
|
||||
|
||||
Canonical Entity | Transform File | Attributes Contributed | Change Model
|
||||
--- | --- | --- | ---
|
||||
[Transaction](../../entities/transaction.md#transaction) | [table_payment_event](transforms/table_payment_event.md) | Transaction Identifier, Amount, Currency, Execution Timestamp, Status | real-time-cdc
|
||||
[Account](../../entities/account.md#account) | [table_account_ref](transforms/table_account_ref.md) | Account Identifier, Account Status, Product Identifier | real-time-cdc
|
||||
[Payment Initiator](../../entities/payment_initiator.md#payment-initiator) | [table_initiation](transforms/table_initiation.md) | Initiator Role Identifier, Initiation Channel | event-driven
|
||||
[Payer](../../entities/payer.md#payer) | [table_payment_parties](transforms/table_payment_parties.md) | Payer Role Identifier | event-driven
|
||||
[Payee](../../entities/payee.md#payee) | [table_payment_parties](transforms/table_payment_parties.md) | Payee Role Identifier | event-driven
|
||||
@@ -0,0 +1,25 @@
|
||||
# [Temenos Payment](../source.md)
|
||||
|
||||
## AccountRef
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | AccountNumber | Text | 34 | | | no | Account reference number | Account.Account Identifier
|
||||
2 | AccountState | Text | 20 | | | yes | Lifecycle/account servicing state | [Map Account Status](#map-account-status)
|
||||
3 | ProductCode | Text | 30 | | | yes | Linked product code | Account.Product Identifier
|
||||
|
||||
### Map Account Status
|
||||
|
||||
Maps account servicing status from Temenos account state.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Account · Account Status
|
||||
source:
|
||||
field: AccountRef.AccountState
|
||||
cases:
|
||||
Active: "AccountState == 'ACTIVE'"
|
||||
Frozen: "AccountState == 'FROZEN'"
|
||||
Closed: "AccountState == 'CLOSED'"
|
||||
fallback: Active
|
||||
```
|
||||
@@ -0,0 +1,25 @@
|
||||
# [Temenos Payment](../source.md)
|
||||
|
||||
## Initiation
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | ActorRoleId | Text | 64 | | | no | Role identifier that initiated payment | Payment Initiator.Initiator Role Identifier
|
||||
2 | ChannelCode | Text | 20 | | | yes | Channel where initiation occurred | [Map Initiation Channel](#map-initiation-channel)
|
||||
|
||||
### Map Initiation Channel
|
||||
|
||||
Maps channel used to initiate payment to canonical channel.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Payment Initiator · Initiation Channel
|
||||
source:
|
||||
field: Initiation.ChannelCode
|
||||
cases:
|
||||
Branch: "ChannelCode == 'BRANCH'"
|
||||
Mobile: "ChannelCode == 'MOBILE'"
|
||||
Internet Banking: "ChannelCode == 'ONLINE'"
|
||||
API: "ChannelCode == 'API'"
|
||||
fallback: API
|
||||
```
|
||||
@@ -0,0 +1,28 @@
|
||||
# [Temenos Payment](../source.md)
|
||||
|
||||
## PaymentEvent
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | PaymentId | Text | 64 | | | no | Unique payment event identifier | Transaction.Transaction Identifier
|
||||
2 | SettlementAmount | Decimal | | 18 | 4 | no | Settled payment amount | Transaction.Amount
|
||||
3 | SettlementCurrency | Text | 3 | | | no | ISO currency code | Transaction.Currency
|
||||
4 | ExecutionDateTime | DateTime | | | | yes | Timestamp at execution | Transaction.Execution Timestamp
|
||||
5 | PaymentStatus | Text | 20 | | | yes | Payment lifecycle status | [Map Status](#map-status)
|
||||
|
||||
### Map Status
|
||||
|
||||
Maps payment state into canonical transaction status.
|
||||
|
||||
```yaml
|
||||
type: conditional
|
||||
target: Transaction · Status
|
||||
source:
|
||||
field: PaymentEvent.PaymentStatus
|
||||
cases:
|
||||
Pending: "PaymentStatus == 'PENDING'"
|
||||
Completed: "PaymentStatus == 'EXECUTED'"
|
||||
Reversed: "PaymentStatus == 'REVERSED'"
|
||||
Rejected: "PaymentStatus == 'REJECTED'"
|
||||
fallback: Pending
|
||||
```
|
||||
@@ -0,0 +1,8 @@
|
||||
# [Temenos Payment](../source.md)
|
||||
|
||||
## PaymentParties
|
||||
|
||||
Pos | Column Name | Data Type | Max Len | Precision | Scale | Nulls | Comment | Destination
|
||||
--- | --- | --- | --- | --- | --- | --- | --- | ---
|
||||
1 | DebtorRoleId | Text | 64 | | | no | Debtor role identifier in payment context | Payer.Payer Role Identifier
|
||||
2 | CreditorRoleId | Text | 64 | | | no | Creditor role identifier in payment context | Payee.Payee Role Identifier
|
||||
Reference in New Issue
Block a user