Входящие M2M: частичный приём — каждая бумага решается сама по себе (НРД допускает: по каждой принятой свой черновик 16/1); переводы на ИИС не принимаем — отказ M2M07 по всем бумагам

- finishResult: итог confirm / reject / partial, без отказа всем пакетом;
- autoDecisions и ручной ответ: без правила «целиком», квал-предупреждение — отказ только по своей бумаге;
- признак ИИС из заголовка запроса (IIAAgreementDetails), у сохранённых раньше — по исходному XML;
- форма оператора: без автоматического «отказ всем», подсказка про ИИС; тексты и тесты.

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-25 15:36:58 +03:00
parent 76b97b0755
commit 92afdd2868
12 changed files with 90 additions and 103 deletions
+7
View File
@@ -55,6 +55,7 @@ type IncomingTransfer struct {
DocNumber string `json:"doc_number,omitempty"`
ReceivingINN string `json:"receiving_inn,omitempty"` // принимающий депозитарий (мы)
Securities []IncomingSecurity `json:"securities"`
IIS bool `json:"iis,omitempty"` // перевод на ИИС (в запросе есть IIAAgreementDetails)
RawXML string `json:"raw_xml"`
DecisionXML string `json:"decision_xml,omitempty"` // наш ответ M2MTransferDecision (для выгрузки регулятору)
Status string `json:"status"` // pending | answered
@@ -135,6 +136,7 @@ func (s *IncomingStore) AddFromRequest(req *m2m.M2MTransferRequest, rawXML strin
id, _ := newID()
inv := req.Data.InvestorInformation
it := &IncomingTransfer{
IIS: req.Header.IIAAgreementDetails != nil,
ID: id,
GUID: guid,
RequestCreated: req.Header.CreationTimestamp.Time,
@@ -358,3 +360,8 @@ func newID() (string, error) {
}
return u, nil
}
// incomingIsIIS — перевод на ИИС: по признаку из запроса, а у сохранённых раньше — по исходному XML.
func incomingIsIIS(it *IncomingTransfer) bool {
return it.IIS || strings.Contains(it.RawXML, "IIAAgreementDetails")
}