< Summary

Information
Class: Services.ApiServices._1CApi.OData.OneCDocumentPostingException
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/OData/OneCDocumentPostingException.cs
Line coverage
100%
Covered lines: 4
Uncovered lines: 0
Coverable lines: 4
Total lines: 32
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Endpoint()100%11100%
get_Detail()100%11100%
get_FullDetail()100%44100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/OData/OneCDocumentPostingException.cs

#LineLine coverage
 1namespace Services.ApiServices._1CApi.OData;
 2
 3/// <summary>
 4/// 1С отказалась провести документ (ответ на /Post — не 2xx).
 5///
 6/// Это ожидаемый бизнес-исход, а не сбой интеграции: чаще всего не хватает остатка на
 7/// складе-отправителе. Документ остаётся созданным, но непроведённым, а причина уходит
 8/// пользователю в <c>PostingError</c> и показывается в алерте транзакции.
 9/// Поэтому вызывающая сторона пишет такой отказ в лог как Information: Warning/Error попадают
 10/// в файл errors-*.log и заводят автоматический issue на штатную ситуацию.
 11/// Error остаётся для настоящих сбоев обмена (сеть, таймаут, авторизация).
 12///
 13/// <see cref="Message"/> уже человекочитаем (<see cref="OneCDocumentPostingMessage"/>) и годится
 14/// для показа пользователю; технические подробности — в <see cref="Endpoint"/> и <see cref="Detail"/>.
 15/// <see cref="Detail"/> укорочен до 500 символов для показа; текст ответа 1С целиком — в
 16/// <see cref="OneCODataException.Error"/> (<see cref="FullDetail"/>).
 17///
 18/// Наследуется от <see cref="InvalidOperationException"/> (через <see cref="OneCODataException"/>), чтобы
 19/// не ломать код, который уже ловит проведение документа по базовому типу.
 20/// </summary>
 21public sealed class OneCDocumentPostingException(string message, string endpoint, string detail, OneCODataError? error =
 1122    : OneCODataException(message, error)
 23{
 24    /// <summary>OData-эндпоинт документа, например <c>Document_ПеремещениеЗапасов</c>.</summary>
 1225    public string Endpoint { get; } = endpoint;
 26
 27    /// <summary>Причина отказа в том виде, в каком её вернула 1С (для показа, может быть укорочена).</summary>
 1628    public string Detail { get; } = detail;
 29
 30    /// <summary>Полный текст отказа 1С: статус, код и причина без усечения.</summary>
 531    public string FullDetail => Error?.ToDetailText() ?? Detail;
 32}