< Summary

Information
Class: Intentum.Core.SupplyChain.SupplyChainRules
Assembly: Intentum.Core
File(s): /home/runner/work/Intentum/Intentum/src/Intentum.Core/SupplyChain/SupplyChainRules.cs
Line coverage
100%
Covered lines: 113
Uncovered lines: 0
Coverable lines: 113
Total lines: 138
Line coverage: 100%
Branch coverage
100%
Covered branches: 62
Total branches: 62
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
InventoryShortage(...)100%88100%
SupplierRisk(...)100%88100%
LogisticsDisruption(...)100%88100%
DemandForecastAnomaly(...)100%66100%
WarehouseCapacity(...)100%88100%
OrderFulfillmentDelay(...)100%88100%
SupplierDependencyRisk(...)100%88100%
ReturnsAnomaly(...)100%88100%
AllRules()100%11100%

File(s)

/home/runner/work/Intentum/Intentum/src/Intentum.Core/SupplyChain/SupplyChainRules.cs

#LineLine coverage
 1using Intentum.Core.Behavior;
 2using Intentum.Core.Models;
 3
 4namespace Intentum.Core.SupplyChain;
 5
 6public static class SupplyChainRules
 7{
 8    public static Func<BehaviorSpace, RuleMatch?> InventoryShortage(
 69        double confidence = 0.85) => space =>
 410    {
 411        var signals = space.Events.Count(e =>
 2612            e.Action.Contains("stock.low", StringComparison.OrdinalIgnoreCase) ||
 2613            e.Action.Contains("demand.spike", StringComparison.OrdinalIgnoreCase) ||
 2614            e.Action.Contains("reorder.failed", StringComparison.OrdinalIgnoreCase) ||
 2615            e.Action.Contains("backorder.created", StringComparison.OrdinalIgnoreCase));
 616
 417        if (signals >= 2)
 318            return new RuleMatch("InventoryShortage", confidence,
 319                $"Inventory shortage signals: {signals}");
 120        return null;
 1021    };
 22
 23    public static Func<BehaviorSpace, RuleMatch?> SupplierRisk(
 524        double confidence = 0.8) => space =>
 325    {
 326        var signals = space.Events.Count(e =>
 2127            e.Action.Contains("delivery.delayed", StringComparison.OrdinalIgnoreCase) ||
 2128            e.Action.Contains("quality.issue", StringComparison.OrdinalIgnoreCase) ||
 2129            e.Action.Contains("communication.gap", StringComparison.OrdinalIgnoreCase) ||
 2130            e.Action.Contains("compliance.flag", StringComparison.OrdinalIgnoreCase));
 531
 332        if (signals >= 2)
 233            return new RuleMatch("SupplierRisk", confidence,
 234                $"Supplier risk signals: {signals}");
 135        return null;
 836    };
 37
 38    public static Func<BehaviorSpace, RuleMatch?> LogisticsDisruption(
 539        double confidence = 0.9) => space =>
 440    {
 441        var signals = space.Events.Count(e =>
 2442            e.Action.Contains("route.changed", StringComparison.OrdinalIgnoreCase) ||
 2443            e.Action.Contains("carrier.service.issue", StringComparison.OrdinalIgnoreCase) ||
 2444            e.Action.Contains("customs.flag", StringComparison.OrdinalIgnoreCase) ||
 2445            e.Action.Contains("transit.delayed", StringComparison.OrdinalIgnoreCase));
 546
 447        if (signals >= 2)
 348            return new RuleMatch("LogisticsDisruption", confidence,
 349                $"Logistics disruption signals: {signals}");
 150        return null;
 951    };
 52
 53    public static Func<BehaviorSpace, RuleMatch?> DemandForecastAnomaly(
 554        double confidence = 0.75) => space =>
 355    {
 356        var signals = space.Events.Count(e =>
 2157            e.Action.Contains("order.pattern.unexpected", StringComparison.OrdinalIgnoreCase) ||
 2158            e.Action.Contains("demand.seasonal.deviation", StringComparison.OrdinalIgnoreCase) ||
 2159            e.Action.Contains("forecast.accuracy.declining", StringComparison.OrdinalIgnoreCase));
 560
 361        if (signals >= 2)
 262            return new RuleMatch("DemandForecastAnomaly", confidence,
 263                $"Demand forecast anomaly signals: {signals}");
 164        return null;
 865    };
 66
 67    public static Func<BehaviorSpace, RuleMatch?> WarehouseCapacity(
 568        double confidence = 0.8) => space =>
 369    {
 370        var signals = space.Events.Count(e =>
 2171            e.Action.Contains("warehouse.utilization.spike", StringComparison.OrdinalIgnoreCase) ||
 2172            e.Action.Contains("warehouse.throughput.drop", StringComparison.OrdinalIgnoreCase) ||
 2173            e.Action.Contains("warehouse.capacity.exceeded", StringComparison.OrdinalIgnoreCase) ||
 2174            e.Action.Contains("warehouse.bottleneck", StringComparison.OrdinalIgnoreCase));
 575
 376        if (signals >= 2)
 277            return new RuleMatch("WarehouseCapacity", confidence,
 278                $"Warehouse capacity signals: {signals}");
 179        return null;
 880    };
 81
 82    public static Func<BehaviorSpace, RuleMatch?> OrderFulfillmentDelay(
 583        double confidence = 0.85) => space =>
 384    {
 385        var signals = space.Events.Count(e =>
 2186            e.Action.Contains("order.processing.delayed", StringComparison.OrdinalIgnoreCase) ||
 2187            e.Action.Contains("order.pick.pack.issue", StringComparison.OrdinalIgnoreCase) ||
 2188            e.Action.Contains("order.shipping.delayed", StringComparison.OrdinalIgnoreCase) ||
 2189            e.Action.Contains("order.inventory.short", StringComparison.OrdinalIgnoreCase));
 590
 391        if (signals >= 2)
 292            return new RuleMatch("OrderFulfillmentDelay", confidence,
 293                $"Order fulfillment delay signals: {signals}");
 194        return null;
 895    };
 96
 97    public static Func<BehaviorSpace, RuleMatch?> SupplierDependencyRisk(
 598        double confidence = 0.8) => space =>
 399    {
 3100        var signals = space.Events.Count(e =>
 20101            e.Action.Contains("supplier.single_source", StringComparison.OrdinalIgnoreCase) ||
 20102            e.Action.Contains("supplier.geopolitical.flag", StringComparison.OrdinalIgnoreCase) ||
 20103            e.Action.Contains("supplier.financial.instability", StringComparison.OrdinalIgnoreCase) ||
 20104            e.Action.Contains("supplier.capacity.limited", StringComparison.OrdinalIgnoreCase));
 5105
 3106        if (signals >= 1)
 2107            return new RuleMatch("SupplierDependencyRisk", confidence,
 2108                $"Supplier dependency risk signals: {signals}");
 1109        return null;
 8110    };
 111
 112    public static Func<BehaviorSpace, RuleMatch?> ReturnsAnomaly(
 5113        double confidence = 0.8) => space =>
 3114    {
 3115        var signals = space.Events.Count(e =>
 21116            e.Action.Contains("return.rate.unusual", StringComparison.OrdinalIgnoreCase) ||
 21117            e.Action.Contains("return.pattern.changed", StringComparison.OrdinalIgnoreCase) ||
 21118            e.Action.Contains("return.fraud.suspected", StringComparison.OrdinalIgnoreCase) ||
 21119            e.Action.Contains("return.volume.spike", StringComparison.OrdinalIgnoreCase));
 5120
 3121        if (signals >= 2)
 2122            return new RuleMatch("ReturnsAnomaly", confidence,
 2123                $"Returns anomaly signals: {signals}");
 1124        return null;
 8125    };
 126
 127    public static IReadOnlyList<Func<BehaviorSpace, RuleMatch?>> AllRules() =>
 3128    [
 3129        LogisticsDisruption(),
 3130        InventoryShortage(),
 3131        SupplierRisk(),
 3132        DemandForecastAnomaly(),
 3133        WarehouseCapacity(),
 3134        OrderFulfillmentDelay(),
 3135        SupplierDependencyRisk(),
 3136        ReturnsAnomaly()
 3137    ];
 138}