model10.ppt
TRANSCRIPT
slide # 1© Andreas K. Künzli - Sept. 15, 01
Structures
Consists of service enabler and service delivery parts• service enabler (green drawings) = information management
• include base «BusinessInstance» : service enabling ( search; create; modify; close; view)
• refinement of service enabler (blue drawings)• influenced by «BusinessUnit» i.e. orgUnit : privateBanking; corporateBanking; investmentBanking; retailBanking and
the unitLocation : location (country where business unit is located).
• refinement by agreement consolidation (purple drawings)
• service delivery (red drawings) = business processes• include base «BusinessInstance» : service delivery (consolidate; compute; post; settle; verify; track; audit; ) as
extensions of service enabler
• refinement of service delivery (orange drawings)• influenced by «BusinessUnit» i.e. orgUnit : privateBanking; corporateBanking; investmentBanking; retailBanking and
the unitLocation : location (country where business unit is located).
Base concept of model bank:
Base = single products are usually sold to clients (need for cash management, buy checking account; need for investing money, buy savings account)
Wholesale = clients require solutions to their specific requirements and buy product packages tailored to meet their needs
Model Bank
purchase productpurchase products or services purchase product shares
Base
Wholesale
base offers
refinement of base offers
Investment Banking
Private BankingCorporate Banking
Asset Management
Retail Banking
Street side
slide # 2© Andreas K. Künzli - Sept. 15, 01
Model Bank
Logistics
BANK Core
Competence Asset ManagementInvestment
Banking
Corporate
Banking Wea
lth
Man
agem
ent
Log
isti
csBANK Core
CompetenceAsset
ManagementInvestment Banking
Corp
orat
e
Bank
ing
Wealth
Managem
ent
National Bank(etc.)
Exchange(stock, merchantile;
commodities, foreign)
Log
isti
cs
Asset
ManagementInvestment Banking
Corp
orat
e
Bank
ing
Wealth
Managem
ent
BANK Core
Competence
Street side
Regulatory side
Clients)
Market side
MetaDomains•market (client) facing e.g. orgRoleType(clientSales) = clientAdvisor•street facing (i.e. Wall Street) e.g. orgRoleType(treasury; trading) = interbanking transactions•regulatory facing e.g. orgRoleType(board; executive) = governments and regulatory bodies
slide # 3© Andreas K. Künzli - Sept. 15, 01
Model Bank - role and status driven system
service enabler
consolidation
service delivery
domain
information management
offering management
posting management i
adds context of business
unit,regulatory (country)
Event triggered (Business Instance)
slide # 4© Andreas K. Künzli - Sept. 15, 01
Current,p ledgeab leam o unt o f
po rtfo lio o rassest
Current valueo f po rtfo lio
o r asset
excess
U tilized lim itlim it ing
instructio nsby client(p ledgedam o unt)
Valu
e
Len d in g valu e
A p p ro ved lim it
M arket valu e
Currentlyused cred it
line
slide # 5© Andreas K. Künzli - Sept. 15, 01service enabler service delivery
1method
Addressing
mark
et
op
era
tion
cred
it
Parties
Account
Business Unit
Position
Support InformationRisk
Business Process
Address
AvailabilityCheck Instruction
Agreement
Grouping
Base Feature
EligibilityCheck
Product
1..21..2domiciles
1
0..*
1..*portfolio 1
1..* numbers1
0..*
2..*
1..*
1..*roles
1..*
1
1..* postal
1domain
1..*
1offering
1..*
1OK
1 permit
1payment requests
1..*balances
0..*postings
1..*
1..*
1check
1execute
1..* 1..*activities
1..*
1..* verifies
1excess
InterestCalculation
Account Settlement
1meth
od
1
2..*
Business Relation
Business Instance
consolidation
11..*triggers
slide # 6© Andreas K. Künzli - Sept. 15, 01
Business Process Work Flow
request
Business Process
Business Instance
Agreement
Refinement
Party
EmployeeRole
orgUnitRole
Work FlowActivity
(2) decision
Activities
triggers (3)
(1) verifies
1..*
activityRole
Events
Contract1
Base
1resource
Work Flow
Business Unit
1domain
Role
FullTimeEquivalent
Relation
OrgUnit
EmployeeRole
Resources
employee
Authorization
AncillaryDevice
EmployeeRole are replacedwith actual persons(names) or applicationsor machines (e.g. ATMhas employeeRole of “teller”) .
placeholder
slide # 7© Andreas K. Künzli - Sept. 15, 01
«concern»Parties
Collaboration Parties
// partID() unique identifier// legalForm (individual or corporateBody)// domicile() corporate bodies can have up to 2 domiciles// nationality() individuals can have > 1 nationality (e.g. dual citizenship);
but one has to be declared as master// updateStatus(nonOperational; operational; inClosing; Closed;
historical; archived) “operational” all legal form specific parameters of opposite model have to be captured; “active” one domicile address must be captured in addition.
// corporateType (incorporated; company; limitedLiabilityCompany; association; partnership; society; foundation)
// LegalForm (individual or corporateBody)
// corporateTitle (chief ececutive officer; director of sales; accountant)
// corporateFunction (executive; officer; authorized signatory)
// legalCapacity = TRUE [Default]= FALSE only by court order [Individual can engage in business relations only with legal representation (guardian)].
Remarks• Corporation can only be represented by individual with specific corporate
functions (see corporateFunction)
CorporateBody
+ foundation year+ corporate type
+ getFoundationYear()+ getCorporateType()Party
+ party ID + legal form+ name+ domicile+ nationality
+ PartyID : int+ getLegalForm()+ getName()+ getDomicile()+ getNationality()+ updateStatus()
1
Individual
+ first name+ middle initial+ date of birth+ legal capacity
+ getFirstName()+ getMiddleInital()+ getBirthDate : date+ getLegalCapacity : booleanCorporateRepresentative
+ getCorporateTitle+ getCorporateFunction()
+ corporate title+ corporate function
1..*role officer
0..* representatives
slide # 8© Andreas K. Künzli - Sept. 15, 01
one geographic and judicial domain (= country)
Party A (indiv or corporate)
BusinessRelation 1
global bank view only (not communicated to outside parties)
CONTRACTNUMBER
clearingNumber
portfolioNumber
accountNumber
AGREEMENTNUMBER
one geographic and judicial domain (= country)
Party A (indiv or corporate)
BusinessRelation 1
Portfolio 1.1
Portfolio 1.2
Portfolio 1.3
Account 1.1.1
Account 1.1.2
Account 1.1.3
Account 1.1.4
Account 1.2.1
Account 2.1.2
Account 1.3.1
CONTRACTNUMBER
clearingNumber
portfolioNumber
accountNumber
AGREEMENTNUMBER
MetaParty A (indiv or corporate)
metaPartyID
«concern»MetaParty ctd.
slide # 9© Andreas K. Künzli - Sept. 15, 01
«concern»MetaParty ctd.
Collaboration MetaParty
// metaPartyID () unique identifier
Remark// MetaParty structures are used to monitor risk primarily
MetaPartyBase
+ getMetaPartyID()
+ meta party ID
slide # 10© Andreas K. Künzli - Sept. 15, 01
«concern»GroupingParties
Collaboration GroupingParties
// groupID; parentID; childID () unique identifier
// groupType (holding; group; org chart; family; clan) Corporate bodies have holding, group and org charts; individuals have family and clan structures
// updateStatus (awaiting approval; approved; historical; archived;)
// clanLinkClass (parent; in-law; designatedHeir; businessPartner; lawyer; trustee; frontperson;)
// clanLinkType (married; divorced; separated;)CorporateLink
+ get%ShareInvestment()+ getCashFlow()
+ % share investment
2..*
PartyRole
+ ParentID : int+ ChildID : int
+ parent ID+ child ID
1..*child
1parent
Grouping
+ GroupID : int+ getGroupType()+ updateStatus()
+ group ID+ group type
1..*
1..*
IndividualClanLink
+ getCashFlow()+ getClanLinkType()+ getClanLinkClass()
+ clan link type+ clan link class
1..*
slide # 11© Andreas K. Künzli - Sept. 15, 01
Appendix: Grouping
Group Structure TypeCorporate Bodies• Holding [h] Consolidation of share of investments based on percentage• Group [g] Consolidation of cash flows based on percentage share of investmentEach Link is either [g] or [h]!
parent(1)
child(1.2)
parent(2.2)
child(2.2.2)ch
ild(1
.1)
child
(2.2
.1)
parent(2.1)
[h]share of investment : 60.5%
[h]
share of investment : 45%
holding asset parent(1) : 973mio. USD
[h] [g] [g]
[g] parent(3)child(3.1)
child
(2.1
.1) child(2.1.2)
[g]share of investment : 70%
cash flow child(1.2) : 45mio. USD.
cash flow parent(2.2) : 78mio. USD
share of investment = 50%
share of investment : 35%
holding assets parent(2.1) : 618mio. USD(assets parent consider only [h] links)!
cash flow child(1.1) : 10 mio. USDcash flow group parent(2.1) : -5mio. USD
(cf group parent consider only [g] links)!
share of investment : 50%
share of investment : 20%
cash flow group parent(3) : -30 mio. USD
[g]
parent (4)
child 4.1
share...
//Calculation holding asset (ONLY [h] LINKS!)[MarketValue, mv; ShareOfInvestment, soi;].holdingAssets = child(n)(mv*soi)
//Calculation holding asset (ONLY [h] LINKS!)[MarketValue, mv; ShareOfInvestment, soi;].holdingAssets = child(n)(mv*soi)
market value child(1.2) : 1,355mio. USD
cash flow child (2.2.2) : 68mio. USD
cash flow child(2.2.1/2.1.2) = -31mio. USD
//Calculation cash flow parent(n) ONLY [g] LINKS [ShareOfInvestment, soi; CashFlow, cf].cashFlow = cf(parent)+child(n)(cf*soi)
//Calculation cash flow parent(n) ONLY [g] LINKS [ShareOfInvestment, soi; CashFlow, cf].cashFlow = cf(parent)+child(n)(cf*soi)
cash flow child(2.1.1/3.1): 5 mio. USDmarket value child(2.1.1) : 50 mio. USD
market value child(2.1.2) : 120mio. USD
market value child(1.1) : 600mio. USD
cash flow parent(4)...
slide # 12© Andreas K. Künzli - Sept. 15, 01
Group Structure TypeIndividuals• Family [f] Consolidation of assets and liabilities (at 100% or if otherwise stipulated in prenuptial contract) • Clan [c] Chart of affiliations with roles of participants
Appendix: Grouping
businesspartner
heir
lawyerparent
in-law parent
trustee
businesspartner
client married
divorcedmarried
businesspartner
beneficiary
mandatorypower [c]
[c]
[c]
representsbeneficiary
[c]
[c]
lawyer
lawyer
beneficiary
truebeneficiary
frontperson
[c]
[black listed]
parties
owner of assets
participant in clanstructure
parent 1
child 1.2 / 2.2child 1.1 / 2.1
parent 2
[f] [f]
prenuptial agreement : joint liabilityavailable assets family : 112m USD
secured liabilities : 500m USD
legal age : TRUEassets : 150m USDlending value : 70% (105m)unused credit limits: 125m USDunsecured liabilities : 0m USDavailability : 130m USDsecured liabilities : 250m USD
legal age : TRUEassets : 25m USD
lending value : 100% (25m)unused credit limits : 145m USDunsecured liabilities : 200m USD
availability : -30m USDsecured liabilities : 250m USD
[f]
legal age : FALSEassets : 10m USD
lending value : 100% (10m)unused credit limits : n/aunsecured liabilities : n/aavailability : 10m USD
secured liabilities : n/a
legal age : FALSEassets : 2m USDlending value : 100% (10m)unused credit limits : n/aunsecured liabilities : n/aavailability : 2m USDsecured liabilities : n/a
parent or (marital status = married) = legal aged child = underaged : underaged persons have no credits!secured liabilities = mortgage
//Calculation available assets![Availability, a;].familyAssets = (aparty(1)+aparty(2)+…aparty(n))
// prenuptial agreementjoint liability = all liabilities which structure are shared equally amount parents
//Calculation available assets![Availability, a;].familyAssets = (aparty(1)+aparty(2)+…aparty(n))
// prenuptial agreementjoint liability = all liabilities which structure are shared equally amount parents
//Calculation availability[Asset, as; LendingValue. lv; unusedCreditLimit, ucl; unsecuredLiabilities, ul;].Availability = {(as*lv)+ucl-ul}
//Calculation availability[Asset, as; LendingValue. lv; unusedCreditLimit, ucl; unsecuredLiabilities, ul;].Availability = {(as*lv)+ucl-ul}
[c] [c] [c]
[c][c] [c]
[c] [c]
[c]
representsbeneficiary
[c]
slide # 13© Andreas K. Künzli - Sept. 15, 01
GroupStructureType
Individuals• Family
• legal age BusinessInstance : computation :: computeAge(systemYear - birthDateYear)get Parties : party : Countryget SupportInformation : LegalAgeCountry()if age > legalAgeCountry then legalAge = TRUEif age < legalAgeCountry and if martialStatus = single then legalAge =
FALSE• assets BusinessInstance : computation :: computeAssetsParty, AP([{assetsBusinessRelation}]• lending value BusinessInstance : computation :: computeLendingValueParty, LV({LVposition})• unused credit limits BusinessInstance : computation ::
computeUnusedCreditParty, UCP({creditApproved - creditUtilized})• unsecured liabilities BusinessInstance : computation ::
computeUnusecuredLiabilitiesParty, ULP({creditApproved; : creditType :: unsecured})
• availability BusinessInstance : computation :: computeAvailabilityParty, AVP(AP-ULP)• secured liabilities MortgageAccount :: mortgageUtilized
• Clan• Clan links are assigned based on information received.• Either a clan link type or a clan link class can be assigned to a clan link.
Appendix: Grouping
slide # 14© Andreas K. Künzli - Sept. 15, 01
«concern»PartiesPB
Base PartiesBase Grouping2..*
0..*
Appendix: Grouping
Clan Structure refined with lineage information:
in-law
in-lawparent
parent
clientmarried
divorcedmarried
InheritanceAssets: 250mio. USDMortgage: 2.5mio.USD
ben
efi
cia
ry
heir
[c]
[c]
[c] [c] [c]
[c] [c]
[c]
Within domain “Private Banking” there are no corporate bodies
Within domain “Private Banking” there are no corporate bodies
Refinement in concern <Grouping> and <Party>domain
OrgUnit :: Private Banking
enabler
FieldOfInterest
+ getAreaOfInterestType()+ getHobby()
+ area of interest type+ hobby
IndividualProfile
+ getInvestorType()
+ investor type
IndividualStatus
+ getMaritalStatus()
+ marital status
CorporateBody+ foundation year+ corporate type
+ getFoundationYear()+ getCorporateType()
Individual+ first name+ middle initial+ date of birth+ legal capacity
+ getFirstName()+ getMiddleInitial()+ getLegalCapacity: boolean
Party+ party ID + legal form+ name+ domicile+ nationality
+ getPartyID()+ getLegalForm()+ getName()+ getDomicile()+ getNationality()+ updateState()
CorporateRepresentative
+ getCorporateTitle+ getCorporateFunction()
+ corporate title+ corporate function
Inheritance
+ getInheritanceAsset()+ getMortgageDebt()
+ assets+ mortgage debt
PartyRole
+ getParentID()+ getChildID()+ updateStatus()
+ parent ID+ child ID
CorporateLink
+ get%ShareInvestment()+ getCashFlow()+ getMarketValue()+ computeAsset()+ computeCashFlow()+ updateStatus()
+ % share investment
IndividualClanLink
+ getCashFlow()+ getClanLinkType()+ getClanLinkClass()
+ clan link type+ clan link class
Grouping
+ getGroupID()+ getGroupType()+ create(Group)
+ group ID+ group type
slide # 15© Andreas K. Künzli - Sept. 15, 01
«concern»PartiesPB ctd.
Refinement in concern <Grouping> and <Party>
Collaboration PartiesPB
// investorType (conservative; progressive; aggressive;)
// areaOfInterestType (politics; economics; sports; culture; others;)
// hobby (golf; sailing; gardening; musicClassic; partyMember;) depending on interest type (sports = golf; sailing; culture = musicClassic; politics = partyMember; others = gardening)
// marital status (single; married; divorced; widowed;) needed for lineage information, if “married”, “divorced” and “widowed” lineage information is sought after in the domain of private banking only
domain
OrgUnit :: Private Banking
enabler
slide # 16© Andreas K. Künzli - Sept. 15, 01
«concern»BusinessUnit
Collaboration BusinessUnit
Remarks:BusinessUnit is in the domain of the model bank synonym with the Bank
Org structures of «business units» influences «PartiesGroupings» by adding the org charting capabilities
[Hierarchies :: holding, (1st); group, (2nd); division, (3rd); business area, (4th); sector, (5th); department,(6th); team (8th); support units (can be added at any hierarchy level)]
// A “group” does not have to belong to a “holding”
Figure 1: Basic Bank Structure (Group)
UnitLocation
+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction
+ org function
+ getOrgFunction()
1..*1..*
FullTimeEquivalent
+ FTE amount
+ FTEAmount : int
OrgAccountability
+ accounting ID
+ AccountingID : int
1
1
OrgRole
+ org role type+ authorization
+ getOrgType()+ Authorization : boolean
1
1..*
OrgUnit
+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus()
1
Equity Capital
Asset Management
Bank
Investment Banking Private Banking
Retail Banking IT
Operations
Procurement
Wealth Management
InvestmentManagement
Corporate Banking
Treasury Risk
Compliance&Legal
Distribution Financial
Audit
Pension Funds
Group Division Business Area
Support Units
Human Resources
Logistics
slide # 17© Andreas K. Künzli - Sept. 15, 01
Collaboration BusinessUnit
// location () country for orgType (holding; group; division; businessArea) and city for orgType (sector; department; team;) where orgUnit is stationed
// courtOfLaw () court at which all legal disputes - arising from any business relation within a specific orgUnit (level branch) - are settled
// localCurrency () official currency of that location
// orgID () unique identifier
// orgType (holding; group; division; businessArea; sector; department; team)
// orgName () division : “Wealth Management”; businessArea : “Private Banking”; sector : “Product Management” or “Client Relations” or “Payment Processing”; department : “Credit Products” or “Core Affluent Clients” or “Standing Orders”; etc.
// orgClearingNumber () 8-digit numeric; international standard to allow transactions between banks I.e. uniquely identify banks (or routing number)
// updateStatus(non-operational; operational; historical; archived;) “non-operational” to capture unit information for newly created but not yet operating units
// accountingID () 12-digit alphanumeric for cost or profit center identification, needed for management accounting
// orgFunction (administration; sales; processing; marketing; risk; humanResources; development;)
// orgRoleType (management; accounting; audit; clientSales; support; ITDevelopment; businessDevelopment; purchasing;)
«concern»BusinessUnit ctd.
ctd.
// authorization TRUE = this orgUnit represent the bank (i.e. allowed to engage in agreements or contract with outside parties) influences employee roles! Authorization is inherited.
// FTEAmount () number of full time employees or equivalent of 100% job positions (e.g. FTE 10.5 = 10 full time and one part time positions or any other combination that equals 10.5) influences cost or profit center budgets and human resource management hiring capacities
AppendixRemarkTabelle is read as follows:
- orgFunction(administration) has orgUnitRole(management)
- orgFunction(administration) has no orgUnitRole(support)
administration
sales
processing
marketing
risk
humanResources
developmentm
anag
em
ent
acc
ounti
ng
aud
it
clie
ntS
ale
s
sup
port
ITD
evelo
pm
ent
Busi
ness
Develo
pm
ent
purc
hasi
ng
etc
.
y
y
y
y
y
y
y
y
n
n
n
n
n
n
y
y
y
y
y
y
y
n
y
n
n
n
n
n
n
y
n
n
y
y
n
n
n
n
n
n
n
y
y
y
y
y
y
y
y
y
n
n
n
n
n
n
..
...
...
...
...
...
...
orgUnitRole
orgUnitFunction
slide # 18© Andreas K. Künzli - Sept. 15, 01
«concern»GroupingBU
Appendix: Grouping
Grouping is expanded with Org Chart capabilities
Base BusinessUnitBase Grouping
1
Refinement in concern <grouping>domain
OrgUnit
enabler
1
PartyRole
+ getParentID()+ getChildID()+ updateStatus()
+ parent ID+ child ID
CorporateLink
+ get%ShareInvestment()+ getCashFlow()+ getMarketValue()+ computeAsset()+ computeCashFlow()+ updateStatus()
+ % share investment
IndividualClanLink
+ getCashFlow()+ getClanLinkType()+ getClanLinkClass()
+ clan link type+ clan link class
Grouping
+ getGroupID()+ getGroupType()+ create(Group)
+ group ID+ group type
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus() OrgRole
+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
slide # 19© Andreas K. Künzli - Sept. 15, 01
Refinement in concern <Party>
«concern»PartiesCB
CorporateRepresentativeBoard
+ _getCorporateTitle()+ _getCorporateFunctions()
TradeRegistry
+ tradeRegistry : boolean
BalanceSheet
+ cashFlow : int+ Ebit : int+ openCredit : int+ getBalancingMethod()
+ cash flow+ ebit*+ open credit+ balancing method
domain
OrgUnit :: CorporateBanking
enabler
Collaboration PartiesPB
// tradeRegistry = TRUE corporate body is registered in the trade registry mandatory for all (incorporated; company; limitedLiabilityCompany;)influenced by country specific regulation, in certain countries other corporate types are required to be entered in the trade registry
// Numbers entered based on balance sheet// cashFlow () 16-digit numeric
// ebit () 16-digit numeric (Earnings Before Income Tax)
// openCredit () 16-digit numeric (overall available credits from all banks)
// balancingMethod (IAS, SAP) ISA = International Accounting Standards; SAP = Standard Accounting Principles; denotes accounting principles on which balance sheets are produced
// corporateTitle (corporateTitle) base plus (chairperson; viceChairperson; boardMember; secretaryBoard;) extension of base parties class
// corporateFunction (CorporateFunction) base plus (governingBody) extension of base parties class
Base Parties
CorporateBody+ foundation year+ corporate type
+ getFoundationYear()+ getCorporateType()
Individual+ first name+ middle initial+ date of birth+ legal capacity
+ getFirstName()+ getMiddleInitial()+ getLegalCapacity: boolean
CorporateRepresentative
+ getCorporateTitle+ getCorporateFunction()
+ corporate title+ corporate function
Party+ party ID + legal form+ name+ domicile+ nationality
+ getPartyID()+ getLegalForm()+ getName()+ getDomicile()+ getNationality()+ updateState()
slide # 20© Andreas K. Künzli - Sept. 15, 01
«concern»Address
AddressBase
+ address ID+ country– address type– domicile
+ getAddressID()+ getCountry()– getAddressType()– Domicile : boolean
CommunicationAddress
+ email address+ web address + telephone number+ mobile number+ fax number
+ getEmailAddress()+ getWebAddress()+ getTelephoneNumber()+ getMobileNumber()+ getFaxNumber()
PurposeAddress
+ po box+ post code + city+ street name+ street number+ apartment number
+ POBox : boolean+ getPostCode()+ getCity()+ getStreetName+ getStreetNumber+ getApartmentNumber POAddress
+ _po box number+ po post code add
+ _getPOBoxNumber()+ POPostCodeAdd()
Collaboration Address
// addressID () unique identifier
// addressType (purpose; po; communication;)
// country (e.g. Canada; China; Germany; Greece; Switzerland; USA;) use ISO country codes; influences// : addressingCountry :: countryFormat (e.g. placement of street number and zip-code)// business relations in domain of : unitLocation parties can maintain i.e. :: relationClass e.g. [country(Singapore), unitLocation(Switzerland)]. relationClass = mandate// productOffering if : unitLocation country (= off-shore banking) e.g. mortgageProduct are excluded from base ProductOffering
// domicile = TRUE : domicileAddress influences [: addressingAgreement : addressingPurpose = domicileAddress] to ensure the many country specific bank secrecy laws, domicile address are protected so that no correspondence will ever be mailed to that address// if = FALSE : addressingPurpose has to be defined based on Agreement
// : addressingFormat of : communicationAddress :: telephoneNumber; mobileNumber and faxNumber are influenced by : domicileAddress :: country
slide # 21© Andreas K. Künzli - Sept. 15, 01
«concern»Product
Collaboration Product
// Products can only be offered in a domain influenced by «BusinessUnit». Banking products like accounts are sold thru business areas like Private Banking, Corporate Banking, Retail Banking; employment “products” or opportunities are offer thru business area Human Resources, etc.
// productID () unique identifier
// productClass (clientSales :: creditProduct; cashProduct; securitiesProduct) domain driven
ProductBase
+ getProductID()+ getProductClass()
+ product ID+ product class
slide # 22© Andreas K. Künzli - Sept. 15, 01
«concern»BaseProductOffer
Refinement in concern <product>domain
OrgRoleType :: ClientSales
enabler
Base Product
CashProduct
+ getCashProductType()+ updateStatus()
+ cash product type
CreditProduct
+ getCreditProductType()+ updateStatus()
+ credit product type
ProductBaseCapability
+ postingCapability : boolean+ computeBalance : boolean+ computeInterest : boolean+ computeFees : boolean+ setCreditFacilities : boolean+ setCreditLimit : boolean+ allowExcess : boolean+ multiCurrency : boolean+ getNoticePeriod : boolean+ settleCapability : boolean
1orgRole
ProductBaseOffer
+ list(ProductBase)
ProductBase
+ getProductID()+ getProductClass()
+ product ID+ product class
0..*products ProductBaseFeature
+ getBaseEligibilty()+ getCurrency()+ getMasterCurrency()+ getSettlementPeriod()+ getCardType()+ getFacilityType()+ getAccessChannelType()+ getPaymentType()+ getNoticePeriod()
Base Business Unit
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus() OrgRole
+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
Business Instance
InstanceTransaction+ transaction ID+ transaction class+ getTransactionID()+ getTransactionClass()+ createRelation()+ createAgreementConsolidation()
slide # 23© Andreas K. Künzli - Sept. 15, 01
Collaboration BaseProductOffer
This refinement leads to the abstract base product offers of the model bank in a given domain i.e. each orgRolesType respectivelyOffer = products (capabilities) offered to bank’s own business areas for refinement. After refinement = offering (product or services offered to markets)
// list(ProductBase) listing of all base products eligible for particular orgRole :: orgRoleType// creditProductType (moneyLoans; standByLetterOfCredit; marginOnDerivative;)// cashProductType (cash; fixedTerm; funds)// updateStatus (prototype; forSale; historical; archived)// productID () unique identifier
//Capabilities// postingCapabilities determines if deposits and withdrawals can be posted on account// computeBalance determines if daily balance can be computed, regardless of computation method// computeInterest determines if interest can be computed, regardless of interest type or computation method// computeFees determines if fees can be computed, regardless of tee type or computation method// setCreditFacilities determines if credit facilities can be granted on account; if = TRUE :: computeBalance = TRUE// setCreditLimit determines if balance can be < 0; if = TRUE :: creditFacilities and :: computeBalance must be = TRUE// allowExcess determines if balance can be < credit limit or < 0; independent of :: creditFacility and :: creditLimit; each excess has to be approved// multiCurrency determines if deposits and withdrawals can be psoted in more than one currency// getNoticePeriod determines if a notice period is associated// settleCapability determines if account can be settled i.e. closed; if = TRUE ::computeBalance; :: computeInterest must be = TRUE
//Features// baseEligibility (privateBanking; corporateBanking; retailBanking; investmentBanking)// currency (CHF; EUR; GBP; JPY; USD;) Default = localCurrency// masterCurrency if multiCurrency = TRUE; master currency must be determined to compute account balance; requires method
computeExchangeRate (deposits and withdrawals are posted in any of the defined currencies, balance only in masterCurrency)// SettlementPeriod (none; daily; monthly; quarterly; semi-annual; annual)// NoticePeriod (none; anytime; daily; week[1]; month[1]; months[3]; months[6];)// CardType if :: creditFacilities = FALSE(debitCard;); if :: creditFacilities and :: setCreditLimit = TRUE (e.g. debitCard; creditCardStandard; creditCardGold; creditCardBusiness)// FacilityType if :: creditFacility = TRUE (overdraft; loan; mortgage; securedLoan; unsecuredLoan;
letterOfCredit; leasing; factoring; internal;)// AccessChannelType (bankCounter; ATM; telephone; mail; fax; telex; internet;) Default = bankCounter// PaymentType (directDebit; standingOrder; debitEntry; paymentOrder; accountAccountTransfer)
Default = directDebit
«concern»BaseProductOffer ctd.
slide # 24© Andreas K. Künzli - Sept. 15, 01
Collaboration BaseProductOffer
Appendix// Features of base product offer CreditProduct
postingCapabilities : TRUE computeBalance : TRUEcomputeInterest : TRUEcomputeFees : TRUEsetCreditFacilities : TRUEsetCreditLimit : TRUEallowExcess : FALSEmultiCurrency : FALSEgetNoticePeriod : TRUEsettleCapability : TRUE
CreditProductCurrency(localCurrency) [see BusinessUnit]SettlementType(quarterly)FacilityType(moneyLoans)AccessChannelType(bankCounter)PaymentType(directDebit; standingOrder,
accountTransfer)NoticePeriod(month[1])
Appendix ctd.// Capabilities of base product offer
CashProductpostingCapabilities : TRUEcomputeBalance : TRUE computeInterest : TRUEcomputeFees : TRUE setCreditFacilities : FALSEsetCreditLimit : TRUEallowExcess : FALSEmultiCurrency : FALSEgetNoticePeriod : TRUEsettleCapability : TRUE
CashProductCurrency(localCurrency) [see BusinessUnit]SettlementType(annual)FacilityType(none)AccessChannelType(bankCounter; ATM; mail;
telephone)PaymentType(directDebit; standingOrder;
debitEntry; accountTransfer)
NoticePeriod(month[1])
«concern»BaseProductOffer ctd.
slide # 25© Andreas K. Künzli - Sept. 15, 01
CashProduct
+ getCashProductType()+ updateStatus()
+ cash product type
CreditProduct
+ getCreditProductType()+ updateStatus()
+ credit product type
ProductBase
+ getProductID()+ getProductClass()
+ product ID+ product class
ProductBaseOffer
+ list(ProductBase)
ProductBaseCapability
+ postingCapability : boolean+ computeBalance : boolean+ computeInterest : boolean+ computeFees : boolean+ setCreditFacilities : boolean+ setCreditLimit : boolean+ allowExcess : boolean+ multiCurrency : boolean+ getNoticePeriod : boolean+ settleCapability : boolean
ProductBaseFeature
+ getEligibilty()+ getCurrency()+ getMasterCurrency()+ getSettlementPeriod()+ getCardType()+ getFacilityType()+ getAccessChannelType()+ getPaymentType()+ getNoticePeriod()
Refinement in concern <productOffer>domain
OrgUnit :: Wholesale / OrgRoleType :: ClientSales
enabler
Base Business Unit Product Offer
WholeSaleSecuritiesProduct
+ getSecuritiesProductClass()+ updateStatus()
+ securities product class
WholeSaleProductBaseCapability
+ Collateralization : boolean
WholeSaleProductBaseFeature
+ getTitlesClass()+ getEligibilityType()1
unit
CardAccess
+ getCardType()+ getCardNumber : int+ getContraAccountNumber()+ updateStatus()
+ card type+ card number+ contra account number
1contra number
1contra number
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus() OrgRole
+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
«concern»WholeSaleProductOffer
slide # 26© Andreas K. Künzli - Sept. 15, 01
Collaboration WholesaleProductOffer
This refinement of BaseProductOffer leads to the WholesaleProductOffer. The product assembly tool is for the : orgRoleType :: productManagers exclusively.
// securitiesProductClass(manadatedAccount; nonMandatedAccount)Remark
mandatedAccount requires mandate management agreement i.e. the advisor receives full authority to manage account in behalf of client
nonMandateAccount the account is managed by client himself// updateStatus(non-operational; operational; in-closing; closed; historical; archived;)
// titlesClass(exchangeTraded; overTheCounterTraded; commodities)Remark
// exchangeTraded: Single products like titlesType(shares; bonds; foreignExchange; tBills;)// overTheCounterTraded: Structured products like titlesType(derivatives; options;)// commodities like titlesType(preciousMetal; food; oil;)]
// eligibilityType(privateBanking, pb; corporateBanking, cb; retailBanking, rb; investmentBanking, ib;)
// cardType(credit; debit)// cardNumber 16-digit numeric number// contraAccountNumber 8-digit alphanumeric number (of debited account)
// collateralization determines if assets of securities account can be pledged against a or more loans
«concern»WholeSaleProductOffer ctd.
slide # 27© Andreas K. Künzli - Sept. 15, 01
«concern»WholeSaleProductOffer ctd.
Collaboration ProductOffer
Appendix // Features of securities account in domain of Private Banking
PBSecuritiesAccountsee GroupingAccount
// Capabilities of securities account in domain of Private BankingPBSecuritiesAccount
see GroupingAccount
slide # 28© Andreas K. Künzli - Sept. 15, 01
«concern»GroupingAccount
SeniorAccount
+ getSeniorAccountID()+ getSeniorAccountNumber()+ getSeniorAccountCurrency()+ getSeniorAcctMarketValueParent()+ getSeniorAcctLendingValueParent()
+ senior account number+ senior account currency+ senior acct market value+ senior acct lending value
SubordinateAccount
+ getNumberOfTitle()+ getTitle()+ getMarketValue()+ getLendingValue()
+ number of title+ titles+ market value+ lending value
GroupingAccountBase
+ GroupAccountID : int+ getGroupAccountType()+ updateStatus()
+ group account ID+ group account type
1senior
AccountRole
+ SeniorID : int+ SubordinateID : int
+ senior ID+ subordinate ID
1..*subordinates
Collaboration GroupingAccount
Securities account are grouped accounts, consisting of one senior account (securities account) and of 1 or more subordinate accounts. Each subordinate account holds one specific titles. Within the senior or securities account all subordinate accounts are consolidated. Only senior account contents are visible to clients.
// groupAccountType (securitiesAccount) // updateStatus (nonOperational; operational; blocked;
inClosing; closed; historical; archived;)
// seniorID () unique identifier// subordinateID() unique identifier
// seniorAccountNumber() 8-digit alphanumeric number // seniorAccountCurrency(localCurrency)// seniorAccountMarketValue() Computation ::
computeSeniorAccountMarketVale// seniorAccountLendingValue() Computation ::
computeSeniorAccountLendingVale
// numberOfTitle()16-digit numeric// title() specific title book within subordinate // marketValue() Computation :: computeMarketValue// lendingValue() Computation :: computeLendingValue
slide # 29© Andreas K. Künzli - Sept. 15, 01
Product Offer
CashProduct
+ getCashProductType()+ updateStatus()
+ cash product type
ProductBase
+ getProductID()+ getProductClass()
+ product ID+ product class
ProductBaseCapability
+ postingCapability : boolean+ computeBalance : boolean+ computeInterest : boolean+ computeFees : boolean+ setCreditFacilities : boolean+ setCreditLimit : boolean+ allowExcess : boolean+ multiCurrency : boolean+ getNoticePeriod : boolean+ settleCapability : boolean
WholeSaleProductBaseCapability
+ Collateralization : boolean
WholeSaleProductBaseFeature
+ getTitles()+ getEligibilityType()
WholeSaleSecuritiesProduct
+ getSecuritiesProductClass()+ updateStatus()
+ securities product class
ProductBaseOffer
+ catalogueProductBase()
CardAccess
+ getCardType()+ getCardNumber : int+ getContraAccountNumber()+ updateStatus()
+ card type+ card number+ contra account number
CreditProduct
+ getCreditProductType()+ updateStatus()
+ credit product type
ProductBaseFeature
+ getBaseEligibility()+ getCurrency()+ getMasterCurrency()+ getSettlementPeriod()+ getCardType()+ getFacilityType()+ getAccessChannelType()+ getPaymentType()+ getNoticePeriod()
Refinement in concern <productOffering>domain
OrgUnit :: PrivateBanking / OrgRoleType :: ClientSales
enabler
«concern»PBProductOffering ctd.
PBBaseModalityRange
+ getPBIntersetReceivedRange()+ getPBInterestChargedRange()+ getPBManagementFeesRange()
+ PB interest received range+ PB interest charged range+ PB management fees range
PBCreditAccount
+ getPBCreditAccountType()
PBCashAccount
+ getPBCashAccountType()
PBSecuritiesAccount
+ getPBSecuritiesAccountType()
0..*products
PBProductBaseFeature
+ getSegmentEligibilty()
1product
Base Business Unit
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus() OrgRole
+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
1business area
Business Instance
InstanceTransaction+ transaction ID+ transaction class+ getTransactionID()+ getTransactionClass()+ createRelation()+ createAgreementConsolidation()
PBProductOffering + cataloguePBProductOffering()
slide # 30© Andreas K. Künzli - Sept. 15, 01
Refinement in concern <productOffering>domain
OrgUnit :: PrivateBanking / OrgRoleType :: ClientSales
enabler
«concern»PBProductOffering ctd.
Collaboration PBProductOffering
This refinement leads to the products the model bank offers in a given domain of orgUnit and orgRolesType to its clients. Offer = products (capabilities) offered to bank’s own business areas for refinement. After refinement = offering (product or services offered to markets)
// PBProductOfferings() contains all products Private Banking is offering
// PBSecuritiesAccountType(PBETDAccount; PBOTCAccount; PBPreciousMetalsAccount;)// PBCreditAccountType(PBLombardAccount; PBMortgageAccount;)// PBCashAccountType(PBSavingsAccount; PBCurrentAccount; PBInvestmentAccount;)
// collateralization determines if assets of securities account can be pledged against a or more loans
// PBInterestReceivedRange(e.g. 3.250% - 3.500%) if : productBaseCapability :: computeInterest = TRUE each account has segment and location specific ranges
// PBInterestChargedRange(e.g. 4.125% - 4.875%) if : productBaseCapability :: computeInterest = TRUE each account has segment specific and location ranges
// PBManagementFeesRange(e.g. 2.50 - 5.00 USD) if : productBaseCapability :: computeFees = TRUE each account has segment and location specific ranges; always in : unitLocation :: localCurrency
slide # 31© Andreas K. Künzli - Sept. 15, 01
«concern»PBProductOffering ctd.
Collaboration PBProductOffering
Appendix// Capabilities of senior securities account in domain of Private
BankingPBSecuritiesAccount(Senior)
collaterization : TRUEpostingCapabilities : TRUE computeBalance : TRUEcomputeInterest : FALSEcomputeFees : TRUEsetCreditFacilities : FALSE setCreditLimit : FALSEallowExcess : FALSEmultiCurrency : FALSE getNoticePeriod : TRUEsettleCapability : TRUE
// Features of senior securities account in domain of Private Banking and Corporate Banking PBSecuritiesAccount(Senior)
Currency(localCurrency;) [see BusinessUnit]
SettlementType(monthly; semi-annual; annual;)CardType(none;)FacilityType(none;)AccessChannelType(telephone; mail; bankCounter;) PaymentType(debitEntry; paymentOrder; accountAccountTransfer;)NoticePeriod(anytime;)TitlesType(all;)EligibilityType(pb; cb;)
Appendix// Capabilities of subordinate securities account in domain of Private
BankingPBSecuritiesAccount(Subordinate)
collaterization : FALSEpostingCapabilities : TRUE computeBalance : TRUEcomputeInterest : FALSEcomputeFees : FALSE setCreditFacilities : FALSE setCreditLimit : FALSE allowExcess : FALSEmultiCurrency : FALSE getNoticePeriod : FALSEsettleCapability : FALSE
// Features of subordinate securities account in domain of Private Banking and Corporate Banking PBSecuritiesAccount(Subordnate)
Currency(none;) [see BusinessUnit]
SettlementType(none;)CardType(none;)FacilityType(none;)AccessChannelType(all;) PaymentType(debitEntry; paymentOrder;
accountAccountTransfer;)NoticePeriod(none;)TitlesType(all;)EligibilityType(pb; cb;)
slide # 32© Andreas K. Künzli - Sept. 15, 01
«concern»PBProductOffering ctd.
Collaboration PBProductOffering
Appendix// Capabilities of creditAccount :: mortgageAccount in domain of
Private Banking MortgageAccount
postingCapabilities : TRUEcomputeBalance : TRUEcomputeInterest : TRUEcomputeFees : TRUEsetCreditFacilities : TRUEsetCreditLimit : TRUEallowExcess : FALSEmultiCurrency : FALSEgetNoticePeriod : TRUEsettleCapability : TRUE
// Features of creditAccount :: mortgageAccount in domain of Private BankingMortgageAccount
Currency(localCurrency) [see BusinessUnit]
SettlementType(annual)FacilityType(mortgage)AccessChannelType(bankCounter; mail)PaymentType(debitEntry; order; accountTransfer)NoticePeriod(month[6])
slide # 33© Andreas K. Künzli - Sept. 15, 01
Refinement in domain of <PB/CBProductOffering>domain
OrgUnit :: CorporateBanking / OrgRoleType :: ClientSales
enabler
«concern»CBProductOffering
CBBaseModalityRange
+ getCBIntersetReceivedRange()+ getCBInterestChargedRange()+ getCBManagementFeesRange()
+ CB interest received range+ CB interest charged range+ CB management fees range
CBCreditAccount
+ getCBCreditAccountType()
CBCashAccount
+ getCBCashAccountType()
CBSecuritiesAccount
+ getCBSecuritiesAccountType()
0..*products
CBProductBaseFeature
+ getSegmentEligibilty()
1product
Product Offer
CashProduct
+ getCashProductType()+ updateStatus()
+ cash product type
ProductBase
+ getProductID()+ getProductClass()
+ product ID+ product class
ProductBaseCapability
+ postingCapability : boolean+ computeBalance : boolean+ computeInterest : boolean+ computeFees : boolean+ setCreditFacilities : boolean+ setCreditLimit : boolean+ allowExcess : boolean+ multiCurrency : boolean+ getNoticePeriod : boolean+ settleCapability : boolean
WholeSaleProductBaseCapability
+ Collateralization : boolean
WholeSaleProductBaseFeature
+ getTitles()+ getEligibilityType()
ProductBaseOffer
+ catalogueProductBase()
CardAccess
+ getCardType()+ getCardNumber : int+ getContraAccountNumber()+ updateStatus()
+ card type+ card number+ contra account number
CreditProduct
+ getCreditProductType()+ updateStatus()
+ credit product type
ProductBaseFeature
+ getBaseEligibility()+ getCurrency()+ getMasterCurrency()+ getSettlementPeriod()+ getCardType()+ getFacilityType()+ getAccessChannelType()+ getPaymentType()+ getNoticePeriod()
Base Business Unit
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus() OrgRole
+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
1business area
PB/CBSecuritiesProduct
+ getSecuritiesProductClass()+ updateStatus()
+ securities product class
Business Instance
InstanceTransaction+ transaction ID+ transaction class+ getTransactionID()+ getTransactionClass()+ createRelation()+ createAgreementConsolidation()
CBProductOffering + _catalogueCBProductOffering()
slide # 34© Andreas K. Künzli - Sept. 15, 01
Collaboration CBProductOffering
This refinement leads to the products the model bank offers in a given domain of orgUnit and orgRolesType to its clients. Offer = products (capabilities) offered to bank’s own business areas for refinement. After refinement = offering (product or services offered to markets)
// CBProductOfferings() contains all products Corporate Banking is offering
// CBSecuritiesAccountType (CBETDAccount; CBOTCAccount; CBPreciousMetalsAccount;)// CBCreditAccountType(CBSecuredLoanAccount; CBUnsecuredLoanAccout; CBFixedTermLoanAccount; ; CBLeasingAccount;
CBFatoringAccount; CBMortgageAccount;)// CBCashAccountType(CBsavingsAccount; CBCurrentAccount; CBInvestmentAccount;)
// collateralization determines if assets of securities account can be pledged against a or more loans
// CBInterestReceivedRange(e.g. 3.250% - 3.500%) if : productBaseCapability :: computeInterest = TRUE each account has segment and location specific
ranges// CBInterestChargedRange (e.g. 4.125% - 4.875%) if : productBaseCapability :: computeInterest = TRUE each account has segment
specific and location ranges
// CBManagementFeesRange (e.g. 2.50 - 5.00 USD) if : productBaseCapability :: computeFees = TRUE each account has segment and location specific
ranges; always in : unitLocation :: localCurrency
«concern»CBProductOffering ctd.
slide # 35© Andreas K. Künzli - Sept. 15, 01
Collaboration CBProductOffering
Appendix// Capabilities of credit account in domain of Corporate Banking
CBCreditAccountpostingCapabilities : TRUEcomputeBalance : TRUEcomputeInterest : TRUEcomputeFees : TRUE setCreditFacilities : TRUEsetCreditLimit : TRUEallowExcess : TRUEmultiCurrency : TRUEgetNoticePeriod : TRUEsettleCapability : TRUE
// Features of credit account in domain of Corporate BankingCBCreditAccount
Currency(all;) SettlementType(all;)CardType(creditCardBusiness;)FacilityType(all;)AccessChannelType(telephone; mail; bankCounter;
fax; telex;)PaymentType(telephone; order;)NoticePeriod(month[1]; [3]:)
«concern»CBProductOffering ctd.
Appendix// Capabilities of creditAccount :: mortgageAccount in domain of
Corporate Banking MortgageAccount
postingCapabilities : TRUEcomputeBalance : TRUEcomputeInterest : TRUEcomputeFees : TRUEsetCreditFacilities : TRUEsetCreditLimit : TRUEallowExcess : FALSEmultiCurrency : TRUE (*)getNoticePeriod : TRUEsettleCapability : TRUE
// Features of creditAccount :: mortgageAccount in domain of Corporate BankingMortgageAccount
Currency(localCurrency;) [see BusinessUnit]
SettlementType(annual;)FacilityType(mortgage;)AccessChannelType(bankCounter; mail;)PaymentType(debitEntry; order; accountTransfer;)NoticePeriod(month[1]; [3]; [6];)
(* e.g. having real estate in USA and mortgage debt in USD but have the account balance in CHF for balance sheet purposes.)
slide # 36© Andreas K. Künzli - Sept. 15, 01
Base Product Offer
CashProduct
+ getCashProductType()+ updateStatus()
+ cash product type
ProductBase
+ getProductID()+ getProductClass()
+ product ID+ product class
ProductBaseCapability
+ postingCapability : boolean+ computeBalance : boolean+ computeInterest : boolean+ computeFees : boolean+ setCreditFacilities : boolean+ setCreditLimit : boolean+ allowExcess : boolean+ multiCurrency : boolean+ getNoticePeriod : boolean+ settleCapability : boolean
PBProductBaseCapability
+ Collateralization : boolean
PB/CBProductBaseFeature
+ getTitles()+ getEligibilityType()
CreditProduct
+ getCreditProductType()+ updateStatus()
+ credit product type
ProductBaseFeature
+ getBaseEligibility()+ getCurrency()+ getMasterCurrency()+ getSettlementPeriod()+ getCardType()+ getFacilityType()+ getAccessChannelType()+ getPaymentType()+ getNoticePeriod()
domain
PB/CBSecuritiesProduct
+ getSecuritiesProductClass()+ updateStatus()
+ securities product class
Base Business Unit
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus() OrgRole
+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
Refinement in concern <ProductOffer>domain
OrgUnit :: Bank
enabler
«concern»InternalProductOffer
InternalCreditAccount
+ getInternalAssetAccounType()
InternalCashAccount
+ getInternalLiabilityAccountType()
InternalSecuritiesAccount
+ getTitlesType()+ getInternalSecuritiesAccountType()
+ titles type
slide # 37© Andreas K. Künzli - Sept. 15, 01
Collaboration InternalProductOffering
Remark:// Internal accounts are used to consolidate the bank. Positive
client account balances are posted in liabilities accounts (because these are liabilities of the bank) and negative client account balances are posted in asset accounts (because these are assets of the bank).
// Separate internal accounts are kept for interests and fees charged to clients (earnings = credits) and interest received by client (expenses = debit). These accounts are consolidated into a profitLossAccount (see groupingAccount)
// titlesType (shares; bonds; foreignExchange; tBills; derivatives; options; preciousMetal; food; oil;) Remark
// exchangeTraded = (shares; bonds; foreignExchange; tBills;)
// overTheCounterTraded = titlesType(derivatives; options;)
// commodities =(preciousMetal; food; oil;)// preciousMetal(platinum; gold; silver)// food(wheat; coffee; soy; porkBellies;)
Appendix ctd.// Capabilities of securities account in domain of Private Banking
InternalSecuritiesAccountcollaterization : FALSEpostingCapabilities : TRUE computeBalance : TRUEcomputeInterest : FALSEcomputeFees : FALSEsetCreditFacilities : FALSEsetCreditLimit : FALSEallowExcess : FALSEmultiCurrency : FALSE getNoticePeriod : FALSEsettleCapability : FALSE
// Features of securities account in BankInternalSecuritiesAccount
Currency(none;) [see BusinessUnit]SettlementType(none;)CardType(none;)FacilityType(none;)AccessChannelType(none;) PaymentType(none;)NoticePeriod(none;)TitlesType(all;)EligibilityType(internal;)
«concern»InternalProductOffer ctd.
slide # 38© Andreas K. Künzli - Sept. 15, 01
Collaboration InternalProductOffer
Appendix// Capabilities of credit account in domain of Bank
InternalCreditAccountpostingCapabilities : TRUEcomputeBalance : TRUEcomputeInterest : FALSEcomputeFees : FALSE setCreditFacilities : TRUEsetCreditLimit : TRUEallowExcess : FALSEmultiCurrency : FALSEgetNoticePeriod : FALSEsettleCapability : TRUE
// Features of credit account in domain of Bank InternalCreditAccount
Currency(all;) SettlementType(anytime;)CardType(none;)FacilityType(internal;)AccessChannelType(none;)PaymentType(none;)NoticePeriod(none;)
«concern»InternalProductOffer ctd.
Appendix ctd.// Capabilities of cash account in domain of Bank
InternalCashAccountpostingCapabilities : TRUEcomputeBalance : TRUE computeInterest : FALSEcomputeFees : FALSEsetCreditFacilities : FALSEsetCreditLimit : FALSEallowExcess : FALSEmultiCurrency : FALSEgetNoticePeriod : FALSEsettleCapability : TRUE
// Features of cash account in domain of BankInternalCashAccount
Currency(all;) SettlementType(anytime;)CardType(none;)FacilityType(internal;)AccessChannelType(none;)PaymentType(none;)NoticePeriod(none;)
slide # 39© Andreas K. Künzli - Sept. 15, 01
«concern»Business Relationship
Collaboration BusinessRelationship
// RelationClass (mandate; thirdParty; employee; counterparty; supplier;)
// Role :relationClass(mandate) = role(client; prospectClient;) relationClass(thirdParty)= role(authorizedParty; beneficiary;)
relationClass(employee)= role(executive; director; officer;) relationClass(counterparty)= role(broker; exchange; insurer;)relationClass(supplier)= role(technologyProvider; officeSupplyProvider;)Remarks// ThirdParties do not need an own relationship with the bank, they are empowered by a client to represent him or her as authorizedParty, or are beneficiary (asset holder or beneficial owner) who are represented by a lawyer or trustee, who must declare himself as non-beneficial owner. ThirdParty representation is only possible in connection with Mandates.// Third parties and employees are always individuals. Counterparty and supplier are always corporate bodies
// updateStatus (nonOperational; operational; historical; archived)
// RelationshipType (NamedParty; NumberedParty; JointNamedParty; AssociatedNamedParty)
// Legal requirements require the capturing off specific information by all relationshipType(s). But by NumberedParty a number instead of a name and address will appear on all interfaces (e.g. screens, mailings, documents). JointNamedParty and AssociatedNamedParty consist of at least two distinct individuals.
// SegmentationType is influenced by business unit : retailBanking(youth; student; adult; senior;)
= basic market segmentation; age or need driven: privateBanking(affluent; highNetWorth) = asset driven segmentation : corporateBanking(local; regional; national;
international;) = business driven segmentation
// RelationshipPortfolio : Each relationClass has its specific portfolioNumber algorithm (e.g. mandate 10-digit numeric number; thirdParty 10-digit alphanumeric number). Each business relation has a unique portfolioNumber.
Relationship
+ relationship type
+ getRelationshipType()
Relation
– relation class+ role
– getRelationClass()+ getRole()+ updateStatus
Segmentation
+ segmentation type
+ getSegmentationType()
RelationshipPortfolio
+ portfolio number
+ getPortfolioNumber()
1..*
1
Rule:Per branch (orgUnit) there is only one portfolioNumber per relationClass permitted,
slide # 40© Andreas K. Künzli - Sept. 15, 01
«concern»Business Relationship ctd.
one geographic and judicial domain (= country)
: RelationClass : Employment
: RelationClass : Mandate
Party A (indiv or corporate)
BusinessRelation 1
Portfolio 1.1
Portfolio 1.2
Portfolio 1.3
Account 1.1.1
Account 1.1.2
Account 1.1.3
Account 1.1.4
Account 1.2.1
Account 2.1.2
Account 1.3.1
BusinessRelation 2
Portfolio 2.1
Account 2.1.1
BusinessRelation 3
Portfolio 3.1
Account 3.1.1
fullTime 1
clearingNumber
portfolioNumber
accountNumber
AGREEMENTNUMBER
CONTRACTNUMBER
Party B (indiv)
: RelationClass : Mandate
: RelationClass : ThirdParty
Due to Party B relationClass authorized to all associated portfolios of BR1 and associated accountsHas no own business relation but is associated to BR1
Due to Party B relationClass authorized to all associated portfolios of BR1 and associated accountsHas no own business relation but is associated to BR1
Each Party : Individual can only have one RelationClass : Employment.Portfolio = orgUnit or branch respectively; fullTime = 100% FTE; if partTime then >1 account but FTE 100%.
Each Party : Individual can only have one RelationClass : Employment.Portfolio = orgUnit or branch respectively; fullTime = 100% FTE; if partTime then >1 account but FTE 100%.
BusinessRelation 1
Portfolio 1.1
Account 1.1.1
Party C (indiv)
: RelationClass : ThirdParty
Party C authorized to all associated accounts of P1.1However Party A not authorized to access any of Party C’s relations
Party C authorized to all associated accounts of P1.1However Party A not authorized to access any of Party C’s relations
slide # 41© Andreas K. Künzli - Sept. 15, 01
«concern»Agreement
Collaboration Agreement
// The bank has separate agreements for every business relationship. An agreement is in effect after an offered product (e.g. bank product, employment) is accepted or consolidated by a party either in verbal or written form.// Every business relation requires the opening of at least one agreement class specific account.
// Third parties either represent (role : authorized person) the agreement parties or enter (role : trustee) into a business relations in the name of another individual (role : beneficiary).
// For internal accounts a logical agreement will be consolidated
// AgreementClass(bankProduct; employment; procurement;)// AgreementForm(unilateralAgreement; bilateralAgreement;
internal;)With unilateralAgreement no counterparty consolidation (acceptance) is needed (e.g. General Terms & Conditions)
// AgreementType(generalTerms&Conditions; agreementCashProduct; agreementCreditProduct; agreementSecuritiesProduct)
Remarks:• All subsets of <AgreementBase> are abstract and contain text templates.
Specific templates are needed to generate a specific agreement forms. Agreement parameters are hold by «Agreement».
AgreementCreditProd
AgreementCashProd
AgreementSecuritiesProd
AgreementPaymentProd
AgreementAccessRights
AgreementCardAccess
GeneralTerms&Conditions
AgreementBase
+ getAgreementForm()+ getAgreementType()+ getIssueDate : date
+ agreement form+ agreement type+ issue date
AgreementCorrespondence
1..*
0..*
Agreement(logical container)
GeneralTerms&Conditions
ProductAgreement(general agreement)
Contract(formal agreement)
1 0..*
1..*1
1..*
slide # 42© Andreas K. Künzli - Sept. 15, 01
«concern»AgreementConsolidation
Collaboration AgreementConsolidation
// offerID () unique identifier// offerDate date at which product offering was made// agreementNumber () 16-digit alphanumeric inherited from : orgUnit
:: clearingNumber; : relationshipPortfolio :: portfolioNumber and : accountBase :: accountNumber (see next slide)
// agreementDate date at which offer was accepted (offerDate agreementDate)
// updateStatus(nonOperational; operational; inClosing; closed; historical; archieved)
// contractID () unique identifier// contractDate date at which offer was accepted (agreementDate
contractDate) // contractNumber () 22-digit alphanumeric inherited from : orgUnit ::
clearingNumber; : relationshipPortfolio :: portfolioNumber and : accountBase :: accountNumber (see next slide)
// contractType(mandate; thirdParty; counterparty; supplier;) // updateStatus(nonOperational; operational; inClosing; closed;
historical; archieved)// contractBase Status
if updateStatus(agreementBase) = operationalupdateStatus(contractBase) = nonOperational; or
operational; orinClosing; or closed; or historical; or archieved
if updateStatus(agreementBase) operationalupdateStatus(contractBase) = updateStatus(agreementBase)
AgreementConsolidationBase
+ getOfferID()+ getOfferDate : date+ getAgreementNumber()+ getAgreementDate : date+ updateStatus()
+ offer ID+ offer date+ agreement number+ agreement date
ContractBase
+ getContractID()+ getContractDate : date+ getContractNumber()+ getContractType()+ updateStatus()
+ contract ID+ contract date+ contract number+ contract type
1
0..*
slide # 43© Andreas K. Künzli - Sept. 15, 01
Base Business RelationBase Org Unit Base Account
Relation– relation class+ role
– getRelationClass()+ getRole()
Relationship+ relationship type+ getRelationshipType()
Segmentation+ segmentation type
+ getSegmentationType()
RelationshipPortfolio+ portfolio number
+ getPortfolioNumber()
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus() OrgRole
+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
AccountBase+ account ID+ account number+ getAccountID()+ getAccountNumber()+ provideCreditColumn+ provideDebitColumn+ updateStatus()
1clearing number
Base Consolidation
1portfolio number
1account number
«concern»AgreementConsolidation ctd.
ContractNumber
1 number (agreementNumber) per relationship
product account number (contractNumber) known to client for deposit and withdrawal purposes
domain
orgRoleType :: ClientSales
enabler
AgreementConsolidationBase
+ getOfferID()+ getOfferDate : date+ getAgreementNumber()+ getAgreementDate : date+ updateStatus()
+ offer ID+ offer date+ agreement number+ agreement date
ContractBase
+ getContractID()+ getContractDate : date+ getContractNumber()+ getContractType()+ updateStatus()
+ contract ID+ contract date+ contract number+ contract type
slide # 44© Andreas K. Künzli - Sept. 15, 01
«concern»Resources
Refinement in concern <Parties>domain
OrgUnit :: Bank
enabler
Base Parties
CorporateBody+ foundation year+ corporate type
+ getFoundationYear()+ getCorporateType()
Individual+ first name+ middle initial+ date of birth+ legal capacity
+ getFirstName()+ getMiddleInitial()+ getLegalCapacity: boolean
CorporateRepresentative
+ getCorporateTitle+ getCorporateFunction()
+ corporate title+ corporate function
Base Business RelationBase Business Unit
Relation– relation class+ role
– getRelationClass()+ getRole()
Relationship+ relationship type+ getRelationshipType()
Segmentation+ segmentation type
+ getSegmentationType()
RelationshipPortfolio+ portfolio number
+ getPortfolioNumber()
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus() OrgRole
+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
ResourcesEmployee
+ getEmployeeID()+ getEmployeeNumber : int+ getEmployeeRole()
+ employee ID+ employee number+ employee role
1role
1domain
Base ConsolidationAgreement
ConsolidationBase
+ getOfferID()+ getOfferDate : date+ getAgreementNumber()+ getAgreementDate : date+ updateStatus()
+ offer ID+ offer date+ agreement number+ agreement date
ContractBase
+ getContractID()+ getContractDate : date+ getContractNumber()+ getContractType()+ updateStatus()
+ contract ID+ contract date+ contract number+ contract type
2parties
1contract ID
max number ofcontract types: employee
1orgUnitRole
Party+ party ID + legal form+ name+ domicile+ nationality
+ getPartyID()+ getLegalForm()+ getName()+ getDomicile()+ getNationality()+ updateState()
slide # 45© Andreas K. Künzli - Sept. 15, 01
Collaboration Resources
// employeeID() unique identifier
// employeeNumber() 8-digit alphanueric
// employeeRole(managementConsultant; ITConsultant; managementAssistant; advisorRetail; advisorWealth; advisorInvestment; advisorCredit; advisorAsset; trader; qualityController; businessProcessEngineer; productManager; ITArchitect; softwareDesinger; businessAnalyst; softwareEngineer; processingEngineer; operationEngineer; creditOfficer; recoveryOfficer; riskAnalyst; ...)
«concern»Resources ctd.
slide # 46© Andreas K. Künzli - Sept. 15, 01
Extension to concern <party> and <address>
«concern»Addressing
domain
OrgLocation :: Country
enabler
Base PartiesBase Address Base AgreementAddressingBase
+ addressing ID
+ getAddressingID()+ updateStatus()
AddressingCountry
+ getCountryFormat()
+ country format()
1..*
AddressingFormat
+ getAddressingFormat()
+ addressing format
1address
AddressingUsage
+ getAddressingPurpose()
1format
1
1
PartvAddressing
+ getPartyParameters()
AddressBaseAddressing
+ getAddressBaseParameters()
POAddress+ po box number+ po post code add
+ _getPOBoxNumber()+ POPostCodeAdd()
AddressBase+ address ID+ country– address type– domicile
+ getAddressID()+ getCountry()– getAddressType()– Domicile : boolean
CommunicationAddress
+ email address+ web address + telephone number+ mobile number+ fax number
+ getEmailAddress()+ getWebAddress()+ getTelephoneNumber()+ getMobileNumber()+ getFaxNumber()
PurposeAddress+ po box+ post code + city+ street name+ street number+ apartment number
+ POBox : boolean+ getPostCode()+ getCity()+ getStreetName+ getStreetNumber+ getApartmentNumber
1country
1..2parties
1
AgreementBase
+ getAgreementForm()+ getAgreementType()+ getIssueDate : date
+ agreement form+ agreement type+ issue date
GeneralTerms&Conditions
AgreementCorrespondence
1..2domiciles
1..*purposes
CorporateBody+ foundation year+ corporate type
+ getFoundationYear()+ getCorporateType()
Individual+ first name+ middle initial+ date of birth+ legal capacity
+ getFirstName()+ getMiddleInitial()+ getLegalCapacity: boolean
CorporateRepresentative
+ getCorporateTitle+ getCorporateFunction()
+ corporate title+ corporate function
1
Party+ party ID + legal form+ name+ domicile+ nationality
+ getPartyID()+ getLegalForm()+ getName()+ getDomicile()+ getNationality()+ updateState()
slide # 47© Andreas K. Künzli - Sept. 15, 01
«concern»Addressing ctd.
Collaboration Addressing
// addressingID() unique identifier// updateStatus (nonOperational; operational; blocked; historical;
archived)
// addressingPurpose (correspondence; thirdPartyCorrespondence; processing; internalRouting) influences addressingFormat and businessInstance (e.g. authorization to modify address content and content of mailings)// addressingPurpose = correspondence; addressingFormat = ISO; modification by owner of relationship only// addressingPurpose = thirdPartyCorrespondence; addressingFormat = ISO; modification by correspondence receiver (third party) and owner of relationship// addressingPurpose = processing; addressFormat = SWIFT; modification by owner of relationship only
// addressingFormat (ISO; SWIFT; internal;) ISO (World Post Union Standard) = 6 addressing lines with 37 characters max.; SWIFT (standard for interbank file transfer) = 5 addressing lines with 35 character max.; internal mailing = 4 addressing lines with 35 characters max. Party and address parameters are not limited to these line lengths. AddressingFormat supplies methods to fit parameters to appropriate format (algorithms not specified for simplicity reasons)
// countryFormat(american; english; german; chinese;) refinement of :: addressingFormat determines position of street number in “addressing street line” and position of post code (ZIP) in “addressing city line”. CountryFormat = chinese (address in chinese hieroglyphics but country in arabics)
// partyAddressingParameters () depending on :: addressType and :: legalForm// addressType = purpose or po
//for : individual (parameters = name; firstName; middleInitial; title); :Individual :: corporateRepresentative inaddition (parameter corporateFunction)
// for: corporateBody (parameters = name)
// addressAddressingParameters () for addressType = purpose (street; streetNumber; apartmentNumber; city; postCode; city; country) for addressType = po [street; streetNumber; apartmentNumber replaced by POBoxNumber] and :: POPostCodeAdd is added to :: postCode
slide # 48© Andreas K. Künzli - Sept. 15, 01
«concern»Account
AccountBase
+ account ID+ account number
+ getAccountID()+ getAccountNumber()+ provideCreditColumn+ provideDebitColumn+ updateStatus()
Collaboration Account
// accountID () unique identifier
// accountNumber() influenced by domain : orgUnit :: orgRoleTypeif orgRoleType(accounting; purchasing;) 12-digit numericif orgRoleType(clientSales) 4-digit numeric
// updateStatus(nonOperational; operational; blocked; inClosing, closed; historical; archived;)RemarkMeaning of states: // nonOperational - when opening a new contract, account number must be assigned, account has status nonOperational; after entering all required information into the system (if parties, addressing, relation and contract all having all status Operational, account has automatically status operational.
// Blocked - account must be operational and has at least on posting to be blocked!
// inClosing - only “internal” postings allowed like post computed interest, computed fees, compute balance and settle account. All postings from external sources are disabled (i.e. to the outside the account doesn’t exist anylonger)
// closed - all posting functionalities disabled.
// historical - for reference purposes only but accessible online (according to regulators the account closing records and the last postings must be available from between 3 to 12 months, location specific).
// archived - for reference purposes only not accessible online (the historicized records must be kept between 2 and 10 years, location specific).
slide # 49© Andreas K. Künzli - Sept. 15, 01
Refinement in concern <BusinessRelation> and extension to concern <ProductOffering>domain
PBProductOffering
enabler
«concern»AgreementConsolidation
Base Agreement Consolidation
0..*offerings
Parties
Individual+ first name+ middle initial+ date of birth+ legal capacity
+ getFirstName()+ getMiddleInitial()+ getLegalCapacity: boolean
legal capacity; age
1..*segments
methods
1country
Base Business Relation
PBSegmentation
+ getPBSegmentationType()
Base Org Unit
Relation– relation class+ role
– getRelationClass()+ getRole()
Relationship+ relationship type+ getRelationshipType()
Segmentation+ segmentation type
+ getSegmentationType()
RelationshipPortfolio+ portfolio number
+ getPortfolioNumber()
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgRole+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
AgreementConsolidationBase
+ getOfferID()+ getOfferDate : date+ getAgreementNumber()+ getAgreementDate : date+ updateStatus()
+ offer ID+ offer date+ agreement number+ agreement date
ContractBase
+ getContractID()+ getContractDate : date+ getContrcatNumber()+ updateStatus()
+ contract ID+ contract date+ contract number
ConsolidationModality
+ _agreePBIntersetReceived()+ _agreePBInterestCharged()+ _agreePBManagementFees()
Business Instance
meth
od
s
OfferingEligibilityManager
+ calculateAge()+ calculateOfferValidity()+ _catalogueEligibleProduct()+ confirmSegmentationOffering()
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus()
PBProductOffering
PBProductOffering
+ catalogueProductOffering()
PBBaseModalityRange
+ getPBIntersetReceivedRange()+ getPBInterestChargedRange()+ getPBManagementFeesRange()
+ PB interest received range+ PB interest charged range+ PB management fees range
TransactionState
+ updateStatus()
InstanceTransaction+ transaction ID+ transaction class
+ getTransactionID()+ getTransactionClass()
TransactionEnabler
TransactionDelivery
TransactionAuditTrail
TransactionTracking
TransactionOrdeRouting
slide # 50© Andreas K. Künzli - Sept. 15, 01
«concern»AgreementConsolidation ctd.
Collaboration AgreementConsolidation
// PBSegmentationType() refines segmentationType. Products are offered to specific market segments. Each segment can have deviating modalities or modalityRanges.
// calculateAge() see business instance : computation// calculateOfferValidity() see business instance : computation// listEligibleProducts() see business instance : computation// verifySegmentOffering() see business instance : computation
// agreePBInterestReceived() see business instance : computation// agreePBInterestCharged() see business instance : computation// agreePBManagementFees() see business instance : computation
slide # 51© Andreas K. Künzli - Sept. 15, 01
«concern»AgreementConsolidation ctd.
Collaboration AgreementConsolidation
Appendix ctd.The following table contains some products of wealth management
and investment management.// RBSegmentationType(youth, yo; student, st; adult, ad;
senior, sn;)
Table 1: ProductOffering to specific SegmentationType(BusinessArea)
ProductClass ProductOffering AccountSegmentation Type Type
Cash Youth account cash YOStudent account with overdraft cash STCash account with overdraft cash ADSenior account with overdraft cash SNYouth savings account cash YOStudent savings account cash STSavings account cash AD, SNPension investment account (tax exempt savings) cash AD
Card Debit card cash YO, ST, AD, SN
Credit card classic credit ST, AD, SN
slide # 52© Andreas K. Künzli - Sept. 15, 01
«concern»AgreementConsolidation ctd.
Collaboration AgreementConsolidation
Appendix ctd.The following table contains some products of wealth management
and investment management.// PBSegmentationType(affluent, a; coreAffluent, ca;
highNetWorth, hnw;)
Table 2: ProductOffering to specific SegmentationType(BusinessArea)
ProductClass ProductOffering AccountSegmentation Type Type
Cash Salary or checking cash A, CA, HNW
Current account with overdraft cash A, CA, HNW
Investment saving cash A, CA, HNW
Provision (tax exempt savings) cash A, CA,HNW
Card Debit card cash A, CA, HNW
Credit card classic credit A, CA, HNW
Credit card gold credit A, CA, HNW
Credit card premium credit CA, HNWMortgage Variable interest rate credit A, CA,
HNWFixed interest rate (1,2,3,4,5,6,7 years) credit
A, CA, HNWLIBOR fixed interest rate credit A. CA,
HNWPortfolio fixed interest rate credit A, CA,
HNWEquities derivatives Futures on equities-index (ETD) securities A, CA,
HNWOptions on equities-index (ETD) securities A, CA,
HNWOptions on equities (ETD) securities A, CA,
HNWOptions on equities futures (ETD)securities A, CA,
HNWOptions on equities-index (ETD) securities A, CA,
HNWWarrants on equities securities CA, HNWWarrants on equities basket securities CA, HNWWarrants on equities index securities CA, HNWRights securities CA, HNW Options on equities (OTC) securities HNW Options on equities futures (OTD) securitiesHNW
Fixed income Bond futures (ETD) securities A, CA, HNW derivatives Options on bond futures (ETD) securities A, CA, HNW
Repo (repurchasing agreement) securities CA, HNWConvertibles securities CA, HNWOptions on bonds (OTC) securities HNW
Structured products Employee equity shares securities CA, HNWFX (foreign exchange) spot securities CA, HNW FX swap securities CA, HNW FX forward securities CA, HNW
Appendix ctd.ProductClass ProductOffering Account
Segmentation Type TypeForeign exchange FX warrants securities CA, HNW
(FX) derivatives FX islamic securities CA, HNWFX options (OTC) securities HNW
Money market Option on money market (ETD) securities A, CA, HNW derivatives Warrants on money market securities CA, HNW
Gilt futures securities CA, HNWInterest rate swap securities CA, HNWForward rate agreement securities CA, HNWOptions on money market structure (OTC) securities HNW
Precious metal Precious metal spot securities CA, HNWPrecious metal forward securities CA, HNW
Precious metal Option on precious metal (OTC) securities HNW derivative
Tax Structured tax products (wrappers) securities CA, HNW
Margin lines for Traded options and futures (TOFF) securitiesCA, HNW
trading FX spot
slide # 53© Andreas K. Künzli - Sept. 15, 01
«concern»AgreementConsolidation ctd.
Collaboration AgreementConsolidation
Appendix ctd.The following table contains some products of wealth management
and investment management.// CBSegmentationType(regionalBusiness, reb;
nationalBusiness, nab; internationalBusiness, inb;)
Table 3: ProductOffering to specific SegmentationType(BusinessArea)
ProductClass ProductOffering AccountSegmentation Type Type
Cash Current account with overdraft cash REB, NAB, INB
Cash pooling account cash NAB, INBSavings account business cash REB
Card Credit card business classic credit REB, NAB, INB
Credit card business gold credit NAB, INBMortgage Variable interest rate credit REB,
NAB, INBFixed interest rate (1,2,3,4,5,6,7 years) credit
REB, NAB, INBLIBOR fixed interest rate credit REB,
NAB, INBPortfolio fixed interest rate credit REB,
NAB, INBLoans Factoring credit REB
Unsecured loan credit REB, NAB, INB
Secured loan credit REB, NAB, INB
Investment loan credit REB, NAB, INB
Fixed rate loan credit REB, NAB, INB
Guarantees credit REB, NAB, INB
Leasing credit REB, NAB, INB
Global credit limit credit NAB, INBExport guarantees credit INBStand-by-letter-of-credit credit INB
Equities derivatives Futures on equities-index (ETD) securities REB, NAB, INB
Options on equities-index (ETD) securities REB, NAB, INB
Options on equities (ETD) securities REB, NAB, INB
Options on equities futures (ETD)securities REB, NAB, INB
Options on equities-index (ETD) securities REB, NAB, INB
Warrants on equities securities NAB, INBWarrants on equities basket securities NAB, INBWarrants on equities index securities NAB, INBRights securities NAB, INBOptions on equities (OTC) securities INBOptions on equities futures (OTD) securitiesINB
Appendix ctd.ProductClass ProductOffering Account
Segmentation Type TypeFixed income Bond futures (ETD) securities REB,
NAB, INBderivatives Options on bond futures (ETD) securities REB, NAB, INB
Repo (repurchasing agreement) securities NAB, INBConvertibles securities NAB, INBOptions on bonds (OTC) securities INB
Structured products Employee equity shares securities NAB, INBFX (foreign exchange) spot securities NAB, INBFX swap securities NAB, INBFX forward securities NAB, INB
Foreign exchange FX warrants securities NAB, INB (FX) derivatives FX islamic securities NAB, INB
FX options (OTC) securities INBMoney market Option on money market (ETD) securities REB,
NAB, INB derivatives Warrants on money market securities NAB, INB
Gilt futures securities NAB, INBInterest rate swap securities NAB, INBForward rate agreement securities NAB, INB Options on money market structure (OTC) securities INB
Precious metal Precious metal spot securities NAB, INBPrecious metal forward securities NAB, INB
Precious metal Option on precious metal (OTC) securities INB derivative
Tax Structured tax products (wrappers) securities NAB, INB
Margin lines for Traded options and futures (TOFF) securitiesNAB, INB
trading FX spot
slide # 54© Andreas K. Künzli - Sept. 15, 01
«concern»AgreementConsolidation ctd.
Context of concerns <Agreement> and <AgreementConsolidation>domain
Document production
delivery
AgreementConsolidationBase
+ getOfferID()+ getOfferDate : date+ getAgreementNumber()+ getAgreementDate : date+ updateStatus()
+ offer ID+ offer date+ agreement number+ agreement date
ContractBase
+ getContractID()+ getContractDate : date+ getContractNumber()+ getContractType()+ updateStatus()
+ contract ID+ contract date+ contract number+ contract type
1
0..*
AgreementCreditProd
AgreementCashProd
AgreementSecuritiesProd
AgreementPaymentProd
AgreementAccessRights
AgreementCardAccess
GeneralTerms&Conditions
AgreementBase
+ getAgreementForm()+ getAgreementType()+ getIssueDate : date
+ agreement form+ agreement type+ issue date
AgreementCorrespondence
1..*
0..*
Base Agreement Consolidation
1..*parameters
Base Agreement (Document Factory)
slide # 55© Andreas K. Künzli - Sept. 15, 01
«concern»BusinessInstance ctd.
Collaboration Assent
// transactionID () unique identifier// transactionClass(transactionEnabler; transactionDelivery;
transactionTracking; transactionAuditTrail; transactionOrderRouting;)
// updateStatus(initiated; processing; pending; completed;)
Remarks// transactionEnabler contains transactions associated with
concern associated to serviceEnabler// transactionDelivery contains transactions associated with
concern associated to serviceDelivery// transactionTracking contains transactions to track tasks that are
uncompleted, unsuccessfully processed, etc. Each task has a deadline or delivery time or date associated with it.
// transactionOrderRouting assures proper processing of orders or instructions, verifies that data is sent to the indented system or application and is not being corrupted in the process
// transactionAuditTrail logs all transaction (timestamps).
TransactionAuditTrail
TransactionOrderRouting
TransactionState
+ updateStatus()
TransactionTracking
TransactionEnabler
TransactionDelivery
InstanceTransaction
+ transaction ID+ transaction class
+ getTransactionID()+ getTransactionClass()
slide # 56© Andreas K. Künzli - Sept. 15, 01
«concern»BusinessInstance
TRXEnablerCreation
+ createParty()+ createAddress()+ createAddressing()+ createRelation()+ createAgreement()+ createContractNumber()
TRXEnablerModification
+ modifyParty()+ modifyGrouping()+ modifyAddressing()
TRXEnablerSearch
+ searchParty()+ searchAddress()+ searchAddressing()+ searchRelation()+ searchAgreement()+ searchConsolidationNumber()+ searchProduct()
TRXEnablerLink
+ linkPartyToRelation()+ linkAgreementToRelation()+ linkContractBaseToAgreement()
TRXEnablerCatalogue
+ catalogueProductBase()+ catalogueProductOffering()+ catalogueEligibleProduct()
TRXEnablerAgree
+ agreeInterestCharged()+ agreeInterestReceived()+ agreeFees()+ agreeRepayment()+ agreeLoanPeriod()+ agreeNumberOfRepayments : int+ agreeWithdrawalLimit()+ agreeCurrency()+ agreeContractCurrency
TransactionEnabler
+ openBusinessRelation()+ openProductOffering()+ consolidateAgreement()+ historicizeProductOffer()+ historicizeRelation() + ...
InstanceMethod
+ metod ID+ method class
+ getMethodID()+ getMethodClass()
TRXEnablerCalculation
+ calculateAge()+ calculateLegalAge()+ calculateOfferValidity()+ calculateRepayment()
TRXEnablerConfirmation
+ confirmSegmentationOffering()+ confirmSegmentationAssociation()
slide # 57© Andreas K. Künzli - Sept. 15, 01
Colloboration BusinessInstance :: TransactionEnabler
// Establish business relation with any type of : relation :: role for every relation the domicile addressing is required. When a third party relationship has to be opened, the client relationship is needed to link the third party to that relationshipopenBusinessRelation() {
searchParty()if party = !null {createParty()updateStatus(Party)
else createAddressing(domicile)searchAddressif address = !null {createAddress()
else searchRelation()if relation = !null {createRelation()updateStatus(relation)
else relationClass = thirdParty {linkPartyToRelation()createContractEmpowermentend
else relationClass = mandate {confirmSegmentationAssociation()if segmentation orgUnit(Segmentation)notifyUser
else confirmSegmentationOffering()if segmentationOffering = productOfferingsegmentationType {
openProductOfferingelse notifyUser}
etc.
consolidateAgreement()if relationClass = mandate {createAgreement() searchParty()if party = !null {createParty()
else createAddressing(correspondence)updateStatus(AddressingBase)searchAddressif address = !null {createAddress()
else searchRelation()if relation = !null {createRelation()createContractBase()linkContractBaseToAgreement()linkAgreementToRelationlinkPartyToRelation
}etc.
if multiCurrency = TRUE {agreeContractCurrency()agreeCurrency()
else agreeContractCurrency(localCurrency)}if productClass = cashProduct {agreeInterestReceived()agreeWithdrawalLimit()agreeFees()if facilityType = overdraft {agreeInterestCharged()
}if productClass = creditProductagreeInterestCharged()}agreeRepayment()agreeLoanPeriod()agreeNumberOfRepayment()
}updateStatus(contractBase)
etc.
«concern»BusinessInstance ctd.
slide # 58© Andreas K. Künzli - Sept. 15, 01
Collaboration InstanceTransaction :: Methods
// methodID () unique identifier// methodClass (creation; modification; search; link;
modification;)
// createParty() key parameters: legalForm (defines orgUnit)
age (base for agreement (legal age) and segmentation)
// createAddress() if address shouldn’t exists
// createAddressing() key parameters: addressingPurpose (influences addressingFormat)
// createRelation() key parameters: role (defines relationClass)
relationClass (predetermined by orgLocation and
orgUnit)relationshipTyp (defines how many
parties perrelation and what agreementType)- NamedParty 1 party - NumberedParty 1 party [ name is
replaced with 12-digit number, all other party
and addressing information are accessible to
specially authorized personal] - JointNamedParty 2 or more
individuals- AssociatedNamedParty 2 or more
coporateBodies// createAgreement
// modifyParty() key parameters: name (requires changes in : addressingsPurpose ::
correspondence, no new agreement)birthDate (requires :: calculateAge and :: confirmSegmentAssociation)dateOfDeath (by entering date,
updateStatus=blocked on all accounts)maritalStatus (requires new credit
agreement signature of both individuals or only one
depending on prenuptial agreement )
// modifyGrouping() (draw new grouping structures)
// modifyAddressing() key parameters: addressing Purpose (influences addressingFormat)
// searchParty() key parameters: name
// searchAddress() key parameters: country; postalCode, street (find address to to create addressing)
// searchAddressing() key parameters: country; postalCode, street (to associate addressing to agreements, etc.)
// searchRelation() key parameters: clearingNumber
// searchAgreement() key parameters: contractNumber
// searchProductAccountNumber() key parameters: productID
«concern»BusinessInstance ctd.
slide # 59© Andreas K. Künzli - Sept. 15, 01
Collaboration InstanceTransaction :: methods
// linkPartyToRelation() associates partyID with portfolioNumber
// linkAgreementToRelation() associates agreementNumber with portfolioNumber
// linkContractNumberToAgreement() associates contractNumber to agreementNumberRemarkIf contract permits, balances of each contractNumber associated with an agreementNumber can used to compute overall agreement balance (method: computeAgreementBalance). If one account goes into excess, and sufficient funds are available under the agreementNumber, payment request is executed.
// calculateAge(systemYear - birthDateYear)// calculateLegalAge(Age countryLegalAge
legalAge=TRUEif Age < countryLegalAge
and if maritalStatussingle legalAge=TRUE
// calculateOfferValidity(systemDate offerDate+(n)days)Validity = TRUE
// calculateLoanRepayment(type)exact formula loan, mortgage, leasing, etc. to be provided // catalogueProductBase() lists base products of specific division [InvestmentManagement; WealthManagement; AssetManagement; Logistics;]
// catalogueProductOffering() lists ProductOfferings that match specific businessArea [PrivateBanking; CorporateBanking; RetailBanking; InvestmentBanking; PensionFunds; EquityCapital; HumanResources; Procurement; IT; Operations;]
// catalogueEligibleProduct() lists ProductOfferings that are confirmed with method :: confirmSegmentationOffering
«concern»BusinessInstance ctd.
// agreeInterestReceived() sets % of interest received by client (i.e. either identical with default or if range, sets % to be received (contract)
// agreeInterestCharged() sets % of interest charged from client (i.e. either identical with default or if range, sets % to be charged (contract)
// agreeFees() sets fee amount being charged from client (i.e. either identical with default or if range, sets fees to be charged (contract)
// agreeRepayment() defines amount that has to be paid back (method used to determine amount : loan :: calculateRepayment(type)
// agreeLoanPeriod() defines date at which loan, mortgage etc. has either to be amortized or be payed back.
// agreeNumberOfRepayments defines number of repayments; parameter for :: calculateRepayment
// agreeWithdrawalLimit() defines maximum amount that be can be withdrawn without penalty; parameter for cash and credit accounts
// agreeCurency() if : productCapability :: multi-currency = TRUE
define currencies (>1) by which the account can be debited and
credited// agreeContractCurrency()
if : productCapability :: multi-currency = TRUE define master currency (1) in which the account
(contract) is balanced
// confirmSegmentationOffering(productOfferingSegmentationType[1] = segmentationType(businessAreaOffering))
// confirmSegmentationAssociation() if : segmentationType is associated to orgUnit of logged in user [see SupportInformation TableNo. 002]
[1] see Tables in Collaboration(AgreementConsolidation)
slide # 60© Andreas K. Künzli - Sept. 15, 01
«concern»BusinessInstance ctd.
TRXDeliveryList
+ listAccountTypes()
TRXDeliverySettlement
+ settleContractBase()
TRXDeliveryPosting
+ postDeposit()+ postWithdrawal()+ postReverseEntry()+ postBalance()
TRXDeliveryComputation
+ computeBalance()+ computeAgreementBalance()+ computeInterest()+ computeFees()+ computeSettlement()+ computeForeignExchange()+ computeMarketValue()+ computeLendingValue()+ computeRepayment()+ computeAvailability()+ computeCashFlowGrouping()+ computeAssetsGrouping()
TransactionState
+ updateTRXStatus()
InstanceTransactionDelivery
+ executeInstruction()+ closeContractBase()+ closeRelation()+ closeAgreement() + mergeBankAccounts()+ ...
InstanceMethod
+ metod ID+ method class
+ getMethodID()+ getMethodClass()
TRXDeliveryVerification
+ verifyContractBase()+ verifyAuthority()+ verifyClearingNumber()
TRXDeliverySynchronize
+ synchronizeInternalAccountsWithContractBase()
TRXDeliverySend
+ sendInstruction()
TRXDeliveryNotification
+ notifyAuthority+ notifyUser
slide # 61© Andreas K. Künzli - Sept. 15, 01
Collaboration BusinessInstance :: TransactionDelivery
// Establish business relation with any type of : relation :: role for every relation the domicile addressing is required. When a third party relationship has to be opened, the client relationship is needed to link the third party to that relationship
executeInstruction(withdrawal)verifyContractBase(debitedAccount)if status(contractBase)=operational {verifyAuthority(mandator)if mandator=authorized {computeAvailablity(debitedAccount)if instruction debitedAccountAvailability
{postWithdrawal()computeBalance()logWithdrawal()
else computeRisk() if excess riskRange(Rating) {
postWithdrawal()computeBalance()logWithdrawal()trackViolation()
else notifyAuthority)logFailure()
}etc.
verifyClearingNumber()if clearingNumber(creditedAccount)=bank(clearingNumbers) {verifyContractBase(creditedAccount)if status(contractBase)=operational {postDeposit()computeBalance()logDeposit()
else notifyUser}
else sendInstruction(clearingNumber)}
ctd.
ctd.sendInstruction(debitNote; creditNote) to contractBaseexecuteInstruction(withdrawal)consolidatInternalAccounts
if debitedAccountBalance before withdrawal 0postWithdrawal(internalLiabilityAccount)computeBalance()logWithdrawal()
else postWithdrawal(internalAssetAccount)computeBalance()logWithdrawal()
END
executeInstruction(deposit)verifyClearingNumberif clearingNumber(creditedAccount)=bank(clearingNumbers) {else notifyUser}
verifyContractBase(creditedAccount)if status(contractBase)=operational {postDeposit()computeBalance()logDeposit()
else notifyUser}
}executeInstruction(withdrawal)consolidatInternalAccounts...}END
«concern»BusinessInstance ctd.
slide # 62© Andreas K. Künzli - Sept. 15, 01
Collaboration BusinessInstance :: TransactionDelivery
// Closing a contractNumber; relation or an agreement is done by controlling the various states.
closeContractBase() {if status(ContractBase)=operationalupdateStatus=inClosingif status(AccountBase)=operationalupdateStatus=inClosing
computeInterestCharged()computeInterestReceived()computeFees()settleContractBase()computeBalance()trackTask()if deadline > systemDate {notifyUser
else}
END
mergeBankAccountslistAccountTypes() all liability and all assetcomputeBalance() of each accountcomputeAgreementBalance(AccountType)if accountTypeLiability = accountTypeAsset {logTransaction
else notifyUserlogFailure
}END
listAccountTypes() for profit (interestCharged; interestEarned for bank) and loss (interestReceived; interestPaid for bank)
computeBalance() of each accountcomputeAgreementBalance(AccountType)if interestEarned > interestPaid {Profit
elseLosslogTransaction
}END
«concern»BusinessInstance ctd.
slide # 63© Andreas K. Künzli - Sept. 15, 01
Collaboration InstanceTransaction :: methods
// computeBalance(positions()) balance is computed daily, or intra day whenever an instruction has to be executed
// computeAgreementBalance(Balance()) AgreementBalance sums all balances off all agreement associated accounts and is computed whenever an instruction has to be executed and the instructed account doesn’t have enough funds to fulfill request.
// computeInterest() depending on the country where the account is settled, the country specific formula is used
// computeFees() depending on feeType the feeType specfic formula is used (feeType: bookingFees charges per withdrawal; managementFee flatFee per month or pro rata)
// computeSettlement(=balance+interest+fees) contractBase (account) is settled periodically or if contractBase is closed
// computeForeignExchange() one currency is switched into another use appropriate formula (local currency into foreign or foreign into local; some exchange rates compare 1 currency with 1 other, or 1 with 100, or 1,000 to 1) Exchange rates are obtain for appropriate outside systems (Reuters, etc.)
// computeMarketValue(=titlePrice*numberOfTitle) titlePrices are obtain from broker systems like Reuters, Bloomberg, etc.
// computeLendingValue(=(marketValue*haircut%) haircut is internally define premium (in%)
// computeRepayment(=loan/numberOfRepayment)
// computeAvailability(balance) availability sums all balances of all associated accounts (see agreementConsolidation)
// computeCashFlowGrouping() see «Grouping»
// computeAssetsGrouping() see «Grouping»
«concern»BusinessInstance ctd.
// listAccountType() if internalAccount: lists all account of the same type
if clientAccount: lists all account associated under the same agreement
// verifyContractBase() verifies if contract (account) is operational to execute instructions
// verifyClearingNumber() verifies if specific clearingNumber belongs to executing bank or not
// notifyUser() verifies if logged in user or application has appropriate authority
// sendInstruction() if clearingNumber not part of executing bank, instruction is routed to via clearing center to appropriate bank
// notifyAuthority() the appropriate authorized party (employeeRole) is notified
// notifyUser() the requesting user (human or hardware) is notified
// settleContractBase() triggers contract (account) settlement on respective date or ad doc upon request using computeSettlement and updateStatus if account is being closed
// postDeposit() credits account with specified amount
// postWithdrawal() debits account with specified amount
// postReverseEntry() reverses a deposit or withdrawal posted in error (doesn’t eliminate faulty posting, complex if reversing happens after settlement)
// postBalance() post balance after computeBalance or after computeSettlement
slide # 64© Andreas K. Künzli - Sept. 15, 01
«concern»Position
Posting
+ posting ID + deposit+ withdrawal+ balance+ posting remark+ value date+ booking date
+ getAccountID()+ getPostingID()+ getDeposit()+ getWithdrawal()+ getPostingRemark()+ getValueDate()+ getBookingDate()
Collaboration Position
// postingID() unique identifier (timestamp)// deposit() amount that is being posted// withdrawal() amount that is being withdrawn// balance () balance that is being posted after calculated by method ::
computeBalance // postingRemark() any type of comments associated with posting// valueDate() position is being posted at specified date// bookingDate() position is being posted at the day the position is
received by bank
Remark// InterestReceived is being posted as deposit, interestCharged and fees as withdrawal
slide # 65© Andreas K. Künzli - Sept. 15, 01
«concern»Instruction
InstructionBase
+ paymemt type + contract number debited+ contract number credited+ payment amount+ payment execution date+ payment remark+ mandator name
+ getPaymentTypwe()+ getContractNumberDebited()+ getContractNumberCredited()+ getPaymentAmount()+ getExecutionDate()+ getPaymentRemark()+ getMandatorName()+ updateStatus()
Collaboration Instruction
// PaymentType(directDebit; standingOrder; debitEntry; paymentOrder; accountAccountTransfer) Default = directDebit directDebit (debits account when debit instruction is received) standingOrder (executes instruction when instruction date = systemDate; periodical) debitEntry (authorizes bank, to debit account when specific instruction from thirdParty is received) paymentOrder (equivalent to checking, but instruction initiated by mail, fax or e-banking) accountAccountTransfer (authorizes bank, to transfer money between accounts of same relation)
// contractNumberDebited() identifies account to be be debited// contractNumberCredited() identifies account to be be credited// paymentAmount() amount to be debited or credited// paymentExecutionDate() date at which instruction has to be carried out// paymentRemark() free text// mandatorName() identifies individual who submitted instruction
slide # 66© Andreas K. Künzli - Sept. 15, 01
«concern»SupportInformation
Collaboration SupportInformation
Appendix ctd.// Support information tables (reference tables). Whenever
available ISO codes are; numeric codes should be avoided (however listed). Users should never enter code in place of plain text.
// Support information contain two classes of tables://referenceTables, R (bank’s own tables) and //environmentalTables, E (like ISO; ISIN; etc.)
TableNo.R0001 Content orgUnit CodeSegmentation Youth (< 19 years) Retail 1001
Student (> 17 and < 26 years)[1] Retail 1002Adult (> 18 years) Retail 1003Senior (> 59 years) Retail 1004Affluent (< 1 mio) Private 2100Core Affluent (>999m and <10mio)
Private 2200High Net Worth (>9.999 mio) Private 2300Regional business activities Corporate 3100National business activities Corporate 3200International business activities Corporate 3300Bank Investment 4100Exchange Investment 4200Exchange foreign Investment 4210Exchange stock Investment 4220Exchange mercantile Investment 4230Exchange commodities Investment 4240National Bank Bank 5000
Appendix ctd.TableNo.E0001 Content ISO CodeCurrency Euro EUR 001
US Dollar USD 002Japan Yen JPY 003United Kingdom Pound GBP 004Swiss franc CHF 005etc.
TableNo.E0002 Content ISO CodeCountry Canada CDN ...
China CHN ...England ENG ...Germany GER ...Greece GRE ...Switzerland SUI ...Scotland SCO ...United States USA ...etc.
if United Kingdom or Great Britain = specify England; Northern Ireland; Scotland; Wales
TableNo.E0003 Content ISIN CodeShare index General Electric 999999 ...
IBM 999999 ...UBS AG 999999 ...etc.
(ISIN not available at the time; Code is used to map to bank specific codes to ISO or ISIN
slide # 67© Andreas K. Künzli - Sept. 15, 01
«concern»Authorization
Refinement in concern <Parties> and <orgUnit>domain
orgUnit
enabler, delivery, consolidate
PartiesBase
Consolidation
AgreementConsolidationBase
+ getOfferID()+ getOfferDate : date+ getAgreementNumber()+ getAgreementDate : date+ updateStatus()
+ offer ID+ offer date+ agreement number+ agreement date
ContractBase
+ getContractID()+ getContractDate : date+ getContractNumber()+ updateStatus()
+ contract ID+ contract date+ contract number
CorporateBody+ foundation year+ corporate type
+ getFoundationYear()+ getCorporateType()
Individual+ first name+ middle initial+ date of birth+ legal capacity
+ getFirstName()+ getMiddleInitial()+ getLegalCapacity: boolean
Party+ party ID + legal form+ name+ domicile+ nationality
+ getPartyID()+ getLegalForm()+ getName()+ getDomicile()+ getNationality()
CorporateRepresentative
+ getCorporateTitle+ getCorporateFunction()
+ corporate title+ corporate function
ResourcesEmployee
+ getEmployeeID()+ getEmployeeNumber : int+ getEmployeeRole()
+ employee ID+ employee number+ employee role
AuthorizationBase
+ authorization ID+ authorization type+ authorization role+ password+ password valid until
+ getAuthorizationID()+ getAuthorizationType()+ getAuthorizationRole()+ getPassword()+ getPasswordValidUntil : date+ updateStatus()
Base Org Unit
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgRole+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus()
ResourceSystem
+ getResourceID()+ getResourceNumber : int+ getResourceType()
+ resource ID+ resource number+ resource type
1employeeID
1password
authority
resourceType
1contractID
1name
slide # 68© Andreas K. Künzli - Sept. 15, 01
Collaboration Authorization
// Authorization: orgUnit are authorized bas on orgUnitFunction / orgUnitRole matrix. OrgUnit in turn delegate their authority either in full or in part to employeeRole. If an orgUnit has to perform task that are not part of that orgUnitRole, the required authority is delegated from the appropriate orgUnitRole:
// authorizationID() unique identifier// authorizationType(singleSource; multipleSource;)
singleSource inherits either fully or partially authority from associated orgUnit (default setting) multipleSource has authority from more than associated orgUnit (e.g. special audit, temporary in nature)
// authorizationRole(chiefCreditOfficer; seniorCreditOfficer; regionalCreditOfficer; creditOfficer;) refinement of :: employeeRole ::: creditOfficer - based on level of expertise.
// password() 16-digit alphanumeric (min. 6-digit)// passwordValidUntil() date until password is valid - default
period 3 months (all passwords of same user are historicized), i.e. the same password cannot be reused again.
// resourceID() unique identifier// resourceNumber() unique identifier// resourceType(personnel; accessChannel; application;)
personnel; the resource is human accessChannel; the resource is hardware like an ATM (automated teller) application; the resource is an application, like a risk system, which can approve an withdrawal without human interference even if the account is afterwards in excess
«concern»Authorization ctd.
orgUnitRole
authority
employeeRole
orgUnitRole
authority
full orpartial partial
associatedorgUnit
orgUnit orgUnit
resourceID
slide # 69© Andreas K. Künzli - Sept. 15, 01
«concern»Tracking
TrackingBase
+ tracking ID+ tracking type+ tracking priority+ initiation date + reminder date+ deadline+ tracking remark
+ getTrackingID()+ getTrackingType()+ getTrackingPriority()+ getInitiationDate : date+ getReminderDate : date+ getDeadline : date + getTrackingReamrk()+ updateStatus()
Base Org Unit
UnitLocation+ location+ court of law+ local currency
+ getLocation()+ getCourtOfLaw+ getLocalCurrency()
OrgFunction+ org function
+ getOrgFunction()
FullTimeEquivalent+ FTE amount
+ FTEAmount : int
OrgAccountability+ accounting ID
+ AccountingID : int
OrgRole+ org role type+ authorization
+ getOrgRoleType()+ Authorization : boolean
OrgUnit+ org type+ org unit ID+ org name+ org clearing number
+ getOrgType()+ getOrgUnitID()+ getOrgName()+ getOrgClearingNumber()+ updateStatus()
Parties
CorporateBody+ foundation year+ corporate type
+ getFoundationYear()+ getCorporateType()
Individual+ first name+ middle initial+ date of birth+ legal capacity
+ getFirstName()+ getMiddleInitial()+ getLegalCapacity: boolean
Party+ party ID + legal form+ name+ domicile+ nationality
+ getPartyID()+ getLegalForm()+ getName()+ getDomicile()+ getNationality()
CorporateRepresentative
+ getCorporateTitle+ getCorporateFunction()
+ corporate title+ corporate function
ResourcesEmployee
+ getEmployeeID()+ getEmployeeNumber : int+ getEmployeeRole()
+ employee ID+ employee number+ employee role
1..*
1responsible
escalation
supervisor
slide # 70© Andreas K. Künzli - Sept. 15, 01
«concern»Tracking
Collaboration Tracking
// Tracking assures that all tasks are finished. Tracking is controlled either by status or by date. If status changes, open item will be closed automatically, if date is surpassed (date < systemDate) resource who initiated tracking will be reminded. If responsible resource fails to close open item before deadline (deadline > systemDate), tracking will escalate to next higher authority.
// trackingID() unique identifier// tarckingType(payment; riskRelated;) depending on type priority and
duration of deadline are given // trackingPriority(normal; high;) influences position on responsible
resource’s list// initiationDate() date of entering task// reminderDate () date to be reminded// deadline() date by which task has to be completed, otherwise next
higher authority is informed// tracking remark() free text