Caso de uso: Añadiendo funcionalidades a Quaderno

Una de las cuestiones con las que nos encontramos con frecuencia en e.Kuantia está a la hora de explicar lo que hacemos. El hecho de trabajar en algo que nadie ha hecho antes en España hace que una labor divulgativa sea de vital importancia.

Por supuesto, no hemos inventado ningún servicio bancario que no existiese, lo realmente innovador de nuestra propuesta está en la forma en la que se accede a ellos. Y aquí, por muy bueno que se sea explicando, siempre funcionará mejor un caso práctico.

Por eso hemos llegado a la conclusión de que la mejor manera de explicar lo que hacemos es crear una serie de posts con ejemplos de uso en los que integraremos nuestros servicios con diferentes empresas tecnológicas para añadirle funcionalidades, o bien, crearemos desde cero nuevos servicios utilizando nuestra API bancaria.

Lo que vamos a hacer

Para nuestro primer post de la serie hemos creado dos pequeños servicios que pueden ser de utilidad para los usuarios de Quaderno. Por si no lo conoces, Quaderno es un SaaS español de facturación que destaca por la usabilidad y sencillez de su plataforma, convirtiéndose en una solución idónea para PyMEs y autónomos. Te recomendamos que le eches un vistazo a su página.

En la primera parte, vincularemos una tarjeta de e.Kuantia con Quaderno de forma que cada vez que se haga un movimiento con la tarjeta, se añada automáticamente un gasto en Quaderno. Evitamos así tener que añadirlos manualmente y agilizamos las tareas de contabilidad.

Para la segunda parte del artículo incorporaremos el TPV virtual de e.Kuantia como método de pago a las facturas emitidas. Si bien esta característica ya está disponible en Quaderno usando otras pasarelas como Stripe, Paypal o incluso a través de domiciliación usando Besepa, la ventaja que añadimos desde e.Kuantia es la posibilidad de recibir los fondos prácticamente en tiempo real además de marcar la factura como pagada.

1. Automatizando la creación de gastos en Quaderno

Hemos creado un pequeño servicio a modo de middleware que recibirá las notificaciones de movimientos de tarjeta de e.Kuantia y creará Gastos en Quaderno, marcándolos como pagados y conciliándolos con el movimiento en la cuenta.

Esquema e.kuantia-Quaderno

Nos hemos hecho una pequeña librería en Python inspirándonos en su wrapper en Ruby. Si tienes cualquier duda sobre el API de Quaderno o quieres ver todo lo que puede hacer, visítalos.


from ekquaderno.quaderno import Quaderno

QUADERNO_KEY = 'sk_test_QQQQQQQQQQQQQQQ'
quaderno = Quaderno(QUADERNO_KEY)

quaderno.expenses.get()
quaderno.contacts.get()


Las notificaciones en e.Kuantia son en formato JSON-RPC v2, tendremos q crear un endpoint y configurarlo en el panel de eKuantia. Son en tiempo real y es posible suscribirse a cualquier evento que se de en la cuenta.

from flask import Flask

app = Flask(__name__)

@app.route("/notifications", methods=['POST'])
def notifications():
	data = request.get_json()
	print(data)

if __name__ == "__main__":
    app.run()


Ahora que ya tenemos las notificaciones, vamos a crear el gasto en Quaderno. En caso de que no hayamos comprado ya en el comercio crearemos también un contacto para asociarlo.

from flask import Flask, request
from ekquaderno.quaderno import Quaderno

QUADERNO_KEY = 'sk_test_XXXXXXXXXXXXXXX'

app = Flask(__name__)
quaderno = Quaderno(QUADERNO_KEY)

def create_expense(charge):
	merchant = charge.get('merchant')
	data = {
		'contact':{
		  'first_name': merchant['name'],
		  'type': 'company',
		  'tax_id': merchant['document_number']
		},
		'po_number':'',
		'currency': charge['currency'].upper(),
		'tag_list':"eKuantia, proof_of_concept",
		'items_attributes':[
		  {
		    'description':charge['description'],
		    'quantity':'1.0',
		    'unit_price':'%s' %(abs(charge['amount']/100)),
		    'discount_rate':'0.0',
		    'reference':charge['movement_id']
		  },],
		'state':'paid'
		}
	result = quaderno.expenses.create(**data)

@app.route("/notifications", methods=['POST'])
def notifications():
	data = request.get_json()

	if data.get('method') == 'charge':
		charge = data.get('params').get('data')
		create_expense(charge)
		return 'OK'

if __name__ == "__main__":
    app.run()

2. Cobros al instante con la TPV de e.Kuantia

Esquema e.kuantia-Quaderno En e.Kuantia, los usuarios pueden disponer de una TPV virtual asociada a su cuenta desde la que pueden emitir peticiones de cobro. Veamos cómo utilizarlas junto con las Facturas de Quaderno:

from ekuantia import Ekuantia
from ekquaderno.quaderno import Quaderno

QUADERNO_KEY = 'sk_test_QQQQQQQQQQQQQQQ'
quaderno = Quaderno(QUADERNO_KEY)

ek = Ekuantia('Ekuantia', '77777777B', api_key = 'SuE$heHIHDu43_Gfk2ysHJE')

invoice = quaderno.invoices.get(search='0000001')[0]
metadata = {'invoice_id': invoice.get('id')}

payment_req = ek.requests.create(
	account_id='8a8d6d011e354767818f606b0b52e5ed', 
	load_amount=invoice.get('total').split(' ')[0]*100),
	currency=invoice.get('currency').lower(),
    description=invoice.get('items')[0].get('description'), 
    payment_gateway='tpv_ekuantia',
    dest_name=invoice.get('contact').get('full_name'),
    metadata = metadata
    )

data = {'payment_details': '[Paga en eKuantia] (%s)' %payment_req.get('url')}

quaderno.invoices.update(invoice.get('id'), **data)

Como habrás imaginado, también se genera notificación cuando se realiza un pago en la TPV Virtual. Recuerda que en e.Kuantia tienes disponible el dinero en cuenta de manera inmediata. Con los datos recibidos marcaremos como pagada la factura.

from flask import Flask, request
from ekquaderno.quaderno import Quaderno

QUADERNO_KEY = 'sk_test_XXXXXXXXXXXXXXXXXXX'

app = Flask(__name__)
quaderno = Quaderno(QUADERNO_KEY)

def pay_invoice(invoice_id, payment_req):
    data = {
        'amount': payment_req.get('amount'), 
        'payment_method': 'credit_card'
    }
    quaderno.invoices.pay_invoice(invoice_id, **data)

@app.route("/notifications", methods=['POST'])
def notifications():
    data = request.get_json()
    
    if data.get('method') == 'payment_request':
        payment_req = data.get('params').get('data')
        invoice_id = payment_req.get('metadata').get('invoice_id')  
        
        if invoice_id:
            pay_invoice(invoice_id, payment_req)

    return 'OK'

if __name__ == "__main__":
    app.run()

En breve dispondremos de una sandbox y publicaremos la documentación de la API para que puedas hacer pruebas y crear tus propios servicios sin compromiso alguno. Mientras tanto, puedes solicitarnos acceso enviándonos un email a info@ekuantia.es

NOTA: No uses este código en producción, es una prueba de concepto

e.Kuantia

Read more posts by this author.

Las Palmas de Gran Canarias, España https://www.ekuantia.es