Update models

This commit is contained in:
Ramon Ramirez 2026-01-07 10:23:00 -04:00
parent 0f29e795d2
commit 186dc8ec36
20 changed files with 263 additions and 226 deletions

View File

@ -22,10 +22,10 @@ RUN mkdir -p /work
ENV TZ="America/Caracas"
ENV LANGUAGE='en_US:en'
VOLUME /tmp
COPY /file/*-runner /work/recLegalCustomerProductDirectory
COPY /file/*-runner /work/app
RUN chmod -R 775 /work
RUN ls -ltra /work/
EXPOSE 8080
WORKDIR /work/
ENTRYPOINT ["./recLegalCustomerProductDirectory", "-Dquarkus.http.host=0.0.0.0"]
ENTRYPOINT ["./app", "-Dquarkus.http.host=0.0.0.0"]

View File

@ -0,0 +1,26 @@
package com.banesco.common.domain.model;
public enum BalanceType {
OPENING_BALANCE,
CLOSING_BALANCE,
CURRENT_BALANCE,
AVAILABLE_BALANCE,
LEDGER_BALANCE,
RESERVE_BALANCE,
FREE_BALANCE,
PRINCIPAL_BALANCE,
CLOSING_AVAILABLE,
CLOSING_BOOKED,
FORWARD_AVAILABLE,
INFORMATION,
INTERIM_AVAILABLE,
INTERIM_BOOKED,
OPENING_AVAILABLE,
OPENING_BOOKED,
PREVIOUSLY_CLOSED_BOOKED,
EXPECTED,
DAILY_MAXIMUM,
MONTHLY_MAXIMUM,
TRANSACTION_MAXIMUM,
TRANSACTION_MINIMUM,
}

View File

@ -11,5 +11,4 @@ import lombok.*;
@RegisterForReflection
public class Identifier {
private String identifierValue;
private String issuingAuthority;
}

View File

@ -14,12 +14,9 @@ import java.util.List;
public class Account {
private AccountStatus accountStatus;
private List<AccountIdentification> accountIdentification;
private List<AccountDateTime> accountDate;
private String accountType;
private String accountPurpose;
private List<AccountBalance> accountBalance;
private List<AccountCurrency> accountCurrency;
private String accountDescription;
private String accountName;
private List<AccountInvolvement> accountInvolvement;
private List<AccountRelationship> accountRelationship;
}

View File

@ -1,5 +1,6 @@
package com.banesco.module.account.domain.model;
import com.banesco.common.domain.model.BalanceType;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.*;
@ -13,5 +14,5 @@ import java.math.BigDecimal;
@RegisterForReflection
public class AccountBalance {
private BigDecimal balanceAmount;
private String balanceType;
private BalanceType balanceType;
}

View File

@ -11,6 +11,6 @@ import lombok.*;
@AllArgsConstructor
@RegisterForReflection
public class AccountIdentification {
private String accountIdentificationType;
private AccountIdentificationType accountIdentificationType;
private Identifier accountIdentification;
}

View File

@ -0,0 +1,15 @@
package com.banesco.module.account.domain.model;
public enum AccountIdentificationType {
BBAN,
IBAN,
UPIC,
ACCOUNT_NUMBER,
PAN,
PAYM,
WALLET,
SORT_CODE_AND_ACCOUNT_NUMBER,
PRODUCT_CODE,
BANK_NUMBER,
ACCOUNT_CLASS
}

View File

@ -11,6 +11,6 @@ import lombok.*;
@AllArgsConstructor
@RegisterForReflection
public class AccountInvolvement {
private String accountInvolvementType;
private AccountInvolvementType accountInvolvementType;
private Party partyReference;
}

View File

@ -0,0 +1,10 @@
package com.banesco.module.account.domain.model;
public enum AccountInvolvementType {
PARTY_IS_OWNER_OF_ACCOUNT,
PARTY_IS_SERVICER_OF_ACCOUNT,
PARTY_IS_PAYEE_ON_ACCOUNT,
PARTY_IS_PRIMARY_OWNER_OF_ACCOUNT,
PARTY_IS_CO_OWNER_OF_ACCOUNT,
PARTY_IS_JOINT_OWNER_OF_ACCOUNT,
}

View File

@ -9,7 +9,6 @@ import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@RegisterForReflection
public class AccountDateTime {
private String dateType;
private String date;
public class AccountRelationship {
private AccountRelationshipType accountRelationshipType;
}

View File

@ -0,0 +1,7 @@
package com.banesco.module.account.domain.model;
public enum AccountRelationshipType {
ACCOUNT_IS_PARENT_ACCOUNT_FOR_ACCOUNT,
ACCOUNT_IS_SUB_ACCOUNT_FOR_ACCOUNT,
ACCOUNT_IS_LINKED_TO_ACCOUNT,
}

View File

@ -11,5 +11,5 @@ import lombok.*;
@RegisterForReflection
public class AccountStatus {
private String status;
private String statusType;
private AccountStatusType statusType;
}

View File

@ -0,0 +1,9 @@
package com.banesco.module.account.domain.model;
public enum AccountStatusType {
ENABLED,
DISABLED,
DELETED,
PROFORMA,
PENDING,
}

View File

@ -1,6 +1,5 @@
package com.banesco.module.legal_customer_product_directory.application.service;
import com.banesco.common.application.helper.ErrorResponseHelper;
import com.banesco.common.application.helper.RequestValidatorHelper;
import com.banesco.common.domain.exception.BaseApiException;
import com.banesco.common.domain.exception.ServiceUnavailableException;
@ -15,6 +14,7 @@ import com.banesco.module.party.domain.model.Party;
import com.banesco.module.party.domain.model.PartyIdentification;
import com.banesco.module.party.domain.model.PartyIdentificationType;
import com.banesco.module.party.domain.model.PartyType;
import com.banesco.module.servicing_issue.domain.model.ServicingIssue;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
@ -32,7 +32,6 @@ public class LegalCustomerProductDirectoryService implements LegalCustomerProduc
@Inject
public LegalCustomerProductDirectoryService(
ErrorResponseHelper errorResponseHelper,
RequestValidatorHelper requestValidatorHelper,
BusinessUseCase businessUseCase
) {
@ -68,7 +67,6 @@ public class LegalCustomerProductDirectoryService implements LegalCustomerProduc
LegalCustomerProductDirectoryRequest request
) {
requestValidatorHelper.validateRequired(request);
requestValidatorHelper.validateFieldValues(request);
}
private ApiResponse<LegalCustomerProductDirectoryResponse> business(
@ -86,127 +84,136 @@ public class LegalCustomerProductDirectoryService implements LegalCustomerProduc
}
private ApiResponse<LegalCustomerProductDirectoryResponse> createSuccessMock() {
StatusResponse statusResponse = StatusResponse.builder()
return new ApiResponse<>(
LegalCustomerProductDirectoryResponse.builder()
.customerProductAndServiceDirectory(
CustomerProductAndServiceDirectory.builder()
.party(getParty())
.accounts(List.of(getAccount()))
.build()
)
.servicingIssue(
ServicingIssue.builder()
.procedureCode("")
.issueDescription("")
.build()
)
.build(),
StatusResponse.builder()
.statusCode("200")
.message("Operación exitosa")
.build();
return new ApiResponse<>(
LegalCustomerProductDirectoryResponse.builder()
.customerProductAndServiceDirectory(CustomerProductAndServiceDirectory.builder()
.party(Party.builder()
.partyName(List.of(
Name.builder()
.fullName("TASCA RESTAURANT GOOD WORLD CEN, C.A.")
.build()
))
.partyType(PartyType.ORGANISATION)
.partyDateTime(List.of())
.partyIdentification(List.of(
PartyIdentification.builder()
.partyIdentificationType(PartyIdentificationType.TAX_IDENTIFICATION_NUMBER)
.partyIdentification(Identifier.builder()
.identifierValue("J000000001")
.issuingAuthority("")
.build())
.build()
))
.partyLegalStructureType("")
.build())
.accounts(List.of(
Account.builder()
.accountStatus(AccountStatus.builder()
.status("D")
.build())
.accountIdentification(List.of(
AccountIdentification.builder()
.accountIdentificationType("NUMERO_CUENTA")
.accountIdentification(Identifier.builder()
.identifierValue("01340025330253093528")
.issuingAuthority("")
.build())
.build(),
AccountIdentification.builder()
.accountIdentificationType("NUMERO_BANCO")
.accountIdentification(Identifier.builder()
.identifierValue("01")
.issuingAuthority("")
.build())
.build(),
AccountIdentification.builder()
.accountIdentificationType("CODIGO_PRODUCTO")
.accountIdentification(Identifier.builder()
.identifierValue("3980")
.issuingAuthority("")
.build())
.build(),
AccountIdentification.builder()
.accountIdentificationType("CLASE_CUENTA")
.accountIdentification(Identifier.builder()
.identifierValue("80")
.issuingAuthority("")
.build())
.build(),
AccountIdentification.builder()
.accountIdentificationType("TIPO_CUENTA")
.accountIdentification(Identifier.builder()
.identifierValue("MMK")
.issuingAuthority("")
.build())
.build()
))
.accountDate(List.of())
.accountBalance(List.of(
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(390417.36))
.balanceType("SALDO_DISPONIBLE")
.build(),
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(100000.00))
.balanceType("MAXIMO_DIARIO")
.build(),
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(100000.00))
.balanceType("MAXIMO_TRANSACCION")
.build(),
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(3000000.00))
.balanceType("MAXIMO_MENSUAL")
.build(),
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(0.01))
.balanceType("MINIMO_TRANSACCION")
.build()
))
.accountCurrency(List.of(
AccountCurrency.builder()
.currencyCode("BS")
.currencyType(CurrencyType.BASE)
.build()
))
.accountDescription("TASCA RESTAURANT GOOD WORLD CEN, C.A.")
.accountName("")
.accountInvolvement(List.of(
AccountInvolvement.builder()
.accountInvolvementType("CONTACTO_TELEFONICO")
.partyReference(Party.builder()
.partyIdentification(List.of(
PartyIdentification.builder()
.partyIdentificationType(PartyIdentificationType.TELEPHONE_NUMBER)
.partyIdentification(Identifier.builder()
.identifierValue("04122710660")
.issuingAuthority("")
.build())
.build()
))
.build())
.build()
))
.build()
))
.build())
.build(),
statusResponse
.build()
);
}
private Party getParty() {
return Party.builder()
.partyName(List.of(
Name.builder()
.fullName("TASCA RESTAURANT GOOD WORLD CEN, C.A.")
.build()
))
.partyType(PartyType.ORGANISATION)
.partyIdentification(List.of(
PartyIdentification.builder()
.partyIdentificationType(PartyIdentificationType.TAX_IDENTIFICATION_NUMBER)
.partyIdentification(Identifier.builder()
.identifierValue("J000000001")
.build())
.build()
))
.build();
}
private Account getAccount() {
return Account.builder()
.accountStatus(AccountStatus.builder()
.status("A")
.statusType(AccountStatusType.ENABLED)
.build())
.accountType("MMK")
.accountIdentification(List.of(
AccountIdentification.builder()
.accountIdentificationType(AccountIdentificationType.ACCOUNT_NUMBER)
.accountIdentification(Identifier.builder()
.identifierValue("01340025330253093528")
.build())
.build(),
AccountIdentification.builder()
.accountIdentificationType(AccountIdentificationType.BANK_NUMBER)
.accountIdentification(Identifier.builder()
.identifierValue("01")
.build())
.build(),
AccountIdentification.builder()
.accountIdentificationType(AccountIdentificationType.PRODUCT_CODE)
.accountIdentification(Identifier.builder()
.identifierValue("3980")
.build())
.build(),
AccountIdentification.builder()
.accountIdentificationType(AccountIdentificationType.ACCOUNT_CLASS)
.accountIdentification(Identifier.builder()
.identifierValue("80")
.build())
.build()
))
.accountBalance(List.of(
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(390417.36))
.balanceType(BalanceType.AVAILABLE_BALANCE)
.build(),
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(100000.00))
.balanceType(BalanceType.DAILY_MAXIMUM)
.build(),
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(3000000.00))
.balanceType(BalanceType.MONTHLY_MAXIMUM)
.build(),
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(0.01))
.balanceType(BalanceType.TRANSACTION_MINIMUM)
.build(),
AccountBalance.builder()
.balanceAmount(BigDecimal.valueOf(100000.00))
.balanceType(BalanceType.TRANSACTION_MAXIMUM)
.build()
))
.accountCurrency(List.of(
AccountCurrency.builder()
.currencyCode("BS")
.currencyType(CurrencyType.BASE)
.build()
))
.accountInvolvement(List.of(
AccountInvolvement.builder()
.accountInvolvementType(AccountInvolvementType.PARTY_IS_OWNER_OF_ACCOUNT)
.partyReference(
Party.builder()
.partyIdentification(List.of(
PartyIdentification.builder()
.partyIdentificationType(PartyIdentificationType.TELEPHONE_NUMBER)
.partyIdentification(Identifier.builder()
.identifierValue("04122710660")
.build())
.build(),
PartyIdentification.builder()
.partyIdentificationType(PartyIdentificationType.TELEPHONE_OPERATOR)
.partyIdentification(Identifier.builder()
.identifierValue("0412")
.build())
.build()
))
.build()
)
.build()
))
.accountRelationship(List.of(
AccountRelationship.builder()
.accountRelationshipType(AccountRelationshipType.ACCOUNT_IS_SUB_ACCOUNT_FOR_ACCOUNT)
.build()
))
.build();
}
}

View File

@ -1,6 +1,7 @@
package com.banesco.module.legal_customer_product_directory.domain.dto.response;
import com.banesco.module.legal_customer_product_directory.domain.model.CustomerProductAndServiceDirectory;
import com.banesco.module.servicing_issue.domain.model.ServicingIssue;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.*;
@ -12,4 +13,5 @@ import lombok.*;
@RegisterForReflection
public class LegalCustomerProductDirectoryResponse {
private CustomerProductAndServiceDirectory customerProductAndServiceDirectory;
private ServicingIssue servicingIssue;
}

View File

@ -63,80 +63,68 @@ public class LegalCustomerProductDirectoryResource {
}
],
"partyType": "ORGANISATION",
"partyDateTime": [],
"partyIdentification": [
{
"partyIdentificationType": "TAX_IDENTIFICATION_NUMBER",
"partyIdentification": {
"identifierValue": "J000000001",
"issuingAuthority": ""
"identifierValue": "J000000001"
}
}
],
"partyLegalStructureType": ""
},
"accounts": [
{
"accountStatus": {
"status": "D"
"status": "A",
"statusType": "ENABLED"
},
"accountType": "MMK",
"accountIdentification": [
{
"accountIdentificationType": "NUMERO_CUENTA",
"accountIdentificationType": "ACCOUNT_NUMBER",
"accountIdentification": {
"identifierValue": "01340025330253093528",
"issuingAuthority": ""
"identifierValue": "01340025330253093528"
}
},
{
"accountIdentificationType": "NUMERO_BANCO",
"accountIdentificationType": "BANK_NUMBER",
"accountIdentification": {
"identifierValue": "01",
"issuingAuthority": ""
"identifierValue": "01"
}
},
{
"accountIdentificationType": "CODIGO_PRODUCTO",
"accountIdentificationType": "PRODUCT_CODE",
"accountIdentification": {
"identifierValue": "3980",
"issuingAuthority": ""
"identifierValue": "3980"
}
},
{
"accountIdentificationType": "CLASE_CUENTA",
"accountIdentificationType": "ACCOUNT_CLASS",
"accountIdentification": {
"identifierValue": "80",
"issuingAuthority": ""
}
},
{
"accountIdentificationType": "TIPO_CUENTA",
"accountIdentification": {
"identifierValue": "MMK",
"issuingAuthority": ""
"identifierValue": "80"
}
}
],
"accountBalance": [
{
"balanceAmount": 390417.36,
"balanceType": "SALDO_DISPONIBLE"
"balanceType": "AVAILABLE_BALANCE"
},
{
"balanceAmount": 100000.00,
"balanceType": "MAXIMO_DIARIO"
},
{
"balanceAmount": 100000.00,
"balanceType": "MAXIMO_TRANSACCION"
"balanceType": "DAILY_MAXIMUM"
},
{
"balanceAmount": 3000000.00,
"balanceType": "MAXIMO_MENSUAL"
"balanceType": "MONTHLY_MAXIMUM"
},
{
"balanceAmount": 0.01,
"balanceType": "MINIMO_TRANSACCION"
"balanceType": "TRANSACTION_MINIMUM"
},
{
"balanceAmount": 100000.00,
"balanceType": "TRANSACTION_MAXIMUM"
}
],
"accountCurrency": [
@ -145,25 +133,38 @@ public class LegalCustomerProductDirectoryResource {
"currencyType": "BASE"
}
],
"accountDescription": "TASCA RESTAURANT GOOD WORLD CEN, C.A.",
"accountInvolvement": [
{
"accountInvolvementType": "CONTACTO_TELEFONICO",
"accountInvolvementType": "PARTY_IS_OWNER_OF_ACCOUNT",
"partyReference": {
"partyIdentification": [
{
"partyIdentificationType": "TELEPHONE_NUMBER",
"partyIdentification": {
"identifierValue": "04122710660",
"issuingAuthority": ""
}
},
{
"partyIdentificationType": "TELEPHONE_OPERATOR",
"partyIdentification": {
"identifierValue": "0412",
}
}
]
}
}
],
"accountRelationship": [
{
"accountRelationshipType": "ACCOUNT_IS_SUB_ACCOUNT_FOR_ACCOUNT"
}
]
}
]
},
"servicingIssue": {
"procedureCode": "",
"issueDescription": ""
}
},
"statusResponse": {
@ -277,47 +278,7 @@ public class LegalCustomerProductDirectoryResource {
@PathParam("customerIbsNumber")
@Parameter(description = "Número de cliente IBS (VCUSCUN)", example = "200053197")
String customerIbsNumber,
@QueryParam("bankNumber")
@Parameter(description = "Número de banco (VACMBNK)", example = "01")
String bankNumber,
@QueryParam("currencyCode")
@Parameter(description = "Código de moneda (VACMCCY)", example = "BS")
String currencyCode,
@QueryParam("accountStatus")
@Parameter(description = "Estatus de cuenta (VACMAST). 'A'=Activa BS, 'O'=Activa USD, 'ACTBSUSD'=Ambas", example = "A")
String accountStatus,
@QueryParam("productCvCode")
@Parameter(description = "Código de Producto Cuenta Verde (VACMPROCV). 'CV'=Cuenta verde, 'CVFL'=Cuenta verde con opción activa", example = "CV")
String productCvCode,
@QueryParam("productCode")
@Parameter(description = "Código de producto (VACMPRO)", example = "3980")
String productCode,
@QueryParam("channelCode")
@Parameter(description = "Código de canal (VAFILICANAL)", example = "APP")
String channelCode,
@QueryParam("serviceType")
@Parameter(description = "Tipo de servicio (VAFILICOSER)", example = "P2P")
String serviceType,
@QueryParam("affiliationStatus")
@Parameter(description = "Estatus de afiliación (VAFILISTATU)", example = "A")
String affiliationStatus,
@QueryParam("limitType")
@Parameter(description = "Pagador/Receptor (VALIMIT). 'PAG'=Pagadora, 'REC'=Receptora", example = "PAG")
String limitType,
@QueryParam("casheaIndicator")
@Parameter(description = "Indicador cash (VCASHEA). 'SI'=En tabla cashea, 'NO'=No en tabla cashea", example = "SI")
String casheaIndicator
String customerIbsNumber
) {
log.info("Iniciando consulta para cliente IBS: {}", customerIbsNumber);
@ -327,16 +288,6 @@ public class LegalCustomerProductDirectoryResource {
.customerIbsNumber(Objects.toString(customerIbsNumber, ""))
.customerReferenceFintechId(customerReferenceFintechId)
.appId(appId)
.bankNumber(Objects.toString(bankNumber, ""))
.currencyCode(Objects.toString(currencyCode, ""))
.accountStatus(Objects.toString(accountStatus, ""))
.productCvCode(Objects.toString(productCvCode, ""))
.productCode(Objects.toString(productCode, ""))
.channelCode(Objects.toString(channelCode, ""))
.serviceType(Objects.toString(serviceType, ""))
.affiliationStatus(Objects.toString(affiliationStatus, ""))
.limitType(Objects.toString(limitType, ""))
.casheaIndicator(Objects.toString(casheaIndicator, ""))
.build()
)).build();
} catch (BaseApiException e) {

View File

@ -15,7 +15,5 @@ import java.util.List;
public class Party {
private List<Name> partyName;
private PartyType partyType;
private List<PartyDateTime> partyDateTime;
private List<PartyIdentification> partyIdentification;
private String partyLegalStructureType;
}

View File

@ -15,5 +15,6 @@ public enum PartyIdentificationType {
IDENTITY_CARD_NUMBER,
CONCAT,
NATIONAL_REGISTRATION_IDENTIFICATION_NUMBER,
TELEPHONE_NUMBER
TELEPHONE_NUMBER,
TELEPHONE_OPERATOR,
}

View File

@ -0,0 +1,15 @@
package com.banesco.module.servicing_issue.domain.model;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.*;
@Getter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@RegisterForReflection
public class ServicingIssue {
private String procedureCode;
private String issueDescription;
}

View File

@ -11,7 +11,7 @@ api:
allowed:
request-validation:
customer-ibs-number: '\d+'
account-status: '^(A|O|ACTBSUSD)$'
account-status: '^(A)$'
product-cv-code: '^(CV|CVFL)$'
limit-type: '^(PAG|REC)$'
cachea-indicator: '^(SI|NO)$'