7.6 KiB
Financial Crime
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.
---
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>"]
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.
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.
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.
source: Contact Address
type: references
target: Address
cardinality: many-to-one
granularity: atomic
ownership: Contact Address