Ga naar inhoud

Koppelingen

Eyetelligence is te koppelen aan externe applicaties, zoals bijvoorbeeld Sjapo. Dezelfde gegevens zijn zowel via onze API als via een MCP-server te benaderen. Beide gebruiken dezelfde API-key.

Informatie voor managers

Om te koppelen zul je een API-key moeten aanmaken en deze verstrekken aan de applicatie waarmee je koppelt (bijvoorbeeld Sjapo) zodat ze bij jouw gegevens kunnen. Neem contact met ons op zodat we jouw API-key kunnen verstrekken, dit kun je (nog) niet zelf doen. Dezelfde API-key werkt zowel voor de API als voor de MCP-server.

API

Voor specifiek maatwerk of concullega-applicaties bieden we een GraphQL API aan.

  • We maken gebruik van GraphQL
  • Het schema is beschikbaar op https://cockpit.eyetelligence.nl/api/api/schema
  • Het endpoint is: https://cockpit.eyetelligence.nl/api/api/query
  • De API-key moet als header meegegeven worden in de vorm: Authorization: Bearer [mijn token]
  • Er geldt een fair-use policy
  • Gebruik onderstaande query om de relevante data op te halen:
query ($period: Period!, $year: Int!) {
    sjapo(period: $period) {
        id
        employee {
            id
            employeeNumber
            name
            givenNames
            prefix
            surname
            email
            dateOfBirth
            address {
                country
                region
                city
                street
                houseNumber
                houseNumberAddition
                postcode
            }
        }
        startDate
        endDate
        hours(period: $period)
        attendances(period: $period) {
            id
            startCorrected
        }
        overtimeHours(period: $period)
        illnessHours(period: $period)
        shifts(period: $period) {
            id
            start
            end
            comment
            breakDuration
            shiftType
        }
        availabilities(period: $period) {
            id
            start
            end
            isAvailable
            comment
        }
        todos(period: $period) {
            label
        }
    }
    journals(year: $year) {
        employeeName
        employeeNumber
        period
        year
        run
        department
        costCenter
        costUnit
        percentage
        generalLedgerAccount
        componentName
        debit
        credit
        total
    }
}

Bijvoorbeeld:

curl https://cockpit.eyetelligence.nl/api/api/query \
    -H 'Authorization: Bearer apitoken' \
    --data-urlencode 'query=
        query ($period: Period!, $year: Int!) {
            sjapo (period: $period) {
                id
                employee {
                    id
                    employeeNumber
                    name
                    givenNames
                }
                startDate
                endDate
                hours(period: $period)
                shifts(period: $period) {
                    id
                    start
                    end
                    comment
                    shiftType
                }
                availabilities(period: $period) {
                    id
                    start
                    end
                    isAvailable
                    comment
                }
                todos(period: $period) {
                    label
                }
            }
            journals(year: $year) {
                employeeName
                employeeNumber
                period
                year
                run
                department
                costCenter
                costUnit
                percentage
                generalLedgerAccount
                componentName
                debit
                credit
                total
            }
        }
    ' \
    --data-urlencode 'variables={"period":{"year":2023,"period":7},"year":2024}'

Omzet

Gebruik de receiptItems-query om de verkochte regels over een datumbereik op te halen: per regel het aantal, de prijzen, het btw-percentage en de categorie. De omzetdag volgt de POS-instelling van het bedrijf, zodat dit overeenkomt met de overige omzetrapportages. Optellen per dag, categorie of vestiging doe je zelf.

query ($firm: FirmInputType!, $fromDate: Date!, $toDate: Date!) {
    receiptItems(firm: $firm, fromDate: $fromDate, toDate: $toDate) {
        id
        name
        quantity
        createdAt
        taxPercentage
        totalTaxExclusivePrice
        totalTaxInclusivePrice
        category
        categoryType
    }
}

Bijvoorbeeld:

curl https://cockpit.eyetelligence.nl/api/api/query \
    -H 'Authorization: Bearer apitoken' \
    --data-urlencode 'query=
        query ($firm: FirmInputType!, $fromDate: Date!, $toDate: Date!) {
            receiptItems(firm: $firm, fromDate: $fromDate, toDate: $toDate) {
                name
                quantity
                createdAt
                totalTaxInclusivePrice
                category
            }
        }
    ' \
    --data-urlencode 'variables={"firm":{"id":1},"fromDate":"2024-01-01","toDate":"2024-01-31"}'

Diensten

Gebruik de shifts-query om de geplande diensten uit het gepubliceerde rooster op te halen over een datumbereik. Per dienst krijg je start, eind, pauze, duur, het id van de ingeroosterde medewerker (of null bij een open dienst) en de verwachte loonkosten.

query ($firm: FirmInputType!, $fromDate: Date!, $toDate: Date!) {
    shifts(firm: $firm, fromDate: $fromDate, toDate: $toDate) {
        id
        start
        end
        breakDuration
        durationHours
        employeeId
        expectedCost
    }
}

Gewerkte diensten

Gebruik de attendances-query om de daadwerkelijk gewerkte diensten op te halen over een datumbereik. Alleen gereviewde diensten worden teruggegeven; startCorrected en endCorrected zijn de gecorrigeerde (gereviewde) tijden. Per dienst krijg je start, eind, pauze, netto gewerkte uren, het id van de medewerker en de werkelijke loonkosten. Voor de definitieve cijfers — inclusief de reservering van vakantie-uren — gebruik je de journals.

query ($firm: FirmInputType!, $fromDate: Date!, $toDate: Date!) {
    attendances(firm: $firm, fromDate: $fromDate, toDate: $toDate) {
        id
        startCorrected
        endCorrected
        breakDuration
        durationHoursCorrected
        employeeId
        actualCost
    }
}

MCP

Dezelfde GraphQL API is ook beschikbaar via een MCP-server (Model Context Protocol), zodat AI-clients zoals Claude Code het schema kunnen ontdekken en zelf queries en mutaties kunnen uitvoeren.

  • Het endpoint is: https://cockpit.eyetelligence.nl/mcp
  • Het transport is streamable HTTP
  • De API-key moet als header meegegeven worden in de vorm: Authorization: Bearer [mijn token]
  • De koppeling scoping (welke firma) en rechten volgen automatisch uit de API-key, precies zoals bij de API
  • De server ondersteunt introspectie, zoeken in het schema, en het uitvoeren van queries en mutaties
  • Er geldt een fair-use policy

Configureer de server bijvoorbeeld in een .mcp.json voor Claude Code:

{
  "mcpServers": {
    "cockpit-eyetelligence": {
      "type": "http",
      "url": "https://cockpit.eyetelligence.nl/mcp",
      "headers": { "Authorization": "Bearer apitoken" }
    }
  }
}