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 108699223..5ed265db6 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.167",
+ "version": "3.23.295.168",
"enums": {
@@ -11755,7 +11755,7 @@
}
,
{"code": "market",
- "type": 12,"name": "Код режима торгов","shortname": "Режим торгов","visible": true,"searchable": true,"sortable": true,"link": "market","linkCode": "code"
+ "type": 12,"name": "Код режима торгов","shortname": "Режим торгов","visible": true,"searchable": true,"sortable": true
}
,
{"code": "status",
@@ -11843,7 +11843,7 @@
}
,
{"code": "market",
- "type": 12,"name": "Код режима торгов","shortname": "Режим торгов","link": "market","linkCode": "code","enabled": false,"required": true
+ "type": 12,"name": "Код режима торгов","shortname": "Режим торгов","enabled": false,"required": true
}
,
{"code": "price",
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 3a2b87b44..fbc0ce044 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,7 +2729,7 @@
-
+
@@ -2751,7 +2751,7 @@
-
+
diff --git a/clearing-parent/db-scripts/src/main/resources/db/MARKET_LCC.sql b/clearing-parent/db-scripts/src/main/resources/db/MARKET_LCC.sql
index 8bbec5f24..5546656b4 100644
--- a/clearing-parent/db-scripts/src/main/resources/db/MARKET_LCC.sql
+++ b/clearing-parent/db-scripts/src/main/resources/db/MARKET_LCC.sql
@@ -7,5 +7,6 @@
/* Business objects */
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1000, 'SCND', 'CURR', 'RUB', 'UVAK', 'Режим непрерывных торгов (торги иностранной валютой с Провайдером ликвидности)', 1, 'Continuous trading mode (foreign currency trading with a Liquidity Provider)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
-INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1001, 'SCSP', 'CURR', 'RUB', 'TVAK', 'Технический режим переговорных сделок для сделок урегулирования', 1, 'Technical negotiated deals mode for settlement') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
-INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1002, 'SCSW', 'CURR', 'RUB', 'TVWK', 'Технический режим витринных переговорных сделок для сделок урегулирования', 1, 'Technical negotiated showcase deals mode for settlement') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
\ No newline at end of file
+INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1001, 'SCND', 'CURR', 'RUB', 'NVAK', 'Режим анонимных переговорных сделок (торги иностранной валютой с Провайдером ликвидности)', 1, 'Anonimous negotiated deals mode (foreign currency trading with a Liquidity Provider)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
+INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (2002, 'SCSP', 'CURR', 'RUB', 'TVAK', 'Технический режим переговорных сделок для сделок урегулирования', 1, 'Technical negotiated deals mode for settlement') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
+INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (2003, 'SCSW', 'CURR', 'RUB', 'TVWK', 'Технический режим витринных переговорных сделок для сделок урегулирования', 1, 'Technical negotiated showcase deals mode for settlement') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
\ No newline at end of file
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 f57e7388e..90a37270b 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
@@ -46,7 +46,7 @@ public class OrderCalculationService {
: calculationSums(registry, listing.getLotSize().intValue(), s, n);
BigDecimal quantityLot = result.sum3().abs();
- BigDecimal price = swapPriceCalc(pair.getBaseCurrency(), s, n);
+ BigDecimal price = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
return new FinalCalculationResult(price, s, quantityLot);
}
@@ -69,11 +69,11 @@ public class OrderCalculationService {
BigDecimal price;
if (SettleCode.T0 == settleCode) {
quantityLot = result.sum3().abs();
- price = rates.getUnitRate();
+ price = rates.getUnitRate().setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);
} else {
quantityLot = result.sum5().abs();
- BigDecimal delta = swapPriceCalc(pair.getBaseCurrency(), s, n);
- price = rates.getUnitRate().add(delta);
+ BigDecimal delta = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue());
+ price = rates.getUnitRate().add(delta).setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);;
}
return new FinalCalculationResult(price, s, quantityLot);
@@ -136,7 +136,7 @@ public class OrderCalculationService {
return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6);
}
- private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n) {
+ private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n, int precision) {
Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now());
BigDecimal p = BigDecimal.ONE.divide(n, MC);
log.info("Calculation swap price: {}*{}*{}", s, n, p);
@@ -144,7 +144,7 @@ public class OrderCalculationService {
.multiply(s, MC)
.multiply(n, MC)
.multiply(p, MC)
- .setScale(8, RoundingMode.HALF_UP);
+ .setScale(precision, RoundingMode.HALF_UP);
}
private boolean isRub(Registry registry) {
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 5132432e0..a6df06253 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
@@ -113,17 +113,10 @@ public class Application extends MessageCracker implements quickfix.Application,
ImdgTransaction transaction = imdgProvider.newTransaction();
transaction.beginTransaction();
try {
- if (executionReport.isSetField(OrderID.FIELD) && executionReport.isSetField(ExDestination.FIELD) && executionReport.isSetField(TransactTime.FIELD)) {
+ if (executionReport.isSetField(OrderID.FIELD) && executionReport.isSetField(ExDestination.FIELD) && executionReport.isSetField(TransactTime.FIELD) && executionReport.isSetField(OrdStatus.FIELD)) {
OrderID orderId = executionReport.getOrderID();
ExDestination exDestination = (ExDestination) executionReport.getField(new ExDestination());
TransactTime transactTime = executionReport.getTransactTime();
- SecurityID securityID = executionReport.getSecurityID();
- Price price = executionReport.getPrice();
- OrderQty orderQty = executionReport.getOrderQty();
- Account account = executionReport.getAccount();
- Side side = executionReport.getSide();
- Currency currency = executionReport.getCurrency();
- SettlType settlType = executionReport.getSettlType();
OrdStatus ordStatus = executionReport.getOrdStatus();
Pattern orderIdPattern = Pattern.compile("(\\d{6})-([A-Z]+)-(\\d+)");
@@ -145,14 +138,20 @@ public class Application extends MessageCracker implements quickfix.Application,
sOrders.setClassCode(exDestination.getValue());
sOrders.setTradeDate(transactTime.getValue().toLocalDate());
- sOrders.setSecCode(securityID.getValue());
- sOrders.setPrice(BigDecimal.valueOf(price.getValue()));
- sOrders.setQty(BigDecimal.valueOf(orderQty.getValue()));
- sOrders.setAccount(account.getValue());
- sOrders.setSettleCode(settlType.getValue());
- sOrders.setPriceCurrency(currency.getValue());
- sOrders.setState(String.valueOf(ordStatus.getValue()));
+ if (executionReport.isSetSecurityID())
+ sOrders.setSecCode(executionReport.getSecurityID().getValue());
+ if (executionReport.isSetPrice())
+ sOrders.setPrice(BigDecimal.valueOf(executionReport.getPrice().getValue()));
+ if (executionReport.isSetOrderQty())
+ sOrders.setQty(BigDecimal.valueOf(executionReport.getOrderQty().getValue()));
+ if (executionReport.isSetAccount())
+ sOrders.setAccount(executionReport.getAccount().getValue());
+ if (executionReport.isSetSettlType())
+ sOrders.setSettleCode(executionReport.getSettlType().getValue());
+ if (executionReport.isSetCurrency())
+ sOrders.setPriceCurrency(executionReport.getCurrency().getValue());
+ sOrders.setState(String.valueOf(ordStatus.getValue()));
if (ordStatus.valueEquals(OrdStatus.NEW)) {
sOrders.setOrderDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
} else if (ordStatus.valueEquals(OrdStatus.CANCELED)) {
@@ -161,6 +160,7 @@ public class Application extends MessageCracker implements quickfix.Application,
sOrdersImdg.insert(sOrders);
} else {
+ sOrders.setState(String.valueOf(ordStatus.getValue()));
if (ordStatus.valueEquals(OrdStatus.NEW)) {
sOrders.setOrderDateTime(transactTime.getValue().toInstant(ZoneOffset.UTC));
} else if (ordStatus.valueEquals(OrdStatus.CANCELED)) {