Finanzas
Nuevos recursos de gestión de Ventas en API Fundanet Connect
En el marco de la evolución de la gestión de ventas en Fundanet, se ha incorporado un nuevo recurso de Pedidos de Venta en la API Fundanet Connect, que permite dar de alta, consultar, modificar o eliminar pedidos de venta, aplicando las mismas validaciones que rigen estas acciones en la aplicación de escritorio.
En este sentido, tanto la edición como el borrado están condicionados al estado del pedido de venta:
- El pedido de venta se crea siempre en estado Autorizado.
- Desde Autorizado, el único cambio permitido es pasar a Pendiente (paso obligatorio para poder editar el resto de campos/líneas o eliminar el pedido).
- Desde Pendiente, se admite edición completa de cabecera y líneas, el paso a Rechazado, y es el único estado desde el que se permite el borrado.
- Rechazado no es un estado terminal: puede volver a Pendiente o a Autorizado.
El recurso incluye los siguientes campos:
| Campo | Creación | Consulta | Modificación | Eliminación |
|---|---|---|---|---|
| Id (interno) | Automático | Se devuelve; usado en la URL | No editable | Usado en la URL |
| Empresa | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| Código Id | Automático | Se devuelve | No editable | N/A |
| Tipo de pedido | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| Cliente | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| Persona de contacto | Opcional (validado contra Cliente) | Se devuelve | Editable (solo en Pendiente) | N/A |
| Fecha Pedido | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| Estado Aprobación | Fijo = Autorizado | Se devuelve | Editable (transición de estados) | Debe estar en Pendiente para poder eliminar |
| Descripción | Opcional | Se devuelve | Editable (solo en Pendiente) | N/A |
| Observaciones | Opcional | Se devuelve | Editable (solo en Pendiente) | N/A |
| Unidad de gestión | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| Proyecto de ingreso | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| Artículo (línea) | Obligatorio | Se devuelve | Editable (solo en Pendiente; sustituye todas las líneas) | N/A |
| Descripción línea | Automático | Se devuelve | No editable | N/A |
| Cantidad (línea) | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| % Dto. Línea | Opcional | Se devuelve | Editable (solo en Pendiente) | N/A |
| % IVA (línea) | Opcional | Se devuelve | Editable (solo en Pendiente) | N/A |
| Precio Unitario | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| Importe Línea | Calculado | Se devuelve | No editable | N/A |
| Control entrega | Obligatorio | Se devuelve | Editable (solo en Pendiente) | N/A |
| Entregado | Automático | Se devuelve | No editable | N/A |
| Cierre manual | Automático | Se devuelve | No editable | N/A |
| Divisa | Opcional (EUR por defecto) | Se devuelve | Editable (solo en Pendiente) | N/A |
| % descuento en factura | Opcional | Se devuelve | Editable (solo en Pendiente) | N/A |
| Subtotal excl. IVA | Calculado | Se devuelve | No editable | N/A |
| Importe total excl. IVA | Calculado | Se devuelve | No editable | N/A |
| Importe total incl. IVA | Calculado | Se devuelve | No editable | N/A |
| Fecha entrega prevista | Opcional | Se devuelve | Editable (solo en Pendiente) | N/A |
| Domicilio de entrega | Solo lectura | Se devuelve | No editable | N/A |
| Forma de cobro | Solo lectura | Se devuelve | No editable | N/A |
| Domicilio de facturación | Solo lectura | Se devuelve | No editable | N/A |
La columna Eliminación es "N/A" en el resto de los campos porque el DELETE no recibe el cuerpo de los datos: la única condición para poder eliminar es que Estado Aprobación sea Pendiente (ver fila Estado Aprobación y sección Eliminación).
Editable (solo en Pendiente) significa que el campo forma parte del PUT completo y solo se acepta un valor distinto al guardado cuando el pedido está en estado Pendiente; en Autorizado o Rechazado debe coincidir con el valor ya almacenado.
Creación – POST – Add sales order:
- El pedido se crea siempre en estado Autorizado, con independencia de lo indicado en la petición.
- Control entrega admite los valores:
- I (control por importe base de los albaranes asociados)
- C (control por cantidad/unidades).
- El pedido llega ya formado desde origen: este recurso no calcula el Precio Unitario por tarifa, se recibe tal cual en la petición.
- Domicilio de entrega, Forma de cobro y Domicilio de facturación se resuelven siempre desde la ficha del Cliente; si se envían en la petición, se ignoran. Lo mismo aplica a todos los campos calculados o autoasignados.
- Se rechaza la creación si el Artículo de una línea no existe en la base de datos o si la Persona de contacto indicada no pertenece a los contactos del Cliente.
Edición – PUT – Update Sales Order:
- El PUT recibe siempre el registro completo (cabecera y líneas), no solo los campos que cambian.
- El alcance permitido depende del estado actual:
- Con el pedido en Autorizado o en Rechazado, el único cambio permitido es el de Estado Aprobación (a Pendiente desde Autorizado; a Pendiente o Autorizado desde Rechazado). Como el PUT siempre trae el registro completo, se rechaza la petición si el contenido de cualquier campo de cabecera o del array de líneas difiere de lo ya guardado; si todo coincide y solo cambia el Estado Aprobación, se acepta.
- Con el pedido en Pendiente, se permite edición completa de cabecera y líneas con el mismo formato que la creación: el array de líneas recibido sustituye por completo a las líneas existentes (no es edición incremental línea a línea). Desde Pendiente también se admite pasar a Rechazado, con la misma regla de comparación si no se quiere modificar nada más además del estado.
Eliminación - DELETE – Delete sales order:
- Solo se permite si el pedido está en estado Pendiente; se bloquea el borrado tanto en Autorizado como en Rechazado. No se han considerado condiciones adicionales (facturación, entregas registradas): el estado es la única validación.
Consulta - GET – Get sales orders by filter:
- Filtros disponibles: Empresa, Cliente, Id, Código Id, Tipo de pedido, Estado Aprobación, Fecha Pedido, Unidad de gestión, Proyecto de ingreso, Importe total incl. IVA.
Junto al recurso de Pedidos de Venta se publican dos nuevos recursos de solo consulta, Tarifas de venta y Artículos, que permiten al sistema externo obtener los datos maestros necesarios para formar los pedidos: consultar los artículos disponibles para informar las líneas y consultar las tarifas vigentes para obtener el Precio Unitario. Ninguno de los dos permite crear, modificar ni eliminar registros.
TARIFAS DE VENTA – GET - Get products sales rates catalog by filter:
Devuelve las tarifas de venta definidas en Fundanet. Cada registro corresponde al precio de un artículo dentro de un periodo de vigencia y para un ámbito de aplicación, determinado por el Tipo Tarifa:
- General (1): aplica a todos los clientes.
- Individual (2): aplica a un cliente concreto (Tercero).
- Por Agrupación (3): aplica a los clientes de una agrupación.
Filtros disponibles: la Empresa es obligatoria en todas las consultas. El resto de los filtros son opcionales y se pueden combinar.
| Campo | Parámetro | Descripción/uso |
|---|---|---|
| Empresa | CompanyId | Obligatorio |
| Código Id | SalesRatesId | Permite obtener una tarifa concreta |
| Artículo | ProductId | |
| Fecha Desde | DateFrom | Filtra por la Fecha Desde de la tarifa |
| Fecha Hasta | DateTo | Filtra por la Fecha Hasta de la tarifa |
| Tipo Tarifa | SalesRateTypeCode | 1 = General, 2 = Individual, 3 = Por Agrupación |
| Agrupación | SalesRateGroupCode | |
| Tercero | ThirdPartyId |
Campos de salida:
| Campo | Descripción | Informado | Notas |
|---|---|---|---|
| Código Id | Clave única del registro | Siempre | Clave primaria |
| Empresa | Empresa a la que pertenece la tarifa | Siempre | Multiempresa |
| Artículo | Artículo de venta | Siempre | |
| Fecha Desde | Inicio de vigencia | Siempre | |
| Fecha Hasta | Fin de vigencia | Opcional | Vacía = vigencia indefinida |
| Tipo Tarifa | General / Individual / Por Agrupación | Siempre | 1 / 2 / 3 |
| Agrupación | Código de agrupación de clientes | Condicional | Solo si Tipo Tarifa = Por Agrupación |
| Unidad de Medida | Unidad del precio | Siempre | Condiciona si aplica Franja Horaria |
| Franja Horaria | Tramo horario de aplicación | Condicional | Solo si la Unidad de Medida tiene Franja Horaria configurada |
| Tercero | Cliente al que aplica la tarifa | Condicional | Solo si Tipo Tarifa = Individual |
| Precio Unitario | Precio de venta | Siempre | |
| Cantidad Mínima | Cantidad mínima para aplicar el precio | Opcional | Un solo umbral; no hay tramos múltiples por cantidad |
| Importe Máximo | Importe máximo facturable de este artículo aplicando la tarifa | Opcional | |
| Observaciones | Texto libre | Opcional |
La columna Informado indica si el campo siempre viene con valor (Siempre), puede venir vacío (Opcional) o depende del valor de otro campo (Condicional).
ARTÍCULOS - GET – Get products catalog by filter:
Devuelve los artículos definidos en Fundanet que cumplen los criterios de búsqueda indicados.
Filtros disponibles: la Empresa es obligatoria en todas las consultas. El resto de los filtros son opcionales y se pueden combinar.
| Campo | Parámetro | Descripción/Uso |
|---|---|---|
| Empresa | CompanyId | Obligatorio. Código de la empresa |
| Id Artículo | ProductId | Permite obtener un artículo concreto |
| Código | ProductCode | |
| Denominación | ProductName | Admite búsqueda parcial |
| Descripción | ProductDescription | Admite búsqueda parcial |
| Tipo de IVA | VatTypeCode | |
| Tipo de Producto | ProductTypeCode | |
| Naturaleza | ProductNatureCode | |
| Sujeto a IVA | VatSubject | Booleano |
| Proyecto | ProjectId / ProjectCode | Por identificador o por código |
| Familia | ProductFamilyCode | |
| Tratamiento Económico | ProductEconomicTreatmentCode | |
| Fecha Baja Venta | ProductSalesInactivityDate | |
| Marca | ProductBrandCode | |
| Activo en venta | SalesActive | Booleano |
| Activo en recuentos | StockCountActive | Booleano |
| Venta web | WebSalesActive | Booleano |
| Tratamiento por lotes | LotTrackingActive | Booleano |
| Activo en reservas | ReservationActive | Booleano |
| Control de existencias | StockCheckActive | Booleano |
| Fecha de actualización | LastUpdateDate | Devuelve los artículos actualizados en la fecha exacta indicada |
Campos de salida:
| Campo | Tipo | Descripción |
|---|---|---|
| IdArticulo | int | Identificador del artículo |
| Empresa | string | Código de la empresa a la que pertenece el artículo |
| Codigo | string | Código del artículo (clave de negocio) |
| Denominacion | string | Denominación del artículo |
| Descripcion | string | Descripción del artículo |
| TipoIvaCodigo | string | Código del Tipo de IVA |
| TipoIvaDescripcion | string | Descripción del Tipo de IVA |
| TipoProductoCodigo | string | Código del Tipo de Producto |
| TipoProductoDescripcion | string | Descripción del Tipo de Producto |
| NaturalezaCodigo | string | Código de la Naturaleza |
| NaturalezaDescripcion | string | Descripción de la Naturaleza |
| SujetoIva | bool | Indica si el artículo está sujeto a IVA |
| ProyectoCodigo | string | Código del Proyecto asociado |
| ProyectoDescripcion | string | Descripción del Proyecto asociado |
| FamiliaCodigo | string | Código de la Familia de artículo |
| FamiliaDescripcion | string | Descripción de la Familia de artículo |
| TratamientoEconomicoCodigo | string | Código del Tratamiento Económico |
| TratamientoEconomicoDescripcion | string | Descripción del Tratamiento Económico |
| FechaBajaVenta | fecha | Fecha de baja del artículo para venta |
| MarcaCodigo | string | Código de la Marca |
| MarcaDescripcion | string | Descripción de la Marca |
| ActivoVenta | bool | Activo en venta |
| ActivoRecuentos | bool | Activo en recuentos de inventario |
| VentaWeb | bool | Disponible para venta web |
| TratamientoLotes | bool | Gestión por lotes |
| ActivoReservas | bool | Activo en reservas |
| ControlExistencias | bool | Sujeto a control de existencias |
| FechaActualizacion | fecha | Fecha de la última modificación del artículo |
Los indicadores booleanos (Activo en venta, Activo en recuentos, Venta web, Tratamiento por lotes, Activo en reservas y Control de existencias) se devuelven tal y como están configurados en la ficha del artículo. El recurso no comprueba si su combinación es coherente: se limita a devolver los artículos que cumplen los filtros indicados.
Compras y Expedientes
Nuevo check Recurrencia en el formulario de Propuestas de Compra
En el marco de la evolución de la gestión de compras en iFundanet, se está trabajando en el desarrollo de nuevas funcionalidades que próximamente estarán disponibles. Como parte de este proceso, se irán incorporando en la aplicación de escritorio determinados campos que, si bien no tendrán uso operativo de forma inmediata, sentarán la base para las próximas mejoras que se pondrán a disposición de los clientes.
En esta ocasión, se incorpora en el formulario de Propuestas de Compra (escritorio), pestaña Contratación Pública, un nuevo check denominado Recurrencia, que vendrá desmarcado por defecto al crear una nueva propuesta. Cuando la propuesta se genere a partir de una tramitación realizada desde la web, el campo se cumplimentará automáticamente con el valor indicado por el investigador en dicha tramitación.
Este campo permitirá indicar si una propuesta de compra corresponde a una compra recurrente, facilitando la identificación de posibles casos de fraccionamiento indebido. Además, sienta la base para un desarrollo posterior en el que estas propuestas podrán seguir un flujo de aprobación específico (fuera del alcance de esta entrega).
Nuevo campo "Tarifa editable en Web" en los formularios de Tarifas y Descuentos de Compra
Siguiendo la línea de evolución de la gestión de compras en iFundanet mencionada en la entrada anterior, se incorpora en el formulario de Tarifas de Compra (escritorio) un nuevo campo denominado Tarifa editable en Web, que viene cumplimentado como "No" por defecto al crear una nueva tarifa. Este campo permite distinguir entre artículos con precio cerrado y artículos con precio abierto a negociación puntual (servicios o precios negociados), de forma que, en un desarrollo posterior, la web pueda permitir o no al investigador modificar el precio en el momento de la compra.
El grid de Descuentos de Compra muestra, de forma no editable, el valor heredado de la tarifa asociada, de manera que el descuento sigue siempre el mismo criterio de editabilidad que su tarifa, sin necesidad de configurarlo de forma independiente. Dado que los descuentos no se asocian directamente a una tarifa, el sistema determina qué tarifa les corresponde buscando aquella cuyo periodo de vigencia se solape con el del descuento, según el tipo (General, Proveedor o Contrato). En función del resultado de esa búsqueda:
- Si el descuento se solapa con una única tarifa, la columna muestra el valor ("Sí"/"No") heredado de esa tarifa.
- Si se solapa con más de una tarifa con valores distintos, la columna muestra "Depende de la fecha".
- Si no existe ninguna tarifa vigente asociada, la columna se muestra vacía.
El valor mostrado se actualiza de forma inmediata si se modifica el campo en la tarifa de origen.
Este desarrollo afecta únicamente a escritorio. El consumo de este valor desde la web se abordará en un desarrollo independiente y no forma parte de esta entrega.
Nuevo check "Exclusividad" en el formulario de Tercero Ofertante de la Propuesta de Compra
Siguiendo la línea de evolución de la gestión de compras en iFundanet mencionada en las entradas anteriores, se incorpora en el formulario de Tercero Ofertante, dentro de Propuestas de Compra (escritorio), un nuevo check denominado Exclusividad, que viene desmarcado por defecto al crear un nuevo ofertante. Este campo permite reflejar de forma estructurada que existe justificación documentada de proveedor único, en lugar de gestionarlo de forma informal en el campo Motivo o en documentos adjuntos.
El check Exclusividad solo puede marcarse si el ofertante está marcado como Adjudicatario; en cualquier caso, el campo Motivo sigue siendo obligatorio para el adjudicatario, tenga o no marcada la Exclusividad. El sistema no limita el número de ofertantes que puede tener una propuesta, aunque su adjudicatario tenga Exclusividad = Sí.
Este desarrollo afecta únicamente a escritorio. La recuperación de este valor desde la web se abordará en un desarrollo independiente y no forma parte de esta entrega.
Para los ofertantes ya existentes, el campo se migra con el valor "No" por defecto.