diff --git a/internal/lkgateway/manual.go b/internal/lkgateway/manual.go
index 4922702..49599c2 100644
--- a/internal/lkgateway/manual.go
+++ b/internal/lkgateway/manual.go
@@ -94,7 +94,7 @@ type ManualOrder struct {
RecvCode string `json:"recv_code,omitempty"`
RecvName string `json:"recv_name,omitempty"`
RecvAccount string `json:"recv_account,omitempty"` // счёт клиента у принимающего (для сведения)
- SettlePlace string `json:"settle_place"` // nrd | spb
+ SettlePlace string `json:"settle_place"` // nrd (СПБ Банк пока не используется)
CostInfo bool `json:"cost_info"`
Securities []ManualSec `json:"securities"`
diff --git a/internal/lkgateway/manual_handlers.go b/internal/lkgateway/manual_handlers.go
index dc554f7..e63a760 100644
--- a/internal/lkgateway/manual_handlers.go
+++ b/internal/lkgateway/manual_handlers.go
@@ -329,9 +329,7 @@ func manualFromForm(r *http.Request) *ManualOrder {
RecvINN: f("recv_inn"), RecvName: f("recv_name"), RecvAccount: f("recv_account"), SettlePlace: f("settle_place"),
CostInfo: r.FormValue("cost_info") != "", Comment: f("comment"),
}
- if o.SettlePlace != "spb" {
- o.SettlePlace = "nrd"
- }
+ o.SettlePlace = "nrd" // СПБ Банк пока не используется
isins, codes, names, qtys := r.Form["sec_isin"], r.Form["sec_code"], r.Form["sec_name"], r.Form["sec_qty"]
at := func(a []string, i int) string {
if i < len(a) {
diff --git a/internal/lkgateway/web/templates/admin_help_manual.html b/internal/lkgateway/web/templates/admin_help_manual.html
index 09cf0e3..f95dff6 100644
--- a/internal/lkgateway/web/templates/admin_help_manual.html
+++ b/internal/lkgateway/web/templates/admin_help_manual.html
@@ -51,7 +51,7 @@
Ценная бумага
Одно поручение — одна бумага: если клиент переводит несколько бумаг, на каждую оформляется отдельное поручение. ISIN (только российские выпуски, начинаются с RU) и количество; дробное количество допускается для паёв. Код НРД можно не указывать.
Принимающий депозитарий
Выбирается из справочника участников M2M, который bj получает от НРД. Если депозитария нет в справочнике, перевод через MOEX МОСТ невозможен.
Счёт у принимающего
Для сведения: принимающий депозитарий сам находит клиента по документу.
-
Место расчётов
НРД или СПБ Банк — как в поручении клиента.
+
Место расчётов
НРД.
Сведения о расходах
Отметьте, если клиент просит передать сведения о расходах на приобретение бумаг.
Если после сверки или отметок изменить данные поручения, сверка и отметки сбросятся: их нужно пройти заново.
{{end}}
@@ -332,17 +338,15 @@ function mfRerun(){const f=document.getElementById('mf');if(f&&f.closest('detail
4. Принимающая сторона
-
-
+
+
+
{{if not .Handbook}}Справочник участников ещё не получен от НРД — введите ИНН вручную.{{end}}
-
+
Бумаги списываются с нашего места хранения в НРД: {{if .NSD.DeponentCode}}депонент {{.NSD.DeponentCode}}, счёт {{.NSD.AccountID}}, раздел {{.NSD.SectionID}}{{else}}реквизиты не заданы в настройках НРД{{end}}.
@@ -387,6 +391,24 @@ async function mfPick(i,j){
}
let mfPos=[];
function mfSec(k){const p=mfPos[k];document.getElementById('f_isin').value=p.isin;document.getElementById('f_sname').value=p.name;const q=document.getElementById('f_qty');q.placeholder='доступно '+p.qty;q.focus()}
-function mfPickHB(s){const o=s.options[s.selectedIndex];if(!o.value)return;document.getElementById('recv_inn').value=o.value;document.getElementById('recv_name').value=o.dataset.name||''}
+// hbFind — подбор участника справочника НРД по ИНН, названию или коду (без учёта регистра и кавычек).
+function hbNorm(s){return String(s||'').toLowerCase().replace(/ё/g,'е').replace(/[«»"'“”.,()]/g,' ').replace(/\s+/g,' ').trim()}
+function hbFind(list,q){q=hbNorm(q);if(q.length<2)return[];const words=q.split(' ');
+ return list.map(p=>{const hay=hbNorm([p.inn,p.code,p.name,p.full_name,p.display_name,p.eng_name].join(' '));
+ if(!words.every(w=>hay.includes(w)))return null;
+ const score=(String(p.inn).startsWith(q)||String(p.code).toLowerCase().startsWith(q)?0:hbNorm(p.name).startsWith(q)||hbNorm(p.display_name).startsWith(q)?1:2)+(p.kind==='depo'?0:0.5);
+ return {p,score}}).filter(Boolean).sort((a,b)=>a.score-b.score).slice(0,12).map(x=>x.p)}
+function hbBind(inp,box,list,onPick){
+ const esc=s=>String(s??'').replace(/[&<>"]/g,c=>({'&':'&','<':'<','>':'>','"':'"'}[c]));
+ let hits=[];
+ const draw=()=>{hits=hbFind(list,inp.value);box.innerHTML=inp.value.trim().length<2?'':(hits.length?hits.map((p,i)=>'').join(''):'
В справочнике не найдено — введите ИНН и наименование в поля ниже.