Sobre este proyecto
it-programming / web-development
Abierto
Contexto general del proyecto
La api cuenta con las siguientes entidades: Datas, Empresas, clientes, items, facturas, facturas detalles, las mismas que tienen atributos basicos pocos. Estan listos los endpoints para crear. Lo que se necesita es hacer los siguientes ajustes en la mima: 1. Incluir validacion en numeroIdentificacion de vtClientes segun tipoIdentificacion (ya se dispone de la clase que hace la validacion) 2. Nuevos campos en entidades: Aumentar campo en json en vt_clientes para guardar direcciones, pueden ser maximo tres direcciones y se debe validar los mails de la siguiente manera: "direcciones": [ { "ciudad": "Quito", "direccion": "Amazonas", "telefonos": "22222", "contacto": "Luis mismo", "emails": [ "luis1@gmail.com", "luis2@gmail.com" ] }, { "ciudad": "guayaquil", "direccion":"Republica", "telefonos": "333333333", "contacto": "Pepe", "emails": [ "pepe1@gmail.com" ] } ] Aumentar campo tipo json en ge_items para guardar datos adicionales: "detallesAdicionales": [ { "descripcion": "item 1", "marca": "Samsumg", "color": "Blanco" } ] Aumentar campo tipo json a ge_items para guardar los datos de los impuestos: "impuestos": [ { "impuesto": "1", "codigo": "1" } ] Aumentar campo tipo json en vt_factura para guardar datos del cliente en ventas: "clienteDatos": { "cliente": "Luis luis", "tipoIdentificacion": "04", "numeroIdentificacion": "1735035363001", "tipoCliente": "01", "relacionado": "N", "ciudad": "Quito", "direccion": "Amazonas", "telefonos": "22222", "contacto": "Luis mismo", "emails": [ "luis1@gmail.com", "luis2@gmail.com" ] }, Aumentar campo tipo json a vt_factura_detalle para guardar detalles adicionales del item: "detallesAdicionales": [ { "descripcion": "Item 1", "marca": "Samsumg", "color": "Blanco" } ] Aumentar campo json vt_factura para guardar totales: impuesto, codigo, porcentaje, baseImponible, valor. "TotalItem": [ { "impuesto": "1", "codigo": "1", "porcentaje": 0, "baseImponible" : 20, "valor": 0 } ], 3. Calculos para el total de la factura. Sumar del detalle de items el descuento y ubicar en total_descuento de la factura. Calcular y totalizar del detalle de items (precioUnitario * cantidad) - descuento y ubicar en subtotal de la factura. 4. Implementar cuatro endpoints para devolver informacion al usuario segun criterios de filtrado, se debe utilizar Especification jpa detallando los campos que se desea incluir de cuatro entidades vtFacturas, vtFacturasDetalle, vtClientes, geItems. No se debe incluir el campo xml de la factura. No se debe incluir el campo direcciones del cliente pero si se debe incluir datos del cliente tomando de la factura. No se debe incluir el campo informacion adicional de los items pero si se debe incluir la informacion adicional tomando de la factura. Los parametros obligatorios son a idData b idEmpresa c fechaEmisionDesde y fecha emisionHasta / serie con SecuenciaDesde y secuenciaHasta (una de las dos es siempre obligatorio) Endpoint 1 Facturas: Se puede recibir como filtro los siguientes parametros opcionales: idData tipo String (igual) factura.idData idEmpresa tipo String (igual) factura.idData idCliente tipo UUID. (Igual) factura.json.idCliente numeroIdentificacion String. (Like) factura.json.numeroIdentificacion fechaEmisionInicial LocalDate (between) factura.fechaEmision fechaEmisionFinal LocalDate (between) factura.fechaEmision serie String (igual) factura.serie secuencia String (like) factura.secuencia Se debe devolver al usuario: El resultado de tres entidades vtFactura con sus correspondientes valores, vtClientes y vtFacturaDetalle Endpoint 2 Detalles de la factura por item: Se puede recibir como filtro los mismos parametros del endpoint 1 y adicional opcional: idItem tipo UUID. (Igual) factura.detalle.idItem Se debe devolver al usuario: El resultado de las cuatro entidades vtFactura, vtCliente, vtFacturaDetalle con sus respectivos valores y geItems. Endpoint 3 Totales de facturas: Se puede recibir como filtro los mismos parametros del endpoint 1 Endpoint 4 Totales de facturasDetalle: Se puede recibir como filtro los mismos parametros del endpoint 1 y adicional opcional: idItem tipo UUID. (Igual) factura.detalle.idItem Se debe devolver al usuario la suma total del campo json totales: El resultado de las tres entidades vtFactura con sus respectivos valores totalizados, vtCliente y geItems. 5. Crear archivos Excel de los endpoints según filtros sin incluir el campo xml. 6. Crear archivos Pdf de los endpoints según filtros sin incluir campo xml. Los siguientes son los request ya existentes que no requieren ningun cambio: localhost:8080/api/v1.0/datas { "Iddata": "abcd", "data": "abcd" } localhost:8080/api/v1.0/empresas { "idData": "ABCD", "idEmpresa": "AB01", "empresa": "ABC01" } Los siguientes son los request ya existentes a los que toca hacer los ajustes: localhost:8080/api/v1.0/clientes { "idData": "ABCD", "idEmpresa": "AB01", "cliente": "Luis luis", "tipoIdentificacion": "04", "numeroIdentificacion": "1735035363001", "tipoCliente": "01", "relacionado": "N", "direcciones": [ { "ciudad": "Quito", "direccion": "Amazonas acepta hasta 300 caracteres pueden existir hasta 3 direcciones por cliente, los mails se deben validar y pueden ser hasta tres correos electronicos por direccion", "telefonos": "22222", "contacto": "Luis mismo", "emails": [ "luis1@gmail.com", "luis2@gmail.com" ] }, { "ciudad": "guayaquil", "direccion":"Republica", "telefonos": "333333333", "contacto": "Pepe", "emails": [ "pepe1@gmail.com" ] } ] } localhost:8080/api/v1.0/items Primer item impuesto 1 codigo impuesto 1 { "idData": "ABCD", "idEmpresa": "AB01", "codigoArticulo": "001", "articulo": "Item 1", "detallesAdicionales": [ { "descripcion": "Estas casillas deben aceptar hasta 300 caracteres cada una y pueden ser desde hasta tres casillas", "marca": "Samsumg", "color": "Blanco" } ], "impuestos": [ { "impuesto": "1", "codigo": "1" } ] } Segundo Item impuesto 1, codigo impuesto 2 { "idData": "ABCD", "idEmpresa": "AB01", "codigoArticulo": "002", "articulo": "Item 2", "detallesAdicionales": [ { "descripcion": "Estas casillas deben aceptar hasta 300 caracteres cada una y pueden ser desde hasta tres casillas", "marca": "Samsumg", "color": "Negro" } ], "impuestos": [ { "impuesto": "1", "codigo": "2" } ] } localhost:8080/api/v1.0/facturas { "idData": "ABCD", "idEmpresa": "AB01", "fechaEmision": "01/01/2023", "tipoVenta": "FAC", "serie": "001001", "secuencia": "000000001", "claveAcceso": "373877847646744674", "clienteDatos": { "idCliente": "a360ccca-023a-42fb-9bb0-432eaec4dde7", "cliente": "Luis luis", "tipoIdentificacion": "04", "numeroIdentificacion": "1735035363001", "tipoCliente": "01", "relacionado": "N", "ciudad": "Quito", "direccion": "Amazonas", "telefonos": "22222", "contacto": "Luis mismo", "emails": [ "luis1@gmail.com", "luis2@gmail.com" ] }, "detalleItems": [ { "idItem": "a654bc39-78d1-4f94-84a8-1ed1603460e4", "codigoItem": "001", "item": "Item 1", "precioUnitario": 20, "cantidad": 1, "descuento": 0, "totalItem": [ { "impuesto": "1", "codigo": "1", "porcentaje": 0, "baseImponible" : 20, "valor": 0 } ], "detallesAdicionales": [ { "descripcion": "Estas casillas deben aceptar hasta 300 caracteres cada una y pueden ser hasta tres", "marca": "Samsumg", "color": "Blanco" } ] }, { "idItem": "d165dc06-9b22-48b5-827a-aacad1f3cff4", "codigoItem": "002", "item": "Item 2", "precioUnitario": 1000, "cantidad": 1, "descuento": 0, "totalItem": [ { "impuesto": "1", "codigo": "2", "porcentaje": 12, "baseImponible" : 1000, "valor": 120 } ], "detallesAdicionales": [ { "descripcion": "Estas casillas deben aceptar hasta 300 caracteres cada una y pueden ser hasta tres", "marca": "Samsumg", "color": "Negro" } ] } ], "totales": [ { "impuesto": "1", "codigo": "1", "porcentaje": 0, "baseImponible" : 20, "valor": 0 }, { "impuesto": "1", "codigo": "2", "porcentaje": 12, "baseImponible" : 1000, "valor": 120 } ] } Se debe tener experiencia en Spring boot api-restcon postgrest y trabajar con tipos json en postgres para guardar y para recuperar informacion de este tipo de campos, jpa Specification para creacion de consultar personalizadas en base a varios parametros de busqueda y de varias entidades relacionadas.
Categoría Programación y Tecnología
Subcategoría Programación Web
¿Cuál es el alcance del proyecto? Cambio mediano
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo No aplica
Disponibilidad requerida Según se necesite
Roles necesarios Programador
Plazo de Entrega: No definido
Habilidades necesarias