Data Structure for Mirror Balance
- SPMS-6Getting issue details... STATUS
This document contains the Balance Collection (MongoDB) definition. We could see java objects and JSON schema for MongoDB.
Sources
Account Balance Endpoint
Fiserv ednpoint:
/accounts/balance
Class:
FiservRepository
Service:
getAccountBalance
Request DTO properties
@Builder.Default protected String organizationNumber = "950"; protected String accountNumber;
Responses DTO
public class AccountBalanceResponseDTO { private String accountOrCardNumber; private Double currentBalance; private Double availableCreditLimit; private Double frozenBalance; }
FL-Balance Endpoint
Fiserv ednpoint:
/account/FL-balance
Class:
FiservRepository
Service:
transferBalanceFL
Request DTO
package com.spin.banking.common.fiserv.request; import com.fasterxml.jackson.annotation.JsonInclude; import com.spin.banking.common.domain.FalconIdentifier; import lombok.Builder; import lombok.Getter; import lombok.Setter; @Setter @Getter @Builder @JsonInclude(JsonInclude.Include.NON_NULL) public class TransactionDataFLDTO { private Long transactionAmount; private String actionCode; private String authorizationCode; private String effectiveDate; private String description; private String paidConcept; private String memoPostedIndicator; private String suppressMonetaryTransaction; private String n1n2ByPass; private FalconIdentifier identifier; private String box; private String crPlaza; private String crStore; private String keyTracking; private String beneficiaryAccount; private String senderAccount; private String counterpartInstitution; private String operatingInstitution; private String frcUprkBeneficiary; private String orderingFrcUprk; private String device; private String ip; private Double latitude; private Double longitude; private String recipientName; private String orderingName; private String paymentSourceId; }
Response DTO
public class BalanceTransferResponseDTO { private String historyDate; private String historyTime; private BalanceTransferDetailsResponseDTO transactionData; }
Target (MongoDB)
Collection Name:
balances
Schema:
db.createCollection("balances",{ validator: { $jsonSchema: { bsonType: "object", description: "Balance bject collection", required: [ "accountOrCardNumber", "availableCreditLimit", "organizationNumber", "accountNumber" ], properties: { "organizationNumber": { bsonType: "string", description: "organization Number must be a string and is required" }, "accountNumber": { bsonType: "string", description: "account Number must be a string and is required" }, "accountOrCardNumber": { bsonType: "string", description: "account or card number must be a string and is required" }, "availableCreditLimit": { bsonType: "double", description: "available credit limit must be a number and is required" } "currentBalance": { bsonType: "double", description: "current balance must be a number" }, "frozenBalance": { bsonType: "double", description: "frozen balance must be a number" }, "historyDate": { bsonType: "string", description: "history Date must be a string" }, "historyTime": { bsonType: "string", description: "history Time must be a string" }, "transactionData": { bsonType: "object", description: "transaction data", required: [ "transactionCode", "currentBalance", "openToBuy" ], properties: { "transactionCode": { bsonType: "string", description: "transaction code is required" }, "transactionDescription": { bsonType: "string", description: "describe a transaction" }, "currentBalance": { bsonType: "long", description: "current balance must be a long number and is required" }, "openToBuy": { bsonType: "long", description: "open to Buy must be a long number and is required" }, "transactionAmount": { bsonType: "long", description: "" }, "actionCode": { bsonType: "string", description: "action Code" }, "authorizationCode": { bsonType: "string", description: "authorization Code" }, "effectiveDate": { bsonType: "string", description: "effective Date" }, "description": { bsonType: "string", description: "description" }, "paidConcept": { bsonType: "string", description: "paid Concept" }, "memoPostedIndicator": { bsonType: "string", description: "memo Posted Indicator" }, "suppressMonetaryTransaction": { bsonType: "string", description: "suppress Monetary Transaction" }, "n1n2ByPass": { bsonType: "string", description: "n1 n2 by Pass" }, "identifier": { bsonType: "string", description: "identifier" }, "box": { bsonType: "string", description: "box" }, "crPlaza": { bsonType: "string", description: "cr Plaza" }, "crStore": { bsonType: "string", description: "cr Store" }, "keyTracking": { bsonType: "string", description: "key Tracking" }, "beneficiaryAccount": { bsonType: "string", description: "beneficiary Account" }, "senderAccount": { bsonType: "string", description: "sender Account" }, "counterpartInstitution": { bsonType: "string", description: "counterpart Institution" }, "operatingInstitution": { bsonType: "string", description: "operating Institution" }, "frcUprkBeneficiary": { bsonType: "string", description: "frc Up rk Beneficiary" }, "orderingFrcUprk": { bsonType: "string", description: "ordering Frc Up rk" }, "device": { bsonType: "string", description: "device" }, "ip": { bsonType: "string", description: "ip" }, "latitude": { bsonType: "double", description: "latitude" }, "longitude": { bsonType: "double", description: "longitude" }, "recipientName": { bsonType: "string", description: "recipient Name" }, "orderingName": { bsonType: "string", description: "ordering Name" }, "paymentSourceId": { bsonType: "string", description: "payment Source Id" } } } } } } });
Target (Java)
import lombok.Getter; import lombok.Setter; import org.springframework.data.annotation.Id; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Email; import org.springframework.data.mongodb.core.mapping.Document; // import org.springframework.data.mongodb.core.index.Indexed; @Getter @Setter @Document(collection = "balances") public class Balance { @Id private String id; @NotNull(message="account or card number is mandatory") private String accountOrCardNumber; private Double currentBalance; @NotNull(message="available credit limit is mandatory") private Double availableCreditLimit; private Double frozenBalance; private String historyDate; private String historyTime; private TransactionData transactionData; private Long transactionAmount; private String actionCode; private String authorizationCode; private String effectiveDate; private String description; private String paidConcept; private String memoPostedIndicator; private String suppressMonetaryTransaction; private String n1n2ByPass; private FalconIdentifier identifier; private String box; private String crPlaza; private String crStore; private String keyTracking; private String beneficiaryAccount; private String senderAccount; private String counterpartInstitution; private String operatingInstitution; private String frcUprkBeneficiary; private String orderingFrcUprk; private String device; private String ip; private Double latitude; private Double longitude; private String recipientName; private String orderingName; private String paymentSourceId; }
import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotNull; import org.springframework.data.mongodb.core.mapping.Document; @Getter @Setter @Document public class TransactionData { @NotNull(message="transaction Code is mandatory") private String transactionCode; private String transactionDescription; @NotNull(message="current Balance is mandatory") private Long currentBalance; @NotNull(message="open to Buy limit is mandatory") private Long openToBuy; }
Data Structure for Account Mirror
- SPMS-8Getting issue details... STATUS
This section presents the Fiserv endpoints of the Account domain and proposes the MongoDB data structure for Mirror Account based on the corresponding request/response.
Version control
Version | Major Changes | Doc |
---|---|---|
v1.0 |
| |
v1.1 |
|
For more details on the changes made, please refer to the changelog file.
Fiserv - Account endpoint list
Account Details GET /account/details
Account Block Code POST /account/block-code
Account Customer Linking POST /account/customer
Account Details
Source
Fiserv endpoint:
GET /account/details
Class:
FiservRepository
Service:
getAccountDetails
Response:
public class AccountDetailsResponseDTO { private AccountDataDTO accountData; }
public class AccountDataDTO { private String accountNumber; private String customerNumber; private String blockCode1; private String blockCode1Date; private String blockCode2; private String blockCode2Date; private String accountMakerDateOfBirth; //this comes in pesos private Double availableCredit; //daily posted average balance private Double userAmounts9; //daily memo average balance private Double userAmounts10; //Total current memo balance private Double userAmounts7; public Double getAvailableCredit() { return availableCredit * 100; } public Double getUserAmounts9() { return userAmounts9 * 100; } public Double getUserAmounts7() { return userAmounts7 * 100; } public Double getUserAmounts10() { return userAmounts10 * 100; } }
Request
public class AccountDetailsRequestDTO { private String organizationNumber; private String accountNumber; }
Target (MongoDB)
Collection name:
accountDetails
Schema:
db.createCollection("accountDetails", { validator: { $jsonSchema: { bsonType: "object", title: "Account Details Object Validation", required: ["accountDataKey.accountNumber"], properties: { accountDataKey: { bsonType: "object", properties: { accountNumber: { bsonType: "string", description: "'accountNumber' must be a string and is required" } } }, accountData: { bsonType: "object", properties: { customerNumber: { bsonType: "string", description: "'customerNumber' must be a string" }, blockCode1: { bsonType: "string", description: "'blockCode1' must be a string" }, blockCode1Date: { bsonType: "string", description: "'blockCode1Date' must be a string" }, blockCode2: { bsonType: "string", description: "'blockCode2' must be a string" }, blockCode2Date: { bsonType: "string", description: "'blockCode2Date' must be a string" } } } } } } });
Index
db.accountDetails.createIndex({accountDataKey: 1});
Target (Java)
import lombok.Getter; import lombok.Setter; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Getter @Setter @Document(collection = "accountDetails") public class AccountDetail { @Id private String id; private AccountDataKey accountDataKey; private AccountData accountData; }
import lombok.Getter; import lombok.Setter; import org.springframework.data.mongodb.core.mapping.Document; @Getter @Setter @Document public class AccountData { private String customerNumber; private String blockCode1; private String blockCode1Date; private String blockCode2; private String blockCode2Date; }
import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotNull; import org.springframework.data.mongodb.core.mapping.Document; @Getter @Setter @Document public class AccountDataKey { @NotNull(message="account number is mandatory") private String accountNumber; }
Account Block Code
Source
Fiserv endpoint:
POST /account/block-code
Class:
FiservRepository
Service:
setAccountBlockCode
Response:
public class AccountBlockUnblockResponseDTO { private String functionCode; private String accountNumber; private String blockCode1Local; private Integer localOrganization; }
Request
public class AccountBlockUnblockRequestDTO extends AbstractAccountFiservBaseRequest { private String blockCode; private Integer blockCodeIndicator; private Integer foreignUse; private String functionCode; }
public abstract class AbstractAccountFiservBaseRequest extends AbstractFiservBaseRequest { protected String accountNumber; }
public abstract class AbstractFiservBaseRequest { @Builder.Default protected String organizationNumber = "950"; }
Target (MongoDB)
Collection name:
blockUnblockAccounts
Schema:
db.createCollection("blockUnblockAccounts", { validator: { $jsonSchema: { bsonType: "object", title: "Block Unblock Accounts Object Validation", required: ["accountBlockUnblockKey.accountNumber", "accountBlockUnblockKey.blockCode" , "accountBlockUnblockKey.blockCodeIndicator", "accountBlockUnblockKey.foreignUse", "accountBlockUnblockKey.functionCode", "accountBlockUnblockKey.organizationNumber"], properties: { accountBlockUnblockKey: { bsonType: "object", properties: { accountNumber: { bsonType: "string", description: "'accountNumber' must be a string and is required" }, blockCode: { bsonType: "string", description: "'blockCode' must be a string and is required" }, blockCodeIndicator: { bsonType: "int", description: "'blockCodeIndicator' must be a int and is required" }, foreignUse: { bsonType: "int", description: "'foreignUse' must be a int and is required" }, functionCode: { bsonType: "string", description: "'functionCode' must be a string and is required" }, organizationNumber: { bsonType: ["string"], description: "'organizationNumber' must be a string and is required" } } }, blockCode1Local: { bsonType: "string", description: "'blockCode1Local' must be a string" }, localOrganization: { bsonType: "int", description: "'localOrganization' must be a int" } } } } });
Index
db.blockUnblockAccounts.createIndex({accountBlockUnblockKey: 1}); db.blockUnblockAccounts.createIndex({"accountBlockUnblockKey.accountNumber": 1});
Target (Java)
import lombok.Getter; import lombok.Setter; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Getter @Setter @Document(collection = "blockUnblockAccounts") public class AccountBlockUnblock { @Id private String id; private AccountBlockUnblockKey accountBlockUnblockKey; private String blockCode1Local; private Integer localOrganization; }
import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotNull; import org.springframework.data.mongodb.core.mapping.Document; @Getter @Setter @Document public class AccountBlockUnblockKey { @NotNull(message="account number is mandatory") private String accountNumber; @NotNull(message="organization number is mandatory") private String organizationNumber; @NotNull(message="block is mandatory") private String blockCode; @NotNull(message="block code indicator is mandatory") private Integer blockCodeIndicator; @NotNull(message="foreign use is mandatory") private Integer foreignUse; @NotNull(message="function code is mandatory") private String functionCode; }
Account Customer Linking
Source
Fiserv endpoint:
POST /account/customer
Class:
FiservRepository
Service:
linkAccountToCustomer
Response:
public class AccountToCustomerLinkingResponseDTO { private String customerNumber; private String accountNumber; }
Request
public class AccountToCustomerLinkingRequestDTO { private String accountNumber; private AlternateCustomerRequestDTO alternateCustomer = new AlternateCustomerRequestDTO(); private String customerNumber; private String qualification; private String organizationNumber; private Integer customerTypeIndicator; private Integer foreignUseIndicator; @Getter static class AlternateCustomerRequestDTO { private String expirationDate; private String status; } }
Target (MongoDB)
Collection name:
accountCustomerLinks
Schema:
db.createCollection("accountCustomerLinks", { validator: { $jsonSchema: { bsonType: "object", title: "Account Customer Links Object Validation", required: ["customerNumber", "accountNumber", "qualification", "organizationNumber", "customerTypeIndicator", "foreignUseIndicator"], properties: { customerNumber: { bsonType: "string", description: "'customerNumber' must be a string and is required" }, accountNumber: { bsonType: "string", description: "'accountNumber' must be a string and is required" }, qualification: { bsonType: "string", description: "'qualification' must be a string and is required" }, organizationNumber: { bsonType: "string", description: "'organizationNumber' must be a string and is required" }, customerTypeIndicator: { bsonType: "int", description: "'customerTypeIndicator' must be a int and is required" }, foreignUseIndicator: { bsonType: "int", description: "'foreignUseIndicator' must be a int and is required" }, expirationDate: { bsonType: "string", description: "'expirationDate' must be a string" }, status: { bsonType: "string", description: "'status' must be a string" } } } } });
Index
db.accountCustomerLinks.createIndex({customerNumber: 1}); db.accountCustomerLinks.createIndex({accountNumber: 1}); db.accountCustomerLinks.createIndex({"customerNumber,accountNumber": 1}); db.accountCustomerLinks.createIndex({"customerNumber,accountNumber,organizationNumber": 1});
Target (Java)
import lombok.Getter; import lombok.Setter; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Getter @Setter @Document(collection = "accountCustomerLinks") public class AccountToCustomerLinking { @Id private String id; @NotNull(message="account number is mandatory") private String accountNumber; @NotNull(message="customer number is mandatory") private String customerNumber; @NotNull(message="qualification is mandatory") private String qualification; @NotNull(message="organization number is mandatory") private String organizationNumber; @NotNull(message="customer type indicator is mandatory") private Integer customerTypeIndicator; @NotNull(message="foreign use indicator is mandatory") private Integer foreignUseIndicator; private String expirationDate; private String status; }
Add Comment