1 / 70

Structures Consists of service enabler and service delivery parts

Base. base offers. Wholesale. refinement of base offers. purchase products or services. purchase product shares. purchase product. Investment Banking. Private Banking. Corporate Banking. Asset Management. Retail Banking. Model Bank. Structures

lida
Download Presentation

Structures Consists of service enabler and service delivery parts

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Market side Clients) Corporate Banking Corporate Banking Wealth Management Wealth Management BANK Core Competence BANK Core Competence Corporate Banking Wealth Management Asset Management Asset Management Investment Banking Investment Banking BANK Core Competence Asset Management Investment Banking Logistics Logistics Logistics Model Bank • 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 Street side Exchange (stock, merchantile; commodities, foreign) Regulatory side National Bank (etc.)

  3. Model Bank - role and status driven system Event triggered (Business Instance) adds context of business unit, regulatory (country) domain service enabler information management consolidation offering management service delivery posting management i

  4. Address Agreement Product Parties Business Unit 1 0..* 0..* 1 1..* roles 1..2 domiciles 1..* 1..2 1 Addressing 1..* 2..* Grouping 2..* Business Relation 1..* 1 domain portfolio 1 1..* 1..* postal Account Business Instance 1..* triggers 1 1 1..* numbers 0..* postings 1..* verifies 1..* activities 1..* 1..* 1 payment requests Availability Check Eligibility Check Instruction 1 OK 1 execute 1 offering 1..* balances 1..* Business Process Position 1 check 1 method 1 permit 1..* 1 method Base Feature Interest Calculation 1..* credit operation market Account Settlement 1 excess Support Information Risk service enabler service delivery consolidation

  5. EmployeeRole orgUnitRole Business Process Work Flow Base Refinement Business Unit OrgUnit Party FullTimeEquivalent 1 domain Agreement Contract Relation Work Flow 1 Role AncillaryDevice (1) verifies request Authorization (2) decision employee Business Instance Events Resources Work Flow Activity EmployeeRole 1 resource EmployeeRole are replaced with actual persons (names) or applications or machines (e.g. ATM has employeeRole of “teller”) . triggers (3) Business Process Activities placeholder 1..* activityRole

  6. «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) Party CorporateBody • party ID • legal form • name • domicile • nationality • foundation year • corporate type • getFoundationYear() • getCorporateType() 1 • PartyID : int • getLegalForm() • getName() • getDomicile() • getNationality() • updateStatus() 1..* role officer Individual • first name • middle initial • date of birth • legal capacity • getFirstName() • getMiddleInital() • getBirthDate : date • getLegalCapacity : boolean 0..* representatives CorporateRepresentative • corporate title • corporate function • getCorporateTitle • getCorporateFunction()

  7. «concern» MetaParty ctd. Party A (indiv or corporate) BusinessRelation 1 one geographic and judicial domain (= country) CONTRACTNUMBER CONTRACTNUMBER AGREEMENTNUMBER AGREEMENTNUMBER clearingNumber clearingNumber portfolioNumber portfolioNumber accountNumber accountNumber global bank view only (not communicated to outside parties) metaPartyID MetaParty A (indiv or corporate) one geographic and judicial domain (= country) Party A (indiv or corporate) BusinessRelation 1 Portfolio 1.1 Account 1.1.1 Account 1.1.2 Account 1.1.3 Account 1.1.4 Portfolio 1.2 Account 1.2.1 Portfolio 1.3 Account 1.3.1 Account 2.1.2

  8. «concern» MetaParty ctd. MetaPartyBase • meta party ID • getMetaPartyID() Collaboration MetaParty // metaPartyID ()  unique identifier Remark // MetaParty structures are used to monitor risk primarily

  9. «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;) Grouping IndividualClanLink 1..* • group ID • group type • clan link type • clan link class • GroupID : int • getGroupType() • updateStatus() • getCashFlow() • getClanLinkType() • getClanLinkClass() 1..* 1 parent 2..* 1..* PartyRole CorporateLink • parent ID • child ID • % share investment 1..* child • get%ShareInvestment() • getCashFlow() • ParentID : int • ChildID : int

  10. Appendix: Grouping • Group Structure Type • Corporate Bodies • Holding [h] Consolidation of share of investments based on percentage • Group [g] Consolidation of cash flows based on percentage share of investment • Each Link is either [g] or [h]! //Calculation holding asset (ONLY [h] LINKS!) [MarketValue, mv; ShareOfInvestment, soi;].holdingAssets = child(n)(mv*soi) holding asset parent(1) : 973mio. USD child 4.1 parent(1) share of investment : 45% share of investment : 60.5% market value child(1.2) : 1,355mio. USD [h] [h] holding assets parent(2.1) : 618mio. USD (assets parent consider only [h] links)! child(1.1) cash flow child(1.2) : 45mio. USD. cash flow parent(2.2) : 78mio. USD child(1.2) share... cash flow child(1.1) : 10 mio. USD cash flow group parent(2.1) : -5mio. USD (cf group parent consider only [g] links)! parent(2.1) [g] parent(2.2) market value child(1.1) : 600mio. USD share of investment : 70% [h] [g] [g] [g] share of investment : 35% child(2.1.2) child(2.1.1) cash flow child(2.1.1/3.1): 5 mio. USD market value child(2.1.1) : 50 mio. USD child(2.2.1) cash flow child (2.2.2) : 68mio. USD [g] child(2.2.2) parent(3) child(3.1) parent (4) share of investment = 50% cash flow parent(4)... cash flow child(2.2.1/2.1.2) = -31mio. USD share of investment : 20% cash flow group parent(3) : -30 mio. USD share of investment : 50% //Calculation cash flow parent(n) ONLY [g] LINKS [ShareOfInvestment, soi; CashFlow, cf].cashFlow = cf(parent)+child(n)(cf*soi) market value child(2.1.2) : 120mio. USD

  11. Appendix: Grouping • Group Structure Type • Individuals • 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 beneficiary divorced married //Calculation available assets! [Availability, a;].familyAssets = (aparty(1)+aparty(2)+…aparty(n)) // prenuptial agreement joint liability = all liabilities which structure are shared equally amount parents [c] [c] parent represents beneficiary [c] [c] [c] [c] lawyer in-law parent heir lawyer businesspartner [c] [c] [c] [c] trustee client [c] married [c] mandatory power businesspartner [c] [c] prenuptial agreement : joint liability available assets family : 112m USD secured liabilities : 500m USD lawyer businesspartner represents beneficiary [c] parent 1 [f] parent 2 legal age : TRUE assets : 25m USD lending value : 100% (25m) unused credit limits : 145m USD unsecured liabilities : 200m USD availability : -30m USD secured liabilities : 250m USD legal age : TRUE assets : 150m USD lending value : 70% (105m) unused credit limits: 125m USD unsecured liabilities : 0m USD availability : 130m USD secured liabilities : 250m USD beneficiary [f] [f] parties frontperson owner of assets [c] participant in clan structure child 1.1 / 2.1 child 1.2 / 2.2 true beneficiary [black listed] legal age : FALSE assets : 10m USD lending value : 100% (10m) unused credit limits : n/a unsecured liabilities : n/a availability : 10m USD secured liabilities : n/a legal age : FALSE assets : 2m USD lending value : 100% (10m) unused credit limits : n/a unsecured liabilities : n/a availability : 2m USD secured liabilities : n/a //Calculation availability [Asset, as; LendingValue. lv; unusedCreditLimit, ucl; unsecuredLiabilities, ul;].Availability = {(as*lv)+ucl-ul} parent or (marital status = married) = legal aged child = underaged : underaged persons have no credits! secured liabilities = mortgage

  12. Appendix: Grouping • GroupStructureType • Individuals • Family • legal age  BusinessInstance : computation :: computeAge(systemYear - birthDateYear) get Parties : party : Country get SupportInformation : LegalAgeCountry() if age > legalAgeCountry then legalAge = TRUE if 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.

  13. «concern» PartiesPB domain enabler OrgUnit :: Private Banking IndividualProfile Party CorporateBody • party ID • legal form • name • domicile • nationality • foundation year • corporate type IndividualClanLink • investor type • getFoundationYear() • getCorporateType() • clan link type • clan link class • getCashFlow() • getClanLinkType() • getClanLinkClass() • getPartyID() • getLegalForm() • getName() • getDomicile() • getNationality() • updateState() • getInvestorType() Inheritance Assets: 250mio. USD Mortgage: 2.5mio.USD Grouping • group ID • group type divorced married • getGroupID() • getGroupType() • create(Group) [c] [c] parent [c] beneficiary in-law Individual heir parent in-law • first name • middle initial • date of birth • legal capacity [c] [c] [c] [c] • getFirstName() • getMiddleInitial() • getLegalCapacity: boolean married FieldOfInterest CorporateLink client PartyRole [c] • % share investment • parent ID • child ID • get%ShareInvestment() • getCashFlow() • getMarketValue() • computeAsset() • computeCashFlow() • updateStatus() • area of interest type • hobby • getParentID() • getChildID() • updateStatus() • getAreaOfInterestType() • getHobby() IndividualStatus Inheritance • marital status • assets • mortgage debt • getMaritalStatus() • getInheritanceAsset() • getMortgageDebt() Refinement in concern <Grouping> and <Party> Within domain “Private Banking” there are no corporate bodies Appendix: Grouping Base Grouping Base Parties 2..* Clan Structure refined with lineage information: 0..* CorporateRepresentative • corporate title • corporate function • getCorporateTitle • getCorporateFunction()

  14. «concern»PartiesPB ctd. domain Refinement in concern <Grouping> and <Party> enabler OrgUnit :: Private Banking 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

  15. «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() OrgUnit 1..* 1..* OrgFunction • org type • org unit ID • org name • org clearing number • org function Group Division Business Area • getOrgFunction() Support Units • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() Bank 1..* 1 Treasury Risk Distribution Financial OrgRole 1 Audit Compliance&Legal • org role type • authorization InvestmentManagement Wealth Management Asset Management Logistics 1 • getOrgType() • Authorization : boolean Investment Banking Private Banking Pension Funds Operations Corporate Banking Retail Banking Equity Capital IT FullTimeEquivalent OrgAccountability 1 Procurement • FTE amount • accounting ID Human Resources • FTEAmount : int • AccountingID : int

  16. «concern» BusinessUnit ctd. orgUnitFunction orgUnitRole .. y y administration y y n n n y BusinessDevelopment clientSales support ITDevelopment management accounting audit purchasing etc. n sales y y n y y ... y n ... y n y processing y n n n n y n y n marketing n ... n n y n risk n ... y y n y y n n n y ... y humanResources n y y n n n development y y y n n ... y 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;) 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 Appendix Remark Tabelle is read as follows: - orgFunction(administration) has orgUnitRole(management) - orgFunction(administration) has no orgUnitRole(support)

  17. «concern» GroupingBU domain Refinement in concern <grouping> enabler OrgUnit Appendix: Grouping Base Grouping Base BusinessUnit 1 UnitLocation • location • court of law • local currency Grouping is expanded with Org Chart capabilities IndividualClanLink • clan link type • clan link class • getLocation() • getCourtOfLaw • getLocalCurrency() • getCashFlow() • getClanLinkType() • getClanLinkClass() 1 Grouping • group ID • group type OrgUnit • getGroupID() • getGroupType() • create(Group) • org type • org unit ID • org name • org clearing number OrgFunction • org function • getOrgFunction() • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() OrgRole • org role type • authorization CorporateLink PartyRole • getOrgRoleType() • Authorization : boolean • % share investment • parent ID • child ID FullTimeEquivalent • get%ShareInvestment() • getCashFlow() • getMarketValue() • computeAsset() • computeCashFlow() • updateStatus() • getParentID() • getChildID() • updateStatus() • FTE amount • FTEAmount : int OrgAccountability • accounting ID • AccountingID : int

  18. «concern» PartiesCB domain enabler OrgUnit :: CorporateBanking TradeRegistry Party CorporateBody • party ID • legal form • name • domicile • nationality • foundation year • corporate type • tradeRegistry : boolean • getFoundationYear() • getCorporateType() • getPartyID() • getLegalForm() • getName() • getDomicile() • getNationality() • updateState() BalanceSheet • cash flow • ebit* • open credit • balancing method Individual • first name • middle initial • date of birth • legal capacity • getFirstName() • getMiddleInitial() • getLegalCapacity: boolean • cashFlow : int • Ebit : int • openCredit : int • getBalancingMethod() CorporateRepresentativeBoard • _getCorporateTitle() • _getCorporateFunctions() Refinement in concern <Party> 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 CorporateRepresentative • corporate title • corporate function • getCorporateTitle • getCorporateFunction()

  19. «concern» Address 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 AddressBase • address ID • country • – address type • – domicile • getAddressID() • getCountry() • – getAddressType() • – Domicile : boolean CommunicationAddress • email address • web address • telephone number • mobile number • fax number PurposeAddress • po box • post code • city • street name • street number • apartment number • getEmailAddress() • getWebAddress() • getTelephoneNumber() • getMobileNumber() • getFaxNumber() • POBox : boolean • getPostCode() • getCity() • getStreetName • getStreetNumber • getApartmentNumber POAddress • _po box number • po post code add • _getPOBoxNumber() • POPostCodeAdd()

  20. «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 • product ID • product class • getProductID() • getProductClass()

  21. «concern» BaseProductOffer domain enabler OrgRoleType :: ClientSales Base Business Unit ProductBase CreditProduct • product ID • product class Business Instance UnitLocation • location • court of law • local currency • getProductID() • getProductClass() • credit product type ProductBaseCapability ProductBaseOffer • getLocation() • getCourtOfLaw • getLocalCurrency() • getCreditProductType() • updateStatus() InstanceTransaction • transaction ID • transaction class • list(ProductBase) • postingCapability : boolean • computeBalance : boolean • computeInterest : boolean • computeFees : boolean • setCreditFacilities : boolean • setCreditLimit : boolean • allowExcess : boolean • multiCurrency : boolean • getNoticePeriod : boolean • settleCapability : boolean ProductBaseFeature OrgUnit • getTransactionID() • getTransactionClass() • createRelation() • createAgreementConsolidation() CashProduct • org type • org unit ID • org name • org clearing number OrgFunction • org function • cash product type • getBaseEligibilty() • getCurrency() • getMasterCurrency() • getSettlementPeriod() • getCardType() • getFacilityType() • getAccessChannelType() • getPaymentType() • getNoticePeriod() • getOrgFunction() • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() • getCashProductType() • updateStatus() OrgRole • org role type • authorization • getOrgRoleType() • Authorization : boolean FullTimeEquivalent • FTE amount • FTEAmount : int OrgAccountability • accounting ID • AccountingID : int Refinement in concern <product> Base Product 0..* products 1 orgRole

  22. «concern» BaseProductOffer ctd. Collaboration BaseProductOffer This refinement leads to the abstract base product offers of the model bank in a given domain i.e. each orgRolesType respectively Offer = 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

  23. «concern» BaseProductOffer ctd. Collaboration BaseProductOffer Appendix // Features of base product offer CreditProduct postingCapabilities : TRUE computeBalance : TRUE computeInterest : TRUE computeFees : TRUE setCreditFacilities : TRUE setCreditLimit : TRUE allowExcess : FALSE multiCurrency : FALSE getNoticePeriod : TRUE settleCapability : TRUE CreditProduct Currency(localCurrency) [see BusinessUnit] SettlementType(quarterly) FacilityType(moneyLoans) AccessChannelType(bankCounter) PaymentType(directDebit; standingOrder, accountTransfer) NoticePeriod(month[1]) Appendix ctd. // Capabilities of base product offer CashProduct postingCapabilities : TRUE computeBalance : TRUE computeInterest : TRUE computeFees : TRUE setCreditFacilities : FALSE setCreditLimit : TRUE allowExcess : FALSE multiCurrency : FALSE getNoticePeriod : TRUE settleCapability : TRUE CashProduct Currency(localCurrency) [see BusinessUnit] SettlementType(annual) FacilityType(none) AccessChannelType(bankCounter; ATM; mail; telephone) PaymentType(directDebit; standingOrder; debitEntry; accountTransfer) NoticePeriod(month[1])

  24. WholeSaleSecuritiesProduct • securities product class • getSecuritiesProductClass() • updateStatus() WholeSaleProductBaseFeature • getTitlesClass() • getEligibilityType() ProductBaseOffer UnitLocation • location • court of law • local currency CreditProduct CashProduct • list(ProductBase) • getLocation() • getCourtOfLaw • getLocalCurrency() • credit product type • cash product type • getCreditProductType() • updateStatus() • getCashProductType() • updateStatus() ProductBase OrgUnit ProductBaseCapability ProductBaseFeature • product ID • product class • org type • org unit ID • org name • org clearing number OrgFunction • org function • getProductID() • getProductClass() • postingCapability : boolean • computeBalance : boolean • computeInterest : boolean • computeFees : boolean • setCreditFacilities : boolean • setCreditLimit : boolean • allowExcess : boolean • multiCurrency : boolean • getNoticePeriod : boolean • settleCapability : boolean • getEligibilty() • getCurrency() • getMasterCurrency() • getSettlementPeriod() • getCardType() • getFacilityType() • getAccessChannelType() • getPaymentType() • getNoticePeriod() • getOrgFunction() • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() OrgRole • org role type • authorization • getOrgRoleType() • Authorization : boolean WholeSaleProductBaseCapability FullTimeEquivalent • FTE amount • Collateralization : boolean • FTEAmount : int OrgAccountability • accounting ID • AccountingID : int «concern» WholeSaleProductOffer domain Refinement in concern <productOffer> enabler OrgUnit :: Wholesale / OrgRoleType :: ClientSales CardAccess • card type • card number • contra account number 1contra number • getCardType() • getCardNumber : int • getContraAccountNumber() • updateStatus() 1contra number Base Business Unit Product Offer 1 unit

  25. «concern» WholeSaleProductOffer ctd. 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

  26. «concern» WholeSaleProductOffer ctd. Collaboration ProductOffer Appendix // Features of securities account in domain of Private Banking PBSecuritiesAccount see GroupingAccount // Capabilities of securities account in domain of Private Banking PBSecuritiesAccount see GroupingAccount

  27. «concern» GroupingAccount 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 GroupingAccountBase SeniorAccount • senior account number • senior account currency • senior acct market value • senior acct lending value • group account ID • group account type • GroupAccountID : int • getGroupAccountType() • updateStatus() SubordinateAccount • getSeniorAccountID() • getSeniorAccountNumber() • getSeniorAccountCurrency() • getSeniorAcctMarketValueParent() • getSeniorAcctLendingValueParent() • number of title • titles • market value • lending value 1 senior • getNumberOfTitle() • getTitle() • getMarketValue() • getLendingValue() 1..* subordinates AccountRole • senior ID • subordinate ID • SeniorID : int • SubordinateID : int

  28. «concern» PBProductOffering ctd. domain enabler PBBaseModalityRange OrgUnit :: PrivateBanking / OrgRoleType :: ClientSales • PB interest received range • PB interest charged range • PB management fees range PBProductOffering • cataloguePBProductOffering() • getPBIntersetReceivedRange() • getPBInterestChargedRange() • getPBManagementFeesRange() ProductBase CreditProduct • credit product type • product ID • product class • getCreditProductType() • updateStatus() CashProduct Base Business Unit PBSecuritiesAccount • getProductID() • getProductClass() • cash product type Business Instance • getCashProductType() • updateStatus() CardAccess WholeSaleSecuritiesProduct • getPBSecuritiesAccountType() • card type • card number • contra account number • securities product class ProductBaseCapability • getSecuritiesProductClass() • updateStatus() • getCardType() • getCardNumber : int • getContraAccountNumber() • updateStatus() InstanceTransaction PBCreditAccount • postingCapability : boolean • computeBalance : boolean • computeInterest : boolean • computeFees : boolean • setCreditFacilities : boolean • setCreditLimit : boolean • allowExcess : boolean • multiCurrency : boolean • getNoticePeriod : boolean • settleCapability : boolean • transaction ID • transaction class ProductBaseOffer • getTransactionID() • getTransactionClass() • createRelation() • createAgreementConsolidation() UnitLocation • location • court of law • local currency • getPBCreditAccountType() • catalogueProductBase() • getLocation() • getCourtOfLaw • getLocalCurrency() PBCashAccount OrgUnit ProductBaseFeature • org type • org unit ID • org name • org clearing number OrgFunction • getPBCashAccountType() • org function • getBaseEligibility() • getCurrency() • getMasterCurrency() • getSettlementPeriod() • getCardType() • getFacilityType() • getAccessChannelType() • getPaymentType() • getNoticePeriod() • getOrgFunction() • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() OrgRole • org role type • authorization • getOrgRoleType() • Authorization : boolean PBProductBaseFeature FullTimeEquivalent • FTE amount WholeSaleProductBaseCapability • FTEAmount : int WholeSaleProductBaseFeature • getSegmentEligibilty() OrgAccountability • Collateralization : boolean • getTitles() • getEligibilityType() • accounting ID • AccountingID : int Refinement in concern <productOffering> 1 product 1 business area 0..* products Product Offer

  29. «concern» PBProductOffering ctd. domain Refinement in concern <productOffering> enabler OrgUnit :: PrivateBanking / OrgRoleType :: ClientSales 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

  30. «concern» PBProductOffering ctd. Collaboration PBProductOffering Appendix // Capabilities of senior securities account in domain of Private Banking PBSecuritiesAccount(Senior) collaterization : TRUE postingCapabilities : TRUE computeBalance : TRUE computeInterest : FALSE computeFees : TRUE setCreditFacilities : FALSE setCreditLimit : FALSE allowExcess : FALSE multiCurrency : FALSE getNoticePeriod : TRUE settleCapability : 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 Banking PBSecuritiesAccount(Subordinate) collaterization : FALSE postingCapabilities : TRUE computeBalance : TRUE computeInterest : FALSE computeFees : FALSE setCreditFacilities : FALSE setCreditLimit : FALSE allowExcess : FALSE multiCurrency : FALSE getNoticePeriod : FALSE settleCapability : 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;)

  31. «concern» PBProductOffering ctd. Collaboration PBProductOffering Appendix // Capabilities of creditAccount :: mortgageAccount in domain of Private Banking MortgageAccount postingCapabilities : TRUE computeBalance : TRUE computeInterest : TRUE computeFees : TRUE setCreditFacilities : TRUE setCreditLimit : TRUE allowExcess : FALSE multiCurrency : FALSE getNoticePeriod : TRUE settleCapability : TRUE // Features of creditAccount :: mortgageAccount in domain of Private Banking MortgageAccount Currency(localCurrency) [see BusinessUnit] SettlementType(annual) FacilityType(mortgage) AccessChannelType(bankCounter; mail) PaymentType(debitEntry; order; accountTransfer) NoticePeriod(month[6])

  32. «concern» CBProductOffering domain enabler CBBaseModalityRange OrgUnit :: CorporateBanking / OrgRoleType :: ClientSales • CB interest received range • CB interest charged range • CB management fees range CBProductOffering • _catalogueCBProductOffering() • getCBIntersetReceivedRange() • getCBInterestChargedRange() • getCBManagementFeesRange() ProductBase CreditProduct • credit product type • product ID • product class • getCreditProductType() • updateStatus() CashProduct Base Business Unit Product Offer • getProductID() • getProductClass() • cash product type Business Instance • getCashProductType() • updateStatus() CBSecuritiesAccount CardAccess PB/CBSecuritiesProduct • card type • card number • contra account number • securities product class ProductBaseCapability • getSecuritiesProductClass() • updateStatus() • getCardType() • getCardNumber : int • getContraAccountNumber() • updateStatus() • getCBSecuritiesAccountType() InstanceTransaction • postingCapability : boolean • computeBalance : boolean • computeInterest : boolean • computeFees : boolean • setCreditFacilities : boolean • setCreditLimit : boolean • allowExcess : boolean • multiCurrency : boolean • getNoticePeriod : boolean • settleCapability : boolean • transaction ID • transaction class ProductBaseOffer • getTransactionID() • getTransactionClass() • createRelation() • createAgreementConsolidation() UnitLocation CBCreditAccount • location • court of law • local currency • catalogueProductBase() • getLocation() • getCourtOfLaw • getLocalCurrency() • getCBCreditAccountType() OrgUnit CBCashAccount ProductBaseFeature • org type • org unit ID • org name • org clearing number OrgFunction • org function • getBaseEligibility() • getCurrency() • getMasterCurrency() • getSettlementPeriod() • getCardType() • getFacilityType() • getAccessChannelType() • getPaymentType() • getNoticePeriod() • getOrgFunction() • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() • getCBCashAccountType() OrgRole • org role type • authorization • getOrgRoleType() • Authorization : boolean FullTimeEquivalent CBProductBaseFeature • FTE amount WholeSaleProductBaseCapability • FTEAmount : int WholeSaleProductBaseFeature OrgAccountability • Collateralization : boolean • getTitles() • getEligibilityType() • getSegmentEligibilty() • accounting ID • AccountingID : int Refinement in domain of <PB/CBProductOffering> 1 product 1 business area 0..* products

  33. «concern» CBProductOffering ctd. 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

  34. «concern» CBProductOffering ctd. Collaboration CBProductOffering Appendix // Capabilities of credit account in domain of Corporate Banking CBCreditAccount postingCapabilities : TRUE computeBalance : TRUE computeInterest : TRUE computeFees : TRUE setCreditFacilities : TRUE setCreditLimit : TRUE allowExcess : TRUE multiCurrency : TRUE getNoticePeriod : TRUE settleCapability : TRUE // Features of credit account in domain of Corporate Banking CBCreditAccount Currency(all;) SettlementType(all;) CardType(creditCardBusiness;) FacilityType(all;) AccessChannelType(telephone; mail; bankCounter; fax; telex;) PaymentType(telephone; order;) NoticePeriod(month[1]; [3]:) Appendix // Capabilities of creditAccount :: mortgageAccount in domain of Corporate Banking MortgageAccount postingCapabilities : TRUE computeBalance : TRUE computeInterest : TRUE computeFees : TRUE setCreditFacilities : TRUE setCreditLimit : TRUE allowExcess : FALSE multiCurrency : TRUE (*) getNoticePeriod : TRUE settleCapability : TRUE // Features of creditAccount :: mortgageAccount in domain of Corporate Banking MortgageAccount 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.)

  35. «concern» InternalProductOffer domain enabler OrgUnit :: Bank InternalCreditAccount • getInternalAssetAccounType() ProductBase CreditProduct Base Business Unit • credit product type • product ID • product class InternalSecuritiesAccount • getCreditProductType() • updateStatus() CashProduct • getProductID() • getProductClass() • cash product type • titles type • getCashProductType() • updateStatus() PB/CBSecuritiesProduct • getTitlesType() • getInternalSecuritiesAccountType() • securities product class ProductBaseCapability • getSecuritiesProductClass() • updateStatus() InternalCashAccount • postingCapability : boolean • computeBalance : boolean • computeInterest : boolean • computeFees : boolean • setCreditFacilities : boolean • setCreditLimit : boolean • allowExcess : boolean • multiCurrency : boolean • getNoticePeriod : boolean • settleCapability : boolean UnitLocation • getInternalLiabilityAccountType() • location • court of law • local currency • getLocation() • getCourtOfLaw • getLocalCurrency() OrgUnit ProductBaseFeature • org type • org unit ID • org name • org clearing number OrgFunction • org function • getBaseEligibility() • getCurrency() • getMasterCurrency() • getSettlementPeriod() • getCardType() • getFacilityType() • getAccessChannelType() • getPaymentType() • getNoticePeriod() • getOrgFunction() • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() OrgRole • org role type • authorization • getOrgRoleType() • Authorization : boolean FullTimeEquivalent • FTE amount PBProductBaseCapability • FTEAmount : int PB/CBProductBaseFeature OrgAccountability • Collateralization : boolean • getTitles() • getEligibilityType() • accounting ID • AccountingID : int Refinement in concern <ProductOffer> Base Product Offer domain

  36. «concern» InternalProductOffer ctd. 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 InternalSecuritiesAccount collaterization : FALSE postingCapabilities : TRUE computeBalance : TRUE computeInterest : FALSE computeFees : FALSE setCreditFacilities : FALSE setCreditLimit : FALSE allowExcess : FALSE multiCurrency : FALSE getNoticePeriod : FALSE settleCapability : FALSE // Features of securities account in Bank InternalSecuritiesAccount Currency(none;) [see BusinessUnit] SettlementType(none;) CardType(none;) FacilityType(none;) AccessChannelType(none;) PaymentType(none;) NoticePeriod(none;) TitlesType(all;) EligibilityType(internal;)

  37. «concern» InternalProductOffer ctd. Collaboration InternalProductOffer Appendix // Capabilities of credit account in domain of Bank InternalCreditAccount postingCapabilities : TRUE computeBalance : TRUE computeInterest : FALSE computeFees : FALSE setCreditFacilities : TRUE setCreditLimit : TRUE allowExcess : FALSE multiCurrency : FALSE getNoticePeriod : FALSE settleCapability : TRUE // Features of credit account in domain of Bank InternalCreditAccount Currency(all;) SettlementType(anytime;) CardType(none;) FacilityType(internal;) AccessChannelType(none;) PaymentType(none;) NoticePeriod(none;) Appendix ctd. // Capabilities of cash account in domain of Bank InternalCashAccount postingCapabilities : TRUE computeBalance : TRUE computeInterest : FALSE computeFees : FALSE setCreditFacilities : FALSE setCreditLimit : FALSE allowExcess : FALSE multiCurrency : FALSE getNoticePeriod : FALSE settleCapability : TRUE // Features of cash account in domain of Bank InternalCashAccount Currency(all;) SettlementType(anytime;) CardType(none;) FacilityType(internal;) AccessChannelType(none;) PaymentType(none;) NoticePeriod(none;)

  38. «concern» Business Relationship Relation • – relation class • role • – getRelationClass() • getRole() • updateStatus Relationship • relationship type • getRelationshipType() Segmentation RelationshipPortfolio • segmentation type • portfolio number • getSegmentationType() • getPortfolioNumber() 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. 1 1..* Rule: Per branch (orgUnit) there is only one portfolioNumber per relationClass permitted,

  39. «concern» Business Relationship ctd. CONTRACTNUMBER AGREEMENTNUMBER clearingNumber portfolioNumber : RelationClass : Mandate Party A (indiv or corporate) accountNumber BusinessRelation 1 Portfolio 1.1 Party B (indiv) Account 1.1.1 : RelationClass : ThirdParty Account 1.1.2 Due to Party B relationClass authorized to all associated portfolios of BR1 and associated accounts Has no own business relation but is associated to BR1 Account 1.1.3 Account 1.1.4 Portfolio 1.2 Account 1.2.1 Portfolio 1.3 Party C (indiv) Account 1.3.1 BusinessRelation 1 Account 2.1.2 Portfolio 1.1 Account 1.1.1 : RelationClass : ThirdParty : RelationClass : Mandate Party C authorized to all associated accounts of P1.1 However Party A not authorized to access any of Party C’s relations BusinessRelation 2 Portfolio 2.1 Account 2.1.1 : RelationClass : Employment BusinessRelation 3 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%. Portfolio 3.1 fullTime 1 Account 3.1.1 one geographic and judicial domain (= country)

  40. «concern» Agreement AgreementBase • agreement form • agreement type • issue date AgreementCashProd AgreementSecuritiesProd AgreementPaymentProd AgreementAccessRights AgreementCardAccess GeneralTerms&Conditions AgreementCreditProd • getAgreementForm() • getAgreementType() • getIssueDate : date AgreementCorrespondence Agreement (logical container) GeneralTerms&Conditions 0..* 1 ProductAgreement (general agreement) 1..* 1 Contract (formal agreement) 1..* • 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». 1..* 0..*

  41. «concern» AgreementConsolidation AgreementConsolidationBase • offer ID • offer date • agreement number • agreement date • getOfferID() • getOfferDate : date • getAgreementNumber() • getAgreementDate : date • updateStatus() ContractBase • contract ID • contract date • contract number • contract type • getContractID() • getContractDate : date • getContractNumber() • getContractType() • updateStatus() 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) = operational updateStatus(contractBase) = nonOperational; or operational; or inClosing; or closed; or historical; or archieved if updateStatus(agreementBase)  operational updateStatus(contractBase) = updateStatus(agreementBase) 1 0..*

  42. «concern» AgreementConsolidation ctd. domain Relation enabler • – relation class • role orgRoleType :: ClientSales • – getRelationClass() • getRole() Relationship • relationship type • getRelationshipType() UnitLocation • location • court of law • local currency RelationshipPortfolio AgreementConsolidationBase Base Org Unit Base Business Relation Base Account Base Consolidation • getLocation() • getCourtOfLaw • getLocalCurrency() • portfolio number • getPortfolioNumber() AccountBase • offer ID • offer date • agreement number • agreement date • account ID • account number OrgFunction • getAccountID() • getAccountNumber() • provideCreditColumn • provideDebitColumn • updateStatus() OrgUnit • getOfferID() • getOfferDate : date • getAgreementNumber() • getAgreementDate : date • updateStatus() • org function • org type • org unit ID • org name • org clearing number • getOrgFunction() 1 portfolio number OrgRole • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() • org role type • authorization • getOrgRoleType() • Authorization : boolean 1 account number FullTimeEquivalent • FTE amount • FTEAmount : int Segmentation OrgAccountability • segmentation type • getSegmentationType() • accounting ID • AccountingID : int 1 clearing number ContractBase • contract ID • contract date • contract number • contract type • getContractID() • getContractDate : date • getContractNumber() • getContractType() • updateStatus() ContractNumber product account number (contractNumber) known to client for deposit and withdrawal purposes 1 number (agreementNumber) per relationship

  43. «concern» Resources domain Relation enabler • – relation class • role OrgUnit :: Bank • – getRelationClass() • getRole() Relationship • relationship type • getRelationshipType() Party CorporateBody • party ID • legal form • name • domicile • nationality • foundation year • corporate type RelationshipPortfolio AgreementConsolidationBase • getFoundationYear() • getCorporateType() ContractBase • portfolio number • getPartyID() • getLegalForm() • getName() • getDomicile() • getNationality() • updateState() • getPortfolioNumber() • contract ID • contract date • contract number • contract type • offer ID • offer date • agreement number • agreement date • getContractID() • getContractDate : date • getContractNumber() • getContractType() • updateStatus() • getOfferID() • getOfferDate : date • getAgreementNumber() • getAgreementDate : date • updateStatus() Individual • first name • middle initial • date of birth • legal capacity UnitLocation • location • court of law • local currency • getFirstName() • getMiddleInitial() • getLegalCapacity: boolean ResourcesEmployee • getLocation() • getCourtOfLaw • getLocalCurrency() • employee ID • employee number • employee role Segmentation OrgUnit • segmentation type • getSegmentationType() • org type • org unit ID • org name • org clearing number OrgFunction • getEmployeeID() • getEmployeeNumber : int • getEmployeeRole() • org function • getOrgFunction() • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() CorporateRepresentative • corporate title • corporate function OrgRole • getCorporateTitle • getCorporateFunction() • org role type • authorization • getOrgRoleType() • Authorization : boolean FullTimeEquivalent • FTE amount • FTEAmount : int OrgAccountability • accounting ID • AccountingID : int Refinement in concern <Parties> Base Consolidation 2 parties 1 contract ID 1 role Base Business Unit Base Business Relation Base Parties 1 domain max number of contract types: employee 1 orgUnitRole

  44. «concern» Resources ctd. 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; ...)

  45. «concern» Addressing domain enabler OrgLocation :: Country AddressBaseAddressing PartvAddressing • getAddressBaseParameters() • getPartyParameters() Party CorporateBody AgreementBase • party ID • legal form • name • domicile • nationality • foundation year • corporate type • agreement form • agreement type • issue date • getFoundationYear() • getCorporateType() AddressingBase • getPartyID() • getLegalForm() • getName() • getDomicile() • getNationality() • updateState() • getAgreementForm() • getAgreementType() • getIssueDate : date • addressing ID AddressBase • getAddressingID() • updateStatus() • address ID • country • – address type • – domicile • getAddressID() • getCountry() • – getAddressType() • – Domicile : boolean Individual AddressingFormat AddressingUsage • first name • middle initial • date of birth • legal capacity • addressing format CommunicationAddress • getFirstName() • getMiddleInitial() • getLegalCapacity: boolean PurposeAddress • getAddressingPurpose() • getAddressingFormat() GeneralTerms&Conditions • po box • post code • city • street name • street number • apartment number • email address • web address • telephone number • mobile number • fax number • getEmailAddress() • getWebAddress() • getTelephoneNumber() • getMobileNumber() • getFaxNumber() • POBox : boolean • getPostCode() • getCity() • getStreetName • getStreetNumber • getApartmentNumber AgreementCorrespondence POAddress AddressingCountry • po box number • po post code add • country format() • _getPOBoxNumber() • POPostCodeAdd() • getCountryFormat() Extension to concern <party> and <address> 1 address 1..2 parties 1 format 1..* Base Address Base Parties Base Agreement 1 1 1..2 domiciles 1 1 1..* purposes CorporateRepresentative • corporate title • corporate function • getCorporateTitle • getCorporateFunction() 1 country

  46. «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

  47. «concern» Account AccountBase Collaboration Account // accountID ()  unique identifier // accountNumber()  influenced by domain : orgUnit :: orgRoleType if orgRoleType(accounting; purchasing;)  12-digit numeric if orgRoleType(clientSales)  4-digit numeric // updateStatus(nonOperational; operational; blocked; inClosing, closed; historical; archived;) Remark Meaning 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). • account ID • account number • getAccountID() • getAccountNumber() • provideCreditColumn • provideDebitColumn • updateStatus()

  48. «concern» AgreementConsolidation domain Relation enabler • – relation class • role ConsolidationModality PBProductOffering OfferingEligibilityManager • – getRelationClass() • getRole() • calculateAge() • calculateOfferValidity() • _catalogueEligibleProduct() • confirmSegmentationOffering() • _agreePBIntersetReceived() • _agreePBInterestCharged() • _agreePBManagementFees() TransactionState Relationship • updateStatus() • relationship type • getRelationshipType() UnitLocation • location • court of law • local currency RelationshipPortfolio • getLocation() • getCourtOfLaw • getLocalCurrency() • portfolio number AgreementConsolidationBase • getPortfolioNumber() PBBaseModalityRange PBSegmentation PBProductOffering • offer ID • offer date • agreement number • agreement date • PB interest received range • PB interest charged range • PB management fees range OrgFunction OrgUnit • catalogueProductOffering() • org function • org type • org unit ID • org name • org clearing number • getPBIntersetReceivedRange() • getPBInterestChargedRange() • getPBManagementFeesRange() • getOfferID() • getOfferDate : date • getAgreementNumber() • getAgreementDate : date • updateStatus() • getOrgFunction() • getPBSegmentationType() OrgRole Individual • getOrgType() • getOrgUnitID() • getOrgName() • getOrgClearingNumber() • updateStatus() • org role type • authorization • first name • middle initial • date of birth • legal capacity • getOrgRoleType() • Authorization : boolean • getFirstName() • getMiddleInitial() • getLegalCapacity: boolean InstanceTransaction FullTimeEquivalent • transaction ID • transaction class • FTE amount • getTransactionID() • getTransactionClass() • FTEAmount : int ContractBase Segmentation • contract ID • contract date • contract number OrgAccountability • segmentation type • getSegmentationType() • accounting ID • getContractID() • getContractDate : date • getContrcatNumber() • updateStatus() TransactionEnabler TransactionDelivery TransactionAuditTrail TransactionOrdeRouting TransactionTracking • AccountingID : int Refinement in concern <BusinessRelation> and extension to concern <ProductOffering> legal capacity; age Parties 1..* segments methods methods 1 country 0..* offerings Base Business Relation Base Org Unit PBProductOffering Base Agreement Consolidation Business Instance

  49. «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

More Related