openapi: "3.0.3"
info:
  title: FIKO TOUCHPOINT APIs v2.2
  version: "1.0"
  description: |
    CRUD APIs for FIKO resource model v2.2. This version of the API corresponds with version 2.2
    of the data model in [Lucid Chart](https://lucid.app/lucidchart/50c0ff9d-48ba-4ea9-8182-10bede07d3b1/edit?page=LL7PJg1Y_GOA>).
servers:
  - url: https://services.acc.api.htm.nl/touchpointfiko/1.0
paths:
  /transactionitems:
    post:
      summary: Add one ore more finanicial transaction items in bulk.
      description: Add one ore more finanicial transaction items in bulk.
      tags:
        - Transactions v2.2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TransactionItemsBulkRequestBody"
            examples:
              Add single transaction item:
                summary: Add single transaction item
                description: Add single transaction item of type remittance.
                value:
                  transactionItems:
                    - transactionType: remittance
                      sourceName: HTM-kassa
                      transactionId: "1001236"
                      transactionLineId: null
                      name: Kassa afdracht
                      quantity: 1
                      taxCode: null
                      amountExclTax: null
                      amountInclTax: 10000
                      amountTax: null
                      occurredOn: 2024-10-04T00:00:00Z
                      type: debit
                      articleNumber: null
              Add multiple transaction items:
                summary: Add multiple transaction items
                description: Add multiple transaction items of type sales.
                value:
                  transactionItems:
                    - transactionType: sales
                      sourceName: HTM-kassa
                      transactionId: "1001236"
                      transactionLineId: "1"
                      name: HTM Maandkorting 20% chipkaart
                      quantity: 1
                      taxCode: V21
                      amountExclTax: 100
                      amountInclTax: 121
                      amountTax: 21
                      occurredOn: 2024-10-04T00:00:00Z
                      type: debit
                      articleNumber: "4031"
                    - transactionType: sales
                      sourceName: HTM-kassa
                      transactionId: "1001237"
                      transactionLineId: "1"
                      name: HTM Maandkorting 20% chipkaart
                      quantity: 1
                      taxCode: V21
                      amountExclTax: 100
                      amountInclTax: 121
                      amountTax: 21
                      occurredOn: 2024-10-04T00:00:00Z
                      type: debit
                      articleNumber: "4031"
      responses:
        "202":
          description: Accepted
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BulkResponseBody"
              examples:
                Array of transaction items accepted:
                  summary: Array of transaction items accepted
                  description: |
                    The array of transaction items was accepted successfully.
                    The transaction items will be processed asynchronously.
                    In the response body the consumer will find information on how to retrieve the processing status.
                  value:
                    startTime: 2025-02-14T05:32:47.0672237Z
                    status: Running
                    clientTrackingId: 08584620957189579629541919368CU00
                    callbackurl: https://api.integratielaag.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
                    retryAfter: 10
      security:
        - default: []
      x-auth-type: Application & Application User
      x-throttling-tier: Unlimited
  /transactionitems/responsestatus/{x}:
    get:
      tags:
        - Transactions v2.2
      summary: Get the status of the transaction items POST.
      description: Get the status of the asynchronous transaction items POST processing.
      parameters:
        - in: path
          name: x
          schema:
            type: string
            example: "/webhooks/workflow/scaleUnits/prod-00/workflows/9cd96b77c0b94b31832778569f8ef2f9/runs/08584360762870979316858418397CU00/operations/29a6089c-76db-4b34-a333-f94de8e47f4e?api-version=2022-05-01%5Cu0026sp=%2Fruns%2F08584360762870979316858418397CU00%2Foperations%2F29a6089c-76db-4b34-a333-f94de8e47f4e%2Fread%5Cu0026sv=1.0%5Cu0026sig=McXcouhY1ctfz7PxNg9RDOYEm2BiBVue21LVZhTqC_w%5Cu0026code=C6PDQGl3MGwt8KyA9BjWDdQbzBwm-01gEmZaTp-hPJ5UAzFuPU-thg%3D%3D"
          required: true
          description: The callback URL of the transaction items POST.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetResponseStatus"
              examples:
                Batch successfully processed:
                  summary: Batch successfully processed
                  description: |
                    Body of a batch of transaction items that was successfully processed. 
                    A number of transaction items were inserted and another number was updated.
                  value:
                    summary:
                      created: 15
                      updated: 2
                      total: 17
        "409":
          description: Conflict
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/409Response"
              examples:
                A transaction item already exists:
                  summary: A transaction item already exists
                  description: |
                    In this batch of transaction items, a transaction with same transactionId and
                    transactionLineId already exists. Therefore, the whole batch is rolled back and
                    rejected.
                  value:
                    code: "409"
                    type: error
                    message: conflict
                    description: A transaction with the same TransactionId and TransactionLineId already exists.
                    errors:
                      - detail: Transaction is a duplicate of a transaction already in the system.
                        pointer: "#/transactionItems/0"
                        transactionId: 1ad109d3-fd7d-4b6f-872b-220d492f385f
                        transactionLineId: fee907dd-e59d-44f5-a63b-bbdec38f79b7
      security:
        - default: []
      x-auth-type: Application & Application User
      x-throttling-tier: Unlimited
components:
  securitySchemes:
    default:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: https://api.integratielaag.nl/authorize
          scopes: {}
  schemas:
    unavailable:
      type: object
    TransactionItemsGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#TransactionItem
        value:
          type: array
          items:
            $ref: "#/components/schemas/TransactionItem"
    TransactionItem:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: 6962e56b-c7dd-3336-9627-6687f007ee07
        transactionItemRowId:
          type: integer
          example: 3231
        transactionItemId:
          type: string
          example: afce35b2-1dff-4ace-98d0-4b9ac405c87d
        transactionType:
          type: string
          enum:
            - sales
          example: sales
        sourceName:
          type: string
          example: HTM-website
        transactionId:
          type: string
          example: "1001236"
        transactionLineId:
          type: string
          nullable: true
          example: "1"
        name:
          type: string
          example: HTM Maandkorting 20%
        quantity:
          type: integer
          example: 1
        taxCode:
          type: string
          example: V21
        amountExclTax:
          type: integer
          example: 100
        amountInclTax:
          type: integer
          example: 121
        amountTax:
          type: integer
          example: 21
        occurredOn:
          type: string
          format: date-time
          example: 2024-10-04T00:00:00Z
        type:
          type: string
          enum:
            - debit
            - credit
          example: debit
        articleNumber:
          type: string
          nullable: true
          example: "4031"
        status:
          type: string
          enum:
            - created
            - succeeded
            - failed
            - returned to trx-db
            - returned to src
            - re-entered
          example: created
        aggregationReference:
          type: string
          nullable: true
          example: FIKO-123456
        accountingSystemReference:
          type: string
          nullable: true
          example: U4F-123456
          required:
            - transactionItemId
            - transactionType
            - sourceName
            - transactionId
            - name
            - quantity
            - taxCode
            - amountExclTax
            - amountInclTax
            - amountTax
            - occurredOn
            - type
            - status
    TransactionItemsBulkRequestBody:
      type: object
      properties:
        transactionItems:
          type: array
          items:
            type: object
            properties:
              transactionItemId:
                type: string
                format: uuid
                example: afce35b2-1dff-4ace-98d0-4b9ac405c87d
              transactionType:
                type: string
                enum:
                  - sales
                example: sales
              sourceName:
                type: string
                example: HTM-website
              transactionId:
                type: string
                example: "1001236"
              transactionLineId:
                type: string
                nullable: true
                example: "1"
              name:
                type: string
                example: HTM Maandkorting 20%
              quantity:
                type: integer
                example: 1
              taxCode:
                type: string
                example: V21
              amountExclTax:
                type: integer
                example: 100
              amountInclTax:
                type: integer
                example: 121
              amountTax:
                type: integer
                example: 21
              occurredOn:
                type: string
                format: date-time
                example: 2024-10-04T00:00:00Z
              type:
                type: string
                enum:
                  - debit
                  - credit
                example: debit
              articleNumber:
                type: string
                nullable: true
                example: "4031"
            required:
              - sourceName
              - transactionType
              - transactionId
              - name
              - quantity
              - taxCode
              - amountExclTax
              - amountInclTax
              - amountTax
              - occurredOn
              - type
    BulkResponseBody:
      type: object
      properties:
        startTime:
          type: string
          format: date-time
          example: 2025-02-14T05:32:47.0672237Z
        status:
          type: string
          example: Running
        clientTrackingId:
          type: string
          example: 08584620957189579629541919368CU00
        callbackurl:
          type: string
          format: uri
          example: https://services.api.htm.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
        retryAfter:
          type: integer
          example: 10
      required:
        - startTime
        - status
        - clientTrackingId
        - callbackurl
        - retryAfter
    TransactionItemsBulkBadRequestResponseBody:
      type: object
      properties:
        type:
          type: string
          format: url
          example: https://htm.nl/api/v1/probs/fiko/validationerror
        title:
          type: string
          example: Transaction validation failed.
        detail:
          type: string
          example: One ore more transactions in the request are invalid.
        instance:
          type: string
          example: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b
        errors:
          type: array
          items:
            type: object
            properties:
              detail:
                type: string
                example: Transaction is a duplicate of a transaction already in the system.
              pointer:
                type: string
                example: "#/transactionItems/0"
              transactionId:
                type: string
                example: 1ad109d3-fd7d-4b6f-872b-220d492f385f
              transactionLineId:
                type: string
                example: fee907dd-e59d-44f5-a63b-bbdec38f79b7
            required:
              - detail
              - pointer
              - transactionId
      required:
        - type
        - title
        - detail
        - instance
    TransactionItemsPatchRequestBody:
      type: object
      properties:
        name:
          type: string
          nullable: true
          example: HTM Maandkorting 20%
        quantity:
          type: integer
          nullable: true
          example: 1
        taxCode:
          type: string
          nullable: true
          example: V21
        amountExclTax:
          type: integer
          nullable: true
          example: 100
        amountInclTax:
          type: integer
          nullable: true
          example: 121
        amountTax:
          type: integer
          nullable: true
          example: 21
        occurredOn:
          type: string
          nullable: true
          format: date-time
          example: 2024-10-04T00:00:00Z
        type:
          type: string
          nullable: true
          enum:
            - debit
            - credit
          example: debit
        articleNumber:
          type: string
          nullable: true
          example: 4031
        status:
          type: string
          enum:
            - created
            - succeeded
            - failed
            - returned to trx-db
            - returned to src
            - re-entered
          example: created
        aggregationReference:
          type: string
          nullable: true
          example: FIKO-123456
        accountingSystemReference:
          type: string
          nullable: true
          example: U4F-123456
    TransactionItemsPatchResponseBody:
      type: object
      properties:
        transactionItemId:
          type: string
          format: uuid
          example: afce35b2-1dff-4ace-98d0-4b9ac405c87d
      required:
        - transactionItemId
    ProcessingFailuresPostRequestBody:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
          example: 2022-01-01 00:00:00
        element:
          type: string
          example: costCenter
        value:
          type: string
          example: 84955
        reasonCode:
          type: string
          example: "002"
        reasonDescription:
          type: string
          example: Contra account does not exist.
        resolved:
          type: boolean
          example: false
        change:
          type: string
          nullable: true
          example: Adapt config
      required:
        - timestamp
        - element
        - value
        - reasonCode
        - reasonDescription
        - resolved
    ProcessingFailuresPostResponseBody:
      type: object
      properties:
        processingFailureId:
          type: string
          format: uuid
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
      required:
        - processingFailureId
    ProcessingFailuresGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#ProcessingFailure
        value:
          type: array
          items:
            $ref: "#/components/schemas/ProcessingFailure"
    ProcessingFailure:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: 464155e4-0018-3676-8102-42429f14f2ed
        processingFailureRowId:
          type: integer
          example: 9
        processingFailureId:
          type: string
          format: uuid
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
        transactionItemId:
          type: string
          format: uuid
          example: 2d77d978-7141-499a-84ad-93fad8ee03ce
        timestamp:
          type: string
          format: date-time
          example: 2022-01-01 00:00:00
        element:
          type: string
          example: costCenter
        value:
          type: string
          example: 84955
        reasonCode:
          type: string
          example: "002"
        reasonDescription:
          type: string
          example: Contra account does not exist.
        resolved:
          type: boolean
          example: false
        change:
          type: string
          nullable: true
          example: Adapt config
      required:
        - processingFailureId
        - transactionItemId
        - timestamp
        - element
        - value
        - reasonCode
        - reasonDescription
        - resolved
    ProcessingFailuresPatchRequestBody:
      type: object
      properties:
        resolved:
          type: boolean
          nullable: true
          example: true
        change:
          type: string
          nullable: true
          example: Adapt config
    ProcessingFailuresPatchResponseBody:
      type: object
      properties:
        processingFailureId:
          type: string
          format: uuid
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
      required:
        - processingFailureId
    TransactionAuditTrailsPostRequestBody:
      type: object
      properties:
        user:
          type: string
          example: fiko
        timestamp:
          type: string
          format: date-time
          example: 2022-01-01 00:00:00
        action:
          type: string
          enum:
            - create
            - update
          example: create
        status:
          type: string
          enum:
            - created
            - succeeded
            - failed
            - returned to trx-db
            - returned to src
            - re-entered
          example: created
        description:
          type: string
          nullable: true
          example: Transaction created.
        correlationId:
          type: string
          format: uuid
          nullable: true
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
      required:
        - user
        - timestamp
        - action
        - status
    TransactionAuditTrailsPostResponseBody:
      type: object
      properties:
        transactionAuditTrailId:
          type: string
          format: uuid
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
      required:
        - transactionAuditTrailId
    TransactionAuditTrailsGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#TransactionAuditTrail
        value:
          type: array
          items:
            $ref: "#/components/schemas/TransactionAuditTrail"
    TransactionAuditTrail:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: a669b92c-1a10-3dd6-b4d1-efaed0629db8
        transactionAuditTrailRowId:
          type: integer
          example: 8218
        transactionAuditTrailId:
          type: string
          format: uuid
          example: afce35b2-1dff-4ace-98d0-4b9ac405c87d
        transactionItemId:
          type: string
          format: uuid
          example: d667d293-aa82-4c9e-9b10-77cffc9058a1
        user:
          type: string
          example: fiko
        timestamp:
          type: string
          format: date-time
          example: 2022-01-01 00:00:00
        action:
          type: string
          enum:
            - create
            - update
          example: create
        status:
          type: string
          enum:
            - created
            - succeeded
            - failed
            - returned to trx-db
            - returned to src
            - re-entered
          example: created
        description:
          type: string
          nullable: true
          example: Transaction created.
        correlationId:
          type: string
          format: uuid
          nullable: true
          example: a3891560-3084-42cb-867c-f289e7cda47d
      required:
        - transactionAuditTrailId
        - transactionItemId
        - user
        - timestamp
        - action
        - status
    BookingProcessesGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#BookingProcess
        value:
          type: array
          items:
            $ref: "#/components/schemas/BookingProcess"
    BookingProcess:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: 9e8b14cf-c03a-3be7-b9ec-ef5dd6948217
        bookingProcessRowId:
          type: integer
          example: 10
        bookingProcessId:
          type: string
          format: uuid
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
        name:
          type: string
          example: Verkooptransacties
        transactionType:
          type: string
          enum:
            - sales
          example: sales
        identifyingFieldName:
          type: string
          nullable: true
          example: articleNumber
      required:
        - bookingProcessId
        - name
        - transactionType
    BookingProcessesPostRequestBody:
      type: object
      properties:
        name:
          type: string
          example: Verkooptransacties
        transactionType:
          type: string
          enum:
            - sales
          example: sales
        identifyingFieldName:
          type: string
          nullable: true
          example: articleNumber
      required:
        - name
        - transactionType
    BookingProcessesPostResponseBody:
      type: object
      properties:
        bookingProcessId:
          type: string
          format: uuid
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
      required:
        - bookingProcessId
    BookingProcessesPatchRequestBody:
      type: object
      properties:
        name:
          type: string
          nullable: true
          example: Verkooptransacties
        transactionType:
          type: string
          nullable: true
          enum:
            - sales
          example: sales
        identifyingFieldName:
          type: string
          nullable: true
          example: articleNumber
    BookingProcessesPatchResponseBody:
      type: object
      properties:
        bookingProcessId:
          type: string
          format: uuid
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
      required:
        - bookingProcessId
    BookingMetadataGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#BookingMetadata
        value:
          type: array
          items:
            $ref: "#/components/schemas/BookingMetadata"
    BookingMetadata:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: f477014f-8bf2-3e72-b9b6-1bb609840b61
        bookingMetadataRowId:
          type: integer
          example: 13
        bookingMetadataId:
          type: string
          format: uuid
          example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
        bookingProcessId:
          type: string
          format: uuid
          example: 37a8095b-19db-498f-9349-5f37d21c5bdf
        name:
          type: string
          example: Dagkaarten
        description:
          type: string
          example: Dagkaarten nov. 2024
        documentCode:
          type: string
          example: OPBR-FIKO
        hasSeparateTaxLine:
          type: boolean
          example: true
        hasLinePerIdentifyingField:
          type: boolean
          example: true
        hasLinePerSource:
          type: boolean
          example: true
        hasLinePerConcession:
          type: boolean
          example: true
        validFrom:
          type: string
          format: date-time
          example: 2022-01-01 00:00:00
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
      required:
        - bookingMetadataId
        - bookingProcessId
        - name
        - description
        - documentCode
        - hasSeparateTaxLine
        - hasLinePerIdentifyingField
        - hasLinePerSource
        - hasLinePerConcession
        - validFrom
    BookingMetadataPostRequestBody:
      type: object
      properties:
        name:
          type: string
          example: Dagkaarten
        description:
          type: string
          example: Dagkaarten nov. 2024
        documentCode:
          type: string
          example: OPBR-FIKO
        hasSeparateTaxLine:
          type: boolean
          example: true
        hasLinePerIdentifyingField:
          type: boolean
          example: true
        hasLinePerSource:
          type: boolean
          example: true
        hasLinePerConcession:
          type: boolean
          example: true
        validFrom:
          type: string
          format: date-time
          example: 2022-01-01 00:00:00
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
      required:
        - name
        - description
        - documentCode
        - hasSeparateTaxLine
        - hasLinePerIdentifyingField
        - hasLinePerSource
        - hasLinePerConcession
        - validFrom
    BookingMetadataPostResponseBody:
      type: object
      properties:
        bookingMetadataId:
          type: string
          format: uuid
          example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
      required:
        - bookingMetadataId
    BookingMetadataPatchRequestBody:
      type: object
      properties:
        name:
          type: string
          nullable: true
          example: Dagkaarten
        description:
          type: string
          nullable: true
          example: Dagkaarten nov. 2024
        documentCode:
          type: string
          nullable: true
          example: OPBR-FIKO
        hasSeparateTaxLine:
          type: boolean
          nullable: true
          example: true
        hasLinePerIdentifyingField:
          type: boolean
          nullable: true
          example: true
        hasLinePerSource:
          type: boolean
          nullable: true
          example: true
        hasLinePerConcession:
          type: boolean
          nullable: true
          example: true
        validFrom:
          type: string
          format: date-time
          nullable: true
          example: 2022-01-01 00:00:00
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
    BookingMetadataPatchResponseBody:
      type: object
      properties:
        bookingMetadataId:
          type: string
          format: uuid
          example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
      required:
        - bookingMetadataId
    BookingGroupFieldsPostRequestBody:
      type: object
      properties:
        identifyingFieldValue:
          type: string
          example: 1737
          required:
            - identifyingFieldValue
    BookingGroupFieldsPostResponseBody:
      type: object
      properties:
        bookingGroupFieldId:
          type: string
          format: uuid
          example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
          required:
            - bookingGroupFieldId
    BookingGroupFieldsGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#BookingGroupField
        value:
          type: array
          items:
            $ref: "#/components/schemas/BookingGroupField"
    BookingGroupField:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: ef520db0-4e3d-39a0-926f-f37ad49bb7cf
        bookingGroupFieldRowId:
          type: integer
          example: 8
        bookingGroupFieldId:
          type: string
          format: uuid
          example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
        bookingMetadataId:
          type: string
          format: uuid
          example: 12b4d128-0ab8-4a4a-944d-25b83de38b27
        identifyingFieldValue:
          type: string
          example: 1737
      required:
        - bookingGroupFieldId
        - bookingMetadataId
        - identifyingFieldValue
    BookingLineMetadataPostRequestBody:
      type: object
      properties:
        name:
          type: string
          example: Dagkaart - BUS
        description:
          type: string
          example: Dagkaarten nov. 2024 BUS
        sourceMetadataId:
          type: string
          format: uuid
          example: null
          nullable: true
        identifyingFieldValue:
          type: string
          example: null
          nullable: true
        concessionId:
          type: integer
          example: 1
          nullable: true
        isContraAccount:
          type: boolean
          example: false
        lineType:
          type: string
          enum:
            - summary
            - analysis
            - tax
          example: summary
        lineSense:
          type: string
          enum:
            - debit
            - credit
          example: credit
        department:
          type: string
          example: 900
        costType:
          type: string
          example: 84956
        costCenter:
          type: string
          example: 603031
          nullable: true
        articleName:
          type: string
          example: dagkaart
          nullable: true
        extRef1:
          type: string
          example: null
          nullable: true
        extRef2:
          type: string
          example: null
          nullable: true
        extRef3:
          type: string
          example: 2025-02-17
          nullable: true
        extRef4:
          type: string
          example: null
          nullable: true
        extRef5:
          type: string
          example: Webshop
          nullable: true
        extRef6:
          type: string
          example: null
          nullable: true
      required:
        - name
        - description
        - isContraAccount
        - lineType
        - lineSense
        - department
        - costType
    BookingLineMetadataPostResponseBody:
      type: object
      properties:
        bookingLineMetadataId:
          type: string
          format: uuid
          example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
      required:
        - bookingLineMetadataId
    BookingLineMetadataGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#BookingLineMetadata
        value:
          type: array
          items:
            $ref: "#/components/schemas/BookingLineMetadata"
    BookingLineMetadata:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: c0afe2d6-f4b2-321a-ae6b-2dc72b25ebc1
        bookingLineMetadataRowId:
          type: integer
          example: 10
        bookingLineMetadataId:
          type: string
          format: uuid
          example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
        bookingMetadataId:
          type: string
          format: uuid
          example: 12b4d128-0ab8-4a4a-944d-25b83de38b27
        name:
          type: string
          example: Dagkaart - RAIL
        description:
          type: string
          example: Dagkaarten nov. 2024 RAIL
        sourceMetadataId:
          type: string
          format: uuid
          example: db7e5899-3904-4b53-bd62-a56aef34c66d
          nullable: true
        identifyingFieldValue:
          type: string
          example: null
          nullable: true
        concessionId:
          type: integer
          example: 1
          nullable: true
        isContraAccount:
          type: boolean
          example: false
        lineType:
          type: string
          enum:
            - summary
            - analysis
            - tax
          example: summary
        lineSense:
          type: string
          enum:
            - debit
            - credit
          example: credit
        department:
          type: string
          example: 900
        costType:
          type: string
          example: 84956
        costCenter:
          type: string
          example: 603031
          nullable: true
        articleName:
          type: string
          example: dagkaart
          nullable: true
        extRef1:
          type: string
          example: null
          nullable: true
        extRef2:
          type: string
          example: null
          nullable: true
        extRef3:
          type: string
          example: 2025-02-17
          nullable: true
        extRef4:
          type: string
          example: null
          nullable: true
        extRef5:
          type: string
          example: Webshop
          nullable: true
        extRef6:
          type: string
          example: null
          nullable: true
      required:
        - bookingLineMetadataId
        - bookingMetadataId
        - name
        - description
        - isContraAccount
        - lineType
        - lineSense
        - department
        - costType
    BookingLineMetadataPatchRequestBody:
      type: object
      properties:
        name:
          type: string
          example: Dagkaart - RAIL
          nullable: true
        description:
          type: string
          example: Dagkaarten nov. 2024 RAIL
          nullable: true
        sourceMetadataId:
          type: string
          format: uuid
          example: null
          nullable: true
        identifyingFieldValue:
          type: string
          example: null
          nullable: true
        concessionId:
          type: integer
          example: 1
          nullable: true
        isContraAccount:
          type: boolean
          example: false
          nullable: true
        lineType:
          type: string
          enum:
            - summary
            - analysis
            - tax
          example: summary
          nullable: true
        lineSense:
          type: string
          enum:
            - debit
            - credit
          example: credit
          nullable: true
        department:
          type: string
          example: 900
          nullable: true
        costType:
          type: string
          example: 84956
          nullable: true
        costCenter:
          type: string
          example: 603031
          nullable: true
        articleName:
          type: string
          example: dagkaart
          nullable: true
        extRef1:
          type: string
          example: null
          nullable: true
        extRef2:
          type: string
          example: null
          nullable: true
        extRef3:
          type: string
          example: 2025-02-17
          nullable: true
        extRef4:
          type: string
          example: null
          nullable: true
        extRef5:
          type: string
          example: Webshop
          nullable: true
        extRef6:
          type: string
          example: null
          nullable: true
    BookingLineMetadataPatchResponseBody:
      type: object
      properties:
        bookingLineMetadataId:
          type: string
          format: uuid
          example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
      required:
        - bookingLineMetadataId
    MetadataAuditTrailsGetResponseBody:
      type: object
      properties:
        metadataAuditTrails:
          type: array
          items:
            type: object
            properties:
              metadataAuditTrailId:
                type: string
                format: uuid
                example: b6161270-eb08-4242-90ec-967d5db62070
              source:
                type: string
                example: FMT
              endpoint:
                type: string
                format: url
                example: https://dev.api.htm.nl/v2/productmetadata
              operation:
                type: string
                enum:
                  - GET
                  - POST
                  - PATCH
                  - DELETE
                example: POST
              requestBody:
                type: string
                format: json
                example: { "json": "data" }
              responseCode:
                type: integer
                example: 200
              responseBody:
                type: string
                format: json
                example: { "json": "data" }
              user:
                type: string
                example: ad.vogelaar
              timestamp:
                type: string
                format: date-time
                example: 2022-01-01 00:00:00
              correlationId:
                type: string
                format: uuid
                nullable: true
                example: 662de47c-d809-41bd-b3f6-5c7e1dc5c030
            required:
              - metadataAuditTrailId
              - source
              - endpoint
              - operation
              - requestBody
              - responseCode
              - responseBody
              - user
              - timestamp
        href:
          type: string
          nullable: true
          example: null
      required:
        - metadataAuditTrails
    MetadataAuditTrailsPostRequestBody:
      type: object
      properties:
        source:
          type: string
          example: FMT
        endpoint:
          type: string
          format: url
          example: https://dev.api.htm.nl/v2/productmetadata
        operation:
          type: string
          enum:
            - GET
            - POST
            - PATCH
            - DELETE
          example: POST
        requestBody:
          type: string
          format: json
          example: { "json": "data" }
        responseCode:
          type: integer
          example: 200
        responseBody:
          type: string
          format: json
          example: { "json": "data" }
        user:
          type: string
          example: ad.vogelaar
        timestamp:
          type: string
          format: date-time
          example: 2022-01-01 00:00:00
        correlationId:
          type: string
          format: uuid
          nullable: true
          example: 662de47c-d809-41bd-b3f6-5c7e1dc5c030
      required:
        - source
        - endpoint
        - operation
        - requestBody
        - responseCode
        - responseBody
        - user
        - timestamp
    MetadataAuditTrailsPostResponseBody:
      type: object
      properties:
        metadataAuditTrailId:
          type: string
          format: uuid
          example: b6161270-eb08-4242-90ec-967d5db62070
      required:
        - metadataAuditTrailId
    TaxMetadataGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#TaxMetadata
        value:
          type: array
          items:
            $ref: "#/components/schemas/TaxMetadata"
    TaxMetadata:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: e4e7c773-eb7a-3fe0-960d-df1744127a7b
        taxMetadataRowId:
          type: integer
          example: 13
        taxMetadataId:
          type: string
          format: uuid
          example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925
        taxCode:
          type: string
          example: V21
        taxPercentage:
          type: number
          example: 21
        description:
          type: string
          example: BTW VERKOOP HOOG 21%
        weFactTaxCode:
          type: string
          example: V21
          nullable: true
        validFrom:
          type: string
          format: date-time
          example: 2024-03-22T09:00:00
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
      required:
        - taxMetadataId
        - taxCode
        - taxPercentageAmount
        - description
        - validFrom
    TaxMetadataPostRequestBody:
      type: object
      properties:
        taxCode:
          type: string
          example: V21
        taxPercentage:
          type: number
          example: 21
        description:
          type: string
          example: BTW VERKOOP HOOG 21%
        weFactTaxCode:
          type: string
          example: V21
          nullable: true
        validFrom:
          type: string
          format: date-time
          example: 2024-03-22T09:00:00
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
      required:
        - taxCode
        - taxPercentageAmount
        - description
        - validFrom
    TaxMetadataPostResponseBody:
      type: object
      properties:
        taxMetadataId:
          type: string
          format: uuid
          example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925
      required:
        - taxMetadataId
    TaxMetadataPatchRequestBody:
      type: object
      properties:
        taxCode:
          type: string
          example: V21
          nullable: true
        taxPercentageAmount:
          type: number
          example: 21
          nullable: true
        description:
          type: string
          example: BTW VERKOOP HOOG 21%
          nullable: true
        weFactTaxCode:
          type: string
          example: V21
          nullable: true
        validFrom:
          type: string
          format: date-time
          example: 2024-03-22T09:00:00
          nullable: true
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
    TaxMetadataPatchResponseBody:
      type: object
      properties:
        taxMetadataId:
          type: string
          format: uuid
          example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925
      required:
        - taxMetadataId
    SourceMetadataGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#SourceMetadata
        value:
          type: array
          items:
            $ref: "#/components/schemas/SourceMetadata"
    SourceMetadata:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: d7df8249-3e72-35f2-a069-d845e8e2cbba
        sourceMetadataRowId:
          type: integer
          example: 2
        sourceMetadataId:
          type: string
          format: uuid
          example: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0
        incomingName:
          type: string
          example: HTM-website
        incomingEntity:
          type: string
          example: OrderLine
        outgoingName:
          type: string
          example: Website Verkopen
        businessOwner:
          type: string
          example: Koos Verweg
        rejectionProcessing:
          type: string
          example: system
        rejectionInfo:
          type: string
          example: api.htm.nl/v2/account/12345/msgs/abc
        validFrom:
          type: string
          format: date-time
          example: 2025-01-01T00:00:00.000
        validUntil:
          type: string
          format: date-time
          example: null
          nullable: true
      required:
        - sourceMetadataId
        - incomingName
        - incomingEntity
        - outgoingName
        - businessOwner
        - rejectionProcessing
        - rejectionInfo
        - validFrom
    SourceMetadataPostRequestBody:
      type: object
      properties:
        incomingName:
          type: string
          example: HTM-website
        incomingEntity:
          type: string
          example: OrderLine
        outgoingName:
          type: string
          example: Website Verkopen
        businessOwner:
          type: string
          example: Koos Verweg
        rejectionProcessing:
          type: string
          example: system
        rejectionInfo:
          type: string
          example: api.htm.nl/v2/account/12345/msgs/abc
        validFrom:
          type: string
          format: date-time
          example: 2025-01-01T00:00:00.000
        validUntil:
          type: string
          format: date-time
          example: null
          nullable: true
      required:
        - incomingName
        - incomingEntity
        - outgoingName
        - businessOwner
        - rejectionProcessing
        - rejectionInfo
        - validFrom
    SourceMetadataPostResponseBody:
      type: object
      properties:
        sourceMetadataId:
          type: string
          format: uuid
          example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
      required:
        - sourceMetadataId
    SourceMetadataPatchRequestBody:
      type: object
      properties:
        incomingName:
          type: string
          example: HTM-website
          nullable: true
        incomingEntity:
          type: string
          example: OrderLine
          nullable: true
        outgoingName:
          type: string
          example: Website Verkopen
          nullable: true
        businessOwner:
          type: string
          example: Koos Verweg
          nullable: true
        rejectionProcessing:
          type: string
          example: system
          nullable: true
        rejectionInfo:
          type: string
          example: api.htm.nl/v2/account/12345/msgs/abc
          nullable: true
        validFrom:
          type: string
          format: date-time
          example: 2025-01-01T00:00:00.000
          nullable: true
        validUntil:
          type: string
          format: date-time
          example: null
          nullable: true
    SourceMetadataPatchResponseBody:
      type: object
      properties:
        sourceMetadataId:
          type: string
          format: uuid
          example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
      required:
        - sourceMetadataId
    AccountingPeriodMetadataGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#AccountingPeriodMetadata
        value:
          type: array
          items:
            $ref: "#/components/schemas/AccountingPeriodMetadata"
    AccountingPeriodMetadata:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: 333d6b7d-b709-3b89-89e0-bcb3d5fdddfc
        accountingPeriodMetadataRowId:
          type: integer
          example: 1
        accountingPeriodMetadataId:
          type: string
          format: uuid
          example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
        accountingPeriod:
          type: string
          example: 2024/01
        isOpen:
          type: boolean
          example: true
      required:
        - accountingPeriodMetadataId
        - accountingPeriod
        - isOpen
    AccountingPeriodMetadataPostRequestBody:
      type: object
      properties:
        accountingPeriod:
          type: string
          example: 2024/01
        isOpen:
          type: boolean
          example: true
      required:
        - accountingPeriod
        - isOpen
    AccountingPeriodMetadataPostResponseBody:
      type: object
      properties:
        accountingPeriodMetadataId:
          type: string
          format: uuid
          example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
      required:
        - accountingPeriodMetadataId
    AccountingPeriodMetadataPatchRequestBody:
      type: object
      properties:
        isOpen:
          type: boolean
          example: true
      required:
        - isOpen
    AccountingPeriodMetadataPatchResponseBody:
      type: object
      properties:
        accountingPeriodMetadataId:
          type: string
          format: uuid
          example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
      required:
        - accountingPeriodMetadataId
    ConcessionMetadataGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#ConcessionMetadata
        value:
          type: array
          items:
            $ref: "#/components/schemas/ConcessionMetadata"
    ConcessionMetadata:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: 77c78584-7ce8-3cf5-b89e-73b888d72d70
        concessionMetadataRowId:
          type: integer
          example: 14
        concessionMetadataId:
          type: string
          format: en
          example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
        concessionId:
          type: integer
          example: 1
        percentage:
          type: number
          example: 84.021
        validFrom:
          type: string
          format: date-time
          example: 2024-01-01T00:00:00.000
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
      required:
        - concessionMetadataId
        - concessionId
        - percentage
        - validFrom
    ConcessionMetadataPostRequestBody:
      type: object
      properties:
        concessionId:
          type: integer
          example: 1
        percentage:
          type: number
          example: 84.021
        validFrom:
          type: string
          format: date-time
          example: 2024-01-01T00:00:00.000
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
      required:
        - concessionId
        - percentage
        - validFrom
    ConcessionMetadataPostResponseBody:
      type: object
      properties:
        concessionMetadataId:
          type: string
          format: uuid
          example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
      required:
        - concessionMetadataId
    ConcessionMetadataPatchRequestBody:
      type: object
      properties:
        concessionId:
          type: integer
          example: 1
        percentage:
          type: number
          example: 84.021
        validFrom:
          type: string
          format: date-time
          example: 2024-01-01T00:00:00.000
        validUntil:
          type: string
          format: date-time
          nullable: true
          example: null
    ConcessionMetadataPatchResponseBody:
      type: object
      properties:
        concessionMetadataId:
          type: string
          format: uuid
          example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
      required:
        - concessionMetadataId
    ConcessionsGetResponseBody:
      type: object
      properties:
        "@odata.context":
          type: string
          example: $metadata#Concession
        value:
          type: array
          items:
            $ref: "#/components/schemas/Concession"
    Concession:
      type: object
      properties:
        "@odata.etag":
          type: string
          example: 49bfa10d-b80d-3f2f-b3c2-9a5da3182cc3
        concessionRowId:
          type: integer
          example: 1
        concessionId:
          type: integer
          example: 1
        name:
          type: string
          example: RAIL
      required:
        - concessionId
        - name
    GetResponseStatus:
      type: object
      properties:
        summary:
          type: object
          properties:
            created:
              type: integer
              example: 15
            updated:
              type: integer
              example: 2
            total:
              type: integer
              example: 17
          required:
            - created
            - total
            - updated
      required:
        - summary
    409Response:
      type: object
      properties:
        code:
          type: string
          example: "409"
        type:
          type: string
          example: error
        message:
          type: string
          example: conflict
        description:
          type: string
          example: >-
            A transaction with the same TransactionId and TransactionLineId
            already exists.
        errors:
          type: array
          items:
            type: object
            properties:
              detail:
                type: string
                example: >-
                  Transaction is a duplicate of a transaction already in the
                  system.
              pointer:
                type: string
                example: "#/transactionItems/0"
              transactionId:
                type: string
                example: 1ad109d3-fd7d-4b6f-872b-220d492f385f
              transactionLineId:
                type: string
                example: fee907dd-e59d-44f5-a63b-bbdec38f79b7
    ProcessingFailuresBulkRequestBody:
      type: object
      properties:
        processingFailures:
          type: array
          items:
            type: object
            properties:
              processingFailureId::
                type: string
                format: uuid
                example: d8ee7035-fa3d-400e-9ad5-4fe8c4c73eb7
              resolved:
                type: boolean
                example: true
            required:
              - transactionItemId
              - resolved
    rfc9457:
      type: object
      properties:
        type:
          type: string
          format: url
          example: "https://example.com/probs/out-of-credit"
        title:
          type: string
          example: "You do not have enough credit."
        detail:
          type: string
          example: "Your current balance is 30, but that costs 50."
        instance:
          type: string
          example: "/account/12345/msgs/abc"
        balance:
          type: string
          example: "30"
        accounts:
          type: array
          items:
            type: string
            example:
              - "/account/12345"
              - "/account/67890"
  parameters:
    top:
      name: $top
      in: query
      description: Show only the first n items
      required: false
      style: form
      explode: true
      schema:
        minimum: 0
        type: integer
    skip:
      name: $skip
      in: query
      description: Skip the first n items
      required: false
      style: form
      explode: true
      schema:
        minimum: 0
        type: integer
    count:
      name: $count
      in: query
      description: Include count of items
      required: false
      style: form
      explode: true
      schema:
        type: boolean
    filter:
      name: $filter
      in: query
      description: Filter items by property values
      required: false
      style: form
      explode: true
      schema:
        type: string
