{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/folio/main/json-schema/folio-bulk-operation-dto-schema.json",
  "title": "BulkOperationDto",
  "x-generated": "2026-10-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/folio-mod-bulk-operations-openapi.yml#/components/schemas/BulkOperationDto",
  "type": "object",
  "properties": {
    "id": {
      "description": "Bulk Operation UUID",
      "type": "string",
      "format": "uuid"
    },
    "hrId": {
      "description": "Bulk Operation human readable ID",
      "type": "integer",
      "format": "int64"
    },
    "userId": {
      "description": "User UUID",
      "type": "string",
      "format": "uuid"
    },
    "operationType": {
      "description": "Bulk Operation type",
      "$ref": "#/$defs/OperationType"
    },
    "entityType": {
      "description": "Entity type",
      "$ref": "#/$defs/EntityType"
    },
    "entityCustomIdentifierType": {
      "description": "Entity custom identifier type",
      "$ref": "#/$defs/IdentifierType"
    },
    "status": {
      "description": "Bulk Operation status",
      "$ref": "#/$defs/OperationStatusType"
    },
    "approach": {
      "description": "Bulk Operation approach type",
      "$ref": "#/$defs/ApproachType"
    },
    "dataExportJobId": {
      "description": "Data export Job UUID",
      "type": "string",
      "format": "uuid"
    },
    "linkToTriggeringCsvFile": {
      "description": "Path to the bulk operation triggering file",
      "type": "string"
    },
    "linkToTriggeringQueryFile": {
      "description": "Path to the triggering query file",
      "type": "string"
    },
    "linkToMatchedRecordsJsonFile": {
      "description": "Path to the matched (origin) json file",
      "type": "string"
    },
    "linkToMatchedRecordsCsvFile": {
      "description": "Path to the matched (origin) csv file",
      "type": "string"
    },
    "linkToMatchedRecordsMarcFile": {
      "description": "Path to the matched (origin) mrc file",
      "type": "string"
    },
    "linkToMatchedRecordsErrorsCsvFile": {
      "description": "Path to the matching errors csv file",
      "type": "string"
    },
    "linkToModifiedRecordsJsonFile": {
      "description": "Path to the modified (updated) json file",
      "type": "string"
    },
    "linkToModifiedRecordsCsvFile": {
      "description": "Path to the modified (updated) csv file",
      "type": "string"
    },
    "linkToModifiedRecordsMarcFile": {
      "description": "Path to the modified (updated) mrc file",
      "type": "string"
    },
    "linkToCommittedRecordsJsonFile": {
      "description": "Path to the committed (result) json file",
      "type": "string"
    },
    "linkToCommittedRecordsCsvFile": {
      "description": "Path to the committed (result) csv file",
      "type": "string"
    },
    "linkToCommittedRecordsMarcFile": {
      "description": "Path to the committed (result) mrc file",
      "type": "string"
    },
    "linkToCommittedRecordsErrorsCsvFile": {
      "description": "Path to the committing errors csv file",
      "type": "string"
    },
    "totalNumOfRecords": {
      "description": "Total number of records",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "processedNumOfRecords": {
      "description": "Number of processed records",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "matchedNumOfRecords": {
      "description": "Number of matched records",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "committedNumOfRecords": {
      "description": "Number of committed records",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "matchedNumOfErrors": {
      "description": "Number of matching errors",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "matchedNumOfWarnings": {
      "description": "Number of matching warnings",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "committedNumOfErrors": {
      "description": "Number of committing errors",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "committedNumOfWarnings": {
      "description": "Number of committing warnings",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "executionChunkSize": {
      "description": "Size of chunk",
      "type": "integer",
      "format": "int64",
      "default": 0
    },
    "startTime": {
      "description": "Bulk Operation start time",
      "type": "string",
      "format": "date-time"
    },
    "endTime": {
      "description": "Bulk Operation end time",
      "type": "string",
      "format": "date-time"
    },
    "errorMessage": {
      "description": "Error message",
      "type": "string"
    },
    "expired": {
      "description": "Were logs expired",
      "type": "boolean",
      "default": false
    },
    "fqlQueryId": {
      "description": "FQL query identifier",
      "type": "string",
      "format": "uuid"
    },
    "fqlQuery": {
      "description": "FQL query string",
      "type": "string"
    },
    "userFriendlyQuery": {
      "description": "User-friendly FQL query string",
      "type": "string"
    },
    "tenantNotePairs": {
      "description": "NoteType name for which (tenantId)",
      "type": "array",
      "items": {
        "type": "object",
        "$ref": "#/$defs/tenantNotePair"
      }
    },
    "usedTenants": {
      "description": "Used tenants",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "type"
  ],
  "$defs": {
    "ApproachType": {
      "type": "string",
      "enum": [
        "MANUAL",
        "IN_APP",
        "QUERY"
      ]
    },
    "EntityType": {
      "type": "string",
      "enum": [
        "USER",
        "ITEM",
        "HOLDINGS_RECORD",
        "INSTANCE",
        "INSTANCE_MARC"
      ]
    },
    "IdentifierType": {
      "type": "string",
      "enum": [
        "ID",
        "BARCODE",
        "HRID",
        "FORMER_IDS",
        "ACCESSION_NUMBER",
        "HOLDINGS_RECORD_ID",
        "USER_NAME",
        "EXTERNAL_SYSTEM_ID",
        "INSTANCE_HRID",
        "ITEM_BARCODE",
        "ISBN",
        "ISSN"
      ]
    },
    "OperationStatusType": {
      "type": "string",
      "enum": [
        "NEW",
        "RETRIEVING_RECORDS",
        "SAVING_RECORDS_LOCALLY",
        "DATA_MODIFICATION",
        "DATA_MODIFICATION_IN_PROGRESS",
        "REVIEW_CHANGES",
        "APPLY_CHANGES",
        "APPLY_MARC_CHANGES",
        "SUSPENDED",
        "COMPLETED",
        "COMPLETED_WITH_ERRORS",
        "CANCELLED",
        "SCHEDULED",
        "FAILED",
        "EXECUTING_QUERY",
        "RETRIEVING_IDENTIFIERS",
        "SAVED_IDENTIFIERS",
        "REVIEWED_NO_MARC_RECORDS",
        "DELETING_RECORDS"
      ]
    },
    "OperationType": {
      "type": "string",
      "enum": [
        "UPDATE",
        "DELETE"
      ]
    },
    "tenantNotePair": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "description": "NoteType name for which (tenantId)",
      "type": "object",
      "properties": {
        "tenantId": {
          "description": "ID of tenant required to show after Note type name",
          "type": "string"
        },
        "noteTypeName": {
          "description": "Note type name for which tenant ID is required to show",
          "type": "string"
        },
        "noteTypeId": {
          "description": "Note type id for which tenant ID is required to show",
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "tenantId",
        "noteTypeName",
        "noteTypeId"
      ]
    }
  }
}