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>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user