VUS Design Assumptions - illyfrancis/scribble GitHub Wiki

UAF

Dual Account Service

enum DualAccountType {
  TYPE_A, TYPE_B, TYPE_C;
}

interface DualAccountService {
  DualAccountType determineType(int accountNumber); // - Q1

  // precondition is the accountNumber arg is account type B or C
  int getAccountNumberTypeA(int accountNumber); // - Q2

  // precondition is the accountNumber input arg is account type A
  int getAccountNumberTypeB(int accountNumber);  // - Q2

  // precondition is the accountNumber input arg is account type A
  int getAccountNumberTypeC(int accountNumber);  // - Q2

  // get client account number
  int getClientAccountNumber(int accountNumberTypeA);  // - Q3, Q4
}
  • Q1: What if the type cannot be determined for the given account number? Exception or null.
  • Q2: Can UAF return invalid account number? Exception or zero.
  • Q2: Think about if it can return B or C, i.e. confirm there can only be B or C for A (not both B & C)
  • Q3: Should the function be able accept any type of account or just the account number of Type A?
  • Q4: What is the client account number type? Only numeric or contains alpha-numeric? The return type may need to be revised to String

Reference Data / Static database

Determination of Actual vs Contractual (VUS 1,2)

enum TransactionType {
  RVP, DVP;
}

interface ReferenceData {
  boolean isContractual(int accountNumber, TransactionType txType);  // - Q1
}
  • Q1: What if reference data cannot determine actual/contractual? i.e. is returning null or unknown acceptable?

Determination of FX Counterparty (VUS 3)

  • Q: What's the input?