# Payments Configuration

# Manage Deposit Types

<p class="callout info">**Deposit Types** allow administrators to define and manage various categories of deposits (e.g., for permits, equipment, or specific services). This feature is essential for accurately tracking refundable amounts, providing clear financial oversight, and ensuring proper accounting for deposited funds within the system.</p>

### Using this Feature

The **Manage Deposits** page provides a straightforward interface to add, edit, and view the usage of various deposit types.

1. Hover over **System Configuration,** then **Payments,** and click **Manage Deposit Types**.

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

1. Click **Add Deposit Type**.
2. Fill out the information as needed: 
    - **Label**: This is the name that will be used to identify the deposit type (e.g., "Permit Deposit," "Key Fob Deposit").
    - **Placeholder Text**: This field is optional. It provides a prompt or sample information that will appear in the deposit information text field when creating a deposit record.
    - **Flags**: This toggle controls the ability to edit the **Assignable Text** field in the resulting active deposit record. This text will appear in the user's profile associated with the deposit.
    - **Amount**: The amount that the deposit will cost.
    - **Active checkbox:** This determines if the deposit is currently available to be assigned.
3. Click **Save Changes**.

##### <span style="text-decoration: underline;">Editing a Deposit Type</span>

1. Locate the deposit type and click the **Edit** button next to it.
2. Make any necessary changes to the fields.
3. Click **Save Changes**.

##### <span style="text-decoration: underline;">Deleting a Deposit Type</span>

1\. If no records are associated with this deposit you can click the **Delete** button.

---

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

- <span style="color: rgb(22, 145, 121);">**Clear Labeling**: Use descriptive labels for your deposit types (e.g., "Annual Permit Deposit," "Visitor Pass Deposit") to ensure clarity for both administrators and users.</span>
- <span style="color: rgb(22, 145, 121);">**Placeholder Text Utility**: Utilize the **Placeholder Text** to provide clear instructions or examples for administrators when entering deposit information.</span>
- <span style="color: rgb(22, 145, 121);">**Understanding "Flags"**: The "Flags" setting for `Assignable Text` can be useful for adding specific, customizable notes to individual deposit records on user profiles, allowing for unique details per transaction.</span>
- **Financial Reconciliation**: Accurately tracking deposit types is crucial for financial reconciliation and managing refundable amounts.

# New Page

<p class="callout info">Preview Spaces in OPSCOM provide clients and support staff with a secure, isolated testing environment that mirrors your live production system's data. These spaces are invaluable for testing new features, staging changes, or conducting training without impacting your operational system, ensuring a safe sandbox for development and learning.</p>


### Setup &amp; Configuration

Preview spaces are typically created on demand. Your production/live OPSCOM system is used to either create a new preview space or refresh an existing one with current or historical data.

##### <span style="text-decoration: underline;">Creating or Refreshing a Preview Space</span>

1. Click **Tools,** then **Database to Preview**.

From this page, you have two options for refreshing your preview database:

- **For Up-to-Date Information**: 
    1. Select **Backup Production Database**.
    2. Wait for the backup process to complete.
    3. Click the **Refresh Preview Database** button.
- **For an Older Backup**: 
    1. Select the specific date of the backup you wish to restore the preview database to.
    2. Click the **Refresh Preview Database** button.

<p class="callout warning">It may take a few minutes to refresh the database. Generally, a database is refreshed in 1-2 minutes, but it can take up to 15 minutes depending on the size of your database. A message will be displayed along the top of the screen notifying you when the database refresh is complete.</p>

Once the preview database has been refreshed, your preview system will automatically be created or updated. You can access the preview system by adding ".preview" before "OPSCOM.com" in your browser's address bar. For example, if your production space is `https://tomahawku.OPSCOM.com`, your preview space will be `https://tomahawku.preview.OPSCOM.com`.

---

### Using this Feature

##### <span style="text-decoration: underline;">Accessing Your Preview Space</span>

As an OPSCOM client, you can access your preview space directly by simply adding the ".preview." suffix to your subdomain name. For instance, if your production site is located at `https://yourorganization.OPSCOM.com`, your preview space can be found at `https://yourorganization.preview.OPSCOM.com`.

##### <span style="text-decoration: underline;">Preview Space Banner</span>

To clearly distinguish a preview space from a live production system, all preview spaces are denoted with an **amber warning banner** displayed prominently at the top of the page.

##### <span style="text-decoration: underline;">Locking and Unlocking Database Reset Option</span>

You can now lock and unlock preview and development OPSCOM databases to prevent them from being reset or refreshed accidentally.

1. On your preview site, click **Tools**, then **Reset Database**.
2. Toggle the lock/unlock setting as needed. 
    - You will be prompted to provide a **reason** for locking or unlocking the database.
    - A history of the previous 10 lock/unlock actions will be displayed below for your reference.

This feature allows you to ensure that if you are actively working on a preview/development system and do **NOT** wish for your changes to be reset or lost, you can place a lock. This lock notifies others attempting to refresh the database that a reset is not desired.

---

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

- <span style="color: rgb(22, 145, 121);">**Testing and Training Benefits**: Preview spaces are extremely useful for testing and training purposes. They allow you to work with a copy of your live database, providing real data for exercises without any risk of affecting your production system. The database can be manually reset at any time, allowing you to "erase" training data and start testing scenarios from scratch.</span>
- <span style="color: rgb(22, 145, 121);">**Daily Data Backups**: Production/live data is backed up daily at **2 AM EST** and is available to push to the testing environment at any time. This means if you perform a refresh of your preview site, it will pull data captured the night before. This operation is specifically for providing relevant data for testing and preview during training or similar efforts and is separate from normal system backup procedures.</span>
- <span style="color: rgb(22, 145, 121);">**Automatic Deletion of Inactive Spaces**: Preview sites are automatically deleted after **7 days of no login activity**.</span>
    - <span style="color: rgb(22, 145, 121);">If you require a preview site for an extended period, please contact OPSCOM support staff, and an expiry date can be set.</span>
- <span style="color: rgb(22, 145, 121);">**Email Notifications are Suppressed**: No Emails Sent from Preview/Testing - All email notifications that would normally be sent from the server are captured and suppressed in preview/testing environments. Therefore, any email notifications generated within your preview space will **not** reach clients or external recipients. This is a deliberate security measure to prevent accidental communication from a non-production environment.</span>

# Managing Payment Types

<p class="callout info">**Managing Payment Types** allows administrators to control which payment methods are available throughout the system. This comprehensive control enables you to define new payment options, assign them to specific user types (e.g., Staff, Students, Public), and configure their usage for subscriptions or guest payments, thereby streamlining transactions and ensuring alignment with your organization's financial policies.</p>

### Using this Feature

The **Payment Types** screen gives you a comprehensive interface to create, edit, and view details about different payment methods available in OPSCOM.

1. Go to **System Configuration,** then **Payments,** and click **$ Setup Payment Types**.

##### <span style="text-decoration: underline;">Adding Payment Types</span>

<p class="callout success">**Use Case -** For this example, we will setup a Payment type that will use the provider Always Successful. This will allow payments to immediately be flagged as fully processed with no intervention of any admin. This is often used for things like Payroll deduction. For example, you want your users to be able to purchase a permit through Payroll deduction that will immediately be valid upon checkout. The actual payments will take place through payroll and have nothing to do with OPSCOM.</p>

1. Click the **Add Type** button.
2. The list of **Providers** is hard coded and controlled by Tomahawk. You will not be able to change this picklist. The tooltip below the provider will tell you what each provider means.
3. Pick **Always Successful** for this example.
4. Click **Next Step.**
5. Provide a **Type Name.**
6. Choose the **User Types** this will be available to.
7. On the **Settings** tab, Enable the checkboxes as you required.
8. In the section **Allowed Payment Types**, you will see any payment types that are currently active first, then a list of inactive payment types after.
9. Click **Update Payment Type**.

##### <span style="text-decoration: underline;">Hosted Payment Providers</span>

The following links will detail the process of setting up a Hosted Payment provider, of which currently support. Click the link matching the payment provider you are adding below and follow the steps outlined on those articles.

- [OpenEdge](https://opscom.wiki/books/the-opscom-admin-portal/page/openedge-hosted-payments): 
    - We need the following credentials to work with OpenEdge;
    - **Auth Key**: a multi-digit string key
    - **Terminal ID**: a 8 digit numeric key
    - **X-Web ID**: a 12 digit numeric key
- [Moneris Checkout](https://opscom.wiki/books/the-opscom-admin-portal/page/moneris-checkout): 
    - We need the following credentials to work with Moneris Checkout;
    - **<span class="legacy-color-text-blue3">store\_id: </span>***store#***<span class="legacy-color-text-blue3">  
        </span>**
    - <span class="legacy-color-text-blue3">**api\_token:** </span>*xxxxxxx*<span class="legacy-color-text-blue3">  
        </span>
    - <span class="legacy-color-text-blue3">**checkout\_id:** </span>*xxxxxxxxStore#*
- [Bambora Checkout](https://opscom.wiki/books/the-opscom-admin-portal/page/bambora-checkout): 
    - We need the following credentials to work with Bambora Checkout (JSBambora): 
        - **Payment Authorization Header:** An alphanumeric passcode
        - **Profile Authorization Header:** An alphanumeric passcode

Once you retrieve the required values from your hosted payment provider of choice, save the credentials securely and contact OPSCOM Support for further instructions.

<p class="callout danger">The information you obtain in the above documentation are **credentials that secure the information exchanged between OPSCOM and the provider.** Please save these in a secure manner, it is important they are stored properly to ensure operational security.</p>

##### <span style="text-decoration: underline;">Extended Payment Information</span>

For each payment type, you can view extended information on the Payment Types screen.

- A **general description** of the payment type.
- An **indication of what the user will be prompted for** when selecting that payment type. For example, in a hosted payment scenario like EdgeExpress, the user might be prompted to enter an email address before being redirected to the payment provider to enter credit card information.
- The number of users associated to this payment type.

There are also three columns on the far right that use an **X** or **checkmark** to indicate specific uses of the payment type:

- **Column 1**: Indicates if this payment type can be used for **guest payments**.
- **Column 2**: Indicates if this payment type can be used for **permit and invoice renewal payments**.
- **Column 3**: Indicates if this payment type can be used for **Text2ParkMe subscriptions**.

##### <span style="text-decoration: underline;">Configuring Payment Types for Subscriptions and Guest Payments</span>

You can fine-tune how specific payment types are used for subscriptions and guest payments.

1. Find the payment type you wish to configure and click the **Pencil icon**.
2. Click the **Settings** tab.
3. Select the items you wish to allow the payment type to be used for (e.g., enable **Text2ParkMe**, **subscriptions to permit renewals**, as well as **guest payments**).
4. Prompt Information can be changed as well. You can enable only an **email address** or **full address information**. Full address info is required when the provider is doing Address Verification using AVS, 3DS or other similar service. This controls what shows up on the **QR Code reservations** screen after the **Payment Type** is selected.
5. Click **Update Payment Type**.

##### <span style="text-decoration: underline;">Processing as an Admin</span>

When processing payments as an administrator, the payment types presented will be split into two categories:

- What the user would be allowed to use for their specific User Type.
- What an administrator can choose (which may include additional options not visible to the user).

---

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

- <span style="color: rgb(22, 145, 121);">**Granular Control**: Leverage User Types to restrict payment methods, ensuring users only see relevant options. For example, you might only allow "Payroll Deduction" for Staff users.</span>
- <span style="color: rgb(22, 145, 121);">**Clear User Experience**: By limiting available payment types based on context or user, you simplify the checkout process and reduce confusion for users.</span>
- <span style="color: rgb(22, 145, 121);">**Refund Alignment**: Ensure that appropriate refund types are linked to their corresponding payment types to facilitate smooth and accurate refund processing.</span>
- <span style="color: rgb(22, 145, 121);">**Subscription Compatibility**: When enabling payment types for subscriptions (recurring billing), verify that the chosen payment gateway provider fully supports recurring transactions.</span>
- <span style="color: rgb(22, 145, 121);">**Regular Review**: Periodically review your payment type configurations and their associated settings to ensure they remain aligned with your organization's financial policies and evolving needs.</span>

# Managing Convenience Fees

<p class="callout info">**Convenience Fees** in OPSCOM allow administrators to add an additional flat-rate charge directly to user payments, managed entirely within the OPSCOM system. This feature provides flexibility to offset processing costs, incentivize certain payment methods, or cover administrative burdens, distinct from any transaction fees imposed by external payment providers.</p>

### Difference Between Transaction Fees and Convenience Fees

It's crucial to understand the distinction between these two types of fees:

- **Transaction Fees**: These are charges applied by your **payment provider** (e.g., credit card processor) for processing a payment. They are independent of OPSCOM's internal settings. Depending on your setup, OPSCOM and end-users may not be directly aware of these fees as they are managed solely by the payment provider.
- **Convenience Fees**: These are additional charges that are **managed and applied directly through OPSCOM**. For example, your OPSCOM system can add a $5 convenience fee onto a payment. This fee amount is visible within OPSCOM and is added to the grand total before being sent to the payment provider.

It is possible for a system to utilize both Convenience Fees (managed by OPSCOM) and Transaction Fees (managed by the payment provider), but recognizing their distinct origins and management is important.

---

### Using this Feature

The **Fees Page** allows you to set up various convenience fees.

<p class="callout warning">You can only use Convenience fees if you have Bambora/Worldline as your payment provider.</p>

##### <span style="text-decoration: underline;">Fee Limitations</span>

Before configuring, understand these limitations:

<div _ngcontent-ng-c1014978951="" class="chat-history-scroll-container" id="bkmrk-applied-once-per-ord"><div _ngcontent-ng-c1014978951="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c1379262811=""><div _ngcontent-ng-c3275733674="" class="response-container ng-tns-c3275733674-70 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c3275733674="" class="presented-response-container ng-tns-c3275733674-70"><div _ngcontent-ng-c3275733674="" class="response-container-content ng-tns-c3275733674-70"><div _ngcontent-ng-c1379262811="" class="response-content ng-tns-c3275733674-70"><div _ngcontent-ng-c2159209055="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">- **Applied Once Per Order**: Fees are applied once per fee type per order. This means if a fee is set for permits, only a single fee is applied to the order, regardless of whether it contains one permit or five permits.
- **Flat Rate Only**: Fees are currently a flat rate. There is no percentage-based fee option at this time.
- **Grand Total Sent**: Fees are not sent to the payment provider as a secondary item. Only the grand total (item price + convenience fee) is sent for processing.

</div></div></div></div></div></div></div></div>##### <span style="text-decoration: underline;">Fee Examples and Setup</span>

<span style="text-decoration: underline;">**Admin Collected Fee for Collecting Cash and Cheques (Deterrent Fee)**</span>

<div _ngcontent-ng-c1014978951="" class="chat-history-scroll-container" id="bkmrk-scenario%3A-the-admini"><div _ngcontent-ng-c1014978951="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c1379262811=""><div _ngcontent-ng-c3275733674="" class="response-container ng-tns-c3275733674-70 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c3275733674="" class="presented-response-container ng-tns-c3275733674-70"><div _ngcontent-ng-c3275733674="" class="response-container-content ng-tns-c3275733674-70"><div _ngcontent-ng-c1379262811="" class="response-content ng-tns-c3275733674-70"><div _ngcontent-ng-c2159209055="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">- **Scenario**: The administrator wants to encourage online payments. A fee is set up as a deterrent when users pay with cash or cheque, covering the increased administrative burden.
- **Setup**: The fee would apply to all item types but only to payment types of **Cash** and **Cheque**.

</div></div></div></div></div></div></div></div><span style="text-decoration: underline;">**Admin Collected Fee for Permits**</span>

<div _ngcontent-ng-c1014978951="" class="chat-history-scroll-container" id="bkmrk-scenario%3A-permits-ar"><div _ngcontent-ng-c1014978951="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c1379262811=""><div _ngcontent-ng-c3275733674="" class="response-container ng-tns-c3275733674-70 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c3275733674="" class="presented-response-container ng-tns-c3275733674-70"><div _ngcontent-ng-c3275733674="" class="response-container-content ng-tns-c3275733674-70"><div _ngcontent-ng-c1379262811="" class="response-content ng-tns-c3275733674-70"><div _ngcontent-ng-c2159209055="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">- **Scenario**: Permits are sent to a third party for enforcement, and that third party charges $0.50 per permit they enforce. The client wishes to pass this cost onto the user.
- **Setup**: The fee would apply to all payment types, but only to **Permits** and **Temp Permits**. The setup would specify `$0.50` as the fee amount.

</div></div></div></div></div></div></div></div><span style="text-decoration: underline;">**Admin Charges a Convenience Fee to Cover an OPSCOM Collected Transaction Fee**</span>

<div _ngcontent-ng-c1014978951="" class="chat-history-scroll-container" id="bkmrk-scenario%3A-there%27s-an"><div _ngcontent-ng-c1014978951="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c1379262811=""><div _ngcontent-ng-c3275733674="" class="response-container ng-tns-c3275733674-70 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c3275733674="" class="presented-response-container ng-tns-c3275733674-70"><div _ngcontent-ng-c3275733674="" class="response-container-content ng-tns-c3275733674-70"><div _ngcontent-ng-c1379262811="" class="response-content ng-tns-c3275733674-70"><div _ngcontent-ng-c2159209055="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">- **Scenario**: There's an agreement with the payment provider that all permits will incur a $2.95 transaction fee paid to OPSCOM. The client still wants to receive the full $150 for a purchased permit, so they set up a convenience fee to cover this cost.
- **Setup**: The convenience fee will be charged when selecting the specific payment type that incurs the $2.95 transaction fee. For example, the setup would apply to the relevant payment provider and define the convenience fee as `$2.95`.

</div></div></div></div></div></div></div></div>**<span style="text-decoration: underline;">Admin Includes the Transaction Fee in the Price of the Item (No Fee Setup in OPSCOM)</span>**

<div _ngcontent-ng-c1014978951="" class="chat-history-scroll-container" id="bkmrk-scenario%3A-an-agreeme"><div _ngcontent-ng-c1014978951="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c1379262811=""><div _ngcontent-ng-c3275733674="" class="response-container ng-tns-c3275733674-70 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c3275733674="" class="presented-response-container ng-tns-c3275733674-70"><div _ngcontent-ng-c3275733674="" class="response-container-content ng-tns-c3275733674-70"><div _ngcontent-ng-c1379262811="" class="response-content ng-tns-c3275733674-70"><div _ngcontent-ng-c2159209055="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr">- **Scenario**: An agreement exists where all permits incur a $2.95 transaction fee paid to OPSCOM. However, the client chooses to *absorb* this fee by increasing the item's price. If a permit costs $150, then $2.95 of that will be sent to OPSCOM, leaving the client with $147.05.
- **Setup**: **There is no specific setup for fees in this scenario within OPSCOM**, as the fee is already embedded in the item's base price. If you want to inform users that a transaction fee is included in the final amount, you will need to update a relevant footer message (e.g., in email templates or on the user portal) stating this.

---

</div></div></div></div></div></div></div></div>### Setting Up the Fees

You can access the Fees page to accommodate any of the scenarios above.

1. Hover over **System Configuration,** then **Payments,** and click **Fees**.
2. Click **Add Fee** and follow the diagram below.
3. Click the **Update** button to save.

##### ![3791d194-e0da-433d-bf84-b470d263c958.png](https://opscom.wiki/uploads/images/gallery/2024-10/scaled-1680-/LnM3791d194-e0da-433d-bf84-b470d263c958.png)

<div _ngcontent-ng-c1014978951="" class="chat-history-scroll-container" id="bkmrk--1"><div _ngcontent-ng-c1014978951="" class="conversation-container message-actions-hover-boundary ng-star-inserted"><div _ngcontent-ng-c1379262811=""><div _ngcontent-ng-c3275733674="" class="response-container ng-tns-c3275733674-70 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c3275733674="" class="presented-response-container ng-tns-c3275733674-70"><div _ngcontent-ng-c3275733674="" class="response-container-content ng-tns-c3275733674-70"><div _ngcontent-ng-c1379262811="" class="response-content ng-tns-c3275733674-70"><div _ngcontent-ng-c2159209055="" 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-c1014978951="" class="chat-history-scroll-container" id="bkmrk-clarity-for-users%3A-c"><div _ngcontent-ng-c1014978951="" class="conversation-container message-actions-hover-boundary ng-star-inserted" id="bkmrk-clarity-for-users%3A-c-1"><div _ngcontent-ng-c1379262811=""><div _ngcontent-ng-c3275733674="" class="response-container ng-tns-c3275733674-70 response-container-with-gpi ng-star-inserted response-container-has-multiple-responses" jslog="173900;track:impression"><div _ngcontent-ng-c3275733674="" class="presented-response-container ng-tns-c3275733674-70"><div _ngcontent-ng-c3275733674="" class="response-container-content ng-tns-c3275733674-70"><div _ngcontent-ng-c1379262811="" class="response-content ng-tns-c3275733674-70"><div _ngcontent-ng-c2159209055="" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr" id="bkmrk-clarity-for-users%3A-c-2">- <span style="color: rgb(22, 145, 121);">**Clarity for Users**: Clearly communicate any convenience fees to your users before they complete a transaction. Transparency builds trust.</span>
- <span style="color: rgb(22, 145, 121);">**Strategic Application**: Use convenience fees strategically. They can deter cash payments, offset third-party costs, or cover transaction fees, but ensure they align with your overall pricing strategy.</span>
- <span style="color: rgb(22, 145, 121);">**Flat Rate Limitation**: Remember that fees are flat rate, not percentage-based. Plan your fee amounts accordingly.</span>
- <span style="color: rgb(22, 145, 121);">**Impact on Grand Total**: Be aware that OPSCOM adds the convenience fee to the item's price to form the grand total before sending it to the payment provider.</span>
- <span style="color: rgb(22, 145, 121);">**External Transaction Fees**: Distinguish between OPSCOM's convenience fees and any external transaction fees imposed by your payment gateway. Understand where each fee is applied and how it impacts your revenue.</span>
- <span style="color: rgb(22, 145, 121);">**Reporting**: Consider how convenience fees will be reported and accounted for in your financial reconciliation processes.</span>

</div></div></div></div><div _ngcontent-ng-c3275733674="" class="response-container-footer ng-tns-c3275733674-70"></div></div></div></div></div>

# Taxes

<p class="callout info">The **Taxes** configuration page in OPSCOM allows administrators to define and manage the tax percentages applied to payments made within the system. This feature is crucial for ensuring accurate tax calculation during checkout, maintaining compliance with local tax regulations, and providing transparency to users regarding applicable taxes.</p>

### Setup &amp; Configuration

You must be a Primary Admin with the permission to **Manage System Configuration** to be able to edit the system settings.

<p class="callout warning">If you do not see the settings mentioned in this article, please contact <support@ops-com.com> to have them enabled for you. You will need, in writing, the permission of your Primary Admin.</p>

### Using this Feature

The **Taxes** page allows you to configure multiple settings for each tax type, ensuring accurate calculation and display.

1\. Hover over **System Configuration,** then **Payments,** and click **Taxes**.

##### <span style="text-decoration: underline;">Editing a Tax Type</span>

When editing an existing tax type, the following settings are available:

- **Enable**: Check this box to **enable** the tax type, making it active and applied to transactions. Uncheck to **disable** it.
- **Percentage**: Enter the numerical percentage of tax to be calculated (e.g., `13` for 13%).
- **Tax Label &amp; Translation**: This field defines how this tax will be displayed to users during the cart and checkout process (e.g., "HST," "Sales Tax," "VAT"). Multiple languages are supported for translation to ensure clarity for diverse users.
- **Apply to the following items**: Check the specific system modules or item types to which you want this tax to be applied (e.g., Permits, Violations, Lockers, Access Cards).

---

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

- <span style="color: rgb(22, 145, 121);">**Compliance**: Ensure your tax configurations (percentages, labels, and applicability) are always compliant with current local, provincial/state, and national tax regulations.</span>
- <span style="color: rgb(22, 145, 121);">**Clarity for Users**: Use clear and understandable **Tax Labels** that resonate with your users (e.g., "HST" for Canadian users where applicable).</span>
- <span style="color: rgb(22, 145, 121);">**Module Applicability**: Carefully select the **"Apply to the following items"** checkboxes to ensure taxes are only applied to the correct modules and items, preventing incorrect charges.</span>
- <span style="color: rgb(22, 145, 121);">**Testing**: After making any changes to tax settings, perform test transactions in a [Preview Space](https://opscom.wiki/books/setup-configuration-for-admins/page/create-or-refresh-a-preview-space) to verify that taxes are calculated and displayed correctly in the cart and on receipts.</span>
- <span style="color: rgb(22, 145, 121);">**Communication with Finance**: Coordinate closely with your organization's finance or accounting department to ensure OPSCOM's tax configuration aligns with their reconciliation processes.</span>

# The Invoice Template

## Editing the template

To access the template, go to the **System Config** menu and click on **Email Templates.**

The screen will refresh with a list of possible templates to edit. In our case, we want to click on the **Edit** button for **Permit Invoice** to access the template.

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

The screen will refresh with the complete Template form as seen below.

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

The form contains 4 areas:  
  
At the top, **Meta Data** for this specific template.  
On the left, a list of possible **Short Codes** that can be used on this template form.  
On the right, the actual **Template**.  
At the bottom, a **Text Content field** (This field can be configured for a plain text version of the

## Meta Data

**Label -** Enter a name for this Template.  
**Type -** This field auto fills.   
**Language -** Choose the language of the template.  
**Layout -** Choose default layout.  
**Subject -** This text will appear as the Email Subject. Note that the use of short code is permitted in this field. In this case, we are calling up the account name for the company being invoiced.

## Short Code List  


<span class="legacy-color-text-default">The template allows the use of special tokens, or short codes, to pull information from the database to appear on the invoice when sent.  
These include:</span>

<span class="legacy-color-text-default">**<span class="badge click-copy">\[</span><span class="badge click-copy">invoice account="number"\]</span>** The account number for the company.  
**<span class="badge click-copy">\[invoice account="name"\]</span>** The account name for the company.  
**<span class="badge click-copy">\[invoice account="fulladdress"\]</span>**<span data-colorid="rterxjuhci"> The full address for the company.</span>  
</span>**<span class="badge click-copy legacy-color-text-default">\[invoice account="invoice\_comments"\]</span>**<span class="legacy-color-text-default"> The invoice comment value that is editable for companies only. Any line breaks will be preserved.  
</span>**<span class="badge click-copy legacy-color-text-default">\[invoice show="invoiceno"\]</span>** Invoice Number.  
**<span class="badge click-copy legacy-color-text-default">\[invoice show="duedate"\]</span>**<span class="legacy-color-text-default"> </span><span class="legacy-color-text-default">Invoice due date.  
</span>**<span class="badge click-copy legacy-color-text-default">\[invoice show="billdate"\]</span>**<span class="legacy-color-text-default"> </span><span class="legacy-color-text-default">Invoice bill date.  
</span>**<span class="badge click-copy legacy-color-text-default">\[invoice show="subtotal"\]</span><span class="legacy-color-text-default"> </span>**<span class="legacy-color-text-default">Subtotal of all items before tax.  
</span>**<span class="badge click-copy legacy-color-text-default">\[invoice show="taxtotal"\]</span>**<span class="legacy-color-text-default"> </span><span class="legacy-color-text-default">Total amount of tax.  
</span>**<span class="badge click-copy legacy-color-text-default">\[invoice show="amounttotal"\]</span>**<span class="legacy-color-text-default"> </span><span class="legacy-color-text-default">The total sum amount for all outstanding permits for this invoice.  
</span>**<span class="badge click-copy legacy-color-text-default">\[invoice show="counttotal"\]</span>**<span class="legacy-color-text-default"> </span><span class="legacy-color-text-default">The total number of permits for the selected sales window.  
</span>**<span class="badge click-copy legacy-color-text-default">\[invoice show="details"\]</span>**<span class="legacy-color-text-default"> </span><span class="legacy-color-text-default">The list of permits, cost and who has the permit.  
  
</span>

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

<span class="legacy-color-text-default">  
</span>

<span class="legacy-color-text-default">These tokens can be placed anywhere on the template and will pull data from the system, similar to a mail merge functionality.  
  
For example, in the **Bill To:** area, the system will retrieve the **Full Address of the Company** as well as the **Company Account Number** using these two short code tokens:  
**<span class="badge click-copy">\[invoice account="fulladdress"\]</span>**<span data-colorid="vue4k7mrbj"> The full address for the company.  
**<span class="badge click-copy">\[</span><span class="badge click-copy">invoice account="number"\]</span>** The account number for the company.</span></span>

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

<span class="legacy-color-text-default"><span data-colorid="bjj6i4g3nf">  
</span></span>

## <span class="legacy-color-text-default"><span data-colorid="y8mzp1helo">The Template</span></span>

<span class="legacy-color-text-default"><span data-colorid="sq21corqza">There are a number of areas on the template that can be edited by the admin. To add branding to the template there are two areas that will be of concern.  
  
**The Company Logo Field:**  
This is where you would place your company logo. Using a .JPEG or .PNG file format is recommended. </span></span>

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

<span class="legacy-color-text-default"><span data-colorid="hg235a233q">**Your Company Address:**  
Enter your company address here.</span></span>

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

<span class="legacy-color-text-default"><span data-colorid="gzfgxacea5">**Invoice Identification:**  
</span></span><span data-colorid="jt8341smay">In this section use short code to pull in the **Invoice Number, Billing Date, and Due Date**.</span>

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

**<span class="legacy-color-text-default"><span data-colorid="jem9hq3l03">Invoice Details:</span></span>**

<span class="legacy-color-text-default"><span data-colorid="sx1cc226ly">The short code **<span class="badge click-copy legacy-color-text-default">\[invoice show="details"\] </span>**<span class="badge click-copy legacy-color-text-default">pulls in the list of permits that will appear on the Invoice. (See a sample of the Invoice below)  
  
These include:</span></span></span>

<span class="legacy-color-text-default"><span data-colorid="zbxyeezt3b"><span class="badge click-copy legacy-color-text-default">Parker's Name  
Item type being Paid for (Permit, Access card, etc.)  
Item number (Permit Number)  
Sales Window  
Lot Name  
Quantity  
Cost  
</span></span></span>

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

<span class="legacy-color-text-default"><span data-colorid="zbxyeezt3b"><span class="badge click-copy legacy-color-text-default">  
</span></span></span>

<span class="legacy-color-text-default"><span data-colorid="mxea081e6o">**Payment Information** (Billing Cost)**:** </span></span>In this section use short code to pull in the billing information such as **Subtotal, Calculated Taxes, and Total Billing Amount.

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

<span class="legacy-color-text-default"><span data-colorid="vu5ogl5uow">You may also wish to add comments to the invoice. Comments can be added in the company configuration. </span></span>

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

<span class="legacy-color-text-default"><span data-colorid="bpiaf01uli">**The Email with PDF attached:**  
Here is a sample of what the resulting email would look like. There is also a .PDF version of this invoice attached to the email.  
  
</span></span>

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

<span class="legacy-color-text-default"><span data-colorid="bpiaf01uli">  
</span></span>

# Setup payments with Flex Dollars

<p class="callout info">This article describes the Flex Dollar and Payroll Deduction feature, a specialized payment method for handling partial payments with credits. This feature allows your users to apply a pre-defined amount of **flex dollars** towards a permit purchase, with the system automatically notifying administrators of the remaining balance to be processed via payroll. </p>

#### OPSCOM Support Configuration<span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span>

<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#bf2600">The </span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#bf2600">Flex Dollar Payment</span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#bf2600"> feature is a </span>*<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#bf2600">custom development,</span>*<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#bf2600"> tailored specifically for one client, Trent University. It is not intended to be useful to, or available to all clients. Its availability is controlled by specific configurations set up by an OPSCOM Support team member.</span>

This feature requires configuration by an administration of your system, and must also be enabled by an OPSCOM support team member before it can be used. The setup involves defining the selectable flex dollar amounts, setting the notification email, and assigning the payment type to the appropriate users.

#### This feature is enabled by a system-level setting that is typically configured by OPSCOM support upon request. Once enabled, you may proceed with the steps below.

#### Configuration and Functionality<span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span>

1. To enable flex dollars, hover over **System Configuration**, and click **System Settings**.
2. Click **Permits**.
3. Enable the checkbox beside **Enable Flex Dollars**.

##### <u data-renderer-mark="true">Configure Email Notifications</u><span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span>

An email address must be configured to receive a notification internally and each time this payment method is used (and the details of the transaction for accounting).

1. Hover over **System Configuration, Payments** and click **Manage** **Flex Dollars**
2. In the **Flex Dollars Alert Email** text box, enter an email address you will be monitoring.

<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#ff991f">This email address must be monitored for any changes to be made to student flex dollar balances.</span>

##### <u data-renderer-mark="true">Define Flex Dollar Amount</u><span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span>

Create the specific flex dollar values that users can select during checkout.

1. Hover over **System Configuration, Payments,** and click **Manage** **Flex Dollars.**
2. Click the **Add New** button.
3. Enter a **Label**. This is the text the user will see in the drop-down menu (e.g., "Apply $100 of Flex Credit").
4. Enter the corresponding numeric **Value** (e.g., `100.00`).
5. Click **Save**.
6. Repeat this process for all the pre-determined flex dollar amounts your organization offers.

##### <u data-renderer-mark="true">Assign Payment Method to User Types</u><span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span>

Finally, this payment method must be enabled for the specific user types who are permitted to use it.

1. Hover over **System Configuration**, **Users**, and and click **User Types**.
2. Select the user type you wish to grant access to (e.g., Staff).
3. In the user type settings, assign the **Flex Dollars/Payroll Deduction** payment option.
4. For detailed instructions, please refer to the [<u data-renderer-mark="true">User Types Administration wiki article</u>](https://opscom.wiki/books/setup-configuration-for-admins/page/user-types "https://opscom.wiki/books/adminstrators-setup-configuration/page/user-types").

### Using this Feature<span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span>

Once configured, the feature provides a streamlined workflow for users and a clear notification process for administrators.

##### <u data-renderer-mark="true">User Purchase Workflow</u><span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span>

1. An eligible user adds a standard term permit to their shopping cart.
2. On the checkout page, they select **Flex Dollars/Payroll Deduction** as the payment method.
3. A new drop-down menu appears, populated with the flex dollar **Labels** you configured.
4. The user selects an amount and completes the transaction. Their permit is considered valid and is issued immediately.

##### <u data-renderer-mark="true">Administrator Workflow (Post-Purchase)</u><span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span>

1. Upon successful purchase, an email is automatically sent to the address configured in ***"Flex Dollar Alert Email"*** field.
2. This notification contains the key information needed for manual processing:
    
    
    - User's Name and Contact Information
    - Permit Details
    - Flex Dollar Amount Applied
    - Remaining Balance Due
3. Your administrative team (e.g., Payroll or Parking department) uses this information to confirm users flex dollar balances the remaining balance via your organization's internal payroll system.
4. For auditing purposes, a note detailing the flex dollar amount is also automatically added to the users transaction payment record.

<p class="callout warning"><span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#ff991f">The payroll deduction component is </span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#ff991f">not an automated process</span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#ff991f"> and </span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#ff991f">neither is the updating of Flex Dollar balance</span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#ff991f">. The system's function is to calculate and report the remaining payroll deduction balance to administrators. </span></p>

# <span style="color: rgb(22, 145, 121);"><span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">Best Practices &amp; Considerations</span><span class="heading-anchor-wrapper" role="presentation"><button aria-hidden="true" class="cc-vhh4ux" data-testid="anchor-button" type="button"><span aria-label="Copy" class="_1e0c1o8l _vchhusvi _1o9zidpf _vwz4kb7n _y4ti1igz _bozg1mb9 _12va18uv _jcxd1r8n" role="img"><svg class="_1reo15vq _18m915vq _syaz1r31 _lcxvglyw _s7n4yfq0 _vc881r31 _1bsbpxbi _4t3ipxbi" fill="none" role="presentation" viewbox="0 0 16 16"><path clip-rule="evenodd" d="M8.22 2.22a3.932 3.932 0 1 1 5.56 5.56l-2.25 2.25-1.06-1.06 2.25-2.25a2.432 2.432 0 0 0-3.44-3.44L7.03 5.53 5.97 4.47zm3.06 3.56-5.5 5.5-1.06-1.06 5.5-5.5zM2.22 8.22l2.25-2.25 1.06 1.06-2.25 2.25a2.432 2.432 0 0 0 3.44 3.44l2.25-2.25 1.06 1.06-2.25 2.25a3.932 3.932 0 1 1-5.56-5.56" fill="currentcolor" fill-rule="evenodd"></path></svg></span></button></span></span>

- <span style="color: rgb(22, 145, 121);"><span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">This payment option will </span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">only appear to eligible users when their cart contains only standard permits</span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">. It will not be available if other items, such as violation payments or locker rentals, are also in the cart.</span></span>
- <span style="color: rgb(22, 145, 121);">**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">Use clear and descriptive labels</span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e"> for the flex dollar amounts (e.g., "Use $75 Payroll Credit"). This transparency is key to reducing user confusion and support requests during the checkout process.</span></span>
- <span style="color: rgb(22, 145, 121);">**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">Ensure the staff who manage payroll are aware of this workflow</span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e"> and understand how to act on the email notifications. Clear internal communication is critical to the success of this feature.</span></span>
- <span style="color: rgb(22, 145, 121);">**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">External Verification &amp; Reconciliation:</span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e"> It is critical to understand that OPSCOM does not verify real-time flex dollar balances with any external system. Administrators are solely responsible for independently verifying the spent flex dollar amounts with their HR/payroll department and managing any discrepancies or adjustments outside of the OPSCOM system. </span></span>  
    <span style="color: rgb(22, 145, 121);">**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">Note: </span>**<span class="fabric-text-color-mark" data-renderer-mark="true" data-text-custom-color="#36b37e">this type of payment is treated as a full, successful payment. The system does not have split-payment logic or backend validation of flex balances beyond recording the user's chosen amount.</span></span>

# Stripe Payment Provider Setup

<div _ngcontent-ng-c2426258411="" class="ng-tns-c2426258411-28" id="bkmrk-"><section class="processing-state_container is-gpi-avatar ng-tns-c2426258411-28 ng-trigger ng-trigger-processingStateShowHide ng-star-inserted is-done-processing" id="bkmrk--1"><div _ngcontent-ng-c2426258411="" aria-hidden="true" class="processing-state_details is-gpi-avatar ng-trigger ng-trigger-menuExpansion ng-tns-c2426258411-28 ng-star-inserted" id="bkmrk--2"></div></section></div><div _ngcontent-ng-c2362448710="" class="response-content ng-tns-c3088276128-27" id="bkmrk--3"></div><p class="callout info">This feature shows how to integrate with Stripe to process credit card payments directly within the system. Its primary purpose is to provide a secure and seamless checkout experience for users while simplifying financial reconciliation for operations. This article is intended for **OPSCOM administrators** responsible for financial setup.</p>

---

## Setup and Configuration

### Admin Portal

To begin the integration, an administrator must setup a payment type in OPSCOM, with will be linked to their Stripe account. This is handled through the central administration portal where you will input your unique credentials.

- Hover over **System Configuration &gt; Payments**, then click **Setup Payment Types**.
- Click **Add Type**.
- Click the **Payment Provider** drop-down menu and choose **Stripe.js** from the available options.

Once the provider is selected, you can **name the payment type**, **select applicable user types**, and then **go to the settings tab*.***

Now, you have to get the API keys for your Stripe account, and setup webhooks, which can be found on the stripe dashboard, which you should be logged into, from a previous step. Your **Publishable Key**, and **Secret Key**, can be found and copied here. You can click on these values to copy them, and paste them into the payment type settings in OPSCOM.

[![image.png](https://opscom.wiki/uploads/images/gallery/2026-04/scaled-1680-/VOiimage.png)](https://opscom.wiki/uploads/images/gallery/2026-04/VOiimage.png)

<p class="callout warning">You must provide your unique identification keys. Enter your Stripe public key into the **Publishable Key** field and your Stripe secret key into the **Secret Key** field. **<u>Only enter the Testing Credentials until you are ready for your users to have access to this.</u>**</p>

<span style="text-decoration: underline;">Take this time to ensure that the ***Currency*** setting is correct</span>, in the payment type settings (the default is US dollars). The next steps will be about populating the **Webhook ID** and **Webhook Secret** fields, in OPSCOM, with the correct information from your Stripe dashboard.

[![image.png](https://opscom.wiki/uploads/images/gallery/2026-04/scaled-1680-/gCTimage.png)](https://opscom.wiki/uploads/images/gallery/2026-04/gCTimage.png)

---

### Third-Party Webhook Configuration

Webhooks are essential for Stripe to notify OPSCOM regarding payment successes or refund completions.

<p class="callout warning">Without these Webhooks, the system **WILL NOT** communicate any transaction information to OPSCOM.</p>

<div class="my-4 rounded-lg overflow-x-auto overflow-y-hidden border border-gray-500/20 [&_thead_tr:first-child_th:first-child]:border-t-0 [&_thead_tr:first-child_th:first-child]:border-l-0 [&_thead_tr:first-child_th:last-child]:border-t-0 [&_thead_tr:first-child_th:last-child]:border-r-0 [&_tbody_tr:last-child_td:first-child]:border-b-0 [&_tbody_tr:last-child_td:first-child]:border-l-0 [&_tbody_tr:last-child_td:last-child]:border-b-0 [&_tbody_tr:last-child_td:last-child]:border-r-0 [&_thead_tr:first-child_th]:border-t-0 [&_tbody_tr:last-child_td]:border-b-0 [&_th:first-child]:border-l-0 [&_td:first-child]:border-l-0 [&_th:last-child]:border-r-0 [&_td:last-child]:border-r-0" id="bkmrk-sub-section-what-it-"><table class="min-w-full border-separate border-spacing-0"><thead><tr><th class="bg-gray-500/20 px-3 py-2 text-left font-medium leading-snug border border-gray-500/20">Sub-section</th><th class="bg-gray-500/20 px-3 py-2 text-left font-medium leading-snug border border-gray-500/20">What it covers</th></tr></thead><tbody><tr><td class="px-3 py-2 leading-snug border border-gray-500/20">**Register Your Endpoint**</td><td class="px-3 py-2 leading-snug border border-gray-500/20">Step-by-step Stripe Dashboard instructions to create an event destination, select event types, and enter the OPSCOM webhook URL</td></tr><tr><td class="px-3 py-2 leading-snug border border-gray-500/20">**Retrieve Your Signing Secret**</td><td class="px-3 py-2 leading-snug border border-gray-500/20">How to reveal and copy the `whsec_` secret, and destination ID into OPSCOM</td></tr><tr><td class="px-3 py-2 leading-snug border border-gray-500/20">**Test Your Endpoint**</td><td class="px-3 py-2 leading-snug border border-gray-500/20">Stripe CLI commands to forward live test events locally before going live</td></tr><tr><td class="px-3 py-2 leading-snug border border-gray-500/20">**Secure Your Endpoint**</td><td class="px-3 py-2 leading-snug border border-gray-500/20">Signature verification explanation and IP allowlisting recommendation</td></tr><tr><td class="px-3 py-2 leading-snug border border-gray-500/20">**Manage Event Delivery**</td><td class="px-3 py-2 leading-snug border border-gray-500/20">Delivered/Pending/Failed status descriptions and how to manually resend events</td></tr></tbody></table>

</div>### Register Your Endpoint

To begin receiving notifications, you must define where Stripe should send transaction data. In your Stripe Dashboard, click on **Developers** (bottom left) and select **Webhooks**.

[![image.png](https://opscom.wiki/uploads/images/gallery/2026-04/scaled-1680-/iIBimage.png)](https://opscom.wiki/uploads/images/gallery/2026-04/iIBimage.png)

Click the **Add Destination** button to open the configuration window.

You must select the specific event types the system needs to process. For a standard setup, ensure you select **payment\_intent.succeeded** for successful payments, **payment\_intent.payment\_failed** for failed payments, and **payment\_intent.canceled** for canceled payments. Now click Continue.

[![image.png](https://opscom.wiki/uploads/images/gallery/2026-04/scaled-1680-/5dlimage.png)](https://opscom.wiki/uploads/images/gallery/2026-04/5dlimage.png)

 Select **Webhook endpoint**, and click continue again.

[![image.png](https://opscom.wiki/uploads/images/gallery/2026-04/scaled-1680-/eGjimage.png)](https://opscom.wiki/uploads/images/gallery/2026-04/eGjimage.png)

Give the webhook a descriptive name, and in the **Endpoint URL** field, enter the specific URL provided by OPSCOM, in this format: `https://[CLIENTID].ops-com.com/api/system/payments/stripe/callback`

### Retrieve Your Signing Secret

Once the endpoint is created, Stripe generates a unique security key to verify that the data sent to your server is authentic. On the summary page for your newly created webhook, locate the **Signing secret** section.

[![image.png](https://opscom.wiki/uploads/images/gallery/2026-04/scaled-1680-/BsHimage.png)](https://opscom.wiki/uploads/images/gallery/2026-04/BsHimage.png)

Click **Reveal** to display the string, which typically begins with the prefix `whsec_`.

Copy (***highlighted in a <span style="color: rgb(22, 145, 121);">green</span> box in the picture above!***) this entire string and navigate back to your OPSCOM **Payment Gateway** settings. Paste the secret into the **Webhook Secret** field. This handshake ensures that OPSCOM only processes legitimate requests from Stripe and ignores any unauthorized attempts to alter transaction data.

Once the endpoint is saved, you'll see the **<span style="color: rgb(0, 0, 0); background-color: rgb(191, 237, 210);">Signing secret</span>**, and <span style="background-color: rgb(191, 237, 210); color: rgb(0, 0, 0);">**Destination ID**</span> provided by ***<span style="background-color: rgb(191, 237, 210); color: rgb(0, 0, 0);">Stripe</span>***. Return to your *<span style="text-decoration: underline;"><span style="background-color: rgb(248, 202, 198); color: rgb(186, 55, 42); text-decoration: underline;">**OPSCOM**</span></span>*<span style="color: rgb(186, 55, 42);"> </span>configuration and paste the <span style="color: rgb(0, 0, 0); background-color: rgb(191, 237, 210);">**Signing secret**</span> into the <span style="text-decoration: underline;"><span style="background-color: rgb(248, 202, 198); color: rgb(186, 55, 42); text-decoration: underline;">**Webhook Secret**</span></span> field, and the <span style="background-color: rgb(251, 238, 184);"><span style="color: rgb(0, 0, 0); background-color: rgb(191, 237, 210);">**Destination ID**</span><span style="background-color: rgb(255, 255, 255);"> </span></span>into the <span style="text-decoration: underline;"><span style="color: rgb(186, 55, 42); text-decoration: underline;">**<span style="background-color: rgb(248, 202, 198);">Webhook ID</span>**</span></span> field to ensure all incoming data is securely verified.

<p class="callout warning">Ensure that your **Webhook Secret** is correctly matched between Stripe and OPSCOM to prevent "Pending" status errors on completed payments.</p>

[![image.png](https://opscom.wiki/uploads/images/gallery/2026-04/scaled-1680-/E3jimage.png)](https://opscom.wiki/uploads/images/gallery/2026-04/E3jimage.png)

---

## User Experience and Handheld Use

### Web Portal Transactions

Users will interact with the Stripe interface during their standard checkout process. When they reach the final stage of a transaction, they simply click the **Pay with Credit Card** button to open the secure payment form. After they enter the credit card details into the form, they click the **Submit Payment** button to complete the purchase.

### Handheld App — *OPSCOM Parking Enforcement*

For administrators or staff using handheld units in the field, the process is optimized for touch interaction. Tap **Checkout** to open the payment summary within the app. From there, tap **Select Payment Method** and choose **Stripe**. To prevent accidental charges, the final step requires you to tap and hold the **Process Payment** button to finalize the transaction.

## Managing Transactions and Reports

Administrators can review all processed payments and manage financial returns through the standard reporting interfaces. Hover over **Financial Management** and click **Transaction Reports** then **Recent Payments** to view a live list of activity.

Within this report, the **Status** column displays the current state of each payment, while the **Payment Date** indicates exactly when the transaction occurred. If you need more detail, click the **View Details** icon next to a specific transaction to see the full Stripe receipt.

If a correction is needed, click the **Refund Payment** button to initiate a return of funds. You will then click the **Confirm Refund** drop-down menu and choose **Full Refund** to finalize the reversal.

<p class="callout info">You can quickly find a specific transaction by using the search bar to enter a user's name or a specific receipt order ID/Confirm Code.</p>

---

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

- <span style="color: rgb(22, 145, 121);">**Deployment Testing** Organizations should always keep **Live Mode** disabled during the initial deployment until all testing is verified with test credit card information. It is highly recommended to process a single, small test transaction in **Live Mode** using a real card before making the payment option available to the general public.</span>
- <span style="color: rgb(22, 145, 121);">**Security Requirements** Maintaining the security of your financial environment is critical. You should never share your **Stripe Secret Key** or **Webhook Secret** with anyone or store it in plain text outside of the secure administration configuration screens.</span>
- <span style="color: rgb(22, 145, 121);">**Change the signing secret periodically**, and only subscribe to required event types.</span>

<div _ngcontent-ng-c2362448710="" class="response-content ng-tns-c3088276128-27" id="bkmrk--16"><div _ngcontent-ng-c1098760420="" class="container"><div _ngcontent-ng-c1840272799="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-updated-hr-color" dir="ltr" id="bkmrk--17" inline-copy-host=""></div></div></div>