package lkgateway import "strings" // Через M2M (MOEX МОСТ) переводятся ТОЛЬКО российские ценные бумаги. // Иностранные бумаги в системе не переводятся — их видно в портфеле, но // заявку по ним подать нельзя. // // Признак страны берём из ISIN: первые два символа — код страны регистрации // выпуска по ISO 3166. Российские выпуски начинаются с «RU». Отдельного поля // резидентства в депозитарном справочнике OD_VALUES нет (в таблице всего 10 // колонок), а балансовый счёт BAL_ACC для этого непригоден: на «российском» // счёте 836 реально лежат и Meta (US30303M1027), и FinEx (IE00BD3QJ757). // isRussianISIN — российская ли бумага по коду ISIN. func isRussianISIN(isin string) bool { s := strings.ToUpper(strings.TrimSpace(isin)) return strings.HasPrefix(s, "RU") } // foreignNote — пояснение для клиента, почему бумагу нельзя перевести. const foreignNote = "иностранная бумага — перевод через M2M недоступен" // markTransferable проставляет позициям признак «можно ли переводить». // Иностранным бумагам обнуляет доступный остаток, чтобы они не попали // ни в форму заявки, ни в расчёт лимитов. func markTransferable(pos []ClientPosition) []ClientPosition { for i := range pos { if isRussianISIN(pos[i].ISIN) { pos[i].Transferable = true continue } pos[i].Transferable = false pos[i].Available = 0 if pos[i].Note == "" { pos[i].Note = foreignNote } } return pos }