Код получателя в запросе НРД — по ИНН зачисляющего депозитария из справочника M2M (заявки ЛК уходили с кодом из настроек → M2M15)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-09-29 15:01:29 +03:00
parent adc22ef206
commit 2c2ab4e915
2 changed files with 32 additions and 8 deletions
+17
View File
@@ -0,0 +1,17 @@
package lkgateway
import "testing"
// Код получателя — по ИНН зачисляющего депозитария из справочника M2M, а не из настроек (M2M15 29.09.2026).
func TestReceiverForByINN(t *testing.T) {
svc := NewService(Config{DefaultReceiver: "MC0010300000"})
if got := svc.receiverFor(CreateClaimRequest{ReceivingDepositoryINN: "7702015515"}); got != "MC00314000TR" {
t.Fatalf("Атон: %s", got)
}
if got := svc.receiverFor(CreateClaimRequest{ReceivingDepositoryINN: "0000000000"}); got != "MC0010300000" {
t.Fatalf("нет в справочнике — из настроек: %s", got)
}
if got := svc.receiverFor(CreateClaimRequest{ReceivingDepositoryINN: "7702015515", ReceiverCodeOverride: "MC0012500000"}); got != "MC0012500000" {
t.Fatalf("явный код: %s", got)
}
}
+15 -8
View File
@@ -86,10 +86,7 @@ func (s *Service) BuildRequest(ctx context.Context, in CreateClaimRequest) (*m2m
if err != nil { if err != nil {
return nil, fmt.Errorf("lkgateway: dtoToClaim: %w", err) return nil, fmt.Errorf("lkgateway: dtoToClaim: %w", err)
} }
receiver := s.defaultReceiver receiver := s.receiverFor(in)
if in.ReceiverCodeOverride != "" {
receiver = m2m.DeponentCode(in.ReceiverCodeOverride)
}
req, err := m2mcore.EnrichRequest(ctx, s.store, domainClaim, m2mcore.SenderReceiver{ req, err := m2mcore.EnrichRequest(ctx, s.store, domainClaim, m2mcore.SenderReceiver{
SenderCode: s.defaultSender, SenderCode: s.defaultSender,
ReceiverCode: receiver, ReceiverCode: receiver,
@@ -100,6 +97,19 @@ func (s *Service) BuildRequest(ctx context.Context, in CreateClaimRequest) (*m2m
return req, nil return req, nil
} }
// receiverFor — код получателя (зачисляющего депозитария) в заголовке запроса: явный (робот НРД,
// тест-кейсы) → по ИНН зачисляющего депозитария из справочника участников M2M → из настроек.
// Без справочника заявки ЛК уходили с кодом из настроек, и НРД отвечал M2M15 (29.09.2026).
func (s *Service) receiverFor(in CreateClaimRequest) m2m.DeponentCode {
if in.ReceiverCodeOverride != "" {
return m2m.DeponentCode(in.ReceiverCodeOverride)
}
if code := handbookCodeByINN(in.ReceivingDepositoryINN); code != "" {
return m2m.DeponentCode(code)
}
return s.defaultReceiver
}
// BuildRequestUnchecked — BuildRequest без финальной проверки формата НРД: пакет нужен // BuildRequestUnchecked — BuildRequest без финальной проверки формата НРД: пакет нужен
// для журнала и отказа через Fancy даже при некорректных данных заявки (lkemulate.go). // для журнала и отказа через Fancy даже при некорректных данных заявки (lkemulate.go).
func (s *Service) BuildRequestUnchecked(ctx context.Context, in CreateClaimRequest) (*m2m.M2MTransferRequest, error) { func (s *Service) BuildRequestUnchecked(ctx context.Context, in CreateClaimRequest) (*m2m.M2MTransferRequest, error) {
@@ -107,10 +117,7 @@ func (s *Service) BuildRequestUnchecked(ctx context.Context, in CreateClaimReque
if err != nil { if err != nil {
return nil, fmt.Errorf("lkgateway: dtoToClaim: %w", err) return nil, fmt.Errorf("lkgateway: dtoToClaim: %w", err)
} }
receiver := s.defaultReceiver receiver := s.receiverFor(in)
if in.ReceiverCodeOverride != "" {
receiver = m2m.DeponentCode(in.ReceiverCodeOverride)
}
req, err := m2mcore.EnrichRequestUnchecked(ctx, s.store, domainClaim, m2mcore.SenderReceiver{ req, err := m2mcore.EnrichRequestUnchecked(ctx, s.store, domainClaim, m2mcore.SenderReceiver{
SenderCode: s.defaultSender, SenderCode: s.defaultSender,
ReceiverCode: receiver, ReceiverCode: receiver,