Actual Cost Records API design
API for manipulating Actual Cost Records is split into two parts:
- CRUD API in mod-circulation-storage (API documentation)
- API in mod-feesfines for more complex operations on Actual Cost Records (API documentation) UXPROD-3565 - Getting issue details... STATUS
Actual Cost Fee/Fine API in mod-feesfines
1) Bill actual cost record
POST /actual-cost-fee-fine/bill
Request
{
"actualCostRecordId": "89105c06-dbdb-4aa0-9695-d4d19c733270",
"amount": 9.99,
"servicePointId": "a5cea7c9-17b5-44b1-add3-ec43311451a8",
"additionalInfoForStaff": "Additional information for staff",
"additionalInfoForPatron": "Additional information for patron"
}
Where "servicePointId" is the ID of the service point currently selected in the UI.
In case of success mod-feesfines will:
- create a fee/fine ("account") with requested amount
- create corresponding "charge" fee/fine action
- mark actual cost record as billed
- link actual cost record to the created fee/fine ("account") by adding "accountId" to it
- copy additional information from billing request to actual cost record
- return updated actual cost record in response
Response 201
{
"id": "89105c06-dbdb-4aa0-9695-d4d19c733270",
"status": "Billed",
"accountId": "df7f4993-8c14-4a0f-ab63-93975ab01c76",
"additionalInfoForStaff": "Additional information for staff",
"additionalInfoForPatron": "Additional information for patron",
"lossType": "Declared lost",
"lossDate": "2022-09-29T07:42:43.905+00:00",
"expirationDate": "2022-09-29T07:42:43.905+00:00",
"user": {
"id": "f6df27bd-0db0-4fa1-afff-0ccd30cefb1b",
"barcode": "test",
"firstName": "Worm",
"lastName": "Book",
"middleName": "~"
},
"loan": {
"id": "5cb70208-1147-4cfc-b481-31c575b8de44"
},
"item": {
"id": "0149342a-e0fd-451e-8595-8fd0a0593a92",
"barcode": "test2",
"materialTypeId": "d9acad2f-2aac-4b48-9097-e6ab85906b25",
"materialType": "text",
"permanentLocationId": "53cf956f-c1df-410b-8bea-27f712cca7c0",
"permanentLocation": "Annex",
"effectiveLocationId": "5513cf26-a45c-482e-a25a-3ce5c32e619c",
"effectiveLocation": "Main library",
"loanTypeId": "2e48e713-17f3-4c13-a9f8-23845bb210a4",
"loanType": "Reading room",
"holdingsRecordId": "68872d8a-bf16-420b-829f-206da38f6c10",
"effectiveCallNumberComponents": {
"callNumber": "some-callnumber"
}
},
"instance": {
"id": "6506b79b-7702-48b2-9774-a1c538fdd34e",
"title": "Nod",
"identifiers": [{
"value": "0956687695",
"identifierType": "ISBN",
"identifierTypeId": "8261054f-be78-422d-bd51-4ed9f33c3422"
}, {
"value": "9780956687695",
"identifierType": "ISBN",
"identifierTypeId": "8261054f-be78-422d-bd51-4ed9f33c3422"
}
],
"contributors": [{
"name": "Schmitz, Bettina"
}
]
},
"feeFine": {
"accountId": "306339a5-539b-4652-be7c-ab041a286c8c",
"ownerId": "21b0d0f2-d258-4410-8a19-a37da35728a8",
"owner": "owner",
"typeId": "73785370-d3bd-4d92-942d-ae2268e02ded",
"type": "Lost item fee (actual cost)"
},
"metadata": {
"createdDate": "2022-09-29T07:42:43.980+00:00",
"createdByUserId": "7ca9bcf4-ac58-519d-bc84-77d1da782742",
"updatedDate": "2022-09-29T07:42:43.980+00:00",
"updatedByUserId": "7ca9bcf4-ac58-519d-bc84-77d1da782742"
}
}
Response 422
{
"errors": [{
"message": "Actual cost record 89105c06-dbdb-4aa0-9695-d4d19c733270 is already billed",
"parameters": [{
"key": "id",
"value": "89105c06-dbdb-4aa0-9695-d4d19c733270"
}, {
"key": "status",
"value": "Billed"
}
]
}
]
}
Response 500
Internal server error
2) Cancel actual cost record
POST /actual-cost-fee-fine/cancel
Request
{
"actualCostRecordId": "89105c06-dbdb-4aa0-9695-d4d19c733270",
"additionalInfoForStaff": "Additional information for staff"
}
In case of success mod-feesfines will:
- mark requested actual cost record as cancelled
- copy additional info from request to actual cost record
- return updated actual cost record in response
Response 201
{
"id": "89105c06-dbdb-4aa0-9695-d4d19c733270",
"status": "Cancelled",
"additionalInfoForStaff": "Additional information for staff",
"lossType": "Declared lost",
"lossDate": "2022-09-29T07:42:43.905+00:00",
"expirationDate": "2022-09-29T07:42:43.905+00:00",
"user": {
"id": "f6df27bd-0db0-4fa1-afff-0ccd30cefb1b",
"barcode": "test",
"firstName": "Worm",
"lastName": "Book",
"middleName": "~"
},
"loan": {
"id": "5cb70208-1147-4cfc-b481-31c575b8de44"
},
"item": {
"id": "0149342a-e0fd-451e-8595-8fd0a0593a92",
"barcode": "test2",
"materialTypeId": "d9acad2f-2aac-4b48-9097-e6ab85906b25",
"materialType": "text",
"permanentLocationId": "53cf956f-c1df-410b-8bea-27f712cca7c0",
"permanentLocation": "Annex",
"effectiveLocationId": "5513cf26-a45c-482e-a25a-3ce5c32e619c",
"effectiveLocation": "Main library",
"loanTypeId": "2e48e713-17f3-4c13-a9f8-23845bb210a4",
"loanType": "Reading room",
"holdingsRecordId": "68872d8a-bf16-420b-829f-206da38f6c10",
"effectiveCallNumberComponents": {
"callNumber": "some-callnumber"
}
},
"instance": {
"id": "6506b79b-7702-48b2-9774-a1c538fdd34e",
"title": "Nod",
"identifiers": [{
"value": "0956687695",
"identifierType": "ISBN",
"identifierTypeId": "8261054f-be78-422d-bd51-4ed9f33c3422"
}, {
"value": "9780956687695",
"identifierType": "ISBN",
"identifierTypeId": "8261054f-be78-422d-bd51-4ed9f33c3422"
}
],
"contributors": [{
"name": "Schmitz, Bettina"
}
]
},
"feeFine": {
"ownerId": "21b0d0f2-d258-4410-8a19-a37da35728a8",
"owner": "owner",
"typeId": "73785370-d3bd-4d92-942d-ae2268e02ded",
"type": "Lost item fee (actual cost)"
},
"metadata": {
"createdDate": "2022-09-29T07:42:43.980+00:00",
"createdByUserId": "7ca9bcf4-ac58-519d-bc84-77d1da782742",
"updatedDate": "2022-09-29T07:42:43.980+00:00",
"updatedByUserId": "7ca9bcf4-ac58-519d-bc84-77d1da782742"
}
}
Response 422
{
"errors": [{
"message": "Actual cost record 89105c06-dbdb-4aa0-9695-d4d19c733270 is already cancelled",
"parameters": [{
"key": "id",
"value": "89105c06-dbdb-4aa0-9695-d4d19c733270"
}, {
"key": "status",
"value": "Cancelled"
}
]
}
]
}
Response 500
Internal server error
, multiple selections available,