| | | 1 | | using Intentum.Runtime.Policy; |
| | | 2 | | |
| | | 3 | | namespace Intentum.Runtime.Fraud; |
| | | 4 | | |
| | | 5 | | /// <summary> |
| | | 6 | | /// Pre-built fraud detection policies for common deployment scenarios. |
| | | 7 | | /// </summary> |
| | | 8 | | public static class FraudPolicies |
| | | 9 | | { |
| | | 10 | | /// <summary> |
| | | 11 | | /// Standard fraud detection policy: block high-confidence fraud, escalate suspicious, |
| | | 12 | | /// require additional auth for medium risk, allow low risk. |
| | | 13 | | /// </summary> |
| | 0 | 14 | | public static IntentPolicy Standard() => new IntentPolicyBuilder() |
| | 0 | 15 | | .Block("HighRiskFraud", i => |
| | 0 | 16 | | i.Name is "AccountTakeover" or "CredentialStuffing" or "PaymentFraud" && |
| | 0 | 17 | | i.Confidence.Score >= 0.8) |
| | 0 | 18 | | .Escalate("SuspiciousBehavior", i => |
| | 0 | 19 | | i.Name is "AccountTakeover" or "CredentialStuffing" or "PaymentFraud" && |
| | 0 | 20 | | i.Confidence.Score >= 0.6) |
| | 0 | 21 | | .RequireAuth("MediumRisk", i => |
| | 0 | 22 | | i.Confidence.Score >= 0.4 && i.Confidence.Level is "Medium") |
| | 0 | 23 | | .RateLimit("HighFrequency", i => i.Signals.Count > 10) |
| | 0 | 24 | | .Allow("LegitimateRecovery", i => i.Name == "AccountRecovery" && i.Confidence.Score >= 0.7) |
| | 0 | 25 | | .Allow("LowRisk", i => i.Confidence.Score < 0.4) |
| | 0 | 26 | | .Observe("Default", _ => true) |
| | 0 | 27 | | .Build(); |
| | | 28 | | |
| | | 29 | | /// <summary> |
| | | 30 | | /// Strict policy: lower thresholds for blocking, suitable for high-value transactions. |
| | | 31 | | /// </summary> |
| | 0 | 32 | | public static IntentPolicy Strict() => new IntentPolicyBuilder() |
| | 0 | 33 | | .Block("AnyFraudDetected", i => |
| | 0 | 34 | | i.Name is "AccountTakeover" or "CredentialStuffing" or "PaymentFraud" && |
| | 0 | 35 | | i.Confidence.Score >= 0.5) |
| | 0 | 36 | | .Escalate("Suspicious", i => i.Confidence.Score >= 0.3) |
| | 0 | 37 | | .RequireAuth("AllMedium", i => i.Confidence.Level is "Medium" or "Low") |
| | 0 | 38 | | .Allow("ConfirmedSafe", i => i.Name == "AccountRecovery" && i.Confidence.Score >= 0.85) |
| | 0 | 39 | | .Observe("Default", _ => true) |
| | 0 | 40 | | .Build(); |
| | | 41 | | } |