|
| 1 | +============= |
| 2 | +Expense cards |
| 3 | +============= |
| 4 | + |
| 5 | +Odoo offers physical and virtual expense cards, allowing for better expense tracking and management. |
| 6 | +Using expense cards allows for real time expense management, creating expense records as soon as an |
| 7 | +expense transaction occurs, allowing management greater visibility of expense costs as they are |
| 8 | +incurred. |
| 9 | + |
| 10 | +The elimination of the need to :doc:`actively create expense records <log_expenses>` allows for a |
| 11 | +more streamlined expense workflow, with records automatically created as purchases are made. |
| 12 | + |
| 13 | +To use expense cards, first a :ref:`card is configured <expenses/card-configure>`, then it is |
| 14 | +:ref:`activated <expenses/card-activate>`. Before employees can make purchases with their expense |
| 15 | +card, :ref:`funds must be added <expenses/add-funds>` to the company's Stripe account. Once there is |
| 16 | +money available in the account (this typically takes 2-3 business days for the transfer to Stripe), |
| 17 | +employees can use their expense cards, and the money is pulled from the company's Stripe account. |
| 18 | + |
| 19 | +.. important:: |
| 20 | + To create and use expense cards, the **Accounting** app **must** be installed. |
| 21 | + |
| 22 | +.. note:: |
| 23 | + Expense cards act like pre-paid debit cards, as they can **only** be used with a connected Stripe |
| 24 | + account, and **only** if funds are added to that account, to be drawn from. |
| 25 | + |
| 26 | +.. seealso:: |
| 27 | + :doc:`../payment_providers/stripe` |
| 28 | + |
| 29 | +Availability |
| 30 | +============ |
| 31 | + |
| 32 | +Expense cards are currently available for the following countries: |
| 33 | + |
| 34 | ++-------------+-------------+-------------+-------------+ |
| 35 | +| Austria | Belgium | Croatia | Cyprus | |
| 36 | ++-------------+-------------+-------------+-------------+ |
| 37 | +| Estonia | Finland | France | Germany | |
| 38 | ++-------------+-------------+-------------+-------------+ |
| 39 | +| Greece | Ireland | Italy | Latvia | |
| 40 | ++-------------+-------------+-------------+-------------+ |
| 41 | +| Lithuania | Luxembourg | Malta | Netherlands | |
| 42 | ++-------------+-------------+-------------+-------------+ |
| 43 | +| Portugal | Slovakia | Slovenia | Spain | |
| 44 | ++-------------+-------------+-------------+-------------+ |
| 45 | + |
| 46 | +Only companies located in one of these countries are able to create and use expense cards. Check |
| 47 | + |
| 48 | +.. _expenses/card-settings: |
| 49 | + |
| 50 | +Configuration |
| 51 | +============= |
| 52 | + |
| 53 | +Two settings must be configured to use expense cards. Navigate to :menuselection:`Expenses app --> |
| 54 | +Configuration --> Settings`. Tick the box next to :guilabel:`Expense Card`, then click |
| 55 | +:guilabel:`Save`. The :guilabel:`Settings` page reloads, and two fields now appear beneath the |
| 56 | +:guilabel:`Expense Card` option. |
| 57 | + |
| 58 | +A :guilabel:`Journal` field with :guilabel:`Stripe Issuing` appears, populating the field. This is |
| 59 | +the default journal, and it is **not** recommended to alter this unless instructed by the accounting |
| 60 | +department. |
| 61 | + |
| 62 | +Next, click the text link :guilabel:`terms and conditions` and an :guilabel:`Expense Cards Terms and |
| 63 | +Conditions` pop-up window loads, with all the details of the agreement. After this has been read, |
| 64 | +click :guilabel:`Close`, then tick the checkbox next to :guilabel:`I confirm agreeing to the terms |
| 65 | +and conditions` to accept the terms, then click :guilabel:`Save`. |
| 66 | + |
| 67 | +.. note:: |
| 68 | + The terms and conditions **must** be agreed to use expense cards. |
| 69 | + |
| 70 | +After agreeing to the terms and conditions, click :icon:`oi-arrow-right` :guilabel:`Connect` that |
| 71 | +appears after the terms and conditions checkbox is ticked. A *Stripe* website loads, allowing for |
| 72 | +the configuration of the company's Stripe account with Odoo's **Expenses** app. |
| 73 | + |
| 74 | +Follow the steps to sign in to the Stripe website with the proper account credentials, and configure |
| 75 | +any requested information. When completed, return to Odoo using the :icon:`oi-arrow-left` |
| 76 | +:guilabel:`Return to Odoo` link on the left side of the website, and click :guilabel:`Save`. |
| 77 | + |
| 78 | +A green :guilabel:`Verified` tag now appears next to :icon:`oi-arrow-left` :guilabel:`Refresh`, |
| 79 | +indicating the account is properly configured. |
| 80 | + |
| 81 | +.. _expenses/card-configure: |
| 82 | + |
| 83 | +Configure expense cards |
| 84 | +======================= |
| 85 | + |
| 86 | +To create and configure a new expense card, click :menuselection:`Cards` in the main **Expenses** |
| 87 | +app menu to view the :guilabel:`Cards` dashboard. Click :guilabel:`New` and a blank |
| 88 | +:guilabel:`Cards` form loads. Enter the following information on the form: |
| 89 | + |
| 90 | +- :guilabel:`Card Name`: The first line on the card form is blank, and displays `Draft`. Enter a |
| 91 | + name for the card in this field. This does **not** need to be a person's name, it can be something |
| 92 | + descriptive to explain the use of the card. |
| 93 | + |
| 94 | + .. example:: |
| 95 | + An employee is going on a week-long business trip to Berlin to visit many clients. The employee |
| 96 | + needs to pay for meals, transportation, and other business-related expenses. Since this is a |
| 97 | + short trip, a virtual card is created to capture all the expenses, with the name `Business Trip |
| 98 | + - Berlin`. |
| 99 | + |
| 100 | + The marketing department pays for many expenses throughout the year, from email marketing |
| 101 | + services, venue rentals for events, promotional merchandise, etc. Since the expenses do not |
| 102 | + have an end date, and it is used for an entire department, a physical card is ordered with the |
| 103 | + name `Marketing`. |
| 104 | + |
| 105 | +- :guilabel:`Cardholder`: Select the person using the card from the drop-down menu. Once selected, |
| 106 | + the person's name populates the :guilabel:`Draft` field, above :guilabel:`Cardholder`. |
| 107 | +- :guilabel:`Update info`: Next to the cardholder's name, click :guilabel:`Update info` and a |
| 108 | + :guilabel:`Cardholder Configuration` pop-up window loads. Update the cardholder's name, birthday, |
| 109 | + phone number, email, and physical address. All the requested information **must** be populated, as |
| 110 | + it is used to create the expense card with Stripe, and to verify the cardholder's identity, when |
| 111 | + needed. If any information is missing from this form, the card **cannot** be created, and an error |
| 112 | + appears when creating or ordering the card. |
| 113 | +- :guilabel:`Type`: Click the radio button next to the desired *type* of expense card. Options are: |
| 114 | + |
| 115 | + - :guilabel:`Physical`: A physical card is printed and mailed out to the employee. If selected, a |
| 116 | + :guilabel:`Delivery Address` field appears. Using the drop-down menu, select the employee or |
| 117 | + company address the card is mailed to. |
| 118 | + - :guilabel:`Virtual`: Virtual cards are available instantaneously once the card configuration is |
| 119 | + completed. |
| 120 | + |
| 121 | +- :guilabel:`Company`: Select the company the expenses are associated with using the drop-down menu. |
| 122 | + Each card must be associated with a single company, and are **not** available for use between all |
| 123 | + companies or branches in the database. |
| 124 | +- :guilabel:`Stripe Journal`: :guilabel:`Stripe Issuing` populates this field by default, and cannot |
| 125 | + be modified. |
| 126 | + |
| 127 | +Next, configure the following fields in the :guilabel:`Spending Policy` tab of the card form: |
| 128 | + |
| 129 | +- :guilabel:`Countries`: Using the drop-down menu, select the countries the card is able to be used |
| 130 | + in. The company's country location populates this field, by default. All other countries the |
| 131 | + employee may travel to or purchase expensable items from, should be included in this list. |
| 132 | +- :guilabel:`Categories`: If the expense card is limited to purchase items within a specific |
| 133 | + *category*, select them using the drop-down menu. If this field is left blank, the card may be |
| 134 | + used for *any* expense category. |
| 135 | + |
| 136 | + .. example:: |
| 137 | + A company issues an expense card that is only authorized for airline, train, and taxi travel |
| 138 | + expenses. |
| 139 | + |
| 140 | + To configure this, click into the :guilabel:`Category` field, and click :guilabel:`Search |
| 141 | + more...` at the bottom. In the :guilabel:`Search: Categories` pop-up window, click into the |
| 142 | + search bar and click :guilabel:`Transportation services` in the :icon:`fa-filter` |
| 143 | + :guilabel:`Filters` column. |
| 144 | + |
| 145 | + Next, tick the checkboxes next to the desired transportation categories. In this example, only |
| 146 | + :guilabel:`Railroads`, :guilabel:`Passenger Railways`, :guilabel:`Taxicabs Limousines`, and |
| 147 | + :guilabel:`Airlines Air Carriers` are selected. |
| 148 | + |
| 149 | + Click :guilabel:`Select` and the selected transportation categories now populate the |
| 150 | + :guilabel:`Categories` field. |
| 151 | + |
| 152 | +- :guilabel:`Limit`: Configure the two spending limits for the card. The first configuration sets |
| 153 | + the total expense amount allowed during a specific time period. Using the drop-down menu after the |
| 154 | + word :guilabel:`per`, select the time period the limit applies to. The available options are: |
| 155 | + :guilabel:`Day`, :guilabel:`Week`, :guilabel:`Month`, :guilabel:`Year`, or :guilabel:`All Time`. |
| 156 | + Next, enter the maximum amount allowed for the selected time period. |
| 157 | + |
| 158 | + Next, set the *per transaction* limit. Enter the maximum amount that can be charged on the expense |
| 159 | + card in a single transaction in the field. |
| 160 | + |
| 161 | + .. example:: |
| 162 | + A company allows employees to purchase airline tickets that are less than $1,000.00 total. |
| 163 | + Additionally, there is a monthly cap of $3,000.00 for all expenses. |
| 164 | + |
| 165 | + The company would configure the limit as follows: `3,000.00` per :guilabel:`Month` and |
| 166 | + `1,000.00` per transaction. |
| 167 | + |
| 168 | + .. important:: |
| 169 | + Since the company Stripe account is linked for **all** Stripe transactions, not only expenses, |
| 170 | + card limits **must** be set to avoid large charges or transactions that may prematurely deplete |
| 171 | + the Stripe account. |
| 172 | + |
| 173 | +.. image:: expense_cards/card-form.png |
| 174 | + :alt: An expense card form filled out for transportation and food only. |
| 175 | + |
| 176 | +.. _expenses/card-activate: |
| 177 | + |
| 178 | +Activate expense cards |
| 179 | +====================== |
| 180 | + |
| 181 | +Once an expense card is configured, the next step is to activate the cards. First, navigate to |
| 182 | +:menuselection:`Expenses app --> Cards`, and the :guilabel:`Cards` dashboard loads, displaying all |
| 183 | +expense cards in a Kanban view. |
| 184 | + |
| 185 | +All cards display their status on a banner in the upper-right corner of each card. Statuses are |
| 186 | +either: |
| 187 | + |
| 188 | +- :guilabel:`Draft`: The card form is filled out, but the card has not been requested or activated. |
| 189 | +- :guilabel:`Pending`: A physical card has been ordered, but not activated. |
| 190 | +- :guilabel:`Active`: The card is able to be used. This status does **not** display a status banner |
| 191 | + on the card. |
| 192 | +- :guilabel:`Paused`: A card has been put *on hold* and no transactions can be processed with this |
| 193 | + status. |
| 194 | +- :guilabel:`Blocked`: The physical or virtual card is *cancelled* and cannot be used. |
| 195 | + |
| 196 | +Click on a card to activate, and the card form loads. Ensure all the fields are :ref:`configured |
| 197 | +<expenses/card-configure>`, then click either :guilabel:`Order` if requesting a physical card, or |
| 198 | +:guilabel:`Activate` if creating a virtual card. |
| 199 | + |
| 200 | +If a physical card is requested, the card status changes to :guilabel:`Inactive`, while it is being |
| 201 | +printed and mailed to the selected address. Once the card arrives, follow the included instructions |
| 202 | +to activate the card. |
| 203 | + |
| 204 | +If the card is a virtual card, once :guilabel:`Activate` is clicked, the status changes to |
| 205 | +:guilabel:`Active` and it is available for use. |
| 206 | + |
| 207 | +Once the status of an expense card is :guilabel:`Active`, the user can use the card to purchase |
| 208 | +expensable items, as long as the purchases are within the limits set on the card. |
| 209 | + |
| 210 | +.. _expenses/add-funds: |
| 211 | + |
| 212 | +Add funds to Stripe account |
| 213 | +=========================== |
| 214 | + |
| 215 | +For employees to use their expense cards, funds must be available in the company's Stripe account, |
| 216 | +to make purchases against. To add funds to the company's Stripe account, open the **Accounting** |
| 217 | +app. On the :guilabel:`Stripe Issuing` Kanban card, click :guilabel:`Top-up`, and a |
| 218 | +:guilabel:`Top-up` pop-up window loads. |
| 219 | + |
| 220 | +Enter the amount being transferred into the account in the :guilabel:`Amount` field. The |
| 221 | +:guilabel:`IBAN` and :guilabel:`BIC` fields are populated according to the Stripe configuration and |
| 222 | +cannot be changed. When configured, click :guilabel:`Topup`, and the transfer is initiated. |
| 223 | + |
| 224 | +.. important:: |
| 225 | + It typically takes 2-3 business days for transfers to be processed. Funds are **not** available |
| 226 | + until the transfer is complete. |
| 227 | + |
| 228 | +Using expense cards |
| 229 | +=================== |
| 230 | + |
| 231 | +Using an expense card is almost identical to using any other credit or debit card. The only |
| 232 | +difference is if a :ref:`physical card <expenses/physical>` or a :ref:`virtual card |
| 233 | +<expenses/virtual>` is used. |
| 234 | + |
| 235 | +When a charge is made using an expense card, an expense record is automatically created in the |
| 236 | +**Expenses** app, linked to the specific card. The next step is to attach the corresponding receipt. |
| 237 | + |
| 238 | +.. note:: |
| 239 | + It is best proactive to take a photo of a receipt as soon as it is received, to eliminate the |
| 240 | + risk of losing the receipt and having an expense reimbursement request denied. |
| 241 | + |
| 242 | +Open the expense record by navigating to :menuselection:`Expenses app --> Cards`, and click on the |
| 243 | +specific card. Next, click the :icon:`fa-usd` :guilabel:`Expenses` smart button, and the |
| 244 | +:guilabel:`Expenses` dashboard loads for that card. Any expense that does *not* have a receipt |
| 245 | +attached to the record displays a :icon:`fa-credit-card` :guilabel:`Please upload the receipt.` |
| 246 | + |
| 247 | +Click on the desired expense record to open the detailed expense form. Click the :guilabel:`Attach |
| 248 | +Receipt` button, and a file explorer loads. Navigate to the receipt, and click :guilabel:`Open` to |
| 249 | +select it and attach it to the expense. |
| 250 | + |
| 251 | +Make any other adjustments to :ref:`the expense record <expenses/manual_expense>`, if necessary. |
| 252 | +Once the record is correct, click :guilabel:`Submit` to submit the receipt, or :guilabel:`Split`, if |
| 253 | +the receipt needs to be split between multiple expenses. |
| 254 | + |
| 255 | +.. important:: |
| 256 | + If a purchase is attempted that either is outside the listed countries, listed categories, or |
| 257 | + exceeds the transaction limit or total expense limit for the specified time period, the expense |
| 258 | + is denied and captured in the :guilabel:`Expenses` dashboard for the card, with a status of |
| 259 | + *Refused*. |
| 260 | + |
| 261 | + To view the details of why the transaction was refused, click on the :icon:`fa-usd` |
| 262 | + :guilabel:`Expenses` smart button for the card, and click on the refused transaction. The details |
| 263 | + explaining why the transaction was refused appears in the chatter, authored by *OdooBot*. |
| 264 | + |
| 265 | +.. _expenses/physical: |
| 266 | + |
| 267 | +Physical card |
| 268 | +============= |
| 269 | + |
| 270 | +When using a physical card, make charges in the same manner as a regular physical pre-paid debit |
| 271 | +card. |
| 272 | + |
| 273 | +.. _expenses/virtual: |
| 274 | + |
| 275 | +Virtual card |
| 276 | +============ |
| 277 | + |
| 278 | +If using a virtual card, there is one additional step to access the card information to use for |
| 279 | +purchases. |
| 280 | + |
| 281 | +To obtain the card information, navigate to :menuselection:`Expenses app --> Cards` and click on the |
| 282 | +virtual card being used. Next, click into the :guilabel:`Card Details` tab, and two items appear: |
| 283 | +the expense card number, with only the last four digits displayed, and the expiration date. |
| 284 | + |
| 285 | +To view the full details, click :icon:`fa-eye` :guilabel:`View Details`, and a :guilabel:`Two-Factor |
| 286 | +Authentication` pop-up window loads. Enter the six-digit authentication code that is texted to the |
| 287 | +cardholder's phone number. The card appears in the pop-up window, with all the information |
| 288 | +displayed: the card number, expiration date, and security code. When done, close the window by |
| 289 | +clicking :guilabel:`X`. |
| 290 | + |
| 291 | +Lost cards |
| 292 | +========== |
| 293 | + |
| 294 | +When a physical card is lost, or if credentials for a virtual card have been compromised, the cards |
| 295 | +must be updated in the **Expenses** app so they cannot be used. This is referred to in Odoo as |
| 296 | +*blocking*. |
| 297 | + |
| 298 | +To stop any charges on a card, navigate to :menuselection:`Expenses app --> Cards`, and click on the |
| 299 | +specific card being deactivated. On the card form, click the :guilabel:`Block` button, and a |
| 300 | +:guilabel:`Block a Card` pop-up window loads. |
| 301 | + |
| 302 | +Click into the field next to :guilabel:`Reason`, and select the reason the card is being blocked. |
| 303 | +The options are :guilabel:`Lost`, :guilabel:`Stolen`, or :guilabel:`Other`. After making a |
| 304 | +selection, click :guilabel:`Block`, and the card is unable to be used, and a red :guilabel:`Blocked` |
| 305 | +banner appears on the card in the :guilabel:`Cards` dashboard view. |
| 306 | + |
| 307 | +.. example:: |
| 308 | + An employee is given a virtual expense card to use for an upcoming business trip. The employee |
| 309 | + uses this card to purchase an airline ticket and a hotel room, one month before the scheduled |
| 310 | + trip. |
| 311 | + |
| 312 | + A week before the trip, they receive an email from the airline, explaining there has been a data |
| 313 | + breach, and customer names, contact information, and purchase details including credit card |
| 314 | + numbers have been leaked. |
| 315 | + |
| 316 | + The employee reaches out to their manager, explaining the situation. The manager opens the |
| 317 | + virtual expense card, and blocks the card using the reason :guilabel:`Other`. Then the manager |
| 318 | + issues another virtual card for the employee to use for their business trip. |
| 319 | + |
| 320 | +Temporary card pauses |
| 321 | +===================== |
| 322 | + |
| 323 | +When an employee is out of office for an extended period of time, such as a vacation, or an illness, |
| 324 | +it is recommended to temporarily deactivate their card to prevent any fraudulent charges. This is |
| 325 | +referred to in Odoo as *pausing* a card. |
| 326 | + |
| 327 | +To pause a card, navigate to :menuselection:`Expenses app --> Cards`, and click on the specific card |
| 328 | +being paused. On the card form, click :guilabel:`Pause`, and the card is unable to be used until it |
| 329 | +is activated. |
| 330 | + |
| 331 | +.. example:: |
| 332 | + An employee in the sales department has a physical expense card to use for client meetings. They |
| 333 | + recently welcomed a new child, and will be out of office on parental leave for three months. |
| 334 | + |
| 335 | + On the employee's last day, their manager opens the expense card record, and clicks |
| 336 | + :guilabel:`Pause`. When the employee returns to work, the manager opens the expense card form and |
| 337 | + clicks :guilabel:`Active` to reactivate the card. |
0 commit comments