# Violations Configuration

# Ticket Categories

<p class="callout info"><span class="legacy-color-text-default">**Ticket Categories** in OPSCOM allow administrators to define and manage different types of violations (e.g., Municipal, Parking, Bicycle). This feature is essential for accurate incident reporting, enforcing specific rules, and tailoring violation processes, including whether tickets apply to vehicles or users, and their visibility on handheld devices.</span></p>

### Using this Feature

The **Manage Ticket Categories** screen allows for comprehensive configuration of how different violations are classified and processed.

1\. Hover over **System Configuration,** then **Violations,** and click **Manage Ticket Categories**.

### [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/5zGimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/5zGimage.png)

##### <span style="text-decoration: underline;">Adding Ticket Categories</span>

<div _ngcontent-ng-c617919120="" class="chat-history-scroll-container" id="bkmrk-click-add-ticket-cat"><div _ngcontent-ng-c617919120="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c3942763368=""><div _ngcontent-ng-c4086532758="" class="response-container ng-tns-c4086532758-290 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c4086532758="" class="presented-response-container ng-tns-c4086532758-290"><div _ngcontent-ng-c4086532758="" class="response-container-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3942763368="" class="response-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3017587935="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">1. Click **Add Ticket Category**.
2. Enter the **Ticket Category Name** (e.g., Moving Violation).
3. Toggle to **Allow it to be Visible on Handhelds**.
4. For **Violation Applies To**: toggle if this will apply to tickets issued to vehicles and/or to Users.
5. If this is for [**Users**](https://opscom.wiki/books/the-opscom-admin-portal/page/configure-violations-to-a-person), toggle if you wish to **Enable Failed to Identify.**
6. Click **Save Changes**. The new ticket type will now be included in the list.

</div></div></div></div></div></div></div></div>##### <span style="text-decoration: underline;">Editing </span><span style="text-decoration: underline;">Ticket Categories</span>

<div _ngcontent-ng-c617919120="" class="chat-history-scroll-container" id="bkmrk-locate-the-ticket-ty"><div _ngcontent-ng-c617919120="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c3942763368=""><div _ngcontent-ng-c4086532758="" class="response-container ng-tns-c4086532758-290 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c4086532758="" class="presented-response-container ng-tns-c4086532758-290"><div _ngcontent-ng-c4086532758="" class="response-container-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3942763368="" class="response-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3017587935="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">1. Locate the ticket type you wish to edit in the list and click the **Edit** button next to it.
2. Make your changes.
3. Click **Save Changes.**

</div></div></div></div></div></div></div></div>##### <span style="text-decoration: underline;">Archiving </span><span style="text-decoration: underline;">Ticket Categories</span>

<p class="callout warning">Ticket Types can be deleted, however, they are not actually removed from the system's database. Instead, they are **archived** to preserve the integrity of any historical data associated with that Ticket Type (e.g., past violations that used this type).</p>

<div _ngcontent-ng-c617919120="" class="chat-history-scroll-container" id="bkmrk-locate-the-ticket-ty-1"><div _ngcontent-ng-c617919120="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c3942763368=""><div _ngcontent-ng-c4086532758="" class="response-container ng-tns-c4086532758-290 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c4086532758="" class="presented-response-container ng-tns-c4086532758-290"><div _ngcontent-ng-c4086532758="" class="response-container-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3942763368="" class="response-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3017587935="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">1. Locate the ticket type you wish to delete.
2. Click the **Delete** button and confirm.

</div></div></div></div></div></div></div></div><div _ngcontent-ng-c617919120="" class="chat-history-scroll-container" id="bkmrk--1"><div _ngcontent-ng-c617919120="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c3942763368=""><div _ngcontent-ng-c4086532758="" class="response-container ng-tns-c4086532758-290 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c4086532758="" class="presented-response-container ng-tns-c4086532758-290"><div _ngcontent-ng-c4086532758="" class="response-container-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3942763368="" class="response-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3017587935="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">---

</div></div></div></div></div></div></div></div>### <span style="color: rgb(22, 145, 121);">Best Practices &amp; Considerations</span>

<div _ngcontent-ng-c617919120="" class="chat-history-scroll-container" id="bkmrk-clarity-and-specific"><div _ngcontent-ng-c617919120="" class="conversation-container message-actions-hover-boundary ng-star-inserted" id="bkmrk-clarity-and-specific-1"><div _ngcontent-ng-c3942763368=""><div _ngcontent-ng-c4086532758="" class="response-container ng-tns-c4086532758-290 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c4086532758="" class="presented-response-container ng-tns-c4086532758-290"><div _ngcontent-ng-c4086532758="" class="response-container-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3942763368="" class="response-content ng-tns-c4086532758-290"><div _ngcontent-ng-c3017587935="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr" id="bkmrk-clarity-and-specific-2">- <span style="color: rgb(22, 145, 121);">**Clarity and Specificity**: Create ticket types that are clear, specific, and easily understood by both enforcement officers and users (e.g., "No Permit," "Fire Lane," "Smoking Violation").</span>
- <span style="color: rgb(22, 145, 121);">**Handheld Visibility**: Carefully manage the "Visible on Handhelds" setting. Only enable ticket types that your field officers actively enforce.</span>
- <span style="color: rgb(22, 145, 121);">Leverage the ability to apply tickets to Vehicles, Users or both to accommodate a broader range of enforcement scenarios beyond traditional parking infractions.</span>
- <span style="color: rgb(22, 145, 121);">**Data Integrity (Archiving)**: Understand that "deleting" a ticket type archives it. This means historical reports will still accurately reflect past violations, even if the category is no longer actively used.</span>
- <span style="color: rgb(22, 145, 121);">**Training**: Ensure enforcement staff are trained on the proper use and selection of ticket categories, especially for "Applies to: Users" violations, to ensure accurate data capture.</span>

</div></div></div></div><div _ngcontent-ng-c4086532758="" class="response-container-footer ng-tns-c4086532758-290"><div _ngcontent-ng-c496010613="" class="actions-container-v2 ng-tns-c496010613-292"><div _ngcontent-ng-c496010613="" class="buttons-container-v2 ng-tns-c496010613-292 ng-star-inserted"><button aria-controls="feedback-form-54" aria-label="Good response" aria-pressed="false" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger icon-button mat-unthemed"></button><div _ngcontent-ng-c3551887693="" class="thumb-animation" hidden="" lottie-animation=""><svg height="96" preserveaspectratio="xMidYMid meet" viewbox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><clippath id="bkmrk--2"><rect height="96" width="96" x="0" y="0"></rect></clippath><mask id="bkmrk--4"><rect fill="#ffffff" height="96" width="96"></rect><path clip-rule="nonzero" d=" M20.823999404907227,-50.45800018310547 C20.823999404907227,-50.45800018310547 -18.42799949645996,-40.75899887084961 -18.42799949645996,-40.75899887084961 C-18.42799949645996,-40.75899887084961 -20.881999969482422,-11.439000129699707 -20.881999969482422,-11.439000129699707 C-20.881999969482422,-11.439000129699707 13.111000061035156,-16.22100067138672 13.111000061035156,-16.22100067138672 C13.111000061035156,-16.22100067138672 20.823999404907227,-50.45800018310547 20.823999404907227,-50.45800018310547" fill="#000000"></path></mask><mask id="bkmrk--5"><rect fill="#ffffff" height="96" width="96"></rect><path clip-rule="nonzero" d=" M21.899999618530273,-45.80699920654297 C21.899999618530273,-45.80699920654297 -10.57800006866455,-36.2400016784668 -10.57800006866455,-36.2400016784668 C-10.57800006866455,-36.2400016784668 21.648000717163086,-8.79800033569336 21.648000717163086,-8.79800033569336 C21.648000717163086,-8.79800033569336 21.899999618530273,-45.80699920654297 21.899999618530273,-45.80699920654297" fill="#000000"></path></mask><clippath id="bkmrk--6"><path clip-rule="nonzero" d=" M21.899999618530273,-45.80699920654297 C21.899999618530273,-45.80699920654297 -10.57800006866455,-36.2400016784668 -10.57800006866455,-36.2400016784668 C-10.57800006866455,-36.2400016784668 20.641000747680664,-6.5320000648498535 20.641000747680664,-6.5320000648498535 C20.641000747680664,-6.5320000648498535 21.899999618530273,-45.80699920654297 21.899999618530273,-45.80699920654297" fill="#ffffff"></path></clippath></defs><g clip-path="url(#__lottie_element_6236)"><g class="lottie-thumbs-up" mask="url(#__lottie_element_6240)"><g><path></path></g></g><g class="lottie-thumbs-up" mask="url(#__lottie_element_6246)"><g><path></path></g></g><g class="lottie-thumbs-up" clip-path="url(#__lottie_element_6248)"><g><path></path></g></g><g class="lottie-thumbs-up" opacity="1" transform="matrix(0.943097710609436,0,0,0.943097710609436,49.22163009643555,46.75019836425781)"><g opacity="1" transform="matrix(4.239999771118164,0,0,4.239999771118164,0,0)"><path d=" M-2.865000009536743,-2.0399999618530273 C-2.865000009536743,-2.0399999618530273 -2.865000009536743,6.210000038146973 -2.865000009536743,6.210000038146973 C-2.865000009536743,6.210000038146973 -2.865000009536743,0.33500000834465027 -2.865000009536743,0.33500000834465027 C-2.865000009536743,0.33500000834465027 -2.865000009536743,-1.0190000534057617 -2.865000009536743,-1.0190000534057617 C-2.865000009536743,-1.0190000534057617 -2.865000009536743,-2.0399999618530273 -2.865000009536743,-2.0399999618530273z M-8.385000228881836,7.564000129699707 C-8.010000228881836,7.925000190734863 -7.559000015258789,8.105999946594238 -7.031000137329102,8.105999946594238 C-7.031000137329102,8.105999946594238 -4.677000045776367,8.105999946594238 -4.677000045776367,8.105999946594238 C-4.677000045776367,8.105999946594238 -4.677000045776367,6.210000038146973 -4.677000045776367,6.210000038146973 C-4.677000045776367,6.210000038146973 -7.031000137329102,6.210000038146973 -7.031000137329102,6.210000038146973 C-7.031000137329102,6.210000038146973 -7.031000137329102,-1.0190000534057617 -7.031000137329102,-1.0190000534057617 C-7.031000137329102,-1.0190000534057617 -4.677000045776367,-1.0190000534057617 -4.677000045776367,-1.0190000534057617 C-4.677000045776367,-1.0190000534057617 -4.677000045776367,-2.9149999618530273 -4.677000045776367,-2.9149999618530273 C-4.677000045776367,-2.9149999618530273 -7.031000137329102,-2.9149999618530273 -7.031000137329102,-2.9149999618530273 C-7.559000015258789,-2.9149999618530273 -8.010000228881836,-2.7279999256134033 -8.385000228881836,-2.3529999256134033 C-8.746000289916992,-1.9919999837875366 -8.927000045776367,-1.5470000505447388 -8.927000045776367,-1.0190000534057617 C-8.927000045776367,-1.0190000534057617 -8.927000045776367,6.210000038146973 -8.927000045776367,6.210000038146973 C-8.927000045776367,6.73799991607666 -8.746000289916992,7.189000129699707 -8.385000228881836,7.564000129699707z M-2.865000009536743,6.210000038146973 C-2.865000009536743,6.210000038146973 -2.865000009536743,-2.0399999618530273 -2.865000009536743,-2.0399999618530273 C-2.865000009536743,-2.0399999618530273 0.4480000138282776,-5.353000164031982 0.4480000138282776,-5.353000164031982 C0.4480000138282776,-5.353000164031982 -0.6150000095367432,-1.0190000534057617 -0.6150000095367432,-1.0190000534057617 C-0.6150000095367432,-1.0190000534057617 7.010000228881836,-1.0190000534057617 7.010000228881836,-1.0190000534057617 C7.010000228881836,-1.0190000534057617 7.010000228881836,0.33500000834465027 7.010000228881836,0.33500000834465027 C7.010000228881836,0.33500000834465027 4.510000228881836,6.210000038146973 4.510000228881836,6.210000038146973 C4.510000228881836,6.210000038146973 -2.865000009536743,6.210000038146973 -2.865000009536743,6.210000038146973z M8.343999862670898,-2.3320000171661377 C7.968999862670898,-2.7209999561309814 7.531000137329102,-2.9149999618530273 7.031000137329102,-2.9149999618530273 C7.031000137329102,-2.9149999618530273 1.7400000095367432,-2.9149999618530273 1.7400000095367432,-2.9149999618530273 C1.7400000095367432,-2.9149999618530273 2.615000009536743,-6.374000072479248 2.615000009536743,-6.374000072479248 C2.697999954223633,-6.692999839782715 2.6700000762939453,-6.998000144958496 2.5309998989105225,-7.289999961853027 C2.3919999599456787,-7.581999778747559 2.177000045776367,-7.803999900817871 1.8849999904632568,-7.956999778747559 C1.5800000429153442,-8.095999717712402 1.2599999904632568,-8.137999534606934 0.9269999861717224,-8.081999778747559 C0.6079999804496765,-8.039999961853027 0.33000001311302185,-7.894000053405762 0.09399999678134918,-7.644000053405762 C0.09399999678134918,-7.644000053405762 -4.677000045776367,-2.9149999618530273 -4.677000045776367,-2.9149999618530273 C-4.677000045776367,-2.9149999618530273 -4.677000045776367,8.105999946594238 -4.677000045776367,8.105999946594238 C-4.677000045776367,8.105999946594238 4.510000228881836,8.105999946594238 4.510000228881836,8.105999946594238 C4.870999813079834,8.105999946594238 5.218999862670898,7.99399995803833 5.552000045776367,7.771999835968018 C5.885000228881836,7.550000190734863 6.120999813079834,7.28000020980835 6.260000228881836,6.960000038146973 C6.260000228881836,6.960000038146973 8.802000045776367,1.0010000467300415 8.802000045776367,1.0010000467300415 C8.829999923706055,0.9039999842643738 8.857000350952148,0.800000011920929 8.885000228881836,0.6890000104904175 C8.913000106811523,0.5640000104904175 8.927000045776367,0.44600000977516174 8.927000045776367,0.33500000834465027 C8.927000045776367,0.33500000834465027 8.927000045776367,-1.0190000534057617 8.927000045776367,-1.0190000534057617 C8.927000045776367,-1.5190000534057617 8.732999801635742,-1.9570000171661377 8.343999862670898,-2.3320000171661377z" fill="rgb(31,31,31)" fill-opacity="1"></path></g></g></g></svg></div><button aria-controls="feedback-form-54" aria-label="Bad response" aria-pressed="false" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger icon-button mat-unthemed"></button><div _ngcontent-ng-c2790744336="" class="thumb-animation" hidden="" lottie-animation=""><svg height="96" preserveaspectratio="xMidYMid meet" viewbox="0 0 96 96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><clippath id="bkmrk--7"><rect height="96" width="96" x="0" y="0"></rect></clippath><mask id="bkmrk--8"><rect fill="#ffffff" height="96" width="96"></rect><path clip-rule="nonzero" d=" M20.823999404907227,-50.45800018310547 C20.823999404907227,-50.45800018310547 -18.42799949645996,-40.75899887084961 -18.42799949645996,-40.75899887084961 C-18.42799949645996,-40.75899887084961 -20.881999969482422,-11.439000129699707 -20.881999969482422,-11.439000129699707 C-20.881999969482422,-11.439000129699707 13.111000061035156,-16.22100067138672 13.111000061035156,-16.22100067138672 C13.111000061035156,-16.22100067138672 20.823999404907227,-50.45800018310547 20.823999404907227,-50.45800018310547" fill="#000000"></path></mask></defs><g clip-path="url(#__lottie_element_6250)"><g class="lottie-thumbs-down" mask="url(#__lottie_element_6254)"><g><path></path></g></g><g class="lottie-thumbs-down"><g><path></path></g></g><g class="lottie-thumbs-down" opacity="1" transform="matrix(-0.9419913291931152,0,0,-0.9419913291931152,46.50027084350586,49.44205856323242)"><g opacity="1" transform="matrix(4.239999771118164,0,0,4.239999771118164,0,0)"><path d=" M-2.865000009536743,-2.0399999618530273 C-2.865000009536743,-2.0399999618530273 -2.865000009536743,6.210000038146973 -2.865000009536743,6.210000038146973 C-2.865000009536743,6.210000038146973 -2.865000009536743,0.33500000834465027 -2.865000009536743,0.33500000834465027 C-2.865000009536743,0.33500000834465027 -2.865000009536743,-1.0190000534057617 -2.865000009536743,-1.0190000534057617 C-2.865000009536743,-1.0190000534057617 -2.865000009536743,-2.0399999618530273 -2.865000009536743,-2.0399999618530273z M-8.385000228881836,7.564000129699707 C-8.010000228881836,7.925000190734863 -7.559000015258789,8.105999946594238 -7.031000137329102,8.105999946594238 C-7.031000137329102,8.105999946594238 -4.677000045776367,8.105999946594238 -4.677000045776367,8.105999946594238 C-4.677000045776367,8.105999946594238 -4.677000045776367,6.210000038146973 -4.677000045776367,6.210000038146973 C-4.677000045776367,6.210000038146973 -7.031000137329102,6.210000038146973 -7.031000137329102,6.210000038146973 C-7.031000137329102,6.210000038146973 -7.031000137329102,-1.0190000534057617 -7.031000137329102,-1.0190000534057617 C-7.031000137329102,-1.0190000534057617 -4.677000045776367,-1.0190000534057617 -4.677000045776367,-1.0190000534057617 C-4.677000045776367,-1.0190000534057617 -4.677000045776367,-2.9149999618530273 -4.677000045776367,-2.9149999618530273 C-4.677000045776367,-2.9149999618530273 -7.031000137329102,-2.9149999618530273 -7.031000137329102,-2.9149999618530273 C-7.559000015258789,-2.9149999618530273 -8.010000228881836,-2.7279999256134033 -8.385000228881836,-2.3529999256134033 C-8.746000289916992,-1.9919999837875366 -8.927000045776367,-1.5470000505447388 -8.927000045776367,-1.0190000534057617 C-8.927000045776367,-1.0190000534057617 -8.927000045776367,6.210000038146973 -8.927000045776367,6.210000038146973 C-8.927000045776367,6.73799991607666 -8.746000289916992,7.189000129699707 -8.385000228881836,7.564000129699707z M-2.865000009536743,6.210000038146973 C-2.865000009536743,6.210000038146973 -2.865000009536743,-2.0399999618530273 -2.865000009536743,-2.0399999618530273 C-2.865000009536743,-2.0399999618530273 0.4480000138282776,-5.353000164031982 0.4480000138282776,-5.353000164031982 C0.4480000138282776,-5.353000164031982 -0.6150000095367432,-1.0190000534057617 -0.6150000095367432,-1.0190000534057617 C-0.6150000095367432,-1.0190000534057617 7.010000228881836,-1.0190000534057617 7.010000228881836,-1.0190000534057617 C7.010000228881836,-1.0190000534057617 7.010000228881836,0.33500000834465027 7.010000228881836,0.33500000834465027 C7.010000228881836,0.33500000834465027 4.510000228881836,6.210000038146973 4.510000228881836,6.210000038146973 C4.510000228881836,6.210000038146973 -2.865000009536743,6.210000038146973 -2.865000009536743,6.210000038146973z M8.343999862670898,-2.3320000171661377 C7.968999862670898,-2.7209999561309814 7.531000137329102,-2.9149999618530273 7.031000137329102,-2.9149999618530273 C7.031000137329102,-2.9149999618530273 1.7400000095367432,-2.9149999618530273 1.7400000095367432,-2.9149999618530273 C1.7400000095367432,-2.9149999618530273 2.615000009536743,-6.374000072479248 2.615000009536743,-6.374000072479248 C2.697999954223633,-6.692999839782715 2.6700000762939453,-6.998000144958496 2.5309998989105225,-7.289999961853027 C2.3919999599456787,-7.581999778747559 2.177000045776367,-7.803999900817871 1.8849999904632568,-7.956999778747559 C1.5800000429153442,-8.095999717712402 1.2599999904632568,-8.137999534606934 0.9269999861717224,-8.081999778747559 C0.6079999804496765,-8.039999961853027 0.33000001311302185,-7.894000053405762 0.09399999678134918,-7.644000053405762 C0.09399999678134918,-7.644000053405762 -4.677000045776367,-2.9149999618530273 -4.677000045776367,-2.9149999618530273 C-4.677000045776367,-2.9149999618530273 -4.677000045776367,8.105999946594238 -4.677000045776367,8.105999946594238 C-4.677000045776367,8.105999946594238 4.510000228881836,8.105999946594238 4.510000228881836,8.105999946594238 C4.870999813079834,8.105999946594238 5.218999862670898,7.99399995803833 5.552000045776367,7.771999835968018 C5.885000228881836,7.550000190734863 6.120999813079834,7.28000020980835 6.260000228881836,6.960000038146973 C6.260000228881836,6.960000038146973 8.802000045776367,1.0010000467300415 8.802000045776367,1.0010000467300415 C8.829999923706055,0.9039999842643738 8.857000350952148,0.800000011920929 8.885000228881836,0.6890000104904175 C8.913000106811523,0.5640000104904175 8.927000045776367,0.44600000977516174 8.927000045776367,0.33500000834465027 C8.927000045776367,0.33500000834465027 8.927000045776367,-1.0190000534057617 8.927000045776367,-1.0190000534057617 C8.927000045776367,-1.5190000534057617 8.732999801635742,-1.9570000171661377 8.343999862670898,-2.3320000171661377z" fill="rgb(31,31,31)" fill-opacity="1"></path></g></g></g></svg></div>  
</div></div></div></div></div></div></div>

# Ticket Offence Items

<p class="callout info">**Ticket Offence Items** define the specific violations (e.g., "Parked with No Proof of Payment," "Expired Meter") that can be issued within OPSCOM. This feature allows administrators to configure fine amounts, discounts, and specific behaviors for each offence, ensuring accurate and consistent enforcement across both web and handheld platforms.</p>

### Using this Feature

1. Hover over **System Configuration,** then **Violations,** and click **Manage Ticket Offence Items**.
2. The **Manage Ticket Offence Items** page opens. This page provides comprehensive tools to add, edit, and configure individual offence items.

##### <span style="text-decoration: underline;">Adding a New Offence Item</span>

1. In the top left box, select the **Ticket Category** (e.g., "Private Property") you wish to add an offence item to, or choose **Unassigned Offence Items**.
2. Click **Add New Offence Item**.
3. Fill out the following fields: 
    - Enter the **Violation Type Description** (e.g., "Parked With No Proof Of Payment").
    - Select the **Ticket Category** it belongs to (e.g., "Private Property").
    - Enter a **Key**. This optional field indicates specific tracking codes for violations (e.g., internal audit codes).
    - Enter a **By-Law code** This optional field is used by municipalities to link violations to specific by-laws when sending them to court for collections. It is a text field that accepts up to 20 alphanumeric characters.
    - Enable the **Administrative Fee** if required. (More about this below)
    - **Fine Amount, Adjustable Fine Amount,** and **Discount Settings** are covered below.
4. Click **Save New Offence Item** when complete.

##### <span style="text-decoration: underline;">Setting the Fine Amount and Discount</span>

- **Fine Amount**: Set the base fine amount (e.g., "$30.00").
- **Apply Discount**: Enable this checkbox if you wish to offer a discount for early payment. 
    - **Discount Amount**: Enter the amount of the discount (e.g., "$10.00").
    - **Discount Days**: Set the number of days within which the discount applies (e.g., "14" days).
    - **Example**: If the fine is $30.00, and a discount of $10.00 is applied if paid within 14 days, the collected fine will be $20.00. After 14 days, the discount does not apply, and the full $30.00 is due.

5. Click **Save Ticket Offence Item** to save this configuration. You will be returned to the list view with your new offence listed under its Ticket Category.

##### <span style="text-decoration: underline;">Is This Fine Amount Adjustable?</span>

<p class="callout info">This can be useful for scenarios such as repeat offenders or multiple offences. Officers can, at their discretion, increase the ticket amount (e.g., for repeat violations) or reduce it (e.g., when issuing multiple violations for less than the combined full amount), in accordance with your organization's business rules.</p>

Enable the **Adjust Fine Amount** checkbox in the ticket configuration screen:

- **Default - (Off)**: By default, this feature is turned off. The fine amount will appear on handheld units as a grey, non-editable figure.
- **Enabled - (On)**: When turned on, the fine amount will appear in black text on handheld units, allowing patrol officers to edit the amount.

##### <span style="text-decoration: underline;">Administration Fees</span>

<p class="callout info">Admin Fees are useful for charges like Conviction Fees or Booting Fees. Offence items designated as Administration Fees **do not show on handheld units**. They are only visible on the admin interface, ensuring field officers don't issue them directly.</p>

You can designate an offence item as an **Administration Fee** by selecting the **Administrative Fee** checkbox.

- **Configuration Example**: To set up a $20.00 administration fee for removing a boot from a vehicle: 
    1. Toggle the **Administration Fee** checkbox **On**. This will also prevent the offence item from being synced with handhelds.
    2. Set the **Fine Amount** to "$20.00".
    3. Click **Save Ticket Offence Item**.

##### <span style="text-decoration: underline;">Editing, Deleting, and Archiving Offence Items</span>

- **Editing:** Click the **Pencil icon** next to the Offence Item and make your changes. Click the **Update Ticket Offence Item** button to confirm.
- **Deletion**: Ticket Offence Items can only be **deleted** if there are **no violations** already written for that particular offence item.
- **Archiving**: Once a violation has been issued using a specific Offence Item, that item can no longer be deleted. Instead, it will be **archived** to preserve the integrity of any data associated with it, ensuring historical reports remain accurate.

---

### <span style="color: rgb(22, 145, 121);">Best Practices &amp; Considerations</span>

- <span style="color: rgb(22, 145, 121);">**Clear and Specific Offence Names**: Use descriptive names for offence items to avoid ambiguity (e.g., "No Parking - Fire Lane" vs. "Parking Violation").</span>
- <span style="color: rgb(22, 145, 121);">**Fine and Discount Strategy**: Carefully define your fine amounts and discount structures to encourage timely payment and align with your enforcement policies.</span>
- <span style="color: rgb(22, 145, 121);">**Handheld Visibility Management**: Strategically decide which offence items are visible on handhelds. Keep the list concise for field officers, moving less common or admin-only fees to the "Administration Fees" category.</span>
- <span style="color: rgb(22, 145, 121);">**By-Law Code Accuracy**: For municipalities, ensure the By-Law Code is accurately entered and consistent with legal requirements for court collections.</span>
- <span style="color: rgb(22, 145, 121);">[**Ordering Violation Types**:](https://opscom.wiki/books/setup-configuration-for-admins/page/sort-violations-for-quick-access/edit) The system sorts the list of violation types alphanumerically. To achieve a specific custom sort order on both admin interfaces and handheld units, you can prefix the **Offence Item Name** with numbers or spaces. (A space is considered higher than an 'A'.)</span>
    - <span style="color: rgb(22, 145, 121);">**Example**: `Zebra Offence`, `Test Offence`, `A Test Offence`</span>
- <span style="color: rgb(22, 145, 121);">Leverage "Adjust Fine Amount" with clear business rules for officers, and properly categorize "Violation Applies To" (Vehicle vs. User) to fit various enforcement scenarios.</span>

---

### Related Videos

<iframe class="youtube-player conf-macro output-block" data-hasbody="false" data-macro-id="eef7cfc5-3dcd-40b8-8e05-6477cabf8756" data-macro-name="widget" frameborder="0" height="321" src="https://www.youtube.com/embed/heFG8_ebjQ8?wmode=opaque" style="width: 642px; height: 321px;" width="642"></iframe>

# Sort Violations for Quick Access

<p class="callout info">OPSCOM allows administrators to customize the display order of **Ticket Offence Items** (violations) for quicker access, especially useful for frequently used offences. By strategically adding spaces to the beginning of offence names, you can control their sorting order on both the admin interface and handheld devices, improving efficiency for enforcement officers and data entry personnel.</p>

When managing a long list of violation offence items, it can be time-consuming to scroll and find specific offences. The challenge is to reorder this list for quick access, ensuring the most commonly used offences appear at the top.

The system sorts lists alphanumerically. We can take advantage of the fact that a **space character ()** comes before all alphanumeric characters in the ASCII character table. By prefixing a violation name with one or more spaces, you can force it to appear higher in the sorted list.

**Example of Sorting with Spaces:**

- `Zebra Offence` (two spaces, sorts first)
- `Test Offence` (one space, sorts second)
- `Apple Offence` (no space, sorts third)
- `Bottle Offence` (no space, sorts fourth)

Let's walk through a practical example of reordering a list of violations.

1. Hover over **System Configuration,** then **Violations,** and click **Manage Ticket Offence Items**.
2. In this example, we will select **Private Property** as the ticket category. This will display a list of violations categorized under "Private Property."

##### <span style="text-decoration: underline;">Reordering Violations - An Example</span>

We want to reorder the list so that "Parked in No Parking Area" lists first, "Parked Blocking Fire Hydrant" lists second, and the rest of the violations list in alphabetical order after that.

1. **Modify "Parked in No Parking Area"**:
    
    
    - Click on **Parked in No Parking Area** to select it. The screen will refresh with the entry information for the violation.
    - Add a **single space** to the very beginning of the **Violation Type Description** field.
    - Click **Save Violation Type**.
    - *Result*: The list will now show " Parked in No Parking Area" (with the space) as the first item.
2. **Modify "Parked Blocking Fire Hydrant"**:
    
    
    - Next, select **Parked Blocking Fire Hydrant**.
    - Add a **single space** to the beginning of its **Violation Type Description**.
    - Save the violation type.
    - *Result*: The listing will change again. However, since both now have one space, " Parked Blocking Fire Hydrant" will appear *before* " Parked in No Parking Area" due to alphabetical sorting of the rest of the name.
3. **Adjusting Order with Multiple Spaces**:
    
    
    - To ensure "Parked in No Parking Area" appears first and "Parked Blocking Fire Hydrant" second, we need to use a different number of spaces.
    - Select **Parked in No Parking Area** again.
    - Add a **second space** to the beginning of its **Violation Type Description** (so it has two spaces: `  Parked in No Parking Area`).
    - Save the violation type.
    - *Result*: The list on the left now shows " Parked in No Parking Area" in the first position, followed by " Parked Blocking Fire Hydrant" in the second position, and then the rest of the violations in alphabetical order.

---

### <span style="color: rgb(22, 145, 121);">Best Practices &amp; Considerations</span>

- <span style="color: rgb(22, 145, 121);">**Consistency is Key**: If you start using spaces to sort, apply the method consistently across all relevant lists (e.g., if you sort one category of offences, consider sorting others for a uniform experience).</span>
- <span style="color: rgb(22, 145, 121);">**Minimal Spaces**: Use the fewest number of spaces necessary to achieve your desired order. For example, if you only need one item at the very top, one space is sufficient. If you need two items, one gets two spaces, the other gets one.</span>
- <span style="color: rgb(22, 145, 121);">**Handheld Impact**: Remember that this sorting method affects the display order on both the admin interface and handheld units, directly impacting the efficiency of your enforcement officers in the field.</span>
- <span style="color: rgb(22, 145, 121);">**Documentation**: If multiple administrators manage ticket offence items, document your sorting strategy internally to maintain consistency and prevent accidental reordering.</span>
- <span style="color: rgb(22, 145, 121);">**No Wildcards**: This method relies on actual space characters, not wildcards (`*`) or other special characters that might not function as expected in sort orders.</span>

# Handhelds Devices Settings (Handheld Commons)

<p class="callout info">The **Handhelds Devices** section in OPSCOM allows administrators to manage and configure handheld devices used for enforcement and data collection. This includes registering new devices, pushing messages, and updating device settings, ensuring seamless operation for field personnel and accurate data synchronization.</p>

### Setup and Configuration

In order to use the handheld as a ticket writer, you will need to have the following permission set:

- **Display as Ticket Writer**: Ability to be a ticket writer on the Handheld Tablets or on the system.

This setting comes with the role Patrol Officer by default. To check if this role is set up in your system:

- Go to **System Configuration**, **Admin Management**, and click **Manage Roles**.
- Select the role for **Patrol Officer** and click on the tab for violations.
- You should see the box labeled **Display as Ticket Writer** checked.

[For more information on managing roles, click here!](https://opscom.wiki/books/setup-configuration-for-admins/page/manage-roles-and-permissions)

<p class="callout warning">Before accessing a handheld device for the first time, new admin users are required to log in through the online admin portal and complete their initial password reset.</p>

### Using this Feature

1. Click **Tools**, then **Handhelds Devices**. Alternatively, you can access this on the **Violations** menu as well.
2. The **Handhelds - Common Settings** screen appears, where you can manage various aspects of your handheld fleet. From here, you can edit settings such as ticket due dates, customize ticket footers, view device information, and add or manage individual handheld units.

##### <span style="text-decoration: underline;">Adding a New Device</span>

When adding a new handheld device, the process involves both the device itself and the OPSCOM system configuration.

1. **Install Software**: Start by installing the OPSCOM enforcement app on the handheld device.
2. **Obtain UUID**: After the first login attempt on the device, you'll receive a notice indicating the device isn't registered. This message will display a **UUID** (Universally Unique Identifier) number. This is a 16-digit alphanumeric code typically found under your login screen on the device.
3. **Register Device in OPSCOM**: 
    - Once on the **Handhelds - Common Settings** page in the admin portal, click **Add New Device**.
    - A new screen will open. You must add the following information: 
        - **UUID**: Enter the UUID obtained from the handheld device.

<p class="callout warning">You will need to include all characters in the UUID, **including dashes between the groups of characters. *Some UUIDs do not have dashes.***</p>

- - - **Server to Sync with**: **Always start by selecting the Production Server.** This is a critical step for initial device registration, regardless of whether the device will eventually be used for testing on a Preview server (explained further in "[Production Server First (Crucial)](https://opscom.wiki/link/191#bkmrk-production-server-fi)" under Best Practices &amp; Considerations).
        - **Name**: Enter a descriptive **name** to easily identify this device (e.g., "Patrol Unit 1," "Enforcement Officer John's Device").
        - Ensure the **Enabled** checkbox at the top of the entry form is selected.
    - Click **Add Device** once all information is in place.

##### <span style="text-decoration: underline;">Pushing Messages</span>

You can send messages directly to your configured handheld units:

1. On the **Handhelds - Common Settings** screen, click the **Push Message** button.
2. Follow the prompts to compose and send your message to the selected devices.

##### <span style="text-decoration: underline;">Updating Device Data</span>

To modify settings for an existing handheld device:

1. On the **Handhelds - Common Settings** screen, click on the **device name** you wish to update. This will open a drop-down list of editable settings.
2. Make your desired changes to the device's configuration.
3. Once finished, ensure you click **Process Updates** to save and apply your changes to the device.

<p class="callout info">To edit the ticket footer, you must have the permission level and role of Primary Admin.</p>

---

### <span style="color: rgb(22, 145, 121);">Best Practices &amp; Considerations</span>

- <span style="color: rgb(22, 145, 121);">**Production Server First (Crucial)**:</span>
    - <span style="color: rgb(22, 145, 121);">**Important Note**: Due to the underlying logic of the Handheld Common tool, you **must always register a new handheld unit on the Production admin portal first**, even if its ultimate purpose is for testing on a Preview site.</span>
    - <span style="color: rgb(22, 145, 121);">The system initially connects to the production server, then references the `PA Common/handheld assignment` table (which is written from production) to determine if a unit is registered for Production or Preview. This ensures the correct routing is established in the database.</span>
    - <span style="color: rgb(22, 145, 121);">This initial production-side registration is also why you can refresh preview sites without losing the handheld units configured for them.</span>
- <span style="color: rgb(22, 145, 121);">**Adding a Handheld Unit to Preview for Testing**:</span>
    1. <span style="color: rgb(22, 145, 121);">Start by **refreshing your preview** site to ensure it’s using the latest data. For details, see **[Create or Refresh a Preview Space](https://opscom.wiki/books/setup-configuration-for-admins/page/create-or-refresh-a-preview-space)**.</span>
    2. <span style="color: rgb(22, 145, 121);">First, add the handheld unit to **Handhelds - Common Settings** on the **production** admin portal as described in "Adding a New Device," but select your **Preview Server** in the **Server to Sync with** field. This sets the proper database route.</span>
    3. <span style="color: rgb(22, 145, 121);">Next, navigate to the **preview** admin portal and enter the exact same device information into its **Handhelds - Common Settings** section.</span>
    4. <span style="color: rgb(22, 145, 121);">Finally, perform a **reinstallation of the OPSCOM enforcement application** on the handheld device itself. This reinstallation allows the handheld to pick up the newly set path to the preview server.</span>
- <span style="color: rgb(22, 145, 121);">**Switching Between Production and Preview**:</span>
    - <span style="color: rgb(22, 145, 121);">Once a handheld entry exists in both Production (configured for Preview sync) and Preview, you can generally switch between environments by re-pointing the **Sync With** setting on both the Production and Preview admin portals to your preferred path.</span>
    - <span style="color: rgb(22, 145, 121);">**However, remember that you must perform a reinstallation of the software on the handheld unit each time you change the synchronization path in the system** for the handheld device itself to update with the selected path.</span>
- <span style="color: rgb(22, 145, 121);">**UUID Accuracy**: Ensure the UUID is entered precisely, as any error will prevent the device from connecting.</span>
- <span style="color: rgb(22, 145, 121);">**Descriptive Naming**: Use clear, identifiable names for your handheld devices to simplify management and troubleshooting.</span>