invalid_argument | validation_error | Request failed field validation — ours (the offending fields are in message as a [{field, error}] array) or the LMS’s (a principal outside the product’s min/max, an unknown closureReasonId; the LMS’s field message is in message). |
already_exists | customer_external_id_exists | The customer externalId is already in use. |
already_exists | loan_external_id_exists | The loan externalId is already in use. |
already_exists | transaction_external_id_exists | The repayment idempotencyKey is already recorded on a different transaction. |
not_found | customer_not_found | No customer exists for the given id/externalId. |
not_found | loan_not_found | No loan exists for the given id/externalId. |
not_found | product_not_found | No loan product exists for the given id. |
not_found | transaction_not_found | No repayment transaction with that id exists on the loan. |
failed_precondition | loan_not_active | A repayment was attempted on a loan that isn’t active. |
failed_precondition | loan_no_disbursement | An operation needing a disbursement (e.g. adjusting the disbursement date) was attempted on a loan that has none. |
failed_precondition | boost_not_eligible | The customer isn’t eligible for a credit-limit boost. |
failed_precondition | domain_rule_violation | A business rule blocked the operation given the entity’s current state (e.g. modifying an already-disbursed loan, closing a customer that still has active loans, a value date before disbursement). The specific reason is in message. |
aborted | rollback_has_repayments | A loan rollback was blocked because the loan already has repayments — reverse them first. |
aborted | adjust_has_repayments | A disbursement-date adjustment was blocked because the loan already has repayments — reverse them first. |
failed_precondition | loan_not_overpaid | A refund was attempted on a loan carrying no overpayment credit — either it was never overpaid, or the credit has already been refunded. |
aborted | adjust_has_penalty | A disbursement-date adjustment was blocked because an overdue penalty has already been posted to the loan — waive or reverse it first. |
aborted | loan_not_rollbackable | The loan’s status doesn’t permit a rollback (rollback is for tearing down a loan that never reached the customer, not a settled one). |
permission_denied | insufficient_role | The authenticated caller’s role isn’t permitted to perform the action. |