Como debitar al beneficiario
Como debitar al usuario origen (beneficiario)
Débito al usuario origen
El endpoint de débito se invoca al inicio del procesamiento de una transferencia, con el objetivo de debitar la cuenta del usuario origen. Este endpoint debe garantizar que la cuenta esté activa y sea válida, y debe reservar los fondos necesarios para que la operación pueda ejecutarse.
Los bancos pueden optar por registrar la transacción de forma definitiva o simplemente realizar una reserva de fondos.
En cualquiera de los casos, esta operación debe ser finalizada una vez que la transferencia se haya completado, o bien los fondos deben ser liberados obligatoriamente en caso de que ocurra un error durante el proceso.
En Transfiya, una operación de débito se representa como una acción de tipo UPLOAD
. Si esta acción se marca como COMPLETED
exitosamente, pero más adelante ocurre un error en el procesamiento, Transfiya ejecutará una operación opuesta (de tipo credit
) para revertir el movimiento de saldo y restablecer el estado original de la cuenta.
Flujo de debito al usuario origen
Proceso de débito paso a paso
A continuación, se describe detalladamente el flujo de procesamiento para una transferencia tipo SEND
, enfocándonos en la etapa de débito al usuario origen. Este flujo se ejecuta en múltiples etapas, combinando interacciones entre Transfiya y el banco originador, tanto en fases síncronas como asincrónicas.
El objetivo principal de este proceso es asegurar que los fondos del usuario origen estén disponibles y sean reservados o debitados correctamente antes de avanzar con el resto de la operación. El flujo también contempla los mecanismos necesarios para revertir movimientos en caso de errores, así como el uso de pruebas criptográficas (IOU) y el cumplimiento de los tiempos regulatorios.
Cada paso está alineado con los lineamientos del nuevo modelo SPI (Sistema de Pagos Inmediatos) y busca mantener la compatibilidad con la arquitectura existente de Transfiya. A continuación se detallan las acciones involucradas, junto con ejemplos prácticos y consideraciones técnicas relevantes.
Transfiya llama al banco origen para procesar la operación de débito
Transfiya inicia el proceso mediante una solicitud POST al endpoint de débito del banco origen, con la información completa de la transferencia.
El banco origen crea una acción tipo `UPLOAD` en Transfiya
Esto representa la reserva o débito de fondos. Se debe generar una acción usando el API de Transfiya, referenciando la transferencia original.
Atributo | Valor |
---|---|
source | bankSigner.handle — Bank settlement signer. |
target | mainAction.snapshot.source.signer.handle — Source of the transfer (bank user). |
symbol | mainAction.symbol — Currency of the transfer. |
labels.type | UPLOAD — Always UPLOAD for debits. |
labels.tx_ref | mainAction.labels.tx_ref — Transfer reference. |
mainAction
en los valores se utiliza al hacer referencia a los datos de la acción principal recibida desde TransfiYa. En otras palabras, representa el cuerpo de una llamada POST a https://ban.co/transfiya/debit
.
bankSigner
representa el firmante de liquidación que es registrado por el banco durante el proceso de incorporación con TransfiYa. Este firmante mantiene el balance total disponible para el banco dentro del sistema.
Atributo | Valor |
---|---|
source | bankSigner.handle — Bank settlement signer. |
target | mainAction.snapshot.source.signer.handle — Source of the transfer (bank user). |
symbol | mainAction.symbol — Currency of the transfer. |
labels.type | UPLOAD — Always UPLOAD for debits. |
labels.tx_ref | mainAction.labels.tx_ref — Transfer reference. |
mainAction
en los valores se utiliza al hacer referencia a los datos de la acción principal recibida desde TransfiYa. En otras palabras, representa el cuerpo de una llamada POST a https://ban.co/transfiya/debit
.
bankSigner
representa el firmante de liquidación que es registrado por el banco durante el proceso de incorporación con TransfiYa. Este firmante mantiene el balance total disponible para el banco dentro del sistema.
El banco origen responde a la solicitud inicial de débito
Esta respuesta marca el cierre de la fase síncrona. El campo obligatorio es action_id
.
Se pueden incluir campos adicionales en la respuesta, pero solo action_id
es obligatorio.
Se pueden incluir campos adicionales en la respuesta, pero solo action_id
es obligatorio.
En caso de errores no recuperables durante el procesamiento, se puede devolver un objeto error
a Transfiya.
El campo action_id
es opcional en caso de errores, pero debe incluirse si el error ocurrió después de que la acción fue creada exitosamente.
Los códigos de error devueltos por los bancos deben estar en el rango de 3xx
.
El banco valida la cuenta origen y debita el monto correspondiente
Se realizan validaciones sobre la cuenta y se ejecuta la operación interna de débito.
El banco actualiza la acción `UPLOAD` con el `tx_id` de la transacción interna
El identificador tx_id
permite posteriores conciliaciones entre Transfiya y el banco.
Field name | Field value |
---|---|
<upload_action_id> | The <upload_action_id> used in the URL is the ID of the UPLOAD action created in step 2. In our example, it is 5954ac04-b4db-4c6f-86f6-43df30f6bacb . |
labels.tx_id | Unique identifier of the transaction executed by the bank to debit the funds from the source account. |
Field name | Field value |
---|---|
<upload_action_id> | The <upload_action_id> used in the URL is the ID of the UPLOAD action created in step 2. In our example, it is 5954ac04-b4db-4c6f-86f6-43df30f6bacb . |
labels.tx_id | Unique identifier of the transaction executed by the bank to debit the funds from the source account. |
La acción incluirá el nuevo campo tx_id
como parte de los metadatos.
El banco crea y firma un objeto IOU como prueba criptográfica
Este IOU contiene la información de la transacción y su firma digital, generada con claves privadas del firmante.
Transfiya valida la firma del objeto IOU recibido y lo almacena en el libro mayor, si todo es válido. Esta operación también marca la acción UPLOAD
como COMPLETED
.
Transfiya valida la firma del objeto IOU recibido y lo almacena en el libro mayor, si todo es válido. Esta operación también marca la acción UPLOAD
como COMPLETED
.
Transfiya devuelve una acción con estado COMPLETED
al banco o una acción con estado ERROR
en caso de errores.
Transfiya devuelve una acción con estado COMPLETED
al banco o una acción con estado ERROR
en caso de errores.
El banco realiza validaciones finales y llama al endpoint `continue`
Esta llamada debe incluir los campos received
y dispatched
. Se puede incluir un objeto error
si aplica.
Para continuar con el procesamiento de la transferencia, es suficiente con llamar al endpoint continue
y proporcionar las marcas de tiempo requeridas por la regulación.
Field name | Descripción |
---|---|
<tx_ref> | El campo <tx_ref> en la URL representa la referencia de la transferencia, que se encuentra en labels.tx_ref del mainAction . |
received | Marca de tiempo en formato ISO 8601. Representa el momento en que se recibió la última respuesta de Transfiya (llamada sendit ). |
dispatched | Marca de tiempo en formato ISO 8601. Representa el momento en que se envió la llamada continue a Transfiya. |
Para continuar con el procesamiento de la transferencia, es suficiente con llamar al endpoint continue
y proporcionar las marcas de tiempo requeridas por la regulación.
Field name | Descripción |
---|---|
<tx_ref> | El campo <tx_ref> en la URL representa la referencia de la transferencia, que se encuentra en labels.tx_ref del mainAction . |
received | Marca de tiempo en formato ISO 8601. Representa el momento en que se recibió la última respuesta de Transfiya (llamada sendit ). |
dispatched | Marca de tiempo en formato ISO 8601. Representa el momento en que se envió la llamada continue a Transfiya. |
Los bancos pueden reportar errores en la parte asincrónica del procesamiento de la transferencia llamando al endpoint continue
y proporcionando el objeto error
en el cuerpo de la solicitud, con información adicional sobre el problema.
Los códigos de error devueltos por los bancos deben estar en el rango 3xx
.
Field name | Descripción en español |
---|---|
<tx_ref> | El campo <tx_ref> en la URL representa la referencia de la transferencia, que se encuentra en labels.tx_ref del mainAction . |
received | Timestamp en formato ISO 8601. Representa la hora en que se recibió la respuesta de la última llamada de Transfiya (sendit ). |
dispatched | Timestamp en formato ISO 8601. Representa la hora en que se envió la llamada continue a Transfiya. |
error.code | Un código de error válido soportado por Transfiya que describe el error ocurrido. |
error.message | Un mensaje con información adicional sobre el error. |