Files
zuevav da12a9ec1c feat(bj): модуль ЛК на PostgreSQL, обмен с DEPO, боевой ЛК с имитатором НРД, QUIK, НПР
- bj_exchange и «кран» Fancy убраны: данные модуля ЛК в PostgreSQL (схема lk)
- трансферные таблицы FTV_M2M: создание при установке, события, справочник участников
- сверка с DEPO: счёт, ФИО, дата рождения, ИИС по договору, квал-инвестор из опции DEPO
- боевой ЛК ЕСИА Финанс при тестовом ИШ: журнал, отказ через DEPO, статусы в ЛК
- онлайн-лицензирование в bj, план тестирования M2M для контрагента (интерактивный HTML)
- модули QUIK МНП, экспорт QUIK, НПР/УДС; документы и тестовые материалы

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 19:41:12 +03:00

41 lines
2.0 KiB
Go

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
}