fix overnightType creating OrderCurrency

This commit is contained in:
etreschenkov 2026-04-24 13:15:11 +03:00
parent b702758d6d
commit 37c0112525
6 changed files with 43 additions and 31 deletions

View file

@ -15,9 +15,6 @@ public class OvernightTypeChanged implements IValidationRule<ImdgValidationConte
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCurrencyUpdateRequest> ctx) { public Optional<EnumMessage> validate(ImdgValidationContext<OrderCurrencyUpdateRequest> ctx) {
OrderCurrencyUpdateRequest validatedObject = ctx.getValidatedObject(); OrderCurrencyUpdateRequest validatedObject = ctx.getValidatedObject();
OrderCurrency oc = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency); OrderCurrency oc = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
if (oc.getOvernightType() == null) {
return of(DefaultManagementErrors.GeneralError); //не понятно че с ним делать...
}
if (oc.getOvernightType().equalsIgnoreCase(validatedObject.getOvernightType())) { if (oc.getOvernightType().equalsIgnoreCase(validatedObject.getOvernightType())) {
return of(DefaultManagementErrors.GeneralError); //todo нормальную ошибку return of(DefaultManagementErrors.GeneralError); //todo нормальную ошибку
} }

View file

@ -3,8 +3,9 @@ package ru.spcex.clearing.dflt.management.model;
import ru.clearing.classes.statics.data.misc.Market; import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.RiskParameter; import ru.clearing.classes.statics.data.security.RiskParameter;
import ru.spcex.platform.enumeration.OvernightType;
public class SwapContext { public class OrderCurrencyContext {
private final Registry registry; private final Registry registry;
private final String orderCategory; private final String orderCategory;
private final Market market; private final Market market;
@ -12,8 +13,9 @@ public class SwapContext {
private final CounterpartyInfo categoryP; private final CounterpartyInfo categoryP;
private final CounterpartyInfo clcc; private final CounterpartyInfo clcc;
private final CounterpartyInfo rgcm; private final CounterpartyInfo rgcm;
private final OvernightType overnightType;
private SwapContext(Builder builder) { private OrderCurrencyContext(Builder builder) {
this.registry = builder.registry; this.registry = builder.registry;
this.orderCategory = builder.orderCategory; this.orderCategory = builder.orderCategory;
this.market = builder.market; this.market = builder.market;
@ -21,6 +23,7 @@ public class SwapContext {
this.categoryP = builder.categoryP; this.categoryP = builder.categoryP;
this.clcc = builder.clcc; this.clcc = builder.clcc;
this.rgcm = builder.rgcm; this.rgcm = builder.rgcm;
this.overnightType = builder.overnightType;
} }
public Registry getRegistry() { public Registry getRegistry() {
@ -51,6 +54,10 @@ public class SwapContext {
return rgcm; return rgcm;
} }
public OvernightType getOvernightType() {
return overnightType;
}
public static Builder builder() { public static Builder builder() {
return new Builder(); return new Builder();
} }
@ -63,6 +70,7 @@ public class SwapContext {
private CounterpartyInfo categoryP; private CounterpartyInfo categoryP;
private CounterpartyInfo clcc; private CounterpartyInfo clcc;
private CounterpartyInfo rgcm; private CounterpartyInfo rgcm;
private OvernightType overnightType;
public Builder registry(Registry registry) { public Builder registry(Registry registry) {
this.registry = registry; this.registry = registry;
@ -99,8 +107,13 @@ public class SwapContext {
return this; return this;
} }
public SwapContext build() { public Builder overnightType(OvernightType overnightType) {
return new SwapContext(this); this.overnightType = overnightType;
return this;
}
public OrderCurrencyContext build() {
return new OrderCurrencyContext(this);
} }
} }
} }

View file

@ -12,7 +12,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.Rates; import ru.clearing.classes.statics.data.security.Rates;
import ru.clearing.platform.dictionary.CurrencyPairDictionary; import ru.clearing.platform.dictionary.CurrencyPairDictionary;
import ru.spcex.clearing.dflt.management.model.CalculationResult; import ru.spcex.clearing.dflt.management.model.CalculationResult;
import ru.spcex.clearing.dflt.management.model.SwapContext; import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
import ru.spcex.platform.enumeration.SettleCode; import ru.spcex.platform.enumeration.SettleCode;
@Service @Service
@ -29,7 +29,7 @@ public class OrderCalculationService {
} }
public void calcAndEnrichSwap(OrderCurrency order, public void calcAndEnrichSwap(OrderCurrency order,
SwapContext context) { OrderCurrencyContext context) {
Registry registry = context.getRegistry(); Registry registry = context.getRegistry();
Listing listing = imdgQueryService.findListing(registry, context.getMarket().getCode(), order.getSettleCode()); Listing listing = imdgQueryService.findListing(registry, context.getMarket().getCode(), order.getSettleCode());
@ -49,7 +49,7 @@ public class OrderCalculationService {
} }
public void calcAndEnrichSpot(OrderCurrency order, public void calcAndEnrichSpot(OrderCurrency order,
SwapContext context) { OrderCurrencyContext context) {
Registry registry = context.getRegistry(); Registry registry = context.getRegistry();
Listing listing = imdgQueryService.findListing(registry, context.getMarket().getCode(), order.getSettleCode()); Listing listing = imdgQueryService.findListing(registry, context.getMarket().getCode(), order.getSettleCode());

View file

@ -6,9 +6,8 @@ import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.misc.Market; import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.misc.OrderCurrency; import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.RiskParameter;
import ru.spcex.clearing.dflt.management.model.CounterpartyInfo; import ru.spcex.clearing.dflt.management.model.CounterpartyInfo;
import ru.spcex.clearing.dflt.management.model.SwapContext; import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
import ru.spcex.platform.enumeration.SettleCode; import ru.spcex.platform.enumeration.SettleCode;
import static ru.spcex.platform.enumeration.SettleCode.T0; import static ru.spcex.platform.enumeration.SettleCode.T0;
import ru.spcex.platform.enumeration.Side; import ru.spcex.platform.enumeration.Side;
@ -21,7 +20,7 @@ public class OrderTemplateBuilder {
this.imdgQueryService = imdgQueryService; this.imdgQueryService = imdgQueryService;
} }
public OrderCurrency buildPrimaryTransfer(SwapContext context, SettleCode settleCode) { public OrderCurrency buildPrimaryTransfer(OrderCurrencyContext context, SettleCode settleCode) {
OrderCurrency orderCurrency; OrderCurrency orderCurrency;
switch (context.getOrderCategory()) { switch (context.getOrderCategory()) {
case "PL" -> orderCurrency = buildPrimaryTransferPl(context); case "PL" -> orderCurrency = buildPrimaryTransferPl(context);
@ -33,7 +32,7 @@ public class OrderTemplateBuilder {
return orderCurrency; return orderCurrency;
} }
public OrderCurrency buildCounterTransfer(SwapContext context, SettleCode settleCode) { public OrderCurrency buildCounterTransfer(OrderCurrencyContext context, SettleCode settleCode) {
OrderCurrency orderCurrency; OrderCurrency orderCurrency;
switch (context.getOrderCategory()) { switch (context.getOrderCategory()) {
case "PL" -> orderCurrency = buildCounterTransferPl(context); case "PL" -> orderCurrency = buildCounterTransferPl(context);
@ -46,7 +45,7 @@ public class OrderTemplateBuilder {
return orderCurrency; return orderCurrency;
} }
public OrderCurrency buildPrimaryBalancing(SwapContext context, SettleCode settleCode) { public OrderCurrency buildPrimaryBalancing(OrderCurrencyContext context, SettleCode settleCode) {
OrderCurrency orderCurrency; OrderCurrency orderCurrency;
switch (context.getOrderCategory()) { switch (context.getOrderCategory()) {
case "PL" -> orderCurrency = buildPrimaryBalancingPl(context); case "PL" -> orderCurrency = buildPrimaryBalancingPl(context);
@ -59,7 +58,7 @@ public class OrderTemplateBuilder {
return orderCurrency; return orderCurrency;
} }
public OrderCurrency buildCounterBalancing(SwapContext context, SettleCode settleCode) { public OrderCurrency buildCounterBalancing(OrderCurrencyContext context, SettleCode settleCode) {
OrderCurrency orderCurrency; OrderCurrency orderCurrency;
switch (context.getOrderCategory()) { switch (context.getOrderCategory()) {
case "PL" -> orderCurrency = buildCounterBalancingPl(context); case "PL" -> orderCurrency = buildCounterBalancingPl(context);
@ -72,7 +71,7 @@ public class OrderTemplateBuilder {
return orderCurrency; return orderCurrency;
} }
private OrderCurrency buildPrimaryTransferUk(SwapContext context) { private OrderCurrency buildPrimaryTransferUk(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc(); CounterpartyInfo clcc = context.getClcc();
Registry registry = context.getRegistry(); Registry registry = context.getRegistry();
@ -87,7 +86,7 @@ public class OrderTemplateBuilder {
return order; return order;
} }
private OrderCurrency buildCounterTransferUk(SwapContext context) { private OrderCurrency buildCounterTransferUk(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc(); CounterpartyInfo clcc = context.getClcc();
Registry registry = context.getRegistry(); Registry registry = context.getRegistry();
@ -102,7 +101,7 @@ public class OrderTemplateBuilder {
return order; return order;
} }
private OrderCurrency buildPrimaryBalancingUk(SwapContext context) { private OrderCurrency buildPrimaryBalancingUk(OrderCurrencyContext context) {
CounterpartyInfo categoryP = context.getCategoryP(); CounterpartyInfo categoryP = context.getCategoryP();
CounterpartyInfo clcc = context.getClcc(); CounterpartyInfo clcc = context.getClcc();
@ -117,7 +116,7 @@ public class OrderTemplateBuilder {
return order; return order;
} }
private OrderCurrency buildCounterBalancingUk(SwapContext context) { private OrderCurrency buildCounterBalancingUk(OrderCurrencyContext context) {
CounterpartyInfo categoryP = context.getCategoryP(); CounterpartyInfo categoryP = context.getCategoryP();
CounterpartyInfo clcc = context.getClcc(); CounterpartyInfo clcc = context.getClcc();
@ -132,7 +131,7 @@ public class OrderTemplateBuilder {
return order; return order;
} }
private OrderCurrency buildPrimaryTransferPl(SwapContext context) { private OrderCurrency buildPrimaryTransferPl(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc(); CounterpartyInfo clcc = context.getClcc();
Registry registry = context.getRegistry(); Registry registry = context.getRegistry();
@ -147,7 +146,7 @@ public class OrderTemplateBuilder {
return order; return order;
} }
private OrderCurrency buildCounterTransferPl(SwapContext context) { private OrderCurrency buildCounterTransferPl(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc(); CounterpartyInfo clcc = context.getClcc();
Registry registry = context.getRegistry(); Registry registry = context.getRegistry();
@ -162,7 +161,7 @@ public class OrderTemplateBuilder {
return order; return order;
} }
private OrderCurrency buildPrimaryBalancingPl(SwapContext context) { private OrderCurrency buildPrimaryBalancingPl(OrderCurrencyContext context) {
CounterpartyInfo rgcm = context.getRgcm(); CounterpartyInfo rgcm = context.getRgcm();
CounterpartyInfo clcc = context.getClcc(); CounterpartyInfo clcc = context.getClcc();
@ -177,7 +176,7 @@ public class OrderTemplateBuilder {
return order; return order;
} }
private OrderCurrency buildCounterBalancingPl(SwapContext context) { private OrderCurrency buildCounterBalancingPl(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc(); CounterpartyInfo clcc = context.getClcc();
CounterpartyInfo rgcm = context.getRgcm(); CounterpartyInfo rgcm = context.getRgcm();
@ -193,16 +192,15 @@ public class OrderTemplateBuilder {
} }
public void enrichOrder(OrderCurrency order, public void enrichOrder(OrderCurrency order,
SwapContext context, OrderCurrencyContext context,
Side side, Side side,
String comment, String comment,
SettleCode settleCode) { SettleCode settleCode) {
Registry registry = context.getRegistry(); Registry registry = context.getRegistry();
Market market = context.getMarket(); Market market = context.getMarket();
RiskParameter riskParameter = context.getRiskParameter();
Listing listing = imdgQueryService.findListing(registry, market.getCode(), settleCode.getKey()); Listing listing = imdgQueryService.findListing(registry, market.getCode(), settleCode.getKey());
order.setOvernightType("SWAP"); order.setOvernightType(context.getOvernightType().getKey());
order.setMarket(market.getCode()); order.setMarket(market.getCode());
order.setListingId(listing.getId()); order.setListingId(listing.getId());
order.setSecuritySymbol(listing.getSymbolCode()); order.setSecuritySymbol(listing.getSymbolCode());

View file

@ -8,9 +8,10 @@ import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.RiskParameter; import ru.clearing.classes.statics.data.security.RiskParameter;
import ru.spcex.clearing.dflt.management.model.CounterpartyInfo; import ru.spcex.clearing.dflt.management.model.CounterpartyInfo;
import ru.spcex.clearing.dflt.management.model.SwapContext; import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.CompanyRole; import ru.spcex.platform.enumeration.CompanyRole;
import ru.spcex.platform.enumeration.OvernightType;
import ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.SettleCode; import ru.spcex.platform.enumeration.SettleCode;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
@ -46,7 +47,7 @@ public class SpotOvernightOrderService {
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC); CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM); CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
SwapContext context = SwapContext.builder() OrderCurrencyContext context = OrderCurrencyContext.builder()
.registry(registry) .registry(registry)
.orderCategory(orderCategory) .orderCategory(orderCategory)
.market(market) .market(market)
@ -54,6 +55,7 @@ public class SpotOvernightOrderService {
.categoryP(categoryP) .categoryP(categoryP)
.clcc(clcc) .clcc(clcc)
.rgcm(rgcm) .rgcm(rgcm)
.overnightType(OvernightType.SPOT)
.build(); .build();
OrderCurrency primaryTransferT0 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T0); OrderCurrency primaryTransferT0 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T0);

View file

@ -8,9 +8,10 @@ import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.RiskParameter; import ru.clearing.classes.statics.data.security.RiskParameter;
import ru.spcex.clearing.dflt.management.model.CounterpartyInfo; import ru.spcex.clearing.dflt.management.model.CounterpartyInfo;
import ru.spcex.clearing.dflt.management.model.SwapContext; import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.CompanyRole; import ru.spcex.platform.enumeration.CompanyRole;
import ru.spcex.platform.enumeration.OvernightType;
import ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.SettleCode; import ru.spcex.platform.enumeration.SettleCode;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
@ -46,7 +47,7 @@ public class SwapOvernightOrderService {
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC); CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM); CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
SwapContext context = SwapContext.builder() OrderCurrencyContext context = OrderCurrencyContext.builder()
.registry(registry) .registry(registry)
.orderCategory(orderCategory) .orderCategory(orderCategory)
.market(market) .market(market)
@ -54,6 +55,7 @@ public class SwapOvernightOrderService {
.categoryP(categoryP) .categoryP(categoryP)
.clcc(clcc) .clcc(clcc)
.rgcm(rgcm) .rgcm(rgcm)
.overnightType(OvernightType.SWAP)
.build(); .build();
OrderCurrency primaryTransfer = templateBuilder.buildPrimaryTransfer(context, SettleCode.T1); OrderCurrency primaryTransfer = templateBuilder.buildPrimaryTransfer(context, SettleCode.T1);