diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf21ValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf21ValidationRule.java index 55319d349..233805996 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf21ValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf21ValidationRule.java @@ -6,8 +6,10 @@ import ru.clearing.classes.statics.data.sdf.SDf21; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.OperationCode; import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.imdg.validation.ImdgValidationContext; @@ -15,6 +17,7 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.validation.IValidationRule; +import java.math.BigDecimal; import java.util.Collection; import java.util.Optional; @@ -44,12 +47,16 @@ public enum Sdf21ValidationRule implements IValidationRule rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class); ImdgPredicateBuilder pb = rgsImdg.predicateBuilder(); - Registry ds_t = rgsImdg.getFirstObjectByPredicate( - pb.and( - pb.sql(RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DS_T).build()), - pb.equals("comment", sdf21.getTransactionNumber()) - ) + ImdgPredicate prdct = pb.and( + pb.sql(RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DS_T).build()), + pb.equals("comment", sdf21.getTransactionNumber()) ); + if (OperationCode.DELFREE.equalsByKey(sdf21.getOperationCode())) { + prdct = pb.and(prdct, pb.lessEqual("balance", BigDecimal.ZERO)); + } else if (OperationCode.RECFREE.equalsByKey(sdf21.getOperationCode())) { + prdct = pb.and(prdct, pb.greatEqual("balance", BigDecimal.ZERO)); + } + Registry ds_t = rgsImdg.getFirstObjectByPredicate(prdct); if (ds_t != null) { return of(ClearingError.SuchRecordAlreadyExists); }