Initial commit: Financial Crime domain exemplar
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Account
|
||||
|
||||
An Account represents a financial record used to hold balances and process debits and credits for a customer relationship. In a dimensional model, Account is a key slowly-changing dimension — its status, type, and currency are required attributes for transaction risk analytics and account-level monitoring.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Account{
|
||||
* Account Identifier : string
|
||||
Account Number : string
|
||||
Account Type : enum~AccountType~
|
||||
Account Status : enum~AccountStatus~
|
||||
Opened Date : date
|
||||
Closed Date : date
|
||||
}
|
||||
|
||||
Customer "0..*" --> "0..*" Account : holds
|
||||
Account "0..*" --> "1" Product : instance of
|
||||
Account "0..*" --> "1" Currency : denominated in
|
||||
Branch "1" --> "0..*" Account : services
|
||||
|
||||
class AccountType["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#account-type'>Account Type</a>"]{<<enumeration>>}
|
||||
class AccountStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#account-status'>Account Status</a>"]{<<enumeration>>}
|
||||
|
||||
class Customer["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/customer.md'>Customer</a>"]
|
||||
class Product["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/product.md'>Product</a>"]
|
||||
class Currency["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/currency.md'>Currency</a>"]
|
||||
class Branch["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/branch.md'>Branch</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
temporal:
|
||||
tracking: valid_time
|
||||
description: >
|
||||
Account status transitions (e.g., Active → Frozen → Active) must be tracked
|
||||
with valid time to support point-in-time regulatory queries such as "was this
|
||||
account frozen at the time of this transaction?". Opened Date and Closed Date
|
||||
serve as the outer valid time boundaries.
|
||||
attributes:
|
||||
Account Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: >
|
||||
Globally unique surrogate identifier for this account across all systems.
|
||||
Immutable once assigned.
|
||||
|
||||
Account Number:
|
||||
type: string
|
||||
description: >
|
||||
Human-facing account number as presented to the customer. May follow BSB+account
|
||||
format for Australian accounts or IBAN format for international accounts.
|
||||
|
||||
Account Type:
|
||||
type: enum:Account Type
|
||||
description: >
|
||||
Classification of the account by its primary purpose and product characteristics
|
||||
(e.g., Savings, Current, Term Deposit, Loan). Used as a dimension key in transaction
|
||||
risk analytics — different account types have different expected transaction patterns
|
||||
and applicable AML typologies.
|
||||
|
||||
Account Status:
|
||||
type: enum:Account Status
|
||||
description: >
|
||||
The current operational lifecycle state of the account. Frozen and Suspended statuses
|
||||
are set by compliance or fraud operations and must be tracked with their effective dates
|
||||
to support regulatory audit. Closed accounts must be retained — they must not be deleted.
|
||||
|
||||
Opened Date:
|
||||
type: date
|
||||
description: >
|
||||
Date the account was opened and became operational. Establishes the start of the
|
||||
account's valid time period. Used in dormancy calculations and account age risk factors.
|
||||
|
||||
Closed Date:
|
||||
type: date
|
||||
description: >
|
||||
Date the account was permanently closed. A null value indicates the account is still
|
||||
open. Accounts must not be deleted — the Closed Date and a status of Closed is the
|
||||
only permitted termination mechanism.
|
||||
```
|
||||
|
||||
```yaml
|
||||
constraints:
|
||||
Closed Account Requires Closed Date:
|
||||
check: >
|
||||
Account Status != 'Closed'
|
||||
OR Closed Date IS NOT NULL
|
||||
description: >
|
||||
An account with status Closed must have a Closed Date recorded to preserve
|
||||
valid time integrity.
|
||||
Closed Date After Opened Date:
|
||||
check: "Closed Date IS NULL OR Closed Date > Opened Date"
|
||||
description: >
|
||||
An account's closure date must be later than its opening date.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
pii: false
|
||||
classification: Highly Confidential
|
||||
retention: 10 years
|
||||
retention_basis: Domain default retention aligned to AML/CTF record-keeping obligations
|
||||
description: >
|
||||
Account records must be retained for 7 years from Closed Date, aligned to AUSTRAC
|
||||
AML/CTF Act 2006 record-keeping obligations. Accounts must not be deleted — closure
|
||||
via Closed Date and status update is the only permitted termination mechanism.
|
||||
access_role:
|
||||
- FINANCIAL_CRIME_ANALYST
|
||||
- KYC_OFFICER
|
||||
- COMPLIANCE_OFFICER
|
||||
- RELATIONSHIP_MANAGER
|
||||
compliance_relevance:
|
||||
- AUSTRAC AML/CTF Act 2006 — Part B account record-keeping
|
||||
- AUSTRAC AML/CTF Amendment Act 2024
|
||||
- RBNZ AML/CFT Act 2009 — section 58
|
||||
- FATF Recommendation 10 — Customer Due Diligence
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Account Holds Product
|
||||
|
||||
An Account is an instance of one Product definition.
|
||||
|
||||
```yaml
|
||||
source: Account
|
||||
type: references
|
||||
target: Product
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Account
|
||||
```
|
||||
|
||||
### Account Denominated In Currency
|
||||
An Account is denominated in exactly one Currency. All balances and transaction amounts on the account are expressed in this currency.
|
||||
```yaml
|
||||
source: Account
|
||||
type: references
|
||||
target: Currency
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Account
|
||||
```
|
||||
@@ -0,0 +1,126 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Address
|
||||
|
||||
An Address is the canonical record of a physical or postal location. It holds only the structured components of the location itself — no party association, no purpose, no verification metadata. Those belong on Contact Address.
|
||||
|
||||
Separating Address from Contact Address enables deduplication: a single Address record serves as the reference point for all parties associated with that location. This is significant in a financial crime context — when two or more unrelated parties share the same Address, that shared reference is a detectable network signal without requiring any fuzzy address matching across duplicated strings.
|
||||
|
||||
Address records are reference data. They are not owned by any party and must not be modified when a party changes their address — instead the party's Contact Address is closed and a new one opened referencing the correct Address record.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Address{
|
||||
* Address Identifier : string
|
||||
Address Type : enum~AddressType~
|
||||
Address Line 1 : string
|
||||
Address Line 2 : string
|
||||
Suburb : string
|
||||
City : string
|
||||
State Or Region : string
|
||||
Postcode : string
|
||||
Country : string
|
||||
}
|
||||
|
||||
ContactAddress "0..*" --> "1" Address : references
|
||||
|
||||
class AddressType["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#address-type'>Address Type</a>"]{<<enumeration>>}
|
||||
|
||||
class ContactAddress["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/contact_address.md'>Contact Address</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: independent
|
||||
mutability: reference
|
||||
attributes:
|
||||
Address Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: >
|
||||
Globally unique surrogate identifier for this physical location record. Immutable once assigned. Multiple parties may reference the same Address Identifier via their Contact Address records.
|
||||
|
||||
Address Type:
|
||||
type: enum:Address Type
|
||||
description: >
|
||||
The structural type of the address. Determines which fields are applicable — a PO Box does not have Address Line 1 in the same sense as a street address, and an Overseas Address may not have a State Or Region.
|
||||
|
||||
Address Line 1:
|
||||
type: string
|
||||
description: >
|
||||
The primary street address line, typically including street number and street name. For PO Box addresses, the PO Box number.
|
||||
|
||||
Address Line 2:
|
||||
type: string
|
||||
description: >
|
||||
Secondary address line for suite, level, unit, or building name where applicable.
|
||||
|
||||
Suburb:
|
||||
type: string
|
||||
description: >
|
||||
The suburb or locality component of the address. Retained as a distinct field from City to support Australian and New Zealand address formats where suburb and city are separate concepts.
|
||||
|
||||
City:
|
||||
type: string
|
||||
description: >
|
||||
The city or town. For addresses in Australia and New Zealand this is typically the metropolitan area (e.g., Sydney, Auckland) where distinct from the suburb.
|
||||
|
||||
State Or Region:
|
||||
type: string
|
||||
description: >
|
||||
The state, territory, or region. For Australia: NSW, VIC, QLD, etc. For New Zealand: region name. For international addresses: the equivalent administrative subdivision.
|
||||
|
||||
Postcode:
|
||||
type: string
|
||||
description: >
|
||||
The postal code. Stored as a string to preserve leading zeros and support international formats.
|
||||
|
||||
Country:
|
||||
type: string
|
||||
description: >
|
||||
The country in which the address is located, as an ISO 3166-1 alpha-2 country code. Mandatory for all address types.
|
||||
```
|
||||
|
||||
```yaml
|
||||
constraints:
|
||||
Country Required:
|
||||
not_null: Country
|
||||
description: >
|
||||
Every address must have a country. Country is the minimum information
|
||||
required for jurisdiction risk assessment.
|
||||
|
||||
Street Address Requires Address Line 1:
|
||||
check: >
|
||||
Address Type != 'Street Address'
|
||||
OR Address Line 1 IS NOT NULL
|
||||
description: >
|
||||
A street address must have at least Address Line 1 populated.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
pii: false
|
||||
classification: Confidential
|
||||
retention: 10 years
|
||||
retention_basis: Domain default retention aligned to AML/CTF record-keeping obligations
|
||||
description: >
|
||||
Address records must be retained for 7 years from the date the last Contact Address referencing this record is closed. Address records must not be modified or deleted — they are immutable reference data.
|
||||
Changes to an address (e.g., a street renamed) should result in a new Address record; existing Contact Address records are not retrospectively updated so that historical point-in-time queries remain accurate.
|
||||
access_role:
|
||||
- FINANCIAL_CRIME_ANALYST
|
||||
- KYC_OFFICER
|
||||
- COMPLIANCE_OFFICER
|
||||
- RELATIONSHIP_MANAGER
|
||||
compliance_relevance:
|
||||
- AUSTRAC AML/CTF Act 2006 — Part B address record-keeping
|
||||
- RBNZ AML/CFT Act 2009 — section 58
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Address in the current domain model.
|
||||
@@ -0,0 +1,81 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Agreement
|
||||
|
||||
An Agreement defines the formal contractual terms that govern relationships between party roles and financial products.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Agreement{
|
||||
* Agreement Identifier : string
|
||||
Agreement Number : string
|
||||
Agreement Status : enum~AgreementStatus~
|
||||
Effective Date : date
|
||||
Maturity Date : date
|
||||
}
|
||||
|
||||
TermDepositAgreement --|> Agreement
|
||||
LoanAgreement --|> Agreement
|
||||
Agreement "1" --> "0..*" PartyRole : governs
|
||||
|
||||
class AgreementStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#agreement-status'>Agreement Status</a>"]{<<enumeration>>}
|
||||
class TermDepositAgreement["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/term-deposit-agreement.md'>Term Deposit Agreement</a>"]
|
||||
class LoanAgreement["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/loan-agreement.md'>Loan Agreement</a>"]
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Agreement Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier of the agreement record.
|
||||
|
||||
Agreement Number:
|
||||
type: string
|
||||
description: Human-facing agreement reference number.
|
||||
|
||||
Agreement Status:
|
||||
type: enum:Agreement Status
|
||||
description: >
|
||||
The current lifecycle state of the agreement. Active agreements govern current
|
||||
obligations; Terminated and Matured agreements must be retained for audit. Used
|
||||
as a dimension attribute in agreement-level analytics and regulatory reporting
|
||||
of active product holdings.
|
||||
|
||||
Effective Date:
|
||||
type: date
|
||||
description: Date the agreement became enforceable.
|
||||
|
||||
Maturity Date:
|
||||
type: date
|
||||
description: Date the agreement is scheduled to mature, if applicable.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Agreement Involves Party Roles
|
||||
|
||||
An Agreement governs and involves one or more Party Roles participating in the contract.
|
||||
|
||||
```yaml
|
||||
source: Agreement
|
||||
type: governs
|
||||
target: Party Role
|
||||
cardinality: one-to-many
|
||||
granularity: atomic
|
||||
ownership: Agreement
|
||||
```
|
||||
@@ -0,0 +1,75 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Branch
|
||||
|
||||
A Branch is an operational location responsible for servicing accounts and branch-mediated transactions.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Branch{
|
||||
* Branch Identifier : string
|
||||
Branch Code : string
|
||||
Branch Name : string
|
||||
}
|
||||
|
||||
Branch "1" --> "0..*" Account : services
|
||||
|
||||
class Account["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/account.md'>Account</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: independent
|
||||
mutability: reference
|
||||
attributes:
|
||||
Branch Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier for the branch location.
|
||||
|
||||
Branch Code:
|
||||
type: string
|
||||
description: Operational code used to identify the branch.
|
||||
|
||||
Branch Name:
|
||||
type: string
|
||||
description: Human-readable branch name.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Branch Services Account
|
||||
|
||||
A Branch services one or more Accounts.
|
||||
|
||||
```yaml
|
||||
source: Branch
|
||||
type: has
|
||||
target: Account
|
||||
cardinality: one-to-many
|
||||
granularity: atomic
|
||||
ownership: Branch
|
||||
```
|
||||
|
||||
### Branch Transaction Summary
|
||||
|
||||
A Branch has a grouped relationship to Transactions processed through its serviced Accounts. This supports branch-level aggregated reporting for fraud pattern analysis.
|
||||
|
||||
```yaml
|
||||
source: Branch
|
||||
type: associates_with
|
||||
target: Transaction
|
||||
cardinality: one-to-many
|
||||
granularity: group
|
||||
ownership: Branch
|
||||
```
|
||||
@@ -0,0 +1,108 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Company
|
||||
|
||||
A Company is a legal entity that participates in financial relationships with the institution. It specialises Party and carries organisation-specific identification and registration attributes.
|
||||
|
||||
Company legal structure is a primary AML risk factor. Shell companies, special purpose vehicles, and trusts carry elevated money-laundering risk due to beneficial ownership complexity — structure must be recorded to support risk rating and Enhanced Due Diligence decisions.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Company{
|
||||
Company Registration Number : string
|
||||
Incorporation Country : string
|
||||
Incorporation Date : date
|
||||
Legal Structure : enum~CompanyLegalStructure~
|
||||
Tax Identifier : string
|
||||
}
|
||||
|
||||
Company --|> Party
|
||||
|
||||
class CompanyLegalStructure["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#company-legal-structure'>Company Legal Structure</a>"]{<<enumeration>>}
|
||||
class Party["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party.md'>Party</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Party
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Company Registration Number:
|
||||
type: string
|
||||
description: >
|
||||
Government-issued registration identifier for the legal entity (e.g., ACN for Australian
|
||||
companies, NZBN for New Zealand companies). Required for legal entity identification
|
||||
under AML/CTF Act 2006 Part B.
|
||||
|
||||
Incorporation Country:
|
||||
type: string
|
||||
description: >
|
||||
ISO 3166-1 alpha-2 country code where the company is incorporated. Used for
|
||||
jurisdiction risk scoring — entities incorporated in FATF-listed high-risk
|
||||
jurisdictions require Enhanced Due Diligence.
|
||||
|
||||
Incorporation Date:
|
||||
type: date
|
||||
description: >
|
||||
Date the company was formally incorporated. Recently incorporated entities with
|
||||
no operating history are a risk signal, particularly when associated with high-value
|
||||
or complex transactions.
|
||||
|
||||
Legal Structure:
|
||||
type: enum:Company Legal Structure
|
||||
description: >
|
||||
The legal form under which the company is constituted. Critical for AML risk
|
||||
assessment — trusts, special purpose vehicles, and foreign entities carry elevated
|
||||
beneficial ownership risk. The legal structure determines which additional due
|
||||
diligence obligations apply under the AML/CTF Act 2006 and RBNZ AML/CFT Act 2009.
|
||||
|
||||
Tax Identifier:
|
||||
type: string
|
||||
description: >
|
||||
Tax registration number issued by the relevant revenue authority (e.g., Australian
|
||||
Business Number (ABN), New Zealand Business Number (NZBN), US Employer Identification
|
||||
Number (EIN)). Used as a supplementary identity verification attribute and cross-reference
|
||||
for adverse media and sanction screening.
|
||||
```
|
||||
```yaml
|
||||
constraints:
|
||||
Registration Number Required For Active Company:
|
||||
not_null: Company Registration Number
|
||||
lifecycle_stage: Onboarding
|
||||
description: >
|
||||
A company must have a valid Company Registration Number before any designated
|
||||
service is provided. Required for legal entity identification under AML/CTF Act 2006
|
||||
Part B customer identification obligations.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
pii: false
|
||||
classification: Highly Confidential
|
||||
retention: 10 years
|
||||
retention_basis: Domain default retention aligned to AML/CTF record-keeping obligations
|
||||
description: >
|
||||
10-year retention from the end of the business relationship, aligned to AUSTRAC and
|
||||
RBNZ record-keeping obligations. The regulatory minimum is 7 years under AUSTRAC
|
||||
AML/CTF Act 2006; the domain default of 10 years is applied as the conservative standard.
|
||||
access_role:
|
||||
- FINANCIAL_CRIME_ANALYST
|
||||
- KYC_OFFICER
|
||||
- COMPLIANCE_OFFICER
|
||||
compliance_relevance:
|
||||
- AUSTRAC AML/CTF Act 2006 — Part B legal entity identification
|
||||
- AUSTRAC AML/CTF Amendment Act 2024
|
||||
- RBNZ AML/CFT Act 2009 — section 14
|
||||
- FATF Recommendation 10 — Customer Due Diligence (legal persons)
|
||||
- FATF Recommendation 24 — Transparency and beneficial ownership of legal persons
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Company in the current domain model.
|
||||
@@ -0,0 +1,167 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Contact Address
|
||||
|
||||
A Contact Address is the association between a Party and a physical Address, qualified by purpose, verification status, and the period during which it was in use. It is not the address itself — the canonical physical location is held in the Address entity and reused across parties. Contact Address carries only the metadata that describes *how* and *when* a Party uses a given address.
|
||||
|
||||
This separation supports two critical financial crime capabilities. First, deduplication: if two parties share the same physical address, a single Address record exists and both Contact Address records point to it, enabling network analysis queries such as "which other parties are associated with this address". Second, temporal accuracy: the valid time period on Contact Address allows point-in-time queries — "what address did this party use at the time of this transaction" — which is essential for regulatory audit and SAR evidence.
|
||||
|
||||
A Party *has* Contact Addresses — it owns the association. A Party Role *uses* Contact Addresses — a role references which of the party's addresses applies for the specific purpose of that role. For example, the same Person may have a residential address used for identification and a mailing address used by their Customer role for correspondence.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class ContactAddress{
|
||||
* Contact Address Identifier : string
|
||||
Address Purpose : enum~AddressPurpose~
|
||||
Is Primary : boolean
|
||||
Verification Status : enum~AddressVerificationStatus~
|
||||
Verification Date : date
|
||||
Verification Method : enum~VerificationMethod~
|
||||
Valid From : date
|
||||
Valid To : date
|
||||
}
|
||||
|
||||
Party "1" --> "0..*" ContactAddress : has
|
||||
PartyRole "0..*" --> "0..*" ContactAddress : uses
|
||||
ContactAddress "0..*" --> "1" Address : references
|
||||
|
||||
class AddressPurpose["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#address-purpose'>Address Purpose</a>"]{<<enumeration>>}
|
||||
class AddressVerificationStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#address-verification-status'>Address Verification Status</a>"]{<<enumeration>>}
|
||||
class VerificationMethod["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#verification-method'>Verification Method</a>"]{<<enumeration>>}
|
||||
|
||||
class Party["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party.md'>Party</a>"]
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
class Address["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/address.md'>Address</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: associative
|
||||
mutability: slowly_changing
|
||||
temporal:
|
||||
tracking: valid_time
|
||||
description: >
|
||||
Valid time is carried explicitly as Valid From and Valid To attributes rather than relying on generated temporal columns. This allows future-dated address changes (e.g. recording a new address before a customer moves) and supports point-in-time queries for regulatory audit.
|
||||
attributes:
|
||||
Contact Address Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: >
|
||||
Globally unique surrogate identifier for this party-address association instance.
|
||||
|
||||
Address Purpose:
|
||||
type: enum:Address Purpose
|
||||
description: >
|
||||
The purpose for which this address is used by the party. Determines regulatory significance — a Residential Address is required for individual identification under the AML/CTF Act 2006; a Registered Office Address is required for legal entity verification.
|
||||
|
||||
Is Primary:
|
||||
type: boolean
|
||||
default: false
|
||||
description: >
|
||||
Indicates whether this is the party's primary contact address for the given purpose. A party may have only one primary address per Address Purpose at any point in time.
|
||||
|
||||
Verification Status:
|
||||
type: enum:Address Verification Status
|
||||
description: >
|
||||
The current verification status of this address association. Unverified addresses must not be used as the sole basis for satisfying AML/CTF identification obligations. Expired verification must be renewed at the next CDD review.
|
||||
|
||||
Verification Date:
|
||||
type: date
|
||||
description: >
|
||||
The date on which the address was most recently verified against an acceptable document or electronic source. Used to determine whether re-verification is required at periodic CDD review.
|
||||
|
||||
Verification Method:
|
||||
type: enum:Verification Method
|
||||
description: >
|
||||
The method used to verify this address. Documentary verification requires an acceptable identity or address document. Electronic verification uses a third-party data source. In-person verification is performed at a branch or by a third party.
|
||||
|
||||
Valid From:
|
||||
type: date
|
||||
description: >
|
||||
The date from which the party began using this address for the stated purpose. Establishes the start of the valid time period for point-in-time queries.
|
||||
|
||||
Valid To:
|
||||
type: date
|
||||
description: >
|
||||
The date on which the party ceased using this address for the stated purpose. A null value indicates the address is currently in use. Closed associations must not be deleted — Valid To must be set to preserve address history for regulatory audit.
|
||||
```
|
||||
|
||||
```yaml
|
||||
constraints:
|
||||
One Primary Per Purpose:
|
||||
check: >
|
||||
COUNT(Contact Address WHERE Party == this.Party
|
||||
AND Address Purpose == this.Address Purpose
|
||||
AND Is Primary == true
|
||||
AND (Valid To IS NULL OR Valid To >= Today)) <= 1
|
||||
description: >
|
||||
A party may have at most one primary Contact Address per Address Purpose
|
||||
at any point in time.
|
||||
|
||||
Valid To After Valid From:
|
||||
check: "Valid To IS NULL OR Valid To > Valid From"
|
||||
description: >
|
||||
The end of the address validity period must be later than the start.
|
||||
|
||||
Verification Date Required When Verified:
|
||||
check: >
|
||||
Verification Status != 'Verified'
|
||||
OR Verification Date IS NOT NULL
|
||||
description: >
|
||||
A Contact Address with a status of Verified must have a Verification
|
||||
Date recorded.
|
||||
|
||||
Residential Required Before Activation:
|
||||
check: >
|
||||
EXISTS (Contact Address WHERE Party == this.Party
|
||||
AND Address Purpose == 'Residential'
|
||||
AND Verification Status == 'Verified')
|
||||
lifecycle_stage: Onboarding
|
||||
description: >
|
||||
An individual party must have at least one verified Residential Address
|
||||
before any designated service is provided. Required for identification
|
||||
under the AML/CTF Act 2006 Part B individual identification program.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
pii: true
|
||||
classification: Highly Confidential
|
||||
retention: 10 years
|
||||
retention_basis: Domain default retention aligned to AML/CTF record-keeping obligations
|
||||
description: >
|
||||
Address association records must be retained for 7 years from Valid To
|
||||
date, aligned to AUSTRAC and RBNZ record-keeping obligations. Records
|
||||
must never be deleted — closure via Valid To is the only permitted
|
||||
termination mechanism.
|
||||
access_role:
|
||||
- FINANCIAL_CRIME_ANALYST
|
||||
- KYC_OFFICER
|
||||
- COMPLIANCE_OFFICER
|
||||
- RELATIONSHIP_MANAGER
|
||||
compliance_relevance:
|
||||
- AUSTRAC AML/CTF Act 2006 — Part B address identification obligations
|
||||
- AUSTRAC AML/CTF Amendment Act 2024
|
||||
- RBNZ AML/CFT Act 2009 — section 14
|
||||
- FATF Recommendation 10 — Customer Due Diligence
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Contact Address References Address
|
||||
|
||||
Each Contact Address references exactly one canonical Address record.
|
||||
|
||||
```yaml
|
||||
source: Contact Address
|
||||
type: references
|
||||
target: Address
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Contact Address
|
||||
```
|
||||
@@ -0,0 +1,52 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Currency
|
||||
|
||||
Currency defines a recognised monetary unit used for account balances and transactions.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Currency{
|
||||
* Currency Code : string
|
||||
Currency Name : string
|
||||
Minor Unit : integer
|
||||
}
|
||||
|
||||
ExchangeRate "0..*" --> "1" Currency : from
|
||||
ExchangeRate "0..*" --> "1" Currency : to
|
||||
|
||||
class ExchangeRate["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/exchange-rate.md'>Exchange Rate</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: independent
|
||||
mutability: reference
|
||||
attributes:
|
||||
Currency Code:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: ISO 4217 alphabetic currency code.
|
||||
|
||||
Currency Name:
|
||||
type: string
|
||||
description: Official currency display name.
|
||||
|
||||
Minor Unit:
|
||||
type: integer
|
||||
description: Number of decimal places used for the currency.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Currency in the current domain model.
|
||||
@@ -0,0 +1,59 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Customer Preferences
|
||||
|
||||
Customer Preferences captures communication and consent preferences that apply to a specific customer relationship.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class CustomerPreferences{
|
||||
* Preference Identifier : string
|
||||
Contact Preference : enum~ContactPreference~
|
||||
Marketing Consent : boolean
|
||||
Effective From : date
|
||||
}
|
||||
|
||||
Customer "1" --> "0..1" CustomerPreferences : has
|
||||
|
||||
class ContactPreference["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#contact-preference'>Contact Preference</a>"]{<<enumeration>>}
|
||||
class Customer["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/customer.md'>Customer</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: dependent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Preference Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier for the customer preference profile.
|
||||
|
||||
Contact Preference:
|
||||
type: enum:Contact Preference
|
||||
description: >
|
||||
The customer's preferred channel for outbound communication from the institution.
|
||||
Must be respected in all non-mandatory communications and drives CRM system routing.
|
||||
|
||||
Marketing Consent:
|
||||
type: boolean
|
||||
description: Indicates whether the customer has consented to marketing communications.
|
||||
|
||||
Effective From:
|
||||
type: date
|
||||
description: Date from which the current preference set applies.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Customer Preferences in the current domain model.
|
||||
@@ -0,0 +1,85 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Customer
|
||||
|
||||
A Customer is a Party Role representing an active or prospective relationship with the institution for products and services.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Customer{
|
||||
* Customer Number : string
|
||||
Onboarding Date : date
|
||||
Relationship Start Date : date
|
||||
}
|
||||
|
||||
Customer --|> PartyRole
|
||||
Customer "0..*" --> "0..*" Account : holds
|
||||
Customer "1" --> "0..1" CustomerPreferences : has
|
||||
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
class Account["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/account.md'>Account</a>"]
|
||||
class CustomerPreferences["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/customer-preferences.md'>Customer Preferences</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Party Role
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Customer Number:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique customer identifier used for service and support operations.
|
||||
|
||||
Onboarding Date:
|
||||
type: date
|
||||
description: Date the customer onboarding process was completed.
|
||||
|
||||
Relationship Start Date:
|
||||
type: date
|
||||
description: Date the customer relationship became effective.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Customer Holds Account
|
||||
|
||||
A Customer can hold one or more Accounts, and an Account can be held by one or more Customers. Joint accounts, business accounts with multiple authorized signatories, and beneficial ownership structures all require many-to-many cardinality. In the Financial Crime domain this is the structural basis for network analysis — connecting Customers through shared Accounts.
|
||||
|
||||
```yaml
|
||||
source: Customer
|
||||
type: has
|
||||
target: Account
|
||||
cardinality: many-to-many
|
||||
granularity: atomic
|
||||
ownership: Customer
|
||||
relationship_attributes:
|
||||
- Holder Type (enum:Account Holder Type)
|
||||
- Holder Start Date
|
||||
- Holder End Date
|
||||
- Is Primary Holder
|
||||
```
|
||||
|
||||
### Customer Has Preferences
|
||||
|
||||
A Customer has at most one active Customer Preferences profile at a time.
|
||||
|
||||
```yaml
|
||||
source: Customer
|
||||
type: has
|
||||
target: Customer Preferences
|
||||
cardinality: one-to-one
|
||||
granularity: atomic
|
||||
ownership: Customer
|
||||
```
|
||||
@@ -0,0 +1,76 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Exchange Rate
|
||||
|
||||
An Exchange Rate records conversion values between a source and target currency at a specific effective time.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class ExchangeRate{
|
||||
* Exchange Rate Identifier : string
|
||||
Rate Value : decimal
|
||||
Effective Date Time : datetime
|
||||
}
|
||||
|
||||
ExchangeRate "0..*" --> "1" Currency : base
|
||||
ExchangeRate "0..*" --> "1" Currency : quote
|
||||
|
||||
class Currency["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/currency.md'>Currency</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: dependent
|
||||
mutability: append_only
|
||||
attributes:
|
||||
Exchange Rate Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier for the exchange rate observation.
|
||||
|
||||
Rate Value:
|
||||
type: decimal
|
||||
description: Conversion multiplier from base to quote currency.
|
||||
|
||||
Effective Date Time:
|
||||
type: datetime
|
||||
description: Timestamp at which the rate became effective.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Exchange Rate References Base Currency
|
||||
|
||||
Each Exchange Rate references one base Currency.
|
||||
|
||||
```yaml
|
||||
source: Exchange Rate
|
||||
type: references
|
||||
target: Currency
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Exchange Rate
|
||||
```
|
||||
|
||||
### Exchange Rate References Quote Currency
|
||||
|
||||
Each Exchange Rate references one quote Currency.
|
||||
|
||||
```yaml
|
||||
source: Exchange Rate
|
||||
type: references
|
||||
target: Currency
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Exchange Rate
|
||||
```
|
||||
@@ -0,0 +1,51 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Loan Agreement
|
||||
|
||||
A Loan Agreement is a specialised agreement defining loan amount, schedule, and repayment obligations.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class LoanAgreement{
|
||||
Principal Amount : decimal
|
||||
Interest Rate : decimal
|
||||
Repayment Frequency : string
|
||||
}
|
||||
|
||||
LoanAgreement --|> Agreement
|
||||
|
||||
class Agreement["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/agreement.md'>Agreement</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Agreement
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Principal Amount:
|
||||
type: decimal
|
||||
description: Principal amount disbursed under the loan.
|
||||
|
||||
Interest Rate:
|
||||
type: decimal
|
||||
description: Contracted annual interest rate for the loan.
|
||||
|
||||
Repayment Frequency:
|
||||
type: string
|
||||
description: Payment cadence for scheduled repayments.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Loan Agreement in the current domain model.
|
||||
@@ -0,0 +1,81 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Merchant
|
||||
|
||||
A Merchant is a Party Role that accepts payments for goods or services through institution channels.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Merchant{
|
||||
* Merchant Identifier : string
|
||||
Merchant Category Code : string
|
||||
Settlement Account Identifier : string
|
||||
}
|
||||
|
||||
Merchant --|> PartyRole
|
||||
Merchant "1" --> "0..*" Transaction : processes
|
||||
Merchant "0..*" --> "0..1" Account : settles into
|
||||
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
class Transaction["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/transaction.md'>Transaction</a>"]
|
||||
class Account["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/account.md'>Account</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Party Role
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Merchant Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier for the merchant role instance.
|
||||
|
||||
Merchant Category Code:
|
||||
type: string
|
||||
description: >
|
||||
ISO 18245 Merchant Category Code (MCC) representing the merchant's primary
|
||||
business type. Used in transaction monitoring rule segmentation — certain MCCs
|
||||
(e.g., cash-intensive businesses, money services) attract heightened scrutiny.
|
||||
|
||||
Settlement Account Identifier:
|
||||
type: string
|
||||
description: Account identifier used for merchant settlement.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Merchant Receives Payment
|
||||
|
||||
A Merchant receives funds through one or more Transactions.
|
||||
|
||||
```yaml
|
||||
source: Merchant
|
||||
type: associates_with
|
||||
target: Transaction
|
||||
cardinality: one-to-many
|
||||
granularity: atomic
|
||||
ownership: Merchant
|
||||
```
|
||||
|
||||
### Merchant Has Settlement Account
|
||||
A Merchant may have a designated Account into which settlement funds are credited by the institution.
|
||||
```yaml
|
||||
source: Merchant
|
||||
type: references
|
||||
target: Account
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Merchant
|
||||
```
|
||||
@@ -0,0 +1,188 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Party
|
||||
|
||||
A Party is any individual or legal entity that has, or may have, a financial relationship with the institution. Aligned to the BIAN Party Reference Data Directory, Party is the foundational abstract concept from which all financial crime subjects are derived — it carries only the attributes that are universal across every party type.
|
||||
|
||||
In the Financial Crime domain a Party represents any subject that may be assessed for risk, screened against watchlists, investigated, or reported to a regulatory authority. A Party does not hold relationships directly — it participates through a Party Role (e.g., Account Holder, Beneficial Owner, Signatory). The same Party may hold multiple roles across multiple products simultaneously.
|
||||
|
||||
Specialisations of Party — Person and Legal Entity — carry the attributes that are specific to a natural person or an incorporated body respectively.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Party{
|
||||
<<abstract>>
|
||||
* Party Identifier : string
|
||||
Legal Name : string
|
||||
Also Known As : string[]
|
||||
Party Status : enum~PartyStatus~
|
||||
Risk Rating : enum~FinancialCrimeRiskRating~
|
||||
Sanctions Screen Status : enum~SanctionsScreenStatus~
|
||||
Next Review Date : date
|
||||
}
|
||||
|
||||
class Person
|
||||
|
||||
class Company{
|
||||
}
|
||||
|
||||
Person --|> Party
|
||||
Company --|> Party
|
||||
Party "1" --> "0..*" PartyRole
|
||||
Party "1" --> "0..*" ContactAddress
|
||||
|
||||
class PartyStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#party-status'>Party Status</a>"]{<<enumeration>>}
|
||||
class FinancialCrimeRiskRating["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#financial-crime-risk-rating'>Financial Crime Risk Rating</a>"]{<<enumeration>>}
|
||||
class SanctionsScreenStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#sanctions-screen-status'>Sanctions Screen Status</a>"]{<<enumeration>>}
|
||||
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
class ContactAddress["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/contact_address.md'>Contact Address</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
temporal:
|
||||
tracking: bitemporal
|
||||
description: >
|
||||
Valid time captures when the party information was true in the real world (e.g., a name change effective date). Transaction time captures when the institution recorded or became aware of the information. Both dimensions are required to support regulatory audit trails and Suspicious Matter Report evidence under the AUSTRAC AML/CTF Act 2006.
|
||||
attributes:
|
||||
Party Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: >
|
||||
Globally unique surrogate identifier for this party across all systems and jurisdictions. Immutable once assigned.
|
||||
|
||||
Legal Name:
|
||||
type: string
|
||||
pii: true
|
||||
description: >
|
||||
The full legal name of the party as it appears on the most recently verified official documentation. For individuals this is the full given and family name. For legal entities this is the registered name.
|
||||
|
||||
Also Known As:
|
||||
type: string[]
|
||||
pii: true
|
||||
description: >
|
||||
Alternative names, aliases, trading names, or former names. Critical for watchlist screening — a party may appear on a sanctions or adverse media list under an alias rather than their current legal name.
|
||||
|
||||
Party Status:
|
||||
type: enum:Party Status
|
||||
description: >
|
||||
The current operational status of the party record within the institution. Controls whether new relationships may be established and flags parties under active investigation or restriction.
|
||||
|
||||
Risk Rating:
|
||||
type: enum:Financial Crime Risk Rating
|
||||
description: >
|
||||
The institution's current assessed ML/TF risk rating for this party, derived from the most recent CDD or EDD review. Drives transaction monitoring thresholds, review frequency, and the level of due diligence required under the AML/CTF Act 2006 Part B program obligations.
|
||||
|
||||
Sanctions Screen Status:
|
||||
type: enum:Sanctions Screen Status
|
||||
description: >
|
||||
The outcome of the most recent screening run against applicable consolidated sanctions lists. A potential or confirmed match must trigger an investigation before any designated service is provided or any
|
||||
transaction is processed.
|
||||
|
||||
Next Review Date:
|
||||
type: date
|
||||
description: >
|
||||
The date by which the next periodic CDD review must be completed. Calculated from the Risk Rating in accordance with the institution's Part A OCDD program — high-risk parties annually, medium-risk every
|
||||
two years, low-risk every three years.
|
||||
```
|
||||
|
||||
```yaml
|
||||
constraints:
|
||||
Legal Name Required:
|
||||
not_null: Legal Name
|
||||
description: >
|
||||
Every party must have a verified legal name before any designated service is provided. Anonymous parties cannot be onboarded under the AML/CTF Act 2006 Part B identification obligations.
|
||||
|
||||
Review Date Must Not Be Overdue:
|
||||
check: "Next Review Date >= Today OR Party Status == 'Under Review'"
|
||||
description: >
|
||||
A party whose Next Review Date has passed must be placed Under Review and must not be permitted to initiate new transactions until the CDD review is completed and a new review date is set.
|
||||
|
||||
Confirmed Sanctions Match Blocks Service:
|
||||
check: "Sanctions Screen Status != 'Confirmed Match'"
|
||||
lifecycle_stage: Onboarding
|
||||
description: >
|
||||
A party with a confirmed sanctions match must not be onboarded or permitted to transact. This is a hard stop pending review by the Financial Crime Compliance Officer.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
pii: true
|
||||
classification: Highly Confidential
|
||||
retention: 10 years
|
||||
retention_basis: Domain default retention aligned to AML/CTF record-keeping obligations
|
||||
description: >
|
||||
Minimum 7-year retention from the end of the business relationship, aligned to AUSTRAC record-keeping obligations under the AML/CTF Act 2006 and RBNZ AML/CFT Act 2009 section 58.
|
||||
access_role:
|
||||
- FINANCIAL_CRIME_ANALYST
|
||||
- KYC_OFFICER
|
||||
- COMPLIANCE_OFFICER
|
||||
compliance_relevance:
|
||||
- AUSTRAC AML/CTF Act 2006
|
||||
- AUSTRAC AML/CTF Amendment Act 2024
|
||||
- RBNZ AML/CFT Act 2009
|
||||
- APRA Prudential Standard CPS 234
|
||||
- FATF Recommendations 10, 11, 12
|
||||
regulatory_reporting:
|
||||
- Suspicious Matter Report (SMR) — AUSTRAC
|
||||
- Suspicious Transaction Report (STR) — RBNZ
|
||||
- Threshold Transaction Report (TTR) — AUSTRAC
|
||||
- International Funds Transfer Instruction (IFTI) — AUSTRAC
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Party Assumes Roles
|
||||
|
||||
A Party can assume one or more Party Roles across different business contexts.
|
||||
|
||||
```yaml
|
||||
source: Party
|
||||
type: has
|
||||
target: Party Role
|
||||
cardinality: one-to-many
|
||||
granularity: atomic
|
||||
ownership: Party
|
||||
```
|
||||
|
||||
### Party Has Contact Addresses
|
||||
|
||||
A Party can have one or more contact addresses for communication and verification.
|
||||
|
||||
```yaml
|
||||
source: Party
|
||||
type: has
|
||||
target: Contact Address
|
||||
cardinality: one-to-many
|
||||
granularity: atomic
|
||||
ownership: Party
|
||||
```
|
||||
|
||||
### Party Related To Party
|
||||
|
||||
A Party may be related to one or more other Parties through ownership, control, family, or association ties. This self-referential relationship is the structural basis for financial crime network analysis — establishing connections between parties for beneficial ownership mapping, PEP network screening, and suspicious activity investigation.
|
||||
|
||||
A relationship instance represents a directional association with a named type (e.g., "Ultimate Beneficial Owner of", "Director of", "Spouse of"). The same pair of parties may have multiple association instances of different types simultaneously.
|
||||
|
||||
```yaml
|
||||
source: Party
|
||||
type: related_to
|
||||
target: Party
|
||||
cardinality: many-to-many
|
||||
granularity: atomic
|
||||
ownership: Party
|
||||
self_referential: true
|
||||
relationship_attributes:
|
||||
- Association Type (enum:Association Type)
|
||||
- Association Start Date
|
||||
- Association End Date
|
||||
- Verified
|
||||
```
|
||||
@@ -0,0 +1,201 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Party Role
|
||||
|
||||
A Party Role represents the specific capacity or context in which a Party participates in a business relationship with the institution. Aligned to the BIAN BOM, Party Role is the abstract concept that separates *who* a party is (the Party) from *what they do* in a given context (the Role). The same Party may hold multiple Party Roles simultaneously — a natural person may be a Customer on a home loan, a Payer on a standing order, and a Beneficial Owner of a company that holds a business account, all at the same time.
|
||||
|
||||
In the Financial Crime domain, Party Role is significant because AML/CTF obligations attach to roles, not parties in isolation. The due diligence required for a Beneficial Owner differs from that required for an Account Holder, and the same individual may require different levels of scrutiny depending on which role they are assessed in.
|
||||
|
||||
Party Role is abstract — it is never instantiated directly. All roles are expressed through specialisations: Customer, Merchant, Payer, Payee, Teller, Instructing Agent, and others defined in the domain.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class PartyRole{
|
||||
<<abstract>>
|
||||
* Role Identifier : string
|
||||
Role Status : enum~PartyRoleStatus~
|
||||
Role Start Date : date
|
||||
Role End Date : date
|
||||
Due Diligence Status : enum~DDStatus~
|
||||
}
|
||||
|
||||
class Customer
|
||||
class Merchant
|
||||
class Payee
|
||||
class Payer
|
||||
class Teller
|
||||
class PaymentInitiator
|
||||
|
||||
Customer --|> PartyRole
|
||||
Merchant --|> PartyRole
|
||||
Payee --|> PartyRole
|
||||
Payer --|> PartyRole
|
||||
Teller --|> PartyRole
|
||||
PaymentInitiator --|> PartyRole
|
||||
|
||||
PartyRole "1" <-- "0..*" Party : assumes
|
||||
PartyRole "0..*" --> "0..*" ContactAddress : uses
|
||||
PartyRole "0..*" --> "0..1" Agreement : governed by
|
||||
|
||||
class PartyRoleStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#party-role-status'>Party Role Status</a>"]{<<enumeration>>}
|
||||
class DDStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#due-diligence-status'>Due Diligence Status</a>"]{<<enumeration>>}
|
||||
|
||||
class Party["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party.md'>Party</a>"]
|
||||
class ContactAddress["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/contact_address.md'>Contact Address</a>"]
|
||||
class Agreement["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/agreement.md'>Agreement</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
temporal:
|
||||
tracking: bitemporal
|
||||
description: >
|
||||
Bitemporal tracking captures both when the role was active in the real
|
||||
world (valid time via Role Start Date and Role End Date) and when the
|
||||
record was known to the system (transaction time). This supports
|
||||
point-in-time queries required for regulatory audit — e.g. "was this
|
||||
party a Beneficial Owner at the time of this transaction?" — while also
|
||||
enabling reconstruction of what the system believed at any past moment,
|
||||
critical for audit trail integrity and late-arriving corrections.
|
||||
attributes:
|
||||
Role Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: >
|
||||
Globally unique surrogate identifier for this specific role instance.
|
||||
Distinct from the Party Identifier — the same party holding two different
|
||||
roles will have two Role Identifiers.
|
||||
|
||||
Role Status:
|
||||
type: enum:Party Role Status
|
||||
description: >
|
||||
The current lifecycle status of this role. Controls whether the role
|
||||
confers active privileges (e.g., ability to transact) and flags roles
|
||||
under review or restriction.
|
||||
|
||||
Role Start Date:
|
||||
type: date
|
||||
description: >
|
||||
The date from which this role became effective. Used to establish the
|
||||
valid time period for regulatory audit and point-in-time queries.
|
||||
|
||||
Role End Date:
|
||||
type: date
|
||||
description: >
|
||||
The date on which this role ceased to be effective, if applicable.
|
||||
A null value indicates the role is currently active. Roles must not be
|
||||
deleted — they must be closed with a Role End Date to preserve audit
|
||||
history.
|
||||
|
||||
Due Diligence Status:
|
||||
type: enum:Due Diligence Status
|
||||
description: >
|
||||
The completion status of the CDD or EDD obligations associated with
|
||||
this specific role. AML/CTF obligations under the AML/CTF Act 2006
|
||||
and RBNZ AML/CFT Act 2009 attach at the role level — a party may
|
||||
have completed CDD as a Customer but still require separate CDD
|
||||
assessment as a Beneficial Owner of a related entity.
|
||||
```
|
||||
|
||||
```yaml
|
||||
constraints:
|
||||
Role End After Start:
|
||||
check: "Role End Date IS NULL OR Role End Date > Role Start Date"
|
||||
description: >
|
||||
A role's end date must be later than its start date. A null end date
|
||||
indicates the role is currently open.
|
||||
|
||||
Active Role Requires Complete Due Diligence:
|
||||
check: >
|
||||
Role Status != 'Active'
|
||||
OR Due Diligence Status == 'Complete'
|
||||
lifecycle_stage: Activation
|
||||
description: >
|
||||
A role must not be set to Active until the CDD or EDD obligations
|
||||
associated with that role have been completed. This enforces the
|
||||
AML/CTF Act 2006 obligation that designated services must not be
|
||||
provided before identification and verification is complete.
|
||||
|
||||
Closed Role Requires End Date:
|
||||
check: >
|
||||
Role Status != 'Closed'
|
||||
OR Role End Date IS NOT NULL
|
||||
description: >
|
||||
A role with a status of Closed must have a Role End Date recorded.
|
||||
This ensures the valid time period is always closed correctly for
|
||||
audit and regulatory reporting purposes.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
pii: false
|
||||
classification: Confidential
|
||||
retention: 10 years
|
||||
retention_basis: Domain default retention aligned to AML/CTF record-keeping obligations
|
||||
description: >
|
||||
Role records must be retained for 7 years from Role End Date, aligned
|
||||
to AUSTRAC and RBNZ record-keeping obligations. Roles must never be
|
||||
deleted — closure via Role End Date and Role Status is the only
|
||||
permitted termination mechanism.
|
||||
access_role:
|
||||
- FINANCIAL_CRIME_ANALYST
|
||||
- KYC_OFFICER
|
||||
- COMPLIANCE_OFFICER
|
||||
- RELATIONSHIP_MANAGER
|
||||
compliance_relevance:
|
||||
- AUSTRAC AML/CTF Act 2006 — Part B role-level identification obligations
|
||||
- AUSTRAC AML/CTF Amendment Act 2024
|
||||
- RBNZ AML/CFT Act 2009
|
||||
- FATF Recommendation 10 — Customer Due Diligence
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Party Role Uses Contact Addresses
|
||||
|
||||
A Party Role may use one or more Contact Addresses owned by the underlying Party.
|
||||
|
||||
```yaml
|
||||
source: Party Role
|
||||
type: associates_with
|
||||
target: Contact Address
|
||||
cardinality: many-to-many
|
||||
granularity: atomic
|
||||
ownership: Party Role
|
||||
```
|
||||
|
||||
### Party Role Governed By Agreement
|
||||
|
||||
A Party Role may be governed by a specific Agreement that defines obligations and permissions.
|
||||
|
||||
```yaml
|
||||
source: Party Role
|
||||
type: references
|
||||
target: Agreement
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Party Role
|
||||
```
|
||||
|
||||
### Party Role At Point In Time
|
||||
|
||||
Captures the state of a Party Role as it stood at a specific point in time. Used for regulatory snapshots — e.g. quarterly compliance reporting requires the role state as of the reporting date, not the current state.
|
||||
|
||||
Party Role is declared bitemporal; this period-granularity relationship makes the temporal snapshot pattern explicit for physical generation, ensuring dimensional consumers can materialize point-in-time snapshots for regulatory reporting.
|
||||
|
||||
```yaml
|
||||
source: Party Role
|
||||
type: snapshots
|
||||
target: Party Role
|
||||
cardinality: one-to-one
|
||||
granularity: period
|
||||
ownership: Party Role
|
||||
self_referential: true
|
||||
```
|
||||
@@ -0,0 +1,47 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Payee
|
||||
|
||||
A Payee is a Party Role representing the recipient of funds in a transaction.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Payee{
|
||||
* Payee Identifier : string
|
||||
Beneficiary Reference : string
|
||||
}
|
||||
|
||||
Payee --|> PartyRole
|
||||
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Party Role
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Payee Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier for the payee role instance.
|
||||
|
||||
Beneficiary Reference:
|
||||
type: string
|
||||
description: Reference used to identify the beneficiary in payment instructions.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Payee. The canonical direction is Transaction-owned — see [Transaction Has Creditor](transaction.md#transaction-has-creditor).
|
||||
@@ -0,0 +1,47 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Payer
|
||||
|
||||
A Payer is a Party Role representing the party from whom funds are debited in a transaction.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Payer{
|
||||
* Payer Identifier : string
|
||||
Funding Source Reference : string
|
||||
}
|
||||
|
||||
Payer --|> PartyRole
|
||||
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Party Role
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Payer Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier for the payer role instance.
|
||||
|
||||
Funding Source Reference:
|
||||
type: string
|
||||
description: Reference to the source account or instrument used to fund payments.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Payer. The canonical direction is Transaction-owned — see [Transaction Has Debtor](transaction.md#transaction-has-debtor).
|
||||
@@ -0,0 +1,47 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Payment Initiator
|
||||
|
||||
A Payment Initiator is a Party Role representing the party that instructs or initiates a transaction.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class PaymentInitiator{
|
||||
* Payment Initiator Identifier : string
|
||||
Initiation Channel : string
|
||||
}
|
||||
|
||||
PaymentInitiator --|> PartyRole
|
||||
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Party Role
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Payment Initiator Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier for the payment initiator role instance.
|
||||
|
||||
Initiation Channel:
|
||||
type: string
|
||||
description: Channel used to initiate payment instructions.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Payment Initiator. The canonical direction is Transaction-owned — see [Transaction Initiated By Instructing Agent](transaction.md#transaction-initiated-by-instructing-agent).
|
||||
@@ -0,0 +1,115 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Person
|
||||
|
||||
A Person is a natural person who has, or may have, a financial relationship with the institution. Person specialises Party, inheriting all universal party attributes and adding those that are specific to a natural person — including identity verification details, biographic attributes, and PEP status.
|
||||
|
||||
Under the AUSTRAC AML/CTF Act 2006 and RBNZ AML/CFT Act 2009, the identification and verification requirements for individuals differ materially from those for legal entities, making Person a distinct and necessary specialisation.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Party{
|
||||
<<abstract>>
|
||||
}
|
||||
|
||||
class Person{
|
||||
Date of Birth : date
|
||||
Country of Birth : string
|
||||
Nationality : string[]
|
||||
Country of Residence : string
|
||||
Politically Exposed Person Status : enum~PEPStatus~
|
||||
}
|
||||
|
||||
Person --|> Party
|
||||
|
||||
class PEPStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#pep-status'>PEP Status</a>"]{<<enumeration>>}
|
||||
|
||||
class Party["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party.md'>Party</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Party
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Date of Birth:
|
||||
type: date
|
||||
pii: true
|
||||
description: >
|
||||
The individual's date of birth as recorded on their primary identity document. Required for identity verification under the AML/CTF Act 2006 Part B customer identification program.
|
||||
|
||||
Country of Birth:
|
||||
type: string
|
||||
pii: true
|
||||
description: >
|
||||
The country in which the individual was born. Used as a supplementary identity verification attribute and as an input to jurisdiction risk scoring.
|
||||
|
||||
Nationality:
|
||||
type: string[1..*]
|
||||
pii: true
|
||||
description: >
|
||||
One or more nationalities held by the individual. A key factor in sanctions jurisdiction screening — an individual may hold nationality in a sanctioned country while residing elsewhere.
|
||||
|
||||
Country of Residence:
|
||||
type: string
|
||||
pii: true
|
||||
description: >
|
||||
The country in which the individual currently resides. Used for jurisdiction risk scoring, FATF high-risk country screening, and determining applicable CDD obligations.
|
||||
|
||||
Politically Exposed Person Status:
|
||||
type: enum:PEP Status
|
||||
description: >
|
||||
Indicates whether the individual is a Politically Exposed Person, a close associate of a PEP, or a family member of a PEP. PEP status applies only to natural persons. Triggers mandatory Enhanced Customer Due Diligence under the AML/CTF Act 2006 and RBNZ AML/CFT Act 2009 section 22.
|
||||
```
|
||||
|
||||
```yaml
|
||||
constraints:
|
||||
Date of Birth Required at Onboarding:
|
||||
not_null: Date of Birth
|
||||
lifecycle_stage: Onboarding
|
||||
description: >
|
||||
Date of birth is a mandatory identification attribute for individuals under the AML/CTF Act 2006 Part B customer identification obligations. It must be collected and verified before any designated service is provided.
|
||||
|
||||
PEP Requires High Risk Rating:
|
||||
check: >
|
||||
Politically Exposed Person Status == 'Not PEP'
|
||||
OR Risk Rating IN ('High', 'Very High')
|
||||
description: >
|
||||
Any individual identified as a PEP or PEP associate must be assigned a
|
||||
minimum Risk Rating of High, inherited from Party. This triggers
|
||||
Enhanced Customer Due Diligence obligations under the AML/CTF Act 2006
|
||||
and RBNZ AML/CFT Act 2009. The Risk Rating constraint is evaluated
|
||||
against the inherited attribute.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
pii: true
|
||||
classification: Highly Confidential
|
||||
retention: 10 years
|
||||
retention_basis: Domain default retention aligned to AML/CTF record-keeping obligations
|
||||
description: >
|
||||
10-year retention from the end of the business relationship, aligned to
|
||||
AUSTRAC and RBNZ record-keeping obligations. The regulatory minimum is 7
|
||||
years under AUSTRAC AML/CTF Act 2006; the domain default of 10 years is
|
||||
applied as the conservative standard.
|
||||
access_role:
|
||||
- FINANCIAL_CRIME_ANALYST
|
||||
- KYC_OFFICER
|
||||
- COMPLIANCE_OFFICER
|
||||
compliance_relevance:
|
||||
- AUSTRAC AML/CTF Act 2006 — Part B Individual Identification
|
||||
- AUSTRAC AML/CTF Amendment Act 2024
|
||||
- RBNZ AML/CFT Act 2009 — sections 14, 22
|
||||
- FATF Recommendation 12 — Politically Exposed Persons
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Person in the current domain model.
|
||||
@@ -0,0 +1,64 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Product
|
||||
|
||||
A Product is a financial offering whose terms are governed by an agreement and used by one or more accounts.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Product{
|
||||
* Product Identifier : string
|
||||
Product Name : string
|
||||
Product Category : string
|
||||
}
|
||||
|
||||
Product "0..*" --> "1" Agreement : in terms of
|
||||
Account "0..*" --> "1" Product : holds
|
||||
|
||||
class Agreement["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/agreement.md'>Agreement</a>"]
|
||||
class Account["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/account.md'>Account</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Product Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier of the product definition.
|
||||
|
||||
Product Name:
|
||||
type: string
|
||||
description: Business name of the product offering.
|
||||
|
||||
Product Category:
|
||||
type: string
|
||||
description: Product classification used for reporting and controls.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Product In Terms Of Agreement
|
||||
|
||||
A Product is defined in terms of an Agreement template or contractual framework.
|
||||
|
||||
```yaml
|
||||
source: Product
|
||||
type: references
|
||||
target: Agreement
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Product
|
||||
```
|
||||
@@ -0,0 +1,80 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Teller
|
||||
|
||||
A Teller is a Party Role representing a bank employee who processes branch-based customer transactions.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Teller{
|
||||
* Teller Identifier : string
|
||||
Employee Number : string
|
||||
Assigned Branch Identifier : string
|
||||
}
|
||||
|
||||
Teller --|> PartyRole
|
||||
Teller "1" --> "0..*" Transaction : processes
|
||||
Teller "0..*" --> "1" Branch : assigned to
|
||||
|
||||
class PartyRole["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/party_role.md'>Party Role</a>"]
|
||||
class Transaction["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/transaction.md'>Transaction</a>"]
|
||||
class Branch["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/branch.md'>Branch</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Party Role
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Teller Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: Unique identifier for the teller role instance.
|
||||
|
||||
Employee Number:
|
||||
type: string
|
||||
description: Internal identifier of the staff member acting as teller.
|
||||
|
||||
Assigned Branch Identifier:
|
||||
type: string
|
||||
description: Branch identifier where the teller is primarily assigned.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Teller Processes Transaction
|
||||
|
||||
A Teller can process one or more branch-mediated Transactions.
|
||||
|
||||
```yaml
|
||||
source: Teller
|
||||
type: associates_with
|
||||
target: Transaction
|
||||
cardinality: one-to-many
|
||||
granularity: atomic
|
||||
ownership: Teller
|
||||
```
|
||||
|
||||
### Teller Assigned To Branch
|
||||
|
||||
A Teller is assigned to a Branch for operational responsibilities.
|
||||
|
||||
```yaml
|
||||
source: Teller
|
||||
type: assigned_to
|
||||
target: Branch
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Teller
|
||||
```
|
||||
@@ -0,0 +1,51 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Term Deposit Agreement
|
||||
|
||||
A Term Deposit Agreement is a specialised agreement defining fixed-term deposit terms.
|
||||
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class TermDepositAgreement{
|
||||
Deposit Amount : decimal
|
||||
Term Length Months : integer
|
||||
Interest Rate : decimal
|
||||
}
|
||||
|
||||
TermDepositAgreement --|> Agreement
|
||||
|
||||
class Agreement["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/agreement.md'>Agreement</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
extends: Agreement
|
||||
existence: independent
|
||||
mutability: slowly_changing
|
||||
attributes:
|
||||
Deposit Amount:
|
||||
type: decimal
|
||||
description: Principal amount committed to the term deposit.
|
||||
|
||||
Term Length Months:
|
||||
type: integer
|
||||
description: Fixed term length in months.
|
||||
|
||||
Interest Rate:
|
||||
type: decimal
|
||||
description: Contracted annual interest rate for the term.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
retention_basis: Inherited from domain default retention of 10 years post relationship end for AML/CTF record-keeping
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
No relationships are sourced directly from Term Deposit Agreement in the current domain model.
|
||||
@@ -0,0 +1,234 @@
|
||||
# [Financial Crime](../domain.md)
|
||||
|
||||
## Entities
|
||||
|
||||
### Transaction
|
||||
|
||||
A Transaction represents a movement of value between parties and accounts. It is the primary fact entity in the Financial Crime domain — it carries the monetary amount, the timing, the mechanism, and the parties and accounts involved. Every transaction must be monitorable for suspicious activity patterns.
|
||||
|
||||
In a dimensional model, Transaction is the central fact table grain. Currency, Account (debit and credit), Channel, Type, Status, and temporal attributes are the dimension keys required for transaction risk analytics.
|
||||
```mermaid
|
||||
---
|
||||
config:
|
||||
layout: elk
|
||||
---
|
||||
classDiagram
|
||||
class Transaction{
|
||||
* Transaction Identifier : string
|
||||
Transaction Date Time : datetime
|
||||
Settlement Date Time : datetime
|
||||
Amount : decimal
|
||||
Transaction Type : enum~TransactionType~
|
||||
Transaction Channel : enum~TransactionChannel~
|
||||
Transaction Status : enum~TransactionStatus~
|
||||
Reference : string
|
||||
}
|
||||
|
||||
Transaction "0..*" --> "1" Payer : has debtor
|
||||
Transaction "0..*" --> "1" Payee : has creditor
|
||||
Transaction "0..*" --> "0..1" PaymentInitiator : initiated by
|
||||
Transaction "0..*" --> "1" Currency : denominated in
|
||||
Transaction "0..*" --> "0..1" Account : debits
|
||||
Transaction "0..*" --> "0..1" Account : credits
|
||||
|
||||
class TransactionType["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#transaction-type'>Transaction Type</a>"]{<<enumeration>>}
|
||||
class TransactionChannel["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#transaction-channel'>Transaction Channel</a>"]{<<enumeration>>}
|
||||
class TransactionStatus["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/enums.md#transaction-status'>Transaction Status</a>"]{<<enumeration>>}
|
||||
class Payer["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/payer.md'>Payer</a>"]
|
||||
class Payee["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/payee.md'>Payee</a>"]
|
||||
class PaymentInitiator["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/payment_initiator.md'>Payment Initiator</a>"]
|
||||
class Currency["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/currency.md'>Currency</a>"]
|
||||
class Account["<a href='https://github.com/Semprini/md-ddl/blob/main/examples/Financial%20Crime/entities/account.md'>Account</a>"]
|
||||
```
|
||||
|
||||
```yaml
|
||||
existence: dependent
|
||||
mutability: append_only
|
||||
temporal:
|
||||
tracking: transaction_time
|
||||
description: >
|
||||
Transactions are append-only records. Once settled they must not be modified.
|
||||
Transaction time captures when the institution recorded the transaction.
|
||||
Reversals are recorded as new transaction records referencing the original
|
||||
Transaction Identifier, not as updates to the original.
|
||||
attributes:
|
||||
Transaction Identifier:
|
||||
type: string
|
||||
identifier: primary
|
||||
description: >
|
||||
Globally unique identifier for the transaction event. Immutable once assigned.
|
||||
For reversed transactions, the reversal carries its own identifier and references
|
||||
this identifier in the Reference field.
|
||||
|
||||
Transaction Date Time:
|
||||
type: datetime
|
||||
description: >
|
||||
Timestamp when the transaction was initiated or instructed by the originating party.
|
||||
Used as the primary event time for transaction monitoring rule evaluation.
|
||||
|
||||
Settlement Date Time:
|
||||
type: datetime
|
||||
description: >
|
||||
Timestamp when final, irrevocable settlement occurred. May differ from Transaction Date
|
||||
Time for transactions that clear across business days or time zones. Required for
|
||||
accurate AML typology detection (e.g., structuring detection across settlement windows).
|
||||
|
||||
Amount:
|
||||
type: decimal
|
||||
description: >
|
||||
Monetary value moved by the transaction, expressed in the denomination currency.
|
||||
Always positive — direction (debit or credit) is determined by the Payer and Payee
|
||||
relationships, not by sign.
|
||||
|
||||
Transaction Type:
|
||||
type: enum:Transaction Type
|
||||
description: >
|
||||
The mechanism by which the transaction was processed (e.g., Wire Transfer, EFTPOS,
|
||||
ATM Withdrawal, Direct Debit). Used for transaction monitoring rule segmentation —
|
||||
different typologies apply to different transaction types.
|
||||
|
||||
Transaction Channel:
|
||||
type: enum:Transaction Channel
|
||||
description: >
|
||||
The channel or medium through which the transaction was initiated. Used in conjunction
|
||||
with Transaction Type for risk rule evaluation — a high-value cash deposit at branch
|
||||
carries different risk signals than the same amount via online banking.
|
||||
|
||||
Transaction Status:
|
||||
type: enum:Transaction Status
|
||||
description: >
|
||||
The current lifecycle state of the transaction. Under Review status suspends settlement
|
||||
and is set by the transaction monitoring system. Failed and Reversed transactions must
|
||||
be retained for AML audit — absence of completed transactions is itself a monitoring signal.
|
||||
|
||||
Reference:
|
||||
type: string
|
||||
description: >
|
||||
Free-form transaction reference text as supplied by the initiating party. May contain
|
||||
invoice numbers, payment descriptions, or, in the case of reversals, the original
|
||||
Transaction Identifier being reversed.
|
||||
```
|
||||
```yaml
|
||||
constraints:
|
||||
Settlement After Initiation:
|
||||
check: "Settlement Date Time IS NULL OR Settlement Date Time >= Transaction Date Time"
|
||||
description: >
|
||||
Settlement cannot precede initiation. A null Settlement Date Time indicates the
|
||||
transaction has not yet settled (e.g., Pending, Authorised, or Under Review status).
|
||||
|
||||
Settled Transaction Has Settlement Time:
|
||||
check: >
|
||||
Transaction Status != 'Settled'
|
||||
OR Settlement Date Time IS NOT NULL
|
||||
description: >
|
||||
A transaction with status Settled must have a Settlement Date Time recorded.
|
||||
|
||||
Amount Must Be Positive:
|
||||
check: "Amount > 0"
|
||||
description: >
|
||||
Transaction amounts are always expressed as positive values. Direction is conveyed
|
||||
by the Payer (debit) and Payee (credit) relationships.
|
||||
```
|
||||
|
||||
```yaml
|
||||
governance:
|
||||
pii: false
|
||||
classification: Highly Confidential
|
||||
retention: 10 years
|
||||
retention_basis: Domain default retention aligned to AML/CTF record-keeping obligations
|
||||
description: >
|
||||
Transaction records must be retained for 7 years from the transaction date, aligned
|
||||
to AUSTRAC AML/CTF Act 2006 record-keeping obligations. Records are append-only and
|
||||
must never be modified or deleted. Reversals are represented as new records.
|
||||
access_role:
|
||||
- FINANCIAL_CRIME_ANALYST
|
||||
- TRANSACTION_MONITORING_SYSTEM
|
||||
- COMPLIANCE_OFFICER
|
||||
compliance_relevance:
|
||||
- AUSTRAC AML/CTF Act 2006 — Part B transaction record-keeping
|
||||
- AUSTRAC AML/CTF Amendment Act 2024
|
||||
- RBNZ AML/CFT Act 2009 — section 58
|
||||
- FATF Recommendation 10 — Customer Due Diligence (transaction context)
|
||||
- FATF Recommendation 16 — Wire Transfers (for SWIFT and Wire Transfer types)
|
||||
regulatory_reporting:
|
||||
- Threshold Transaction Report (TTR) — AUSTRAC (cash transactions >= AUD 10,000)
|
||||
- International Funds Transfer Instruction (IFTI) — AUSTRAC
|
||||
- Suspicious Matter Report (SMR) — AUSTRAC
|
||||
```
|
||||
|
||||
## Relationships
|
||||
|
||||
### Transaction Has Debtor
|
||||
|
||||
A Transaction has one Payer representing the party from whom funds are debited.
|
||||
|
||||
```yaml
|
||||
source: Transaction
|
||||
type: has
|
||||
target: Payer
|
||||
cardinality: one-to-many
|
||||
granularity: atomic
|
||||
ownership: Transaction
|
||||
```
|
||||
|
||||
### Transaction Has Creditor
|
||||
|
||||
A Transaction has one Payee representing the party to whom funds are credited.
|
||||
|
||||
```yaml
|
||||
source: Transaction
|
||||
type: has
|
||||
target: Payee
|
||||
cardinality: one-to-many
|
||||
granularity: atomic
|
||||
ownership: Transaction
|
||||
```
|
||||
|
||||
### Transaction Initiated By Instructing Agent
|
||||
|
||||
A Transaction may be initiated by one Payment Initiator acting as instructing agent on behalf of the originating party.
|
||||
|
||||
```yaml
|
||||
source: Transaction
|
||||
type: references
|
||||
target: Payment Initiator
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Transaction
|
||||
```
|
||||
|
||||
### Transaction Denominated In Currency
|
||||
A Transaction is denominated in exactly one Currency.
|
||||
|
||||
```yaml
|
||||
source: Transaction
|
||||
type: references
|
||||
target: Currency
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Transaction
|
||||
```
|
||||
|
||||
### Transaction Has Debit Account
|
||||
The internal account from which funds are debited. Null for transactions where the debit side is an external counterparty account not held at the institution (e.g., inbound wire transfers).
|
||||
|
||||
```yaml
|
||||
source: Transaction
|
||||
type: references
|
||||
target: Account
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Transaction
|
||||
```
|
||||
|
||||
### Transaction Has Credit Account
|
||||
The internal account to which funds are credited. Null for transactions where the credit side is an external counterparty account not held at the institution (e.g., outbound wire transfers).
|
||||
|
||||
```yaml
|
||||
source: Transaction
|
||||
type: references
|
||||
target: Account
|
||||
cardinality: many-to-one
|
||||
granularity: atomic
|
||||
ownership: Transaction
|
||||
```
|
||||
Reference in New Issue
Block a user