Анкета участника M2M: ссылка в разделе НРД + предзаполнение по фирме
- В «Настройка → НРД» добавлена карточка «Регистрация участника M2M» со ссылкой на /admin/setup/participant-form (раньше страница была только по URL). - participantFormPrefill теперь заполняет анкету по реквизитам фирмы, а не только из автоопределения DEPO: берёт ИНН/коды из настроек НРД и наименования (полное/сокращённое/отображаемое/англ.) из справочника участников НРД (по MC-коду, затем по ИНН); DisplayName/Short подставляются, если пусты. - org.go: добавлен handbookByINN. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -20,8 +20,8 @@
|
|||||||
"version": "2026.10.21.6"
|
"version": "2026.10.21.6"
|
||||||
},
|
},
|
||||||
"bj-server": {
|
"bj-server": {
|
||||||
"fingerprint": "feab9bc0b3c4d7008e579ba559301cde5ccb2571beee27d8d5f9bc535c462e51",
|
"fingerprint": "f519a86230ac6521f1e1623c4daa56d3eb6791fabf951e28fb1a89e825d02bd9",
|
||||||
"version": "2026.10.21.7"
|
"version": "2026.10.21.8"
|
||||||
},
|
},
|
||||||
"crypto-service.jar": {
|
"crypto-service.jar": {
|
||||||
"fingerprint": "2c4fd536bc9b1c20c69a70e8dcd374a61847b263aeb2e474c45debb01fbd8233",
|
"fingerprint": "2c4fd536bc9b1c20c69a70e8dcd374a61847b263aeb2e474c45debb01fbd8233",
|
||||||
|
|||||||
@@ -34,6 +34,20 @@ func handbookParticipants() []HandbookEntry {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handbookByINN — участник справочника по ИНН (первый не-"place").
|
||||||
|
func handbookByINN(inn string) (HandbookEntry, bool) {
|
||||||
|
inn = strings.TrimSpace(inn)
|
||||||
|
if inn == "" {
|
||||||
|
return HandbookEntry{}, false
|
||||||
|
}
|
||||||
|
for _, p := range handbookParticipants() {
|
||||||
|
if p.INN == inn {
|
||||||
|
return p, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HandbookEntry{}, false
|
||||||
|
}
|
||||||
|
|
||||||
// handbookByCode — участник по MC-коду.
|
// handbookByCode — участник по MC-коду.
|
||||||
func handbookByCode(code string) (HandbookEntry, bool) {
|
func handbookByCode(code string) (HandbookEntry, bool) {
|
||||||
code = strings.ToUpper(strings.TrimSpace(code))
|
code = strings.ToUpper(strings.TrimSpace(code))
|
||||||
|
|||||||
@@ -63,8 +63,48 @@ func participantFormPrefill(rc *RuntimeConfig) participantFormData {
|
|||||||
d.DepoCode = strings.TrimSpace(r.DeponentCode)
|
d.DepoCode = strings.TrimSpace(r.DeponentCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if d.DepoCode == "" && rc != nil {
|
if rc != nil {
|
||||||
d.DepoCode = strings.TrimSpace(rc.Snapshot().NSD.DeponentCode)
|
s := rc.Snapshot()
|
||||||
|
// Реквизиты нашей организации из настроек НРД и справочника участников —
|
||||||
|
// заполняем то, чего не дало автоопределение DEPO.
|
||||||
|
if d.INN == "" {
|
||||||
|
d.INN = orgINN(s)
|
||||||
|
}
|
||||||
|
if d.DepoCode == "" {
|
||||||
|
d.DepoCode = strings.ToUpper(strings.TrimSpace(pick(s.NSD.DeponentCode, s.NSD.OrgCode)))
|
||||||
|
}
|
||||||
|
// Карточка нашей фирмы в справочнике участников НРД: по MC-коду, затем по ИНН.
|
||||||
|
hb, ok := handbookByCode(orgCode(s))
|
||||||
|
if !ok && d.INN != "" {
|
||||||
|
hb, ok = handbookByINN(d.INN)
|
||||||
|
}
|
||||||
|
if ok {
|
||||||
|
if d.FullName == "" {
|
||||||
|
d.FullName = strings.TrimSpace(pick(hb.FullName, hb.Name))
|
||||||
|
}
|
||||||
|
if d.ShortName == "" {
|
||||||
|
d.ShortName = strings.TrimSpace(hb.Name)
|
||||||
|
}
|
||||||
|
if d.DisplayName == "" {
|
||||||
|
d.DisplayName = strings.TrimSpace(pick(hb.DisplayName, hb.Name))
|
||||||
|
}
|
||||||
|
if d.EngFull == "" {
|
||||||
|
d.EngFull = strings.TrimSpace(hb.EngName)
|
||||||
|
}
|
||||||
|
if hb.Kind == "broker" && d.BrokerCode == "" {
|
||||||
|
d.BrokerCode = strings.ToUpper(strings.TrimSpace(hb.Code))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if d.FullName == "" {
|
||||||
|
d.FullName = strings.TrimSpace(s.NSD.OrgName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// DisplayName/Short обязательны в анкете — подставим из того, что есть.
|
||||||
|
if d.DisplayName == "" {
|
||||||
|
d.DisplayName = strings.TrimSpace(pick(d.ShortName, d.FullName))
|
||||||
|
}
|
||||||
|
if d.ShortName == "" {
|
||||||
|
d.ShortName = strings.TrimSpace(pick(d.DisplayName, d.FullName))
|
||||||
}
|
}
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -360,6 +360,11 @@
|
|||||||
<p class="muted">bj сам ставит и настраивает интеграционный шлюз НРД на этом сервере: контуры TEST3 и боевой, переключение между ними, доступ к папкам шлюза по сети.</p>
|
<p class="muted">bj сам ставит и настраивает интеграционный шлюз НРД на этом сервере: контуры TEST3 и боевой, переключение между ними, доступ к папкам шлюза по сети.</p>
|
||||||
{{template "igateInstall" .}}
|
{{template "igateInstall" .}}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card" id="nsd-participant">
|
||||||
|
<h2>Регистрация участника M2M</h2>
|
||||||
|
<p class="muted">Анкета участника <code>M2MTransferParticipantForm</code> — НРД требует её перед работой: без регистрации сервис МОСТ отбивает запросы кодом <b>M2M14</b>. bj заполняет анкету по реквизитам фирмы (настройки НРД и справочник участников), даёт проверить и показывает XML, затем отправляет в боевой контур через ИШ (пакет <code>#M2MPF</code>) или письмом на <code>M2MOST@nsd.ru</code>.</p>
|
||||||
|
<a class="btn" href="/admin/setup/participant-form">Открыть анкету участника →</a>
|
||||||
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<details class="adv-box">
|
<details class="adv-box">
|
||||||
<summary><span class="sum-h">Расширенные настройки</span><span class="muted">шлюз вручную: контур, адрес веб-сервиса, ключевой контейнер, версия ИШ — обычно bj задаёт их сам</span></summary>
|
<summary><span class="sum-h">Расширенные настройки</span><span class="muted">шлюз вручную: контур, адрес веб-сервиса, ключевой контейнер, версия ИШ — обычно bj задаёт их сам</span></summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user