Voucher structure

And how they are packaged

When using our Connect API you will work with exports and voucher packages, in order to get all expenses and travel reports into your system whether it is for bookkeeping, payroll, or other financial reporting tasks.

When the package of reports is sent to an integration (recipient), the bookkeeping information can be grouped in a number of ways, depending on the customer's needs in combination with what the receiving system can process.

The export package (in JSON format) is what we will send to the recipient. It contains vouchers and voucherRows as building blocks and is basically how we structure our accounting and will dictate how the output from the recipient will look like. The export package is in the Voucher JSON format.

Check out this video to get all the details of our voucher data structures.

These are possible groupings of Exports, or voucher output format as we call them, a detailed description and examples of each format can be found here.

Voucher output formatVerificationListsType
One voucher per reportREPORT_PER_EXPENSE
One voucher per report (grouped per account/salary type)REPORT_PER_ACCOUNT
One voucher per userUSER_PER_EXPENSE
One voucher per user (grouped per account/salary type)USER_PER_ACCOUNT
One voucher per expenseEXPENSE
One voucher row per reportREPORT_PER_REPORT_PAID
One voucher row per userUSER_PER_REPORT_PAID
One voucher row per expenseREPORT_PER_EXPENSE_PAID

These will be configured by Findity when setting up a new branded integration. Any of these can be selected, but all selected variants must be tested in the integration.

To configure how the voucher structure should be generated, you will find the setting on the API recipient (see image below). If any options are missing, contact our support for assistance.

Configure voucher structure on recipient

Configure voucher structure on the recipient

In the JSON data, you can see what configuration is used to generate the voucher, under organizations-recipients and the field verificationListsType.

"organizations": [
{
    "recipients": [
        {
            "settings": {
                "ceIntegrationApi": {
                    "webHookUrl": "https://callbackservice.customer.se/callbacks/findity/",
                    "outputFormat": "metadata"
                },
                "reportDateType": "BULK_DATE"
            },
            "fieldMapping": [],
            "pluginName": "e93eaf96-9cb5-48dc-979e-26bfedb8f310",
            "actingIntegrationPluginName": "ce-integration-api",
            "verificationListsType": "REPORT_PER_ACCOUNT",
            "id": "8ab28c5188720bc801887605d1b50514"
        }

The same field is also available under the voucher in the field listType.

            "totalDebitAmount": 900.0,
            "ownerId": "8ab28c4f8c0ffec2018c10f99579015c",
            "integrationPluginName": "458b62f7-bb9c-4e35-af3d-5f720469b35f",
            "expenseRecordId": null,
            "listType": "REPORT_PER_EXPENSE",
            "organizationId": "8ab28c4f8c0192b8018c07d0733802dc",
            "vatType": "SEPARATELY",
            "sortOrder": 1,
            "recipientId": "8ab28c4f8c0192b8018c07d074c202de",
            "recipientName": "API Branded",

Examples of voucher packages

The voucher output format is a recipient setting and will control how the package is built. It can be an option that is visible on the recipient for the admin user. The voucher node is based on a report, expense, or user. The voucherRows contain the date, amount, account, dimension, etc. One expense, mileage, or per diem will have at least one voucherRow, but can of course have more. For example, a normal expense will have one debit row, one credit row (if bookkeeping), and one VAT row.

Two reports are used as a base in all examples to show how the JSON export package is generated.

Report 1

  • User: Anna Användare 8ab28c4e7ccc3f6d017ccc560c720001
  • Two expenses
  • ReportId: 2f22d54f6b3f406ca415147976e0a382

Report 2

  • User: Stefan Eklund 8ab28c4e7ca771d4017cb898ba501a19
  • One expense
  • One Mileage
  • One Per diem
  • ReportId: d3c59206e03a49d8873c01b956a39f28

One voucher per report

VerificationListType: REPORT_PER_EXPENSE

{
   "vouchers": [
       {
           "voucherRows": [
               {
                   "Expense 1"
               },
               {
                   "Expene 2"
               }
           ],
               "ownerId": "Anna Användare",
               "expenseReportId": "Report 1"
       },
       {
           "voucherRows": [
               {
                       "Expenses"
               },   
               {
                       "Per diem"
               },
               {
                       "Mileage": 
               }
           ],
           "ownerId": "Stefan Eklund",
           "expenseReportId": "Report 2"
       }
   ]
}

One voucher per report (grouped)

VerificationListType: REPORT_PER_ACCOUNT

With this setting, we get one voucherRow per each account number, tax number or salary type with an aggregated amount.

{
   "vouchers": [
       {
           "voucherRows": [
               {
                   "amount": 52.95,
                   "text": "Moms"
               },
               {
                   "amount": 341.23,
                   "text": "Utlägg"
               }
           ],
           "expenseRecordIds": [
               "ec0e924c5fcb4e5c922032b487fd25ce",
               "951ca21df38c42bba8c7c1978248a88f"
           ],
           "ownerId": "Anna Användare",
           "expenseReportId": "Report 1"
       },
       {
           "voucherRows": [
               {
                   "text": "Moms"
               },
               {
                   "text": "Utlägg"
               },
               {
                   "text": "Skattepliktigt traktamente"
               },
               {
                   "text": "Milersättning skattepl"
               },
               {
                   "text": "Skattefritt traktamente inrikes"
               },
               {
                   "text": "Milersättning skattefritt"
               },
               {
                   "text": "Milersättning passertillegg"
               }  
           ],
           "ownerId": "Stefan Eklund",
           "expenseReportId": "Report 2"
       }
   ]
}

This is a visualization of how the aggregated grouping works in the image below, and in the JSON above we see that report 1 is one voucher and two expenseRecordIds that reference the two expenses.

Grouped by

Grouped and aggrigated

One voucher per user

VoucherListType: USER_PER_EXPENSE

Used mostly for salary recipients. It is similar to a voucher per report, but the voucher is based on the user. I.e if the user has more than one report they will be in the same voucher.

One voucher per user (grouped)

VoucherListType: USER_PER_ACCOUNT

Same as above but accounts are aggregated.

One voucher per Expense

VerificationListType: EXPENSE

{
   "vouchers": [
       {
           "voucherRows": ["perdiem"],
           "ownerId": "Stefan Eklund",
           "expenseReportId": "Report 2"
       },
       {
           "voucherRows": ["Expense"],
           "ownerId": "Stefan Eklund",
           "expenseReportId": "Report 2"
       },
       {
           "voucherRows": ["Expense"],
           "ownerId": "Anna Användarre",
           "expenseReportId": "Report 1"
       },
       {
           "voucherRows": ["Expense"],
           "ownerId": "Anna Användarre",
           "expenseReportId": "Report 1"
       },
       {
           "voucherRows": ["Mileage"],
           "ownerId": "Stefan Eklund",
           "expenseReportId": "Report 2"
       }
   ]
}

One voucher row per report

VoucherListType: REPORT_PER_REPORT_PAID

One voucher and voucher row per report, without accounting. The voucher row aggregates all expenses for that report. Useful for payment recipients or other output where no accounting is needed.

{
   "vouchers": [
       {
           "voucherRows": [
               {
                   "amount": 394.18,
                   "taxAmount": 52.95
               }
           ],
           "ownerId": "Anna Användare",
           "expenseReportId": "Report 1"
       },
       {
           "voucherRows": [
               {
                   "amount": 7888.82,
                   "taxAmount": 3.25
               }
           ],
           "ownerId": "Stefan Eklund",
           "expenseReportId": "Report 2"
       }
   ]
}

One voucher row per user

VoucherListType: USER_PER_REPORT_PAID

One voucher and voucher row per user, without accounting. The voucher row aggregates all expenses for the users. Useful for payment recipients or other output where no accounting is needed.

{
   "vouchers": [
       {
           "voucherRows": [
               {
                   "amount": 394.18,
                   "taxAmount": 52.95,
                   "amountIncludingTax": 394.18
               }
           ],
           "ownerId": "Anna Användare",
           "expenseReportId": "Report 1"
       },
       {
           "voucherRows": [
               {
                   "amount": 7888.82,
                   "taxAmount": 3.25
               }
           ],
           "ownerId": "Stefan Eklund",
           "expenseReportId": "Report 2"
       }
   ]
}

One voucher row per expense

VoucherListType: REPORT_PER_EXPENSE_PAID

This bad boy outputs one voucher per report and one voucher row per expense without accounting. Useful for payment recipients or other output where no accounting is needed.

{
   "vouchers": [
       {
           "voucherRows": [
               {
                   "amount": 96,
                   "taxAmount": 21,
                   "amountIncludingTax": 96,
                   "expenseRecordId": "ec0e924c5fcb4e5c922032b487fd25ce",
                   "expenseReportId": "Report 1"
               },
               {
                   "amount": 298.18,
                   "taxAmount": 31.95,
                   "amountIncludingTax": 298.18,
                   "expenseRecordId": "951ca21df38c42bba8c7c1978248a88f",
                   "expenseReportId": "Report 1"
               }
           ],
           "ownerId": "Anna Användare",
           "expenseReportId": "Report 1"
       },
       {
           "voucherRows": [
               {
                   "amount": 640.8,
                   "expenseRecordId": "1491a03117394fe091cbed43f5b58e7f",
                   "expenseReportId": "Report 2"
               },
               {
                   "amount": 30.32,
                   "taxAmount": 3.25,
                   "expenseRecordId": "80a4819ea3614cf88bdbd4b454474e55",
                   "expenseReportId": "Report 2"
               },
               {
                   "amount": 7217.7,
                   "description": "Bergen, Norway - Kongsberg, Norway",
                   "expenseRecordId": "f86117a59a3a46b3bc40f3939627d39a",
                   "expenseReportId": "Report 2"
               }
           ],
           "ownerId": "Stefan Eklund",
           "expenseReportId": "Report 2"
       }
   ]
}