diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java index d9f4296be..7edd61603 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java @@ -358,7 +358,7 @@ public class ValidationConfig { ctx.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity , imdgMoneyMarketSecurity); ctx.addImdg(IMDGDistributedNames.Map_EquitySecurity , equitySecurityImdg); return new ValidatorImpl<>(ctx, - Sdf20ValidationRule.Quantity, + Sdf20ValidationRule.Fields, Sdf20ValidationRule.AccountPresent, Sdf20ValidationRule.CompanyPresent, Sdf20ValidationRule.SecurityPresent, diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java index 33ef2ad18..3972f00a6 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java @@ -84,11 +84,14 @@ public class Sdf20Executor { return; } BigDecimal quantity = safeBD(BigDecimalUtil.parseLeadingZeroes(sDf20.getQuantity())); - if ("ADDFREE".equalsIgnoreCase(sDf20.getOperationCode())) { + InOutDirection direction; + if (OperationCode.RECFREE.equalsByKey(sDf20.getOperationCode())) { + direction = InOutDirection.in; quantity = quantity; - } else if ("DELFREE".equals(sDf20.getOperationCode())) { + } else if (OperationCode.DELFREE.equalsByKey(sDf20.getOperationCode())) { + direction = InOutDirection.out; quantity = quantity.negate(); - } + } else direction = InOutDirection.in; Registry ds_t = validator.getStored(ValidationStored.Sdf20Dst); AssetTrio assets = validator.getStored(ValidationStored.Sdf20Ast); Company cmp = validator.getStored(ValidationStored.Sdf20Company); @@ -127,6 +130,11 @@ public class Sdf20Executor { ds_t.setRegistryStatus(RegistryStatus.OK.getKey()); ds_t.setUpdated(now); as_t.setBalance(safeBD(as_t.getBalance()).add(quantity)); + if (direction.equals(InOutDirection.in)) { + as_t.setCredit(safeBD(as_t.getCredit()).add(quantity.abs())); + } else { + as_t.setDebit(safeBD(as_t.getDebit()).add(quantity.abs())); + } as_t.setCheckBalance(BigDecimalUtil.parseLeadingZeroes(sDf20.getCloseBalance())); as_t.setUpdated(now); rgsImdg.update(as_t); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java index 396e13142..c91e48bc6 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java @@ -13,10 +13,12 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.service.AssetTrio; import ru.spcex.clearing.service.RegistryManager; import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.OperationCode; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.validation.IValidationRule; @@ -29,7 +31,7 @@ import static ru.spcex.platform.utils.number.BigDecimalUtil.parseLeadingZeroes; import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; public enum Sdf20ValidationRule implements IValidationRule> { - Quantity() { + Fields() { @Override public Optional validate(ImdgValidationContext context) { SDf20 validatedObject = context.getValidatedObject(); @@ -40,6 +42,10 @@ public enum Sdf20ValidationRule implements IValidationRule