Skip to content

Instantly share code, notes, and snippets.

@luissifu
Last active November 11, 2018 17:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luissifu/b368f308b37d6e98031e737d9d04d2d1 to your computer and use it in GitHub Desktop.
Save luissifu/b368f308b37d6e98031e737d9d04d2d1 to your computer and use it in GitHub Desktop.

Configurador de Impuestos

Summary

Implementacion de un "configurador" de impuestos para la definicion de reglas de cuando se aplica un impuesto dado ciertas variables.

Problems to solve...

La necesidad cae en que hay situaciones donde el impuesto es dinamico, en base a ciertas condiciones que solo se saben al momento de tener el monto final. Por ejemplo cuando el subtotal rebasa cierta cantidad se reduce el impuesto.

Por esto es necesario tener una herramienta que nos ayude a definir reglas y a partir de estas obtener el impuesto que realmente aplica.

Proposal

Lo que este servicio haria, seria el guardado y procesado de las reglas que aplican en cierto impuesto. Para esto el formato en que se guardarian seria un subset de Lisp (o Scheme) en la BD. Despues para mapear los valores dinamicos solo seria question de que en el request manden las variables con sus valores respectivos y remplazarlas en el codigo.

Example of how the feature is used

Por ejemplo harias el request con:

{ 
  "categoria": "electronico"
}

y en la BD estaria algo como

(if (= categoria "electronico") 0.10 0.20)

Implementation

Para la implementacion se requeriria definir un servicio donde viviria esta logica. Para esto puede ser parte del Microservicio de Lista de Precios y ser uno de los modulos donde viva.

Para la implementacion lo que se requeriria es:

El stack propuesto es:

  • Elixir/Phoenix para el API
  • Postgres para la BD

En cuanto a que tanto ocupemos implementar, deberiamos de basarnos en el subset de Lisp llamado Scheme para la definicion del DSL. Podemos utilizar unicamente la parte de condicionales y aritmetica de este para facilitar la implementacion

Alternatives

No es necesario utilizar Lisp/Scheme en si para el guardado en la Base de datos, bien podria ser algun otro lenguaje. El beneficio de usar Lisp es porque es facil de interpretar y sencillo de entender, ademas de ser un lenguaje ya existente, por lo que tiene bastante documentacion al respecto.

Se podria utilizar algun otro lenguaje para scripting como por ejemplo:

@benoror
Copy link

benoror commented Nov 11, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment