From 0227e342694a262a47c4034e2e3e02caefc53c08 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 28 Apr 2026 15:23:38 +0300 Subject: [PATCH 01/10] fix OrderQty setting --- .../main/java/ru/spcex/clearing/fix/quickfix/Application.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java b/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java index 02445094e..af4d01e09 100644 --- a/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java +++ b/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java @@ -194,7 +194,7 @@ public class Application extends MessageCracker implements quickfix.Application, newOrderSingle.set(new SecurityIDSource(SecurityIDSource.EXCHANGE_SYMBOL)); newOrderSingle.set(new SecurityID(orderCurrency.getSecuritySymbol())); newOrderSingle.set(new ExDestination(orderCurrency.getMarket())); - newOrderSingle.set(new OrderQty(orderCurrency.getQuantity().doubleValue())); + newOrderSingle.set(new OrderQty(orderCurrency.getQuantityLot().doubleValue())); newOrderSingle.setField(new StringField(109, orderCurrency.getAccount())); // ClientID newOrderSingle.set(new Text(orderCurrency.getComment())); newOrderSingle.setField(new ContraBroker(orderCurrency.getCounterTradingCode())); From 8a1497f95238e22b0a8a9ee71daed65795a4f0f9 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 28 Apr 2026 18:06:48 +0300 Subject: [PATCH 02/10] http://jira.mfd.msk:8088/browse/CLS-978 --- .../OrderCurrencyTriExportService.java | 52 ++++++++++++++----- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCurrencyTriExportService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCurrencyTriExportService.java index 6716cd297..b8be32989 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCurrencyTriExportService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCurrencyTriExportService.java @@ -3,32 +3,59 @@ package ru.spcex.clearing.dflt.management.service; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.time.LocalDate; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.StringJoiner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.misc.OrderCurrency; import ru.clearing.classes.statics.data.security.Rates; import ru.clearing.platform.dictionary.CurrencyPairDictionary; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.enumeration.ObjectType; import ru.spcex.platform.enumeration.OvernightType; +import ru.spcex.platform.enumeration.Priority; import ru.spcex.platform.enumeration.Side; @Service public class OrderCurrencyTriExportService { + private static final Logger log = LoggerFactory.getLogger(OrderCurrencyTriExportService.class); private final ImdgQueryService imdgQueryService; + private final KafkaSender kafkaSender; private static final String ACTION = "Ввод внебиржевой заявки"; - public OrderCurrencyTriExportService( - ImdgQueryService imdgQueryService) { + public OrderCurrencyTriExportService(ImdgQueryService imdgQueryService, + KafkaSender kafkaSender) { this.imdgQueryService = imdgQueryService; + this.kafkaSender = kafkaSender; } /** * Возвращает содержимое tri-файла в виде строки. */ public String exportToTri(Collection orders) { - return orders.stream() - .map(this::toTriLine) + boolean allSuccess = true; + List rows = new ArrayList<>(); + for (OrderCurrency orderCurrency : orders) { + String baseCurrency = resolveBaseRate(orderCurrency); + if (OvernightType.SWAP.equalsByKey(orderCurrency.getOvernightType()) && baseCurrency == null) { + allSuccess = false; + } + rows.add(toTriLine(orderCurrency, baseCurrency)); + } + if (!allSuccess) { + String comment = "При формировании файла с заявками не определен Базовый курс"; + NotificationNewRequest newReq = new NotificationNewRequest(); + newReq.setObjectType(ObjectType.rgst.getKey()); + newReq.setPriority(Priority.HIGH.getKey()); + newReq.setComment(comment); + kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, newReq); + } + return rows.stream() .reduce((a, b) -> a + System.lineSeparator() + b) .orElse(""); } @@ -40,7 +67,7 @@ public class OrderCurrencyTriExportService { return exportToTri(orders).getBytes(StandardCharsets.UTF_8); } - private String toTriLine(OrderCurrency orderCurrency) { + private String toTriLine(OrderCurrency orderCurrency, String baseCurrency) { StringJoiner joiner = new StringJoiner(";", "", ";"); joiner.add("TRANS_ID=" + nullSafe(orderCurrency.getId())); joiner.add("CLASSCODE=" + nullSafe(orderCurrency.getMarket())); @@ -56,7 +83,7 @@ public class OrderCurrencyTriExportService { joiner.add("Ссылка="); joiner.add("Код расчетов=" + nullSafe(orderCurrency.getSettleCode())); joiner.add("На заявку №="); - joiner.add("Базовый курс=" + resolveBaseRate(orderCurrency)); + joiner.add("Базовый курс=" + nullSafe(baseCurrency)); return joiner.toString(); } @@ -68,22 +95,23 @@ public class OrderCurrencyTriExportService { if (Side.SELL.equalsByKey(side)) { return "Продажа"; } - throw new IllegalArgumentException("Неизвестное значение side: " + side); + log.warn("Неизвестное значение side: {}", side); + return ""; } - private String resolveBaseRate(OrderCurrency orderCurrency) { + public String resolveBaseRate(OrderCurrency orderCurrency) { if (OvernightType.SPOT.equalsByKey(orderCurrency.getOvernightType())) { return ""; } CurrencyPairDictionary currencyPairDictionary = imdgQueryService.getCurrencyPairDictionaryBySecurityId(orderCurrency.getSecurityId()); String baseCurrency = currencyPairDictionary.getBaseCurrency(); - Rates rates = imdgQueryService.getRate(currencyPairDictionary.getBaseCurrency(), LocalDate.now()); + LocalDate now = LocalDate.now(); + Rates rates = imdgQueryService.getRate(currencyPairDictionary.getBaseCurrency(), now); if (rates == null || rates.getValue() == null) { - throw new IllegalStateException( - "Не найден активный курс для валюты " + baseCurrency + " на дату " + LocalDate.now() - ); + log.warn("Не найден активный курс для валюты {} на дату {}", baseCurrency, now); + return null; } return formatDecimal(rates.getValue()); From f6739f58ea3e09dcd25e0a6260039e6477dd6674 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 28 Apr 2026 18:21:24 +0300 Subject: [PATCH 03/10] http://jira.mfd.msk:8088/browse/CLS-950 --- .../backend-api/src/main/resources/meta/meta.json | 6 +++--- .../backend-api/src/main/resources/meta/meta.xml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.json b/clearing-parent/backend-api/src/main/resources/meta/meta.json index 3e8c00994..1bfee6bab 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.json +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json @@ -1,6 +1,6 @@ { - "version": "3.23.295.164", + "version": "3.23.295.165", "enums": { @@ -11755,7 +11755,7 @@ } , {"code": "quantityLot", - "type": 3,"name": "Объем заявки в лотах","shortname": "Объем заявки в лотах","searchable": true,"sortable": true,"visible": false,"ignore": true + "type": 3,"name": "Объем заявки в лотах","shortname": "Объем заявки в лотах","searchable": true,"sortable": true,"visible": false } , {"code": "rate", @@ -11763,7 +11763,7 @@ } , {"code": "quantity", - "type": 3,"name": "Объем заявки в штуках","shortname": "Объем заявки в шт.","searchable": true,"sortable": true,"visible": true + "type": 3,"name": "Объем заявки в штуках","shortname": "Объем заявки в шт.","searchable": true,"sortable": true,"visible": true,"ignore": true } , {"code": "lotSize", diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml index 589daf9fc..d898bea52 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1,6 +1,6 @@ - + @@ -2729,9 +2729,9 @@ - + - + From be0d90a2104f2c1174077044ed283fb86f0f6d37 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 29 Apr 2026 12:42:53 +0300 Subject: [PATCH 04/10] http://jira.mfd.msk:8088/browse/CLS-943 --- .../management/service/ImdgQueryService.java | 2 +- .../service/OrderCalculationService.java | 13 +++++--- .../service/OrderTemplateBuilder.java | 18 +++++------ .../service/OrderTemplateBuilderTest.java | 32 +++++++++++++++++++ 4 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 clearing-parent/default-management/src/test/java/ru/spcex/clearing/dflt/service/OrderTemplateBuilderTest.java diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java index 8f891adeb..e6da65351 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java @@ -217,7 +217,7 @@ public class ImdgQueryService { pb.equals("currencyPairId", currencyPairDictionaryId) ) ); - return isRub ? riskParameter.getValue() : riskParameter.getQuoteValue(); + return isRub ? riskParameter.getQuoteValue() : riskParameter.getValue(); } public CurrencyPairDictionary getCurrencyPairDictionaryBySecurityId(Long securityId) { diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java index 17c860266..af5d89260 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java @@ -50,6 +50,7 @@ public class OrderCalculationService { order.setPrice(price); order.setQuantityLot(quantityLot); + order.setRate(s); } public void calcAndEnrichSpot(OrderCurrency order, @@ -90,8 +91,12 @@ public class OrderCalculationService { BigDecimal planPositionRub = rubRegistry.getBalance(); Rates rates = imdgQueryService.getRate(registry.getSecuritySymbol(), LocalDate.now()); - BigDecimal rateValue = rates.getValue(); + SCrossRate sCrossRates = imdgQueryService.getSCrossRates(registry.getSecuritySymbol(), LocalDate.now()); + if (sCrossRates == null) { + throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey())); + } + BigDecimal rateValue = sCrossRates.getUnitRate(); BigDecimal sum2 = planPositionRub.divide(rateValue, lotSize, RoundingMode.HALF_DOWN); BigDecimal sum3 = sum1.setScale(lotSize, RoundingMode.CEILING); BigDecimal sum4 = sum3.multiply(rateValue, MC).negate(); @@ -117,10 +122,10 @@ public class OrderCalculationService { BigDecimal sum1 = planPosition.divide(rateValue, MC); - Registry cnyRegistry = imdgQueryService.findAmtRegistry(registry, "CNY"); - BigDecimal planPositionCny = cnyRegistry.getBalance(); + Registry amtRegistry = imdgQueryService.findAmtRegistry(registry, "CNY"); + BigDecimal planPositionCny = amtRegistry.getBalance(); - BigDecimal sum2 = planPositionCny.divide(rateValue, lotSize, RoundingMode.HALF_DOWN); + BigDecimal sum2 = planPositionCny.setScale(lotSize, RoundingMode.HALF_DOWN); BigDecimal sum3 = sum1.setScale(lotSize, RoundingMode.CEILING).min(sum2).negate(); BigDecimal sum4 = sum3.multiply(rateValue, MC).negate(); BigDecimal sum5 = sum3.negate(); diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java index 2af0fa2ef..03faf6e79 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java @@ -214,26 +214,26 @@ public class OrderTemplateBuilder { order.setCreated(Instant.now()); } - private Side resolvePrimaryTransferSide(Registry registry, SettleCode settleCode) { - Side side = T0 == settleCode ? Side.BUY : Side.SELL; - return isRub(registry) ? side : side.revers(); - } - - private Side resolveCounterTransferSide(Registry registry, SettleCode settleCode) { + public Side resolvePrimaryTransferSide(Registry registry, SettleCode settleCode) { Side side = T0 == settleCode ? Side.SELL : Side.BUY; return isRub(registry) ? side : side.revers(); } - private Side resolvePrimaryBalancingSide(Registry registry, SettleCode settleCode) { - Side side = T0 == settleCode ? Side.SELL : Side.BUY; + public Side resolveCounterTransferSide(Registry registry, SettleCode settleCode) { + Side side = T0 == settleCode ? Side.BUY : Side.SELL; return isRub(registry) ? side : side.revers(); } - private Side resolveCounterBalancingSide(Registry registry, SettleCode settleCode) { + public Side resolvePrimaryBalancingSide(Registry registry, SettleCode settleCode) { Side side = T0 == settleCode ? Side.BUY : Side.SELL; return isRub(registry) ? side : side.revers(); } + public Side resolveCounterBalancingSide(Registry registry, SettleCode settleCode) { + Side side = T0 == settleCode ? Side.SELL : Side.BUY; + return isRub(registry) ? side : side.revers(); + } + private boolean isRub(Registry registry) { return "RUB".equals(registry.getSecuritySymbol()); } diff --git a/clearing-parent/default-management/src/test/java/ru/spcex/clearing/dflt/service/OrderTemplateBuilderTest.java b/clearing-parent/default-management/src/test/java/ru/spcex/clearing/dflt/service/OrderTemplateBuilderTest.java new file mode 100644 index 000000000..38bb174a2 --- /dev/null +++ b/clearing-parent/default-management/src/test/java/ru/spcex/clearing/dflt/service/OrderTemplateBuilderTest.java @@ -0,0 +1,32 @@ +package ru.spcex.clearing.dflt.service; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.dflt.management.service.OrderTemplateBuilder; +import ru.spcex.platform.enumeration.SettleCode; +import ru.spcex.platform.enumeration.Side; + +public class OrderTemplateBuilderTest { + + @Test + public void testSwapNotRubT1() { + OrderTemplateBuilder builder = new OrderTemplateBuilder(null); + Assertions.assertEquals(Side.SELL, builder.resolvePrimaryTransferSide(createNotRubRegistry(), SettleCode.T1)); + Assertions.assertEquals(Side.BUY, builder.resolvePrimaryTransferSide(createRubRegistry(), SettleCode.T1)); + Assertions.assertEquals(Side.BUY, builder.resolvePrimaryTransferSide(createNotRubRegistry(), SettleCode.T0)); + Assertions.assertEquals(Side.SELL, builder.resolvePrimaryTransferSide(createNotRubRegistry(), SettleCode.T1)); + } + + public static Registry createNotRubRegistry() { + Registry registry = new Registry(); + registry.setSecuritySymbol("CNY"); + return registry; + } + + public static Registry createRubRegistry() { + Registry registry = new Registry(); + registry.setSecuritySymbol("RUB"); + return registry; + } +} From c8cb1faaa8fbfe49f3657f7bd92e7679dae516c2 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 29 Apr 2026 13:23:25 +0300 Subject: [PATCH 05/10] http://jira.mfd.msk:8088/browse/CLS-979 --- .../controller/queue/register/RegistryController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/register/RegistryController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/register/RegistryController.java index 0fefc1160..77f2cfbb7 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/register/RegistryController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/register/RegistryController.java @@ -192,7 +192,7 @@ public class RegistryController extends AbstractQueueController { @ApiOperation(value = "Вывод средств с регистра невыясненных активов") @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) - @RequestMapping(value = "/withdrawalFunds", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @RequestMapping(value = "/withdrawalFunds", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public CudResponse dmauRegistryNew( @ApiParam(value = "Параметры команды в JSON формате.", required = true) From f539b93a9421451ca38240f4c2ba1cd7f2d92ecb Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 29 Apr 2026 14:11:13 +0300 Subject: [PATCH 06/10] http://jira.mfd.msk:8088/browse/CLS-950 --- .../cud/securities/RiskParameterNewAction.java | 10 +++++++++- .../securities/RiskParameterUpdateAction.java | 14 +++++++++++++- .../src/main/resources/meta/meta.json | 18 +++++++++++++++--- .../src/main/resources/meta/meta.xml | 9 ++++++--- 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/securities/RiskParameterNewAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/securities/RiskParameterNewAction.java index 74b308982..466bb6a08 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/securities/RiskParameterNewAction.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/securities/RiskParameterNewAction.java @@ -12,9 +12,12 @@ public class RiskParameterNewAction implements IAction @ApiModelProperty(value = "Курс.", example = "1234") @JsonProperty private BigDecimal value; - @ApiModelProperty(value = "Ставка сопряженной валюты.", example = "1234") + @ApiModelProperty(value = "Ставка переноса при нехватке рублей.", example = "1234") @JsonProperty private BigDecimal quoteValue; + @ApiModelProperty(value = "Ставка переноса при нехватке валюты.", example = "1234") + @JsonProperty + private BigDecimal penaltyValue; @ApiModelProperty(value = "Код расчёта.", example = "1234") @JsonProperty private String settlementType; @@ -30,6 +33,7 @@ public class RiskParameterNewAction implements IAction RiskParameterNewRequest request = new RiskParameterNewRequest(); request.setValue(this.value); request.setQuoteValue(this.quoteValue); + request.setPenaltyValue(this.penaltyValue); request.setSettlementType(this.settlementType); request.setCurrencyPairId(this.currencyPairId); request.setWorkflowStatus(this.workflowStatus); @@ -73,4 +77,8 @@ public class RiskParameterNewAction implements IAction public void setWorkflowStatus(String workflowStatus) { this.workflowStatus = workflowStatus; } + + public void setPenaltyValue(BigDecimal penaltyValue) { + this.penaltyValue = penaltyValue; + } } diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/securities/RiskParameterUpdateAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/securities/RiskParameterUpdateAction.java index 581628feb..6c3d9f073 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/securities/RiskParameterUpdateAction.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/securities/RiskParameterUpdateAction.java @@ -15,9 +15,12 @@ public class RiskParameterUpdateAction implements IAction - + @@ -2570,19 +2570,22 @@ + - + + - + + From 144e23cb6e9dea4f4cc95eb26d3e867a42644160 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 29 Apr 2026 14:14:00 +0300 Subject: [PATCH 07/10] http://jira.mfd.msk:8088/browse/CLS-951 --- .../classes/statics/data/security/RiskParameter.java | 9 +++++++++ clearing-parent/db-scripts/src/main/resources/db/DDL.sql | 9 +++++++-- .../db-scripts/src/main/resources/db/updateDDL_3.23.sql | 2 ++ .../clearing/imdg/object/RiskParameterMapStore.java | 6 ++++-- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/RiskParameter.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/RiskParameter.java index 7eb083de2..cbafa813f 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/RiskParameter.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/RiskParameter.java @@ -10,6 +10,7 @@ public class RiskParameter extends BusinessObject { private Long currencyPairId; private String workflowStatus; private BigDecimal quoteValue; + private BigDecimal penaltyValue; public BigDecimal getValue() { return value; @@ -58,4 +59,12 @@ public class RiskParameter extends BusinessObject { public void setQuoteValue(BigDecimal quoteValue) { this.quoteValue = quoteValue; } + + public BigDecimal getPenaltyValue() { + return penaltyValue; + } + + public void setPenaltyValue(BigDecimal penaltyValue) { + this.penaltyValue = penaltyValue; + } } diff --git a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql index 1f8a0abba..09ea748a4 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -5343,7 +5343,9 @@ CREATE TABLE RISK_PARAMETER CURRENCY_PAIR_ID BIGINT, CREATED_AT timestamp, UPDATED_AT timestamp, - WORKFLOW_STATUS VARCHAR(4) + WORKFLOW_STATUS VARCHAR(4), + PENALTY_VALUE numeric(72,18), + QUOTE_VALUE numeric(72,18) ); COMMENT ON TABLE RISK_PARAMETER IS 'Риск-параметры'; COMMENT ON COLUMN RISK_PARAMETER.ID IS 'Идентификатор записи'; @@ -5354,6 +5356,8 @@ COMMENT ON COLUMN RISK_PARAMETER.CURRENCY_PAIR_ID IS 'Идентификатор COMMENT ON COLUMN RISK_PARAMETER.CREATED_AT IS 'Время создания записи'; COMMENT ON COLUMN RISK_PARAMETER.UPDATED_AT IS 'Время изменения записи'; COMMENT ON COLUMN RISK_PARAMETER.WORKFLOW_STATUS IS 'Статус'; +COMMENT ON COLUMN RISK_PARAMETER.QUOTE_VALUE IS 'Ставка переноса сопряженной валюты'; +COMMENT ON COLUMN RISK_PARAMETER.PENALTY_VALUE IS 'Ставка переноса при нехватке базовой валюты'; GRANT ALL PRIVILEGES ON TABLE RISK_PARAMETER TO clearing; -- rates - Расчетные курсы @@ -5579,7 +5583,8 @@ CREATE TABLE ORDER_CURRENCY COMMENT VARCHAR(255), INITIAL_ORDER_ID BIGINT, CREATED_AT TIMESTAMP, - UPDATED_AT TIMESTAMP + UPDATED_AT TIMESTAMP, + REGISTRY_ID BIGINT ); COMMENT ON TABLE ORDER_CURRENCY IS 'Заявки для заключения сделок переноса на валютном рынке'; diff --git a/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.23.sql b/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.23.sql index 421745ac9..0ec389bcb 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.23.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.23.sql @@ -3,6 +3,8 @@ ALTER TABLE RISK_PARAMETER ADD COLUMN IF NOT EXISTS QUOTE_VALUE NUMERIC(72, 18); COMMENT ON COLUMN RISK_PARAMETER.QUOTE_VALUE IS 'Ставка переноса сопряженной валюты'; +ALTER TABLE RISK_PARAMETER ADD COLUMN IF NOT EXISTS PENALTY_VALUE NUMERIC(72, 18); +COMMENT ON COLUMN RISK_PARAMETER.PENALTY_VALUE IS 'Ставка переноса при нехватке базовой валюты'; ALTER TABLE ORDER_CURRENCY ADD COLUMN IF NOT EXISTS REGISTRY_ID BIGINT; COMMENT ON COLUMN ORDER_CURRENCY.REGISTRY_ID IS 'Идентификатор регистра'; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/RiskParameterMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/RiskParameterMapStore.java index 3f0ed06b1..3e453fc06 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/RiskParameterMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/RiskParameterMapStore.java @@ -31,7 +31,7 @@ public class RiskParameterMapStore extends TemplateMapStore { public String[] getFields() { return new String[]{ "ID", "VALUE", "SETTLEMENT_TYPE", "CURRENCY_PAIR", "CURRENCY_PAIR_ID", "CREATED_AT", "UPDATED_AT", "WORKFLOW_STATUS", - "QUOTE_VALUE" + "QUOTE_VALUE", "PENALTY_VALUE" }; } @@ -47,6 +47,7 @@ public class RiskParameterMapStore extends TemplateMapStore { object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); object.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class)); object.setQuoteValue(resultSet.getObject("QUOTE_VALUE", BigDecimal.class)); + object.setPenaltyValue(resultSet.getObject("PENALTY_VALUE", BigDecimal.class)); return object; } @@ -61,7 +62,8 @@ public class RiskParameterMapStore extends TemplateMapStore { TimeUtil.toDateFromInstant(object.getCreated()), TimeUtil.toDateFromInstant(object.getUpdated()), object.getWorkflowStatus(), - object.getQuoteValue() + object.getQuoteValue(), + object.getPenaltyValue() }; return args; } From 24bb9d39662acdcef46ed9c8278aa684f44447f4 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 29 Apr 2026 14:14:33 +0300 Subject: [PATCH 08/10] http://jira.mfd.msk:8088/browse/CLS-954 --- .../securities/service/facade/RiskParameterFacade.java | 2 ++ .../domain/cud/security/RiskParameterNewRequest.java | 10 ++++++++++ .../cud/security/RiskParameterUpdateRequest.java | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RiskParameterFacade.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RiskParameterFacade.java index dc0058614..b9b9c4ae8 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RiskParameterFacade.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RiskParameterFacade.java @@ -42,6 +42,7 @@ public class RiskParameterFacade implements IClearingFacade { riskParameter.setSettlementType(request.getSettlementType()); riskParameter.setValue(request.getValue()); riskParameter.setQuoteValue(request.getQuoteValue()); + riskParameter.setPenaltyValue(request.getPenaltyValue()); riskParameter.setWorkflowStatus(request.getWorkflowStatus()); riskParameter.setCreated(Instant.now()); @@ -55,6 +56,7 @@ public class RiskParameterFacade implements IClearingFacade { riskParameterForUpdate.setValue(request.getValue()); riskParameterForUpdate.setQuoteValue(request.getQuoteValue()); + riskParameterForUpdate.setPenaltyValue(request.getPenaltyValue()); riskParameterForUpdate.setWorkflowStatus(request.getWorkflowStatus()); riskParameterImdg.update(riskParameterForUpdate); diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RiskParameterNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RiskParameterNewRequest.java index b910fc5d5..f3a52f224 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RiskParameterNewRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RiskParameterNewRequest.java @@ -10,6 +10,8 @@ public class RiskParameterNewRequest { @JsonProperty private BigDecimal quoteValue; @JsonProperty + private BigDecimal penaltyValue; + @JsonProperty private String settlementType; @JsonProperty private Long currencyPairId; @@ -55,4 +57,12 @@ public class RiskParameterNewRequest { public void setWorkflowStatus(String status) { this.workflowStatus = status; } + + public BigDecimal getPenaltyValue() { + return penaltyValue; + } + + public void setPenaltyValue(BigDecimal penaltyValue) { + this.penaltyValue = penaltyValue; + } } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RiskParameterUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RiskParameterUpdateRequest.java index fde0f985f..4c9458eb4 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RiskParameterUpdateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RiskParameterUpdateRequest.java @@ -12,6 +12,8 @@ public class RiskParameterUpdateRequest { @JsonProperty private BigDecimal quoteValue; @JsonProperty + private BigDecimal penaltyValue; + @JsonProperty private String workflowStatus; public Long getId() { @@ -45,4 +47,12 @@ public class RiskParameterUpdateRequest { public void setWorkflowStatus(String status) { this.workflowStatus = status; } + + public BigDecimal getPenaltyValue() { + return penaltyValue; + } + + public void setPenaltyValue(BigDecimal penaltyValue) { + this.penaltyValue = penaltyValue; + } } From b3d01c17eafa3939c97728207792027991ddcea5 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 29 Apr 2026 14:41:08 +0300 Subject: [PATCH 09/10] fix sendOrder handlInst --- .../main/java/ru/spcex/clearing/fix/quickfix/Application.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java b/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java index af4d01e09..5132432e0 100644 --- a/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java +++ b/clearing-parent/fix-service/src/main/java/ru/spcex/clearing/fix/quickfix/Application.java @@ -200,7 +200,7 @@ public class Application extends MessageCracker implements quickfix.Application, newOrderSingle.setField(new ContraBroker(orderCurrency.getCounterTradingCode())); newOrderSingle.set(new SettlType(orderCurrency.getSettleCode())); newOrderSingle.setField(new StringField(5018, orderCurrency.getTradingCode())); // FirmId - + newOrderSingle.set(new HandlInst(HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE_NO_BROKER_INTERVENTION)); boolean result = Session.sendToTarget(newOrderSingle, fixSessionID); } catch (SessionNotFound sessionNotFound) { log.error(orderCurrency.toString(), sessionNotFound); From b1b2cd7a499fd0a8e481c94f97f5134b6a1f6b24 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 29 Apr 2026 14:44:47 +0300 Subject: [PATCH 10/10] fix meta name for quoteValue --- .../backend-api/src/main/resources/meta/meta.json | 8 ++++---- .../backend-api/src/main/resources/meta/meta.xml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.json b/clearing-parent/backend-api/src/main/resources/meta/meta.json index 18afaf230..108699223 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.json +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json @@ -1,6 +1,6 @@ { - "version": "3.23.295.166", + "version": "3.23.295.167", "enums": { @@ -11095,7 +11095,7 @@ } , {"code": "quoteValue", - "name": "Ставка сопряженной валюты","shortname": "Ставка сопряженной валюты","type": 10 + "name": "Ставка переноса при нехватке рублей","shortname": "Ставка переноса при нехватке рублей","type": 10 } , {"code": "workflowStatus", @@ -11129,7 +11129,7 @@ } , {"code": "quoteValue", - "name": "Ставка сопряженной валюты","shortname": "Ставка сопряженной валюты","type": 10 + "name": "Ставка переноса при нехватке рублей","shortname": "Ставка переноса при нехватке рублей","type": 10 } , {"code": "workflowStatus", @@ -11160,7 +11160,7 @@ } , {"code": "quoteValue", - "name": "Ставка сопряженной валюты","shortname": "Ставка сопряженной валюты","type": 10 + "name": "Ставка переноса при нехватке рублей","shortname": "Ставка переноса при нехватке рублей","type": 10 } , {"code": "workflowStatus", diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml index 3378f64fc..3a2b87b44 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1,6 +1,6 @@ - + @@ -2571,7 +2571,7 @@ - + @@ -2579,14 +2579,14 @@ - + - +