Payments
- Payment methods
- Payment flow
- Chargebacks
- Refunds
- Promocodes and discounts
- Reconciliation
- Manual upload
Payment methods
Abel offers the following payment methods:
- Cash (manual reconciliation outside of the Abel stack)
- Creditcard (via Adyen or Braintree)
- PayPal (via Braintree)
- Sepa direct debit (via Adyen)
- Company account (under construction) Next to that, customers can use a promocode to get a discount on their trip. This discount can sometimes be invoiced to a third party
Payment flow
At time of booking a trip, the payment method for the trip is set and stored. After booking, the planner checks whether it can be assigned to a vehicle and therefore accepted. If so, the planner requests to make a reservation. For creditcards and PayPal, an actual reservation is made on the card. For Sepa, we can only check whether the account number is on the Adyen blacklist. For cash and company accounts, no checks are made. After checkout by the driver (or in case of a paid cancellation) a charge is made. For creditcard and PayPal, these charges are guaranteed to succeed, as reservations were made. For Sepa, the charge is stored locally and in a weekly automated process the sum for each account will be debited. For cash, nothing will be done. For company accounts, it is added to the open invoice for that company, which will periodically be sent out via email.
Chargebacks
Payments via Creditcard, PayPal and Sepa can be charged back by the customer. For Creditcard and PayPal, you ofter have the opportunity to raise a protest and upload additional information. This can be done in the Adyen or Braintree portal. For Sepa a chargeback can also be that the user does not have enough balance on his account. The Abel stack is automatically informed of chargebacks when the webhooks are set-up correctly. Customer accounts can automatically be reminded of unpaid invoices and their accounts can be blocked, see Payment settings in the admin panel. In payment reminders, we request the customer to manually wire the amount to our bank account. For creditcard disputes, a chargeback can be reversed. Once a blocked customer pays all his invoices, he will be unblocked automatically and notified of that, see the “account unblocked” template.
Refunds
If you want to give a customer his money back (or simply withdraw the invoice without a refund in case it has not yet been paid), you can press the withdraw invoice link in the view of a specific trip in the admin panel. Once processed successfully, the customer gets an email informing him/ her of this. This email can be configured in the admin panel, under templates (part of Trip completed).
Promocodes and discounts
When a customer has entered a promocode, one or more discounts are added to his account. The planner automatically assigns up to one discount to the next trip when it is applicable. There are two types of discounts: those that can be invoiced to a third party and those that can’t.
Reconciliation
In the admin panel, under Reporting, Finance, you can export a set of CSV-files for reconciliation for a given period. These files are backend.csv, backend_refunds.csv, reconciliation.csv and payments.csv
backend.csv
This file contains a list of all trip made in the selected period. The following columns are relevant for accounting:
NCOMPANYID: the operating company that executed the tripfare_charged_incl: what we actually charged on the customer’s accountfare_charged_ex: fare_charged_incl without VATdiscount_incl: the discount we gave the customer (because he used a promocode for his trip)discount_ex: discount_incl without VAT You should ignore thefare_before_discount_incl(the fare that the customer would have to pay if he didn’t use a discount and his trip was executed successfully) andfare_before_discount_ex(without VAT)-columns, as you cannot derive from them what runs through your books. The difference between them is explained by thetripstatus_ex_refund-column, which can have the following values:customerArrived: a successful trip, where fare_before_discount = fare_charged + discountcustomerCancelled: in the first two minutes after booking and after the end of the promised pickup window, canceling is free (fare_charged = 0 and discount = 0), otherwise a canceling free (which can be defined in the admin panel) is charged (fare_charged >0 0 and/or discount > 0).driverCancelledBecauseOfClient: in the first two minutes after booking and after the end of the promised pickup window, canceling is free (fare_charged = 0 and discount = 0), otherwise a canceling free (which can be defined in the admin panel) is charged(fare_charged >0 0 and/or discount > 0).creditCardFailed: no revenue, as the booking was blocked before execution. For this case, fare_charged = 0 and discount = 0driverCancelledBecauseOfDriver: no revenue, as the trip was canceled because the driver had issues. For this case, fare_charged = 0 and discount = 0tripDeclined: no revenue, as the booking was canceled because the planner could not find a suitable driver. For this case, fare_charged = 0 and discount = 0 You should ignore thetripstatus-column, as it could contain a refunded (or in the future a chargedback) status, which should be added from thebackend_refunds.csvto make sure that trips that are repaid still run through the books. How you should account, depends on whether you work with separate operational companies (e.g. franchisees and self-employed drivers) or whether you employ the drivers yourself. In the following, we only list the booking of the ex. VAT value. The fare_charged_ex combined with the VAT should be booked against the receivables on your balance sheet to match with payments.
Marketplace model: operational companies are separate legal entities from the HQ
- Operating companies:
- Add fare_charged_ex and discount_ex amounts as revenues. For them, discount is also paid out, with the costs of this taken up by the HQ. Note that the VAT-percentage on the discount amount can be under debate with the IRS
- Add the desired percentage of these revenues as HQ costs
- HQ:
- Add the sum of the HQ costs as revenues (e.g. under Fee from franchisees)
- Add the discount_ex for lines with LWILLBEINVOICED=1 and an empty NCOMPANYID and fare_charged_ex for lines with an empty NCOMPANYID as e.g. Net revenues from canceled trips without driver assignment
- Add the discount_ex with LWILLBEINVOICED=0 from lines with a non-empty NCOMPANYID as Promocode costs. Note that the VAT-percentage on this amount can be under debate with the IRS
Integrated model: operations and HQ are in the same legal entity (or fiscal unit)
- Add fare_charged_ex and discount_ex as gross revenues
- Deduct discount_ex with LWILLBEINVOICED=0 as given discount
- The sum of this is fare_charged_ex and should be net revenues
backend_refunds.csv
This file contains almost the same columns as backend.csv, but only those trips that are refunded in the selected period. In the following, we only list the booking of the ex. VAT value. This, combined with the VAT should be booked (negatively) against the receivables on your balance sheet.
Marketplace model: operational companies are separate legal entities from the HQ
We assume that operating companies pay themselves for refunded trips. Therefore, the whole previously booked stream should be reverted
- Operating companies:
- Add fare_charged_ex and discount_ex amounts as negative revenues (preferably on a separate line).
- Add the desired percentage of these negative revenues as (negative) HQ costs (preferably on a separate line)
- HQ:
- Add the sum of the HQ costs as (negative) revenues (e.g. under Refunded fee from franchisees)
- Add the (negative) discount_ex for lines with LWILLBEINVOICED=1 and an empty NCOMPANYID and fare_charged_ex for lines with an empty NCOMPANYID under revenues as e.g. Refunded net revenues from canceled trips without driver assignment
- Add the (negative) discount_ex with LWILLBEINVOICED=0 from lines with a non-empty NCOMPANYID under costs as Refunded promocode costs.
Integrated model: operations and HQ are in the same legal entity (or fiscal unit)
- Add fare_charged_ex and discount_ex under revenues as refunded ross revenues
- Add discount_ex with LWILLBEINVOICED=0 as refunded given discount
- The sum of this is fare_charged_ex and should be net revenues
payments.csv
This file contains all payment information from all payment methods for the selected period on each trip. The normalized_status column can contain the following values:
succeeded: amount is received (chargedback or refunded can follow on this state)failed: amount could not be received (end state)refunded: amount is refunded (end state)chargedback: the customer charged back the amount (chargebackReversed can follow on this state)canceled: the reservation has been canceled, probably because the trip was canceled (end state)chargebackReversed: the chargeback was reversed and the amount is received. This will only happen for creditcard and PayPal chargebacks, as for Sepa we request the customer to pay manually to our bank account (end state)
reconciliation.csv
This file links payments (identified in this file by provider and payment_reference) to trips (identified with trip_id). Most of the reconciliation is done automatically when payment data is imported. This is an hourly process, although Adyen only provide updates once a day. Also, manual imports of payment data are automatically reconciled where possible. In the admin panel, users can manually reconcile open payments and trips.
Manual upload
Thee types of payments won’t be automatically registered by the Abel stack, as they arrive on the bank account specified in the email templates:
- Repayments after chargebacks for Sepa, credit card or PayPal
- Trips and payable discounts on company account invoices
- Cash payments These (re)payments can be uploaded in csv-format in the admin panel and then reconciled.