da12a9ec1c
- 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>
41 lines
2.0 KiB
Go
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
|
|
}
|