6. Inyeccion de transacciones
6.1 Inyección de transacciones¶
Trak.e soporta la integración de la información transaccional correspondiente a cada legajo. Esta información se puede inyectar mediante una API REST o mediante una importacion batch. Trak.e realizará los chequeos definidos en near-real time y en caso de detectar comportamiento inusual levantará las alertas correspondientes. Opcionalmente, se puede configurar un callback de notificación al sistema externo, ver Notificaciones para más información.
6.1.1 Validaciones¶
- Se eliminan los caracteres unicode presentes en el nombre del archivo
- Se valida que el archivo posea solo una extension
- Se valida que la longitud del nombre del archivo sea menor a 255 caracteres
- Se valida que la extension del archivo este permitida
(.csv, .txt)
- Se valida que el tamaño del archivo no exceda los 50gb
- Se infiere el tipo de
MIME
en base a la deteccion denumeros magicos
y se valida contra los tiposMIME
esperados("text/plain", "text/csv")
6.2 Representación y semántica de una transacción¶
A continuación, se ejemplifican casos de transacciones junto con una descripción en lenguaje natural de cada una de ellas.
6.2.1 Ejemplo 1: Tipo de transacción: transferencia¶
Consideremos la siguiente descripción de una transaccion:
Descripción de la operación. El 21 de agosto de 2020 a las 10:55 AM, el cliente Juan Pérez (con CUIT 20-35665545-1 y profile ID 5f05e2cd3bb063a00402b1b4), residente en la dirección 27 de Febrero al 1800, Rosario, Santa Fe, transfiere a Pedro González (con CUIT 20-36985856-9), residente en Riobamba 76, Rosario, Santa Fe, el monto de 200 pesos argentinos, desde la caja de ahorros (en pesos argentinos) del Banco A, identificada por el alias CBU "LLL.PPP.AAA", a la caja de ahorros (en pesos argentinos) del Banco B identificada mediante el alias CBU "cc".
- Nuestro cliente realiza una transferencia saliente, lo representamos con el tipo de transferencia
extraction
. Previamente debemos haber registrado el legajo del cliente en los servicios de Trak.e. - La transferencia se realizó utilizando una aplicación de homebanking.
- La transferencia se realizó en las cercanías de la intersección entre las calles Maipú y Rioja de la ciudad de Rosario, Santa Fe, Argentina.
Su representación en el lenguaje de marcado JSON es como sigue:
Ejemplo
{
"profile_id":"5f05e2cd3bb063a00402b1b4",
"transaction_type":"transfer_between_accounts",
"timestamp":1598050520179,
"side":"extraction",
"amount":200,
"currency":"ARS",
"transaction_info":{
"source":{
"account_type":"savings_account",
"currency":"ARS",
"institution":"Banco A",
"holder_name":"Juan Pérez",
"holder_tax_payer_id":"20-35665545-1",
"holder_id_number":"35699996",
"holder_id_type":"DNI",
"holder_id_country":"AR",
"holder_address":{
"country":"AR",
"state":"Santa Fe",
"city":"Rosario",
"department":"Rosario",
"zip_code":"2000",
"street_name":"27 de febrero",
"number":"1800"
},
"account_alias":"LLL.PPP.AAA"
},
"destination":{
"account_type":"savings_account",
"currency":"ARS",
"institution":"Banco B",
"holder_name":"Pedro González",
"holder_tax_payer_id":"20-36985856-9",
"holder_id_number":"39499639",
"holder_id_type":"DNI",
"holder_id_country":"AR",
"holder_address":{
"country":"AR",
"state":"Santa Fe",
"city":"Rosario",
"department":"Rosario",
"zip_code":"2000",
"street_name":"Riobamba",
"number":"76"
},
"institution_address":{
"country":"AR",
"state":"Santa Fe",
"city":"Rosario",
"department":"Rosario",
"zip_code":"2000",
"street_name":"Córdoba",
"number":"1918"
},
"account_alias":"NNN.LLL.CCC"
},
"destination_type":"other",
"institution_type":"other",
"reason":"varios",
"concept":"Pago de comida",
"channel":"homebanking",
},
"geospatial_info":{
"long":-32.94682,
"lat":-60.63932
}
}
6.2.2 Ejemplo 2: Tipo de transacción: transferencia¶
Consideremos la siguiente descripción de una transacción:
Descripción de la operación. El 21 de agosto de 2020 a las 10:55 AM, el cliente Juan Pérez (con CUIT 20-35665545-1), residente en la dirección 27 de Febrero al 1800, Rosario, Santa Fe, transfiere a Pedro González (con CUIT 20-36985856-9 y y profile ID 5f88bd99534940c398903b05), residente en Riobamba 76, Rosario, Santa Fe, el monto de 200 pesos argentinos, desde la caja de ahorros (en pesos argentinos) del Banco A, identificada por el alias CBU "LLL.PPP.AAA", a la caja de ahorros (en pesos argentinos) del Banco B identificada mediante el alias CBU "cc".
- Nuestro cliente recibe una transferencia, lo representamos con el tipo de transferencia
deposit
. Previamente debemos haber registrado el legajo del cliente en los servicios de Trak.e. - La transferencia se realizó utilizando una aplicación de homebanking.
- La transferencia se realizó en las cercanías de la intersección entre las calles Maipú y Rioja de la ciudad de Rosario, Santa Fe, Argentina.
Su representación en el lenguaje de marcado JSON es como sigue:
Ejemplo
{
"profile_id":"5f88bd99534940c398903b05",
"transaction_type":"transfer_between_accounts",
"timestamp":1598050520179,
"side":"deposit",
"amount":200,
"currency":"ARS",
"transaction_info":{
"source":{
"account_type":"savings_account",
"currency":"ARS",
"institution":"Banco A",
"holder_name":"Juan Pérez",
"holder_tax_payer_id":"20-35665545-1",
"holder_id_number":"35699996",
"holder_id_type":"DNI",
"holder_id_country":"AR",
"holder_address":{
"country":"AR",
"state":"Santa Fe",
"city":"Rosario",
"department":"Rosario",
"zip_code":"2000",
"street_name":"27 de febrero",
"number":"1800"
},
"account_alias":"LLL.PPP.AAA"
},
"destination":{
"account_type":"savings_account",
"currency":"ARS",
"institution":"Banco B",
"holder_name":"Pedro González",
"holder_tax_payer_id":"20-36985856-9",
"holder_id_number":"39499639",
"holder_id_type":"DNI",
"holder_id_country":"AR",
"holder_address":{
"country":"AR",
"state":"Santa Fe",
"city":"Rosario",
"department":"Rosario",
"zip_code":"2128",
"street_name":"Riobamba",
"number":"76"
},
"institution_address":{
"country":"AR",
"state":"Santa Fe",
"city":"Rosario",
"department":"Rosario",
"zip_code":"2000",
"street_name":"Córdoba",
"number":"1918"
},
"account_alias":"NNN.LLL.CCC"
},
"destination_type":"other",
"institution_type":"other",
"reason":"varios",
"concept":"Pago de comida",
"channel":"homebanking",
},
"geospatial_info":{
"long":-32.94682,
"lat":-60.63932
}
}
6.2.3 Etiquetas¶
Se puede marcar una transacción utilizando strings arbitrarios como etiquetas. Una etiqueta tiene un a longitud mínima de 2 carácteres y máxima de 12 carácteres.
6.2.4 Información adicional¶
La transacción puede contener la información adicional que se desee en formato clave-valor. Adicionalemente cada cliente puede definir mediante un json schema1 la estructura de esta información adicional. Esta especificación permitirá validar y normalizar la información adicional.
Por ejemplo si una transacción contiene información acerca del comprador podemos definir:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"title": "Comprador",
"description": "Información adicional de transacción con comprador",
"type": "object",
"properties": {
"transaccion": {
"description": "Información de la transacción",
"type": "object",
"properties": {
"comprador":{
"description": "Información del comprador",
"type": "object",
"properties": {
"nombre":{
"type": "string",
},
"cuit":{
"type": "string"
}
}
}
}
}
}
}
Nota
El campo $schema indica la versión del borrador en la que se escribe el esquema JSON, por lo tanto es importante definirlo. Trak.e soporta JSON schemas con una versión de borrador igual o superior a Draft 4.
Luego de definir el schema, podemos guardar y acceder a la información en la transacción utilizando el atributo metadata.transaccion.comprador
. Cabe aclarar que ante la ausencia de un schema, igualmente se puede guardar la información adicional en la transacción, pero no se realizará ninguna validación.