Generieke plugin data uitwisseling

De generieke plugin stuurt gestandaardiseerde JSON data naar een instelbare endpoint

De generieke plugin kan worden gactiveerd per account. 

Authenticatie

Een authenticatie sleutel moet worden ingesteld bij het activeren van de plugin. Deze wordt meegestuurd met de JSON verzoeken.

De consumerende partij controleert de header:

api-key

De api-key stuurt Scanfie op naar de consumer/ ontvangende partij.

Aanroepen van de JSON endpoint

De generieke plugin zal automatisch een JSON endpoints aanroepen, afhankelijk van de geactiveerde 'acties'. De plugin gebruikt altijd een POST http method met application/json als Content-Type.

De plugin verwacht een http status code 200 of 202 terug en zal 2 pogingen doen als deze status niet ontvangen wordt (of bij bijvoorbeeld een timeout).

Data definities

De generieke plugin schrijft prijzen weg als Double, met een maximale precisie van 6 decimalen. 

Datum en tijd worden verstuurd in ISO8601 formaat;  yyyy-MM-dd'T'HH:mm:ss.SSSZ

Data per financiële transactie

Deze actie wordt direct na het afrekenen van een sessie (tafel, groep of losse verkoop) uitgevoerd. De JSON payload na een financiële transactie is alsvolgt samengesteld:

{
    "receipt": {
        "includedInTurnover": true,
        "receiptId": "821dd2ed-d5f5-474f-9dd2-edd5f5d74fb1",
        "internalId": null,
        "totalPrice": 68.25,
        "dateTimeReceipt": "2024-09-17T14:44:57.179+0200",
        "items": [
            {
                "internalId": "2879543b-3370-4abf-b954-3b33704abf46",
                "quantity": 3,
                "storedPrice": 9.75,
                "storedNettPrice": 8.944953,
                "product": {
                    "name": "Cappuccino",
                    "internalId": "2dc286f7-fa71-4bdc-8286-f7fa718bdc3b",
                    "externalId": "",
                    "eanSku": null,
                    "priceIn": 3.25,
                    "priceEx": 2.981651,
                    "vat": 9
                }
            },
            {
                "internalId": "049f47eb-8e6c-46a6-9f47-eb8e6c46a6f8",
                "quantity": 6,
                "storedPrice": 58.5,
                "storedNettPrice": 53.669724,
                "product": {
                    "name": "Borrelplank 9st",
                    "internalId": "56f07526-2113-4265-b075-262113826507",
                    "externalId": "",
                    "eanSku": null,
                    "priceIn": 9.75,
                    "priceEx": 8.944954,
                    "vat": 9
                }
            }
        ]
    },
    "payment": {
        "paymentId": "821dd2ed-d5f5-474f-9dd2-edd5f5d74fb1",
        "paymentMethodExternalId": "1005",
        "paymentAmount": 68.25,
        "paymentTypeName": "Pin",
        "dateTimePayment": "2024-09-17T14:49:41.869+0200"
    }
}

De receipt node is een consolidatie van de bestellingen van een sessie (bijvoorbeeld een tafelrekening of groeprekening). De payment node is de financiële transactie geassocieerd met de bijbehorende omzet. 

De includedInTurnover waarde geeft aan of de omzet mag worden meegeteld, bij bijvoorbeeld Derving of Representatie zal deze waarde false zijn.

Data per verkoop (alternatieve koppeling)

De generieke plugin kan losse bestelling direct doorsturen naar een JSON endpoint, indien deze actie actief is. De inhoud van deze JSON ziet er alsvolgt uit:

{
    "order": {
        "orderId": 29,
        "internalId": null,
        "totalPrice": 9.75,
        "items": [
            {
                "internalId": "7d4715e6-b0b3-4781-8715-e6b0b3c7811d",
                "quantity": 1,
                "storedPrice": 9.75,
                "storedNettPrice": 8.944954,
                "product": {
                    "name": "Borrelplank 9st",
                    "internalId": "56f07526-2113-4265-b075-262113826507",
                    "externalId": "",
                    "eanSku": null,
                    "priceIn": 9.75,
                    "priceEx": 8.944954,
                    "vat": 9
                }
            }
        ]
    }
}
De inhoud van deze JSON is compacter en is vaak een onderdeel van een onderliggende sessie (tafel of groepsrekening).