parent
2ea1c4332e
commit
661c5916db
5 changed files with 494 additions and 4 deletions
|
|
@ -33,11 +33,12 @@ public class SecurityService {
|
|||
}
|
||||
|
||||
public void sendRequest(FondListingsRequest request) {
|
||||
List<FondSecurity> securityList = request.getSecurities();
|
||||
CodeStatusComparator<FondSecurity> comparatorBySecSymbolAndWorkflowStatus = CodeStatusComparator.create(
|
||||
FondSecurity::getSecuritySymbol,
|
||||
FondSecurity::getWorkflowStatus);
|
||||
securityList.sort(comparatorBySecSymbolAndWorkflowStatus);
|
||||
FondSecurity::getSecuritySymbol,
|
||||
FondSecurity::getWorkflowStatus);
|
||||
List<FondSecurity> securityList = request.getSecurities().stream()
|
||||
.filter(r->r.getSecuritySymbol() != null && r.getWorkflowStatus() != null)
|
||||
.sorted(comparatorBySecSymbolAndWorkflowStatus).toList();
|
||||
for (FondSecurity security : securityList) {
|
||||
try {
|
||||
log.debug("process security uuid: {}", security.getId());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
package ru.spcex.clearing.gatewayapi.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@Configuration
|
||||
public class RestTemplateTestConfig {
|
||||
|
||||
@Bean("rest-template")
|
||||
public RestTemplate restTemplate(RestTemplateErrorHandler restTemplateErrorHandler) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
return restTemplate;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package ru.spcex.clearing.gatewayapi.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
@ComponentScan(basePackages = {"ru.spcex.clearing.gatewayapi.controller", "ru.spcex.clearing.gatewayapi.service"})
|
||||
public class TestConfig {
|
||||
|
||||
@Bean
|
||||
public GatewayApiSettings getGatewayApiSettings() {
|
||||
GatewayApiSettings gatewayApiSettings = new GatewayApiSettings();
|
||||
InboundServerSettings inboundServerSettings = new InboundServerSettings();
|
||||
gatewayApiSettings.setInboundServer(inboundServerSettings);
|
||||
return gatewayApiSettings;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
package ru.spcex.clearing.gatewayapi.controller;
|
||||
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.ResultActions;
|
||||
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.filter.CharacterEncodingFilter;
|
||||
import ru.spcex.clearing.gatewayapi.config.BeanConfiguration;
|
||||
import ru.spcex.clearing.gatewayapi.config.RestTemplateErrorHandler;
|
||||
import ru.spcex.clearing.gatewayapi.config.RestTemplateTestConfig;
|
||||
import ru.spcex.clearing.gatewayapi.config.TestConfig;
|
||||
import ru.spcex.clearing.gatewayapi.controller.inbound.request.CommonRequest;
|
||||
import ru.spcex.clearing.gatewayapi.controller.inbound.response.CommonResponse;
|
||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||
import ru.spcex.clearing.test.json.MatcherFactoryWithJson;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFieldsComparatorForClass;
|
||||
|
||||
|
||||
@ContextConfiguration(classes = {
|
||||
BeanConfiguration.class,
|
||||
RestTemplateTestConfig.class,
|
||||
RestTemplateErrorHandler.class,
|
||||
TestConfig.class,
|
||||
ImdgTestConfig.class,
|
||||
KafkaTestConfig.class})
|
||||
//todo может быть указать пакедж а не список контроллеров
|
||||
@ExtendWith(SpringExtension.class)
|
||||
@WebMvcTest
|
||||
public abstract class AbstractControllerTest {
|
||||
protected static final MatcherFactoryWithJson.Matcher<BaseRequest> BASE_REQUEST_MATCHER = usingIgnoringFieldsComparatorForClass(BaseRequest.class,"userId");
|
||||
// protected static final MatcherFactoryWithJson.Matcher<CudResponse> CUD_RESPONSE_MATCHER = usingIgnoringFieldsComparatorForClass(CudResponse.class);
|
||||
protected static final AtomicLong currentId = new AtomicLong();
|
||||
private static final CharacterEncodingFilter CHARACTER_ENCODING_FILTER = new CharacterEncodingFilter();
|
||||
|
||||
static {
|
||||
Path path = Paths.get("src", "main", "resources");
|
||||
String currentPath = path.toAbsolutePath().toString();
|
||||
System.setProperty("spring.config.location", currentPath + File.separator);
|
||||
|
||||
CHARACTER_ENCODING_FILTER.setEncoding("UTF-8");
|
||||
CHARACTER_ENCODING_FILTER.setForceEncoding(true);
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private WebApplicationContext webApplicationContext;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("hazelcastServiceTest")
|
||||
protected ImdgProvider imdgProvider;
|
||||
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@PostConstruct
|
||||
private void postConstruct() {
|
||||
mockMvc = MockMvcBuilders
|
||||
.webAppContextSetup(webApplicationContext)
|
||||
.addFilter(CHARACTER_ENCODING_FILTER)
|
||||
// .apply(springSecurity())
|
||||
.build();
|
||||
imdgProvider.waitAvailable();
|
||||
}
|
||||
|
||||
protected ResultActions perform(MockHttpServletRequestBuilder builder) throws Exception {
|
||||
return mockMvc.perform(builder);
|
||||
}
|
||||
|
||||
|
||||
protected CommonResponse createResponse(CommonRequest request, boolean success) {
|
||||
CommonResponse commonResponse = new CommonResponse();
|
||||
commonResponse.setId(request.getId());
|
||||
commonResponse.setType(request.getType());
|
||||
commonResponse.setDatetime(request.getDatetime());
|
||||
commonResponse.setSection(request.getSection());
|
||||
if (success) {
|
||||
commonResponse.setCode(0L);
|
||||
commonResponse.setMessage("success");
|
||||
}
|
||||
return commonResponse;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,359 @@
|
|||
package ru.spcex.clearing.gatewayapi.controller;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.FondListingsRequest;
|
||||
import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.FondSecurity;
|
||||
import ru.spcex.clearing.gatewayapi.controller.inbound.response.CommonResponse;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
import static ru.spcex.clearing.test.json.JsonUtil.writeValue;
|
||||
|
||||
class GatewayControllerTest extends AbstractControllerTest{
|
||||
public static final String LISTING_FOND_URL = "/listing_fond/";
|
||||
|
||||
@Test
|
||||
void listingsFond() throws Exception {
|
||||
CommonResponse expected = new CommonResponse();
|
||||
expected.setCode(0L);
|
||||
expected.setMessage("success");
|
||||
FondListingsRequest request = new FondListingsRequest();
|
||||
List<FondSecurity> securities = new ArrayList<>();
|
||||
FondSecurity fondSecurity = new FondSecurity();
|
||||
fondSecurity.setId(UUID.fromString("a06ca1ef-872f-4fa5-9771-871a97599067"));
|
||||
fondSecurity.setInstrumentType("EQTY");
|
||||
fondSecurity.setFullName("\"МОСКОВСКИЙ КРЕДИТНЫЙ БАНК\" (публичное акционерное общество), акция обыкновенная");
|
||||
fondSecurity.setFullNameEng("MKB");
|
||||
fondSecurity.setIsin("RU000A0JUG31");
|
||||
fondSecurity.setWorkflowStatus("ACTV");
|
||||
fondSecurity.setShareType("S");
|
||||
fondSecurity.setNominalValue(new BigDecimal("1.000000"));
|
||||
fondSecurity.setNominalForDate(new BigDecimal("1.000000"));
|
||||
fondSecurity.setNominalCurrency("RUB");
|
||||
securities.add(fondSecurity);
|
||||
fondSecurity.setId(UUID.fromString("a06ca1ef-872f-4fa5-9771-871a97599067"));
|
||||
fondSecurity.setInstrumentType("EQTY");
|
||||
fondSecurity.setFullName("\"МОСКОВСКИЙ КРЕДИТНЫЙ БАНК\" (публичное акционерное общество), акция обыкновенная");
|
||||
fondSecurity.setFullNameEng("MKB");
|
||||
fondSecurity.setIsin("RU000A0JUG31");
|
||||
fondSecurity.setWorkflowStatus("ACTV");
|
||||
fondSecurity.setShareType("S");
|
||||
fondSecurity.setNominalValue(new BigDecimal("1.000000"));
|
||||
fondSecurity.setNominalForDate(new BigDecimal("1.000000"));
|
||||
fondSecurity.setNominalCurrency("RUB");
|
||||
securities.add(fondSecurity);
|
||||
request.setSecurities(securities);
|
||||
String req1 = writeValue(request);
|
||||
//ACT
|
||||
MvcResult mvcResult = perform(MockMvcRequestBuilders.post(LISTING_FOND_URL)
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(req))
|
||||
.andDo(print())//output to the log request and response
|
||||
//ASSERT
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
|
||||
//.andExpect(content().json(writeValue(expected)))
|
||||
.andReturn();
|
||||
// CudResponseTest cudResponseTest = readValue(mvcResult.getResponse().getContentAsString(), CudResponseTest.class);
|
||||
// expected.setPayload(new QueueSuccessResponse(ActionType.NEW, cudResponseTest.getPayload().getId()));
|
||||
// CUD_RESPONSE_MATCHER.assertMatch(cudResponseTest, expected);
|
||||
}
|
||||
String req = "{\n" +
|
||||
"\t\"id\": \"bbf4ccc0-bd9d-466d-9b2b-837e2bc3d35c\",\n" +
|
||||
"\t\"type\": \"ON_DEMAND\",\n" +
|
||||
"\t\"section\": \"FOND\",\n" +
|
||||
"\t\"datetime\": \"02.08.2023 09:30:00:314\",\n" +
|
||||
"\t\"security\": [{\n" +
|
||||
"\t\t\t\"id\": \"a06ca1ef-872f-4fa5-9771-871a97599067\",\n" +
|
||||
"\t\t\t\"instrument_type\": \"EQTY\",\n" +
|
||||
"\t\t\t\"issuer_id\": \"fcb059ec-544c-4bf8-8024-fe06f22a607f\",\n" +
|
||||
"\t\t\t\"short_name\": \"МКБ ао\",\n" +
|
||||
"\t\t\t\"full_name\": \"\\\"МОСКОВСКИЙ КРЕДИТНЫЙ БАНК\\\" (публичное акционерное общество), акция обыкновенная\",\n" +
|
||||
"\t\t\t\"full_name_eng\": \"MKB\",\n" +
|
||||
" \"security_symbol\": \"RU000A0JUG31\",\n" +
|
||||
"\t\t\t\"isin\": \"RU000A0JUG31\",\n" +
|
||||
"\t\t\t\"workflow_status\": \"ACTV\",\n" +
|
||||
"\t\t\t\"share_type\": \"S\",\n" +
|
||||
"\t\t\t\"nominal_value\": \"1.000000\",\n" +
|
||||
"\t\t\t\"nominal_for_date\": \"1.000000\",\n" +
|
||||
"\t\t\t\"nominal_currency\": \"RUB\"\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"id\": \"a57aa2c4-8d07-46b5-bfdd-3a00c29f61c6\",\n" +
|
||||
"\t\t\t\"instrument_type\": \"BOND\",\n" +
|
||||
"\t\t\t\"issuer_id\": \"35bf708b-459d-432f-bb0e-899cc3530c65\",\n" +
|
||||
"\t\t\t\"full_name\": \"Неконвертируемые процентные документарные облигации на предъявителя серии 08 с обязательным централизованным хранением\",\n" +
|
||||
"\t\t\t\"full_name_eng\": \"PJSC \\\"RusHydro\\\" VAR 02/02/23\",\n" +
|
||||
"\t\t\t\"isin\": \"RU000A0JTMK9\",\n" +
|
||||
"\t\t\t\"workflow_status\": \"BLKD\",\n" +
|
||||
"\t\t\t\"maturity_date\": \"02.02.2023\",\n" +
|
||||
"\t\t\t\"nominal_value\": \"1000.000000\",\n" +
|
||||
"\t\t\t\"nominal_for_date\": \"1000.000000\",\n" +
|
||||
"\t\t\t\"nominal_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"coupon_type\": \"VAR\",\n" +
|
||||
"\t\t\t\"coupon_frequency\": \"2.000000\"\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"instrument_type\": \"BOND\",\n" +
|
||||
"\t\t\t\"issuer_id\": \"adab5846-3fc9-4774-b1db-2e2e05f07583\",\n" +
|
||||
"\t\t\t\"short_name\": \"ОФЗ 29020\",\n" +
|
||||
"\t\t\t\"full_name\": \"Облигации федерального займа с переменным купонным доходом\",\n" +
|
||||
"\t\t\t\"full_name_eng\": \"Minfin Rossii VAR 22/09/27\",\n" +
|
||||
"\t\t\t\"security_symbol\": \"SU29020RMFS3\",\n" +
|
||||
"\t\t\t\"isin\": \"RU000A102BV4\",\n" +
|
||||
"\t\t\t\"workflow_status\": \"BLKD\",\n" +
|
||||
"\t\t\t\"bond_type\": \"V\",\n" +
|
||||
"\t\t\t\"maturity_date\": \"22.09.2027\",\n" +
|
||||
"\t\t\t\"nominal_value\": \"1000.000000\",\n" +
|
||||
"\t\t\t\"nominal_for_date\": \"1000.000000\",\n" +
|
||||
"\t\t\t\"nominal_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"coupon_type\": \"RUO\",\n" +
|
||||
"\t\t\t\"coupon_frequency\": \"4.000000\"\n" +
|
||||
"\t\t}\n" +
|
||||
"\t],\n" +
|
||||
"\t\"listing\": [{\n" +
|
||||
"\t\t\t\"security_id\": \"a06ca1ef-872f-4fa5-9771-871a97599067\",\n" +
|
||||
"\t\t\t\"lot_size\": 100,\n" +
|
||||
"\t\t\t\"symbol_code\": \"CBOM\",\n" +
|
||||
"\t\t\t\"symbol_name\": \"МКБ ао\",\n" +
|
||||
"\t\t\t\"trading_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"workflow_status\": \"ACTV\",\n" +
|
||||
"\t\t\t\"precision\": 2,\n" +
|
||||
"\t\t\t\"min_step\": 1,\n" +
|
||||
"\t\t\t\"settle_code\": \"T0\",\n" +
|
||||
"\t\t\t\"settle_days\": 0,\n" +
|
||||
"\t\t\t\"name\": \"Акции – Торги\",\n" +
|
||||
"\t\t\t\"code\": \"UESC\",\n" +
|
||||
"\t\t\t\"sector\": \"FOND\",\n" +
|
||||
"\t\t\t\"start_date\": \"10.08.2022\",\n" +
|
||||
"\t\t\t\"end_date\": \"16.09.2027\"\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"a06ca1ef-872f-4fa5-9771-871a97599067\",\n" +
|
||||
"\t\t\t\"lot_size\": 100,\n" +
|
||||
"\t\t\t\"symbol_code\": \"CBOM\",\n" +
|
||||
"\t\t\t\"symbol_name\": \"МКБ ао\",\n" +
|
||||
"\t\t\t\"trading_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"workflow_status\": \"ACTV\",\n" +
|
||||
"\t\t\t\"precision\": 2,\n" +
|
||||
"\t\t\t\"min_step\": 1,\n" +
|
||||
"\t\t\t\"settle_code\": \"T0\",\n" +
|
||||
"\t\t\t\"settle_days\": 0,\n" +
|
||||
"\t\t\t\"name\": \"Акции - РПС\",\n" +
|
||||
"\t\t\t\"code\": \"NESC\",\n" +
|
||||
"\t\t\t\"sector\": \"FOND\",\n" +
|
||||
"\t\t\t\"start_date\": \"10.08.2022\",\n" +
|
||||
"\t\t\t\"end_date\": \"16.09.2027\"\n" +
|
||||
"\t\t}\n" +
|
||||
"\t],\n" +
|
||||
"\t\"coupon_schedule\": [{\n" +
|
||||
"\t\t\t\"security_id\": \"a57aa2c4-8d07-46b5-bfdd-3a00c29f61c6\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"04.08.2022\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"02.02.2023\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"0.100000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 20,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"28.12.2022\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"29.03.2023\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 9,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"29.03.2023\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"28.06.2023\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 3,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"27.09.2023\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"27.12.2023\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 5,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"26.03.2025\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"25.06.2025\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 11,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"25.06.2025\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"24.09.2025\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 12,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"24.09.2025\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"24.12.2025\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 13,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"24.12.2025\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"25.03.2026\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 14,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"25.03.2026\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"24.06.2026\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 15,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"24.06.2026\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"23.09.2026\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 16,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"23.09.2026\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"23.12.2026\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 17,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"23.12.2026\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"24.03.2027\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 18,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"24.03.2027\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"23.06.2027\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 19,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"23.06.2027\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"22.09.2027\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 20,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": false\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"28.09.2022\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"28.12.2022\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"75.000000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 1,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"28.12.2022\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"29.03.2023\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 2,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"28.06.2023\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"27.09.2023\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 4,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"27.12.2023\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"27.03.2024\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 6,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"27.03.2024\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"26.06.2024\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 7,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"26.06.2024\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"25.09.2024\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 8,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"25.09.2024\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"25.12.2024\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 9,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t},\n" +
|
||||
"\t\t{\n" +
|
||||
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
|
||||
"\t\t\t\"period_start_date\": \"25.12.2024\",\n" +
|
||||
"\t\t\t\"period_end_date\": \"26.03.2025\",\n" +
|
||||
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
|
||||
"\t\t\t\"coupon_number\": 10,\n" +
|
||||
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
|
||||
"\t\t\t\"is_deleted\": true\n" +
|
||||
"\t\t}\n" +
|
||||
"\t]\n" +
|
||||
"}";
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue