block_funds_with_bank
Trigger
block_funds_with_bank API invoked by bank_block_funds_worker (Celery worker task)
Worker invoked by
block_funds_with_bank_beat_producer (Celery beat producer)
block_funds_with_bank_beat_producer
Business logic
frequency
hourly (specified by configuration yml)
attempts
yes. subject to a configurable limit specified by configuration yml
driving table
disbursement_envelope_batch_status
eligible envelopes
disbursement_schedule_date <= today
AND
cancellation_status = 'NOT_CANCELLED'
AND
number_of_disbursements = number_of_disbursements_received AND
funds_available_status = 'FUNDS_AVAILABLE'
AND
( ( funds_block_status = "PENDING_CHECK" AND funds_block_retries < retry_limit) OR (funds_block_status = 'FUNDS_BLOCK_FAILURE" AND funds_block_retries < retry_limit) )
Pick up Eligible - disbursement_envelope
Delegate a task to bank_block_funds_worker
Payload - disbursement_envelope_id
block_funds_with_bank_worker
Payload - disbursement_envelope_id
get the details of the disbursement_envelope - total funds needed for this envelope
get details from benefit_program_configuration
get the instance of BankConnector (implementing BankConnectorInterface) from BankConnectorFactory
BankConnectorInterface - There will be a connector (implementation of the BankConnectorInterface) for every Sponsor Bank
Invoke - Block Funds API
SUCCESS and FUNDS_BLOCKED, update the following
disbursement_envelope_batch_status.funds_blocked_with_bank = FUNDS_BLOCK_SUCCESS
disbursement_envelope_batch_status.funds_blocked_latest_timestamp = now()
disbursement_envelope_batch_status.funds_blocked_latest_error_code = null
disbursement_envelope_batch_status.funds_blocked_retries = +1
disbursement_envelope_batch_status.funds_blocked_reference_number = block reference number from bank
SUCCESS and FUNDS_NOT_BLOCKED, update the following
disbursement_envelope_batch_status.funds_blocked_with_bank = FUNDS_BLOCK_FAILURE
disbursement_envelope_batch_status.funds_blocked_latest_timestamp = now()
disbursement_envelope_batch_status.funds_blocked_latest_error_code = error code from bank
disbursement_envelope_batch_status.funds_blocked_retries = +1
disbursement_envelope_batch_status.funds_blocked_reference_number = blank
FAILURE
disbursement_envelope_batch_status.funds_blocked_with_bank = FUNDS_BLOCK_FAILURE
disbursement_envelope_batch_status.funds_blocked_latest_timestamp = now()
disbursement_envelope_batch_status.funds_blocked_latest_error_code = error code from bank
disbursement_envelope_batch_status.funds_blocked_retries = +1
disbursement_envelope_batch_status.funds_blocked_reference_number = blank
Last updated