model10.ppt

70
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 product purchase products or services purchase product shares Base Wholesale base offers refinement of base offers Investment Banking Private Banking Corporate Banking Asset Management Retail Banking Street side

Upload: jacknickelson

Post on 21-May-2015

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: model10.ppt

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

Page 2: model10.ppt

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

Page 3: model10.ppt

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)

Page 4: model10.ppt

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

Page 5: model10.ppt

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

Page 6: model10.ppt

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

Page 7: model10.ppt

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

Page 8: model10.ppt

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.

Page 9: model10.ppt

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

Page 10: model10.ppt

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..*

Page 11: model10.ppt

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)...

Page 12: model10.ppt

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]

Page 13: model10.ppt

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

Page 14: model10.ppt

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

Page 15: model10.ppt

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

Page 16: model10.ppt

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

Page 17: model10.ppt

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

Page 18: model10.ppt

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

Page 19: model10.ppt

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()

Page 20: model10.ppt

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

Page 21: model10.ppt

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

Page 22: model10.ppt

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()

Page 23: model10.ppt

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.

Page 24: model10.ppt

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.

Page 25: model10.ppt

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

Page 26: model10.ppt

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.

Page 27: model10.ppt

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

Page 28: model10.ppt

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

Page 29: model10.ppt

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()

Page 30: model10.ppt

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

Page 31: model10.ppt

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;)

Page 32: model10.ppt

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])

Page 33: model10.ppt

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()

Page 34: model10.ppt

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.

Page 35: model10.ppt

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.)

Page 36: model10.ppt

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

Page 37: model10.ppt

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.

Page 38: model10.ppt

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;)

Page 39: model10.ppt

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,

Page 40: model10.ppt

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

Page 41: model10.ppt

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..*

Page 42: model10.ppt

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..*

Page 43: model10.ppt

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

Page 44: model10.ppt

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()

Page 45: model10.ppt

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.

Page 46: model10.ppt

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()

Page 47: model10.ppt

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

Page 48: model10.ppt

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).

Page 49: model10.ppt

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

Page 50: model10.ppt

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

Page 51: model10.ppt

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

Page 52: model10.ppt

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

Page 53: model10.ppt

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

Page 54: model10.ppt

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)

Page 55: model10.ppt

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()

Page 56: model10.ppt

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()

Page 57: model10.ppt

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.

Page 58: model10.ppt

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.

Page 59: model10.ppt

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)

Page 60: model10.ppt

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

Page 61: model10.ppt

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.

Page 62: model10.ppt

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.

Page 63: model10.ppt

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

Page 64: model10.ppt

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

Page 65: model10.ppt

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

Page 66: model10.ppt

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

Page 67: model10.ppt

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

Page 68: model10.ppt

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

Page 69: model10.ppt

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

Page 70: model10.ppt

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