session step 5 inspection obligation notification error text: difference

This commit is contained in:
ialbert 2025-07-21 16:31:55 +03:00
parent 33e0bb5047
commit b7144dfd99
3 changed files with 38 additions and 12 deletions

View file

@ -33,6 +33,7 @@ import ru.spcex.clearing.session.stage.impl.PlanBalanceCalc;
import ru.spcex.clearing.session.state.DataEnum;
import ru.spcex.clearing.session.state.SsnEvent;
import ru.spcex.clearing.session.state.model.RgsErr;
import static ru.spcex.clearing.util.ClearingUtil.biErr;
import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.enumeration.RegistryCapacity;
import ru.spcex.platform.enumeration.RegistryDesignation;
@ -135,7 +136,7 @@ public class InspectionObligationsDepositReturnAction extends ReviseStage1Action
//для OM*T uncovered остальным фейл
group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore));
updateRegistryStatus(dmx.get(), RegistryStatus.UNCV, rgssToStore);
errs.add(new RgsErr(dmx.get(), biErr(dmx.get())));
errs.add(new RgsErr(dmx.get(), biErr(dmx.get(), omtRgs)));
}
continue;
}
@ -185,7 +186,7 @@ public class InspectionObligationsDepositReturnAction extends ReviseStage1Action
continue;
} else if (SessionType.XDEP.equals(sessionType)) {
group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); // для финальной UNCV or FAIL ; другие MNG
errs.add(new RgsErr(omtRgs, biErr(omtRgs)));
errs.add(new RgsErr(omtRgs, biErr(omtRgs, amfAsset, dmtInfo.get())));
// updateStatus(dmtInfo.get(), RegistryStatus.UNCV); не меняет статус, статус определяется OM*T
continue;
}
@ -205,7 +206,7 @@ public class InspectionObligationsDepositReturnAction extends ReviseStage1Action
continue;
} else if (SessionType.XDEP.equals(sessionType)) {
group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore));
errs.add(new RgsErr(omtRgs, biErr(omtRgs)));
errs.add(new RgsErr(omtRgs, biErr(omtRgs, dmtClnr.get(), amfAsset)));
// updateStatus(dmtClnr.get(), RegistryStatus.UNCV); не меняет статус, статус определяется OM*T
continue;
}
@ -235,10 +236,6 @@ public class InspectionObligationsDepositReturnAction extends ReviseStage1Action
// planBalanceCalc.stageRevision2(sessionId);
}
private static String biErr(Registry rgs) {
return "Недостаточно средств по инструменту " + rgs.getSecuritySymbol();
}
private static boolean equalByRgs(RegistryTradingParams rgsParams, Registry rgs) {
return rgsParams.equalByRegistry(
IEnumKey.getEnumByKey(RegistryDesignation.class, rgs.getRegistryDesignation()),

View file

@ -40,6 +40,7 @@ import ru.spcex.clearing.session.stage.util.RegistryUtil;
import ru.spcex.clearing.session.state.DataEnum;
import ru.spcex.clearing.session.state.SsnEvent;
import ru.spcex.clearing.session.state.model.RgsErr;
import static ru.spcex.clearing.util.ClearingUtil.biErr;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryStatus;
@ -169,7 +170,7 @@ public class InspectionObligationsV2Action extends ReviseStage1Action {
msgResolver.resolve(new EnumMessage(ClearingError.InsecurityObligation, obligation.getCompanyId())));
isUncovered = true;
}
if (isUncovered) errs.add(new RgsErr(obligation, biErr(obligation)));
if (isUncovered) errs.add(new RgsErr(obligation, biErr(obligation, asset)));
checkResults.add(new CheckResult(obligation, isUncovered));
isUncovered = false;
}
@ -285,10 +286,6 @@ public class InspectionObligationsV2Action extends ReviseStage1Action {
ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore);
}
private static String biErr(Registry rgs) {
return "Недостаточно средств по инструменту " + rgs.getSecuritySymbol();
}
private Registry copyF(Registry rgs) {
Registry rgsF = rgs.clone();
RegistryManager.zeroState(rgsF);

View file

@ -1,7 +1,11 @@
package ru.spcex.clearing.util;
import java.math.BigDecimal;
import java.util.Map;
import java.util.function.Function;
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
import ru.clearing.classes.statics.data.registry.Registry;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
public class ClearingUtil {
public static <T extends ExecutionCommon> Map<Long, T> castMap(Map<Long, ExecutionCommon> m) {
@ -19,4 +23,32 @@ public class ClearingUtil {
// }
// }
}
public static String biErr(Registry rgs) {
return "Недостаточно средств по инструменту " + rgs.getSecuritySymbol();
}
public static String biErr(Registry obligation, Registry asset) {
if (asset == null) return biErr(obligation);
BigDecimal difference = safeBD(obligation.getBalance())
.subtract(asset.getBalance())
.abs();
return "Недостаточно средств по инструменту "
+ obligation.getSecuritySymbol()
+ ", разница: " + difference;
}
public static String biErr(Registry obligation, Registry asset1, Registry asset2) {
Function<BigDecimal, String> printErr = bd -> "Недостаточно средств по инструменту "
+ obligation.getSecuritySymbol()
+ ", разница: " + bd;
BigDecimal obligationBalance = safeBD(obligation.getBalance());
Function<Registry, BigDecimal> diff = r -> obligationBalance.subtract(r.getBalance()).abs();
BigDecimal assetBalance1 = safeBD(asset1.getBalance());
if (assetBalance1.compareTo(obligationBalance) < 0) {
return printErr.apply(diff.apply(asset1));
} else {
return printErr.apply(diff.apply(asset2));
}
}
}