< Summary

Information
Class: Services.ApiServices._1CApi.Nomenclature.NomenclatureResolvePolicy
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/Nomenclature/NomenclatureResolvePolicy.cs
Line coverage
100%
Covered lines: 12
Uncovered lines: 0
Coverable lines: 12
Total lines: 49
Line coverage: 100%
Branch coverage
100%
Covered branches: 18
Total branches: 18
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Decide(...)100%1818100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/Nomenclature/NomenclatureResolvePolicy.cs

#LineLine coverage
 1namespace Services.ApiServices._1CApi.Nomenclature;
 2
 3public enum NomenclatureAction
 4{
 5    /// <summary>Брать найденную карточку.</summary>
 6    UseCard,
 7
 8    /// <summary>Завести новую карточку.</summary>
 9    Create,
 10
 11    /// <summary>Не брать и не создавать: позиция уходит в черновик с причиной.</summary>
 12    Reject
 13}
 14
 15public sealed record NomenclatureDecision(NomenclatureAction Action, Guid? RefKey, string Reason, bool FoundByVariant);
 16
 17/// <summary>
 18/// Что делать с результатом поиска. «Только найти» (отгрузка реализатору, утеря) никогда не создаёт карточек.
 19/// «Найти или создать» создаёт только когда карточки нет вообще или все карточки артикула — другого бренда;
 20/// при неоднозначности не создаёт: новая карточка стала бы дублем одной из существующих.
 21/// </summary>
 22public static class NomenclatureResolvePolicy
 23{
 24    public static NomenclatureDecision Decide(NomenclatureMatch match, NomenclatureMode mode)
 25    {
 4826        switch (match.Status)
 27        {
 1128            case NomenclatureMatchStatus.Found when match.RefKey.HasValue:
 1129                return new NomenclatureDecision(NomenclatureAction.UseCard, match.RefKey, match.Reason, false);
 30
 231            case NomenclatureMatchStatus.FoundByVariant when match.RefKey.HasValue:
 232                return new NomenclatureDecision(NomenclatureAction.UseCard, match.RefKey, match.Reason, true);
 33
 34            case NomenclatureMatchStatus.Ambiguous:
 535                return new NomenclatureDecision(NomenclatureAction.Reject, null, match.Reason, false);
 36
 37            case NomenclatureMatchStatus.BrandMismatch:
 38            case NomenclatureMatchStatus.NotFound:
 2539                return mode == NomenclatureMode.FindOrCreate
 2540                       && match.Parsed.ArticleKey.Length > 0
 2541                       && match.Producer.Kind == ProducerResolutionKind.Known
 2542                    ? new NomenclatureDecision(NomenclatureAction.Create, null, match.Reason, false)
 2543                    : new NomenclatureDecision(NomenclatureAction.Reject, null, match.Reason, false);
 44
 45            default:
 546                return new NomenclatureDecision(NomenclatureAction.Reject, null, match.Reason, false);
 47        }
 48    }
 49}