GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!
Watch the launch videoWatchTraffic Violation Penalty Calculator
Automated system that determines appropriate fines, points, and penalties for traffic violations based on severity, driver history, and circumstances.
Solution
This traffic violation assessment system calculates fair and consistent penalties by analyzing multiple factors in each case. The system first classifies violations by type and severity, assigning base fines and points according to established guidelines. For speeding violations, the system factors in the exact speed over the limit, with higher excesses resulting in steeper penalties.
The system then applies circumstantial modifiers based on location (with special attention to school zones), the driver's violation history, and the overall severity classification. When violations occur in school zones or are committed by repeat offenders, penalties are appropriately increased. For severe violations with multiple previous offenses, the system can recommend license suspension. The final assessment includes a calculated risk level and payment deadline, with higher-risk violations receiving shorter payment windows and closer monitoring.
How it works
The decision graph processes violations through four interconnected stages:
- Violation Classification: Categorizes the offense based on type (speeding, DUI, etc.) and assigns initial severity level, points, and base fine amount.
- Penalty Calculation: Applies multipliers to the base penalty based on contextual factors like previous violations and school zone location. Determines if license suspension is warranted for severe cases.
- Assessment Finalization: Rounds calculated values to ensure clean, whole-number fines and point assessments.
- Risk Analysis: Evaluates the driver's risk level based on final point count and violation severity, then assigns appropriate payment deadlines-shorter for high-risk cases and longer for minor infractions.
Where teams use it
- Municipal traffic courts
- Police departments
- Highway patrol agencies
- DMV violation processing
- Traffic enforcement agencies
- Automated citation systems
- Driver education programs
- Insurance penalty assessments
Inside the decision model
Traffic Violation Penalty Calculator ships as a JDM decision graph with 5 nodes, 3 decision tables and 23 rules. Download it, load it into GoRules, and run it as-is on Zen Engine.
Request
inputTwo objects arrive with each citation: violation carries the type, speed_over_limit, and in_school_zone flag that determine the base penalty and modifiers, while driver contributes previous_violations for the repeat-offender rules. The date, location, and license_number fields are recorded but not used in any rule.
Sample requestJSON
{
"violation": {
"type": "speeding",
"speed_over_limit": 25,
"in_school_zone": true,
"date": "2025-03-15T14:30:00Z",
"location": "Main St & 5th Ave"
},
"driver": {
"license_number": "DL123456789",
"previous_violations": 1,
"license_issue_date": "2020-06-15"
}
}Classify Violation
tableOffense type sets the baseline in a first-hit table over violation.type and violation.speed_over_limit. Speeding is graduated: > 30 over the limit is 'severe' with 4 points and a 300 base fine, > 15 is 'moderate' with 3 points and 150, and any lesser excess is 'minor' at 2 points and 75. Named offenses get fixed rows, 'dui' at the top with 6 points and 500, 'reckless_driving' at 5 points and 350, 'running_red_light' and 'driving_without_license' as 'moderate', and the empty catch-all prices unknown violation types as 'minor' with 1 point and 50.
Graduating speeding penalties by the margin over the limit is exactly how real fine schedules work, and placing DUI and reckless driving at the top of the point scale matches demerit systems everywhere, since points are meant to track crash risk rather than revenue. A nonzero default row is a deliberate safety net so an unrecognized offense still produces an enforceable minimum penalty instead of an error.
| Violation Typeviolation.type | Speed Over Limitviolation.speed_over_limit | Severityassessment.severity | Pointsassessment.base_points | Base Fineassessment.base_fine |
|---|---|---|---|---|
| 'speeding' | > 30 | 'severe' | 4 | 300 |
| 'speeding' | > 15 | 'moderate' | 3 | 150 |
| 'speeding' | - | 'minor' | 2 | 75 |
| 'running_red_light' | - | 'moderate' | 3 | 200 |
| 'illegal_turn' | - | 'minor' | 2 | 100 |
| 'dui' | - | 'severe' | 6 | 500 |
+3 more rows in the downloadable template
Calculate Penalty
tableContext scales the baseline here: the table crosses assessment.severity with driver.previous_violations and violation.in_school_zone under a first hit policy. The harshest row, 'severe' with > 2 priors in a school zone, doubles the fine via assessment.base_fine * 2, multiplies points by 1.5, and is the only row that sets license_suspension_recommended to true. Below it, plain 'severe' cases take a 1.5x fine, 'moderate' repeat offenders 1.25x on both fine and points, a 'moderate' school-zone offense 1.2x, 'minor' with > 3 priors 1.1x, and the default row passes base_fine and base_points through untouched.
Each multiplier has a real-world counterpart: many jurisdictions double fines in school zones, repeat offenders face enhanced penalties under habitual-offender provisions, and license suspension is normally reserved for the combination of a serious offense and a bad record rather than any single factor. The strictly decreasing multiplier ladder keeps the table's first-hit ordering honest, the worst applicable enhancement always wins.
| Severityassessment.severity | Previous Violationsdriver.previous_violations | In School Zoneviolation.in_school_zone | Final Fineassessment.final_fine | Final Pointsassessment.final_points | License Suspension Recommendedassessment.license_suspension_recommended |
|---|---|---|---|---|---|
| 'severe' | > 2 | true | assessment.base_fine * 2 | assessment.base_points * 1.5 | true |
| 'severe' | - | - | assessment.base_fine * 1.5 | assessment.base_points | false |
| 'moderate' | > 2 | - | assessment.base_fine * 1.25 | assessment.base_points * 1.25 | false |
| 'moderate' | - | true | assessment.base_fine * 1.2 | assessment.base_points | false |
| 'minor' | > 3 | - | assessment.base_fine * 1.1 | assessment.base_points | false |
| - | - | - | assessment.base_fine | assessment.base_points | false |
Finalize Assessment
expressionA small cleanup step applies round(assessment.final_fine) and round(assessment.final_points) before the risk stage. The 1.5x and 1.25x multipliers upstream can produce fractional values like 4.5 points, and citations must state whole-dollar fines and integer point assessments, so rounding here keeps the downstream >= 3 and >= 5 point comparisons and the printed penalty consistent.
round(assessment.final_fine)round(assessment.final_points)Assess Risk And Deadlines
tableDriver risk and the payment window come from crossing assessment.final_points with severity, first hit wins. A 'severe' violation carrying >= 5 points is the only 'high' risk outcome; >= 3 points yields 'medium' at any severity; and the point-agnostic rows at the bottom default to 'low', including a final empty catch-all. Deadlines run opposite to risk: every 'severe' row gets 15 days to pay, 'moderate' rows 30, and 'minor' or unmatched rows 45.
Using the points actually assessed, after enhancement, rather than the base offense makes the risk label reflect the full circumstances of the case. Shorter deadlines for serious violations are a sensible collections policy, keeping high-risk drivers from sitting on unpaid penalties, while the 45-day window for minor infractions mirrors the more lenient response periods typical for ordinary citations.
| Final Pointsassessment.final_points | Severityassessment.severity | Risk Levelassessment.risk_level | Payment Deadline Daysassessment.payment_deadline_days |
|---|---|---|---|
| >= 5 | 'severe' | 'high' | 15 |
| >= 3 | 'severe' | 'medium' | 15 |
| >= 3 | 'moderate' | 'medium' | 30 |
| >= 3 | 'minor' | 'medium' | 45 |
| - | 'severe' | 'low' | 15 |
| - | 'moderate' | 'low' | 30 |
+2 more rows in the downloadable template
Other Public Sector templates
View all templatesGovernment Assistance
Streamlined decision system that determines program eligibility based on income thresholds, household size, age factors, and special circumstances.
Public SectorTax Exemption
Automated system that assesses organizations for 501(c)(3) tax-exempt status based on structure, activities, and financial metrics.
Public SectorMunicipal Permit Evaluation System
Automated system that evaluates building and event permits based on zoning regulations, safety requirements, and environmental impact factors.
Make this template
your own.
Load Traffic Violation Penalty Calculator into GoRules, adjust the rules to your policy, and ship it behind your own API.