Implementacion de un "configurador" de impuestos para la definicion de reglas de cuando se aplica un impuesto dado ciertas variables.
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.
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.
Por ejemplo harias el request con:
{
"categoria": "electronico"
}
y en la BD estaria algo como
(if (= categoria "electronico") 0.10 0.20)
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:
- API para manejo de peticiones
- Interpretador de Lisp/Scheme (Ref: Ejemplo de Implementacion)
- Base de Datos
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
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:
@luissifu check this out https://github.com/benoror/taxi-driver