# Documentación de Dinaup (/docs) Bienvenido a la documentación de Dinaup. Está organizada en **cinco espacios** según lo que necesites: úsalo, aprende a usarlo, constrúyelo, gestiónalo o mira qué hay de nuevo. Empezar y todos los módulos: Pymes, TPV, CRM, Proyectos, RRHH, IA, Agendas. Guías prácticas: puesta en marcha, inventario, TPV, usuarios e integraciones. Flex (no-code), SDK .NET, integraciones, recursos y guías técnicas. Alta y planes, suscripción y pagos, usuarios, permisos, legal y partners. Notas de la versión: qué cambia en cada release del núcleo y del SDK. # Actividad en tiempo real (/docs/cuenta/actividad-en-tiempo-real) La aplicación **Live** muestra la actividad de los usuarios en tiempo real. Se abre desde **App > Live** y solo la ve el administrador. *** ## Antes de empezar [#antes-de-empezar] * Necesitas ser **administrador** de la empresa. *** ## Tiempo real [#tiempo-real] La pantalla de inicio muestra quién está usando la aplicación ahora mismo. * **Resumen de actividad**: tres indicadores con los usuarios online, las sesiones activas y las empresas. * **Buscador**: filtra las sesiones por nombre o email. * **Sesiones**: la lista de usuarios conectados, agrupada por usuario. Se actualiza sola. ## Componentes [#componentes] Un análisis del uso de componentes en un rango de fechas que eliges (por defecto, los últimos 30 días). * **Indicadores**: total de registros, duración total y duración media. * **Gráficos**: los componentes más usados, los usuarios que más los usan, los componentes más lentos y los que más tiempo acumulan. ## Debug [#debug] Métricas internas del servidor, solo de lectura y visibles únicamente para el equipo Dinaup. Se actualiza cada pocos segundos e incluye memoria, sesiones activas, datos de build y los paquetes cargados. # Claves API (/docs/cuenta/claves-api) Las claves API permiten a aplicaciones externas acceder a los datos de tu empresa en Dinaup de forma programática. Cada clave está vinculada a un usuario y hereda sus permisos. *** ## Cómo funcionan [#cómo-funcionan] Una clave API es un token que se incluye en las peticiones HTTP a la API de Dinaup: ``` Authorization: Bearer ``` La clave autentica la petición como si fuera el usuario al que pertenece. Esto significa que: * Solo puede acceder a los datos que ese usuario tiene permiso de ver * Solo puede escribir en las secciones que ese usuario puede editar * Las acciones quedan registradas en la auditoría a nombre de ese usuario *** ## Generar una clave API [#generar-una-clave-api] 1. Accede al **Panel de administración** en [dinaup.com](https://dinaup.com) 2. Ve a **Claves API** en el menú lateral 3. Haz clic en **Crear clave API** 4. Selecciona el **usuario** al que se asociará la clave 5. Copia la clave generada y guárdala en un lugar seguro La clave solo se muestra una vez en el momento de la creación. Si la pierdes, deberás generar una nueva. *** ## Dónde usar las claves API [#dónde-usar-las-claves-api] | Integración | Uso | | ----------------------------------------------------------------------- | ----------------------------------------------------- | | [API REST](/docs/desarrollo/integraciones/webhook/entrantes) | Leer informes, generar documentos, escribir registros | | [Webhooks entrantes](/docs/desarrollo/integraciones/webhook/entrantes) | Playground de pruebas | | [SDK .NET](/docs/desarrollo/dotnet/sdk) | Autenticación del cliente SDK | | [n8n / Make / Zapier](/docs/desarrollo/integraciones/zapier-make-y-n8n) | Configuración de la conexión con Dinaup | *** ## Buenas prácticas de seguridad [#buenas-prácticas-de-seguridad] | Práctica | Motivo | | --------------------------------------------------- | ------------------------------------------------------------------------------------ | | Usa un **usuario específico** para cada integración | Permite revocar acceso individualmente sin afectar a otros | | **No compartas** claves en código público | Cualquiera con la clave puede acceder a tus datos | | Usa claves solo en el **backend** | Nunca las incluyas en JavaScript del frontend | | **Rota las claves** periódicamente | Minimiza el riesgo si una clave se filtra | | Asigna **permisos mínimos** al usuario de la clave | El usuario de la API solo necesita acceso a las secciones que la integración utiliza | *** ## Revocar una clave [#revocar-una-clave] Para desactivar una clave API, elimínala desde el panel de Claves API o desactiva al usuario asociado. Las peticiones con esa clave recibirán un error `401 Unauthorized`. # Configuración de Usuario (/docs/cuenta/configuracion-de-usuario) La **Configuración de Usuario** guarda tus preferencias personales. Solo te afectan a ti, no al resto de la empresa. *** ## Apariencia [#apariencia] * **Modo oscuro**: activa o desactiva el tema oscuro de la interfaz. ## Acciones rápidas (FAB) [#acciones-rápidas-fab] Elige qué accesos aparecen en el botón de acción flotante. Puedes activar: * Nueva Tarea * Nuevo Cliente * Nueva Oportunidad * Nuevo Evento * Nueva Venta * Nuevo Presupuesto * Nuevo Pedido Cada cambio se guarda al marcarlo. # Registrarse en Dinaup (/docs/cuenta/crear-cuenta) ### Accede a la ventana de registro [#accede-a-la-ventana-de-registro] Visita [dinaup.com](https://dinaup.com) y pulsa en **Iniciar sesión**. En la parte inferior del formulario verás un enlace que dice **“`Darme de alta`”**. Haz clic ahí para comenzar el registro. ### Completa tus datos [#completa-tus-datos] Introduce tu nombre, correo electrónico y una contraseña segura.\ Cuando termines, pulsa en **“`Crear Cuenta`”**. ### Confirma tu correo [#confirma-tu-correo] Revisa tu bandeja de entrada. Recibirás un email con el asunto **"Dinaup, activación de cuenta"**. Haz clic en **“`Activar mi cuenta`”** para confirmar tu correo y validar el acceso. ### Inicia sesión [#inicia-sesión] Vuelve a [dinaup.com](https://dinaup.com), pulsa en **Iniciar sesión** e introduce tu correo y contraseña. ### Solicita unirte a tu empresa [#solicita-unirte-a-tu-empresa] 1. En la pantalla principal verás un campo que dice: **¿Tu empresa ya está en Dinaup?** 2. Busca por nombre, CIF o dominio web (por ejemplo: *miempresa.com*). 3. Cuando la encuentres, haz clic en **“`Solicitar Acceso`”**. Solo queda esperar a que un administrador apruebe tu solicitud y te asigne permisos. ``` `sandbox=""` no significa «protección normal»: significa **todos los permisos apagados**, empezando por ejecutar JavaScript. Es la causa número uno de que un documento aparezca con los `{{ }}` a la vista. Y añadir `allow-same-origin` junto a `allow-scripts` anula el aislamiento por completo: si vas a hacer eso, usa directamente la opción B. ### Opción B · Mismo origen [#opción-b--mismo-origen] Conviertes el HTML en un fichero temporal del navegador y se lo das al `iframe` por su `src`. El documento queda en tu mismo origen, así que **sí** puedes medir su altura o lanzar la impresión desde fuera. Llama a la clave API solo desde tu backend. ```js const marco = document.getElementById('doc'); const url = URL.createObjectURL(new Blob([html], { type: 'text/html' })); marco.onload = () => URL.revokeObjectURL(url); // libera la memoria del fichero temporal marco.src = url; ``` Y a partir de ahí, con el documento ya cargado: ```js marco.contentWindow.print(); // abrir el diálogo de impresión marco.style.height = marco.contentDocument.body.scrollHeight + 'px'; // ajustar el alto ``` *** ## Convertirlo en PDF [#convertirlo-en-pdf] Para archivar la factura o adjuntarla a un email necesitas un PDF. Vale cualquier navegador headless — Puppeteer o Playwright en tu servidor, o un servicio de render como **Cloudflare Browser Rendering**, **Browserless** o similar — pero en todos hay que cumplir **tres condiciones**, o el PDF sale mal: 1. **Esperar a que el JavaScript termine.** El PDF se captura cuando tú digas; si lo capturas al instante, congelas la página a medio montar y salen los `{{ }}`. 2. **Imprimir los fondos.** Las plantillas usan colores de fondo en cabeceras y totales; sin esta opción salen en blanco. 3. **Tamaño A4.** Las plantillas ya declaran `@page { size: A4 }`; dale al navegador un lienzo acorde (794 × 1123 px a 96 ppp). Con Puppeteer son cuatro líneas: ```js const pagina = await navegador.newPage(); await pagina.setViewport({ width: 794, height: 1123 }); await pagina.setContent(html, { waitUntil: 'networkidle0' }); // condición 1 const pdf = await pagina.pdf({ format: 'A4', printBackground: true }); // condiciones 2 y 3 ``` `networkidle0` espera a que no queden descargas en curso, que es justo lo que necesitas: Bootstrap y Vue vienen de internet, y hasta que llegan y se ejecutan no hay factura. Si tu servicio de render no ofrece esa espera, casi todos aceptan una **espera fija** (uno o dos segundos) o **esperar a que aparezca un elemento** de la plantilla; cualquiera de las dos sirve. *** ## Enviarlo por email [#enviarlo-por-email] No hace falta que montes tú el correo: la propia plantilla puede fijar asunto, cuerpo, destinatario y nombre del adjunto. Está en [Envío de emails](/docs/desarrollo/flex/documentos-dinamicos/envio-de-emails). *** ## Errores típicos [#errores-típicos] El JavaScript del documento no llegó a ejecutarse. Las tres causas, por orden de frecuencia: lo insertaste con innerHTML, el iframe lleva sandbox sin allow-scripts, o el PDF se capturó antes de que la página terminara de montarse. La plantilla oculta bloques enteros cuando no le llegan datos. Comprueba que estás enviando las variables de entrada del documento en el cuerpo de la petición y que el registro existe: si la variable llega vacía, el documento se genera correctamente pero no tiene nada que pintar. El documento carga Bootstrap y las fuentes desde internet. Si lo abres en una máquina sin salida a la red, o tu web bloquea recursos externos con una política de seguridad de contenido (CSP), el HTML llega pero el diseño no. Falta activar la impresión de fondos: printBackground: true en Puppeteer, o la opción equivalente en tu servicio de render. Es una opción del navegador, no de la plantilla. Sí, el fichero es autosuficiente en cuanto a datos: los tuyos ya vienen dentro. Pero necesita conexión para descargar Bootstrap y Vue. Si quieres un archivo que sobreviva sin internet, guarda el PDF, no el HTML. Un documento lleva datos que quizá no controlas del todo (el nombre de un cliente, unas notas). Si lo incrustas aislado —sandbox="allow-scripts" sin allow-same-origin— el documento se pinta pero no puede leer la sesión ni las cookies de tu página. Reserva el mismo origen para tus propios documentos dentro de tu propia aplicación. *** → [Crear documento dinámico](/docs/desarrollo/flex/documentos-dinamicos/crear-documento-dinamico) → [Plantilla de impresión de facturas](/docs/desarrollo/flex/documentos-dinamicos/plantilla-de-impresion-facturas) → [Envío de emails](/docs/desarrollo/flex/documentos-dinamicos/envio-de-emails) → [Referencia del endpoint](/docs/desarrollo/integraciones/webhook/entrantes#post-apidynamicdocuments-documentos-dinámicos) # Plantilla de impresión de facturas (/docs/desarrollo/flex/documentos-dinamicos/plantilla-de-impresion-facturas) ## Datos que siempre se deben mostrar [#datos-que-siempre-se-deben-mostrar] ``` resumen.NumeroFactura resumen.Fecha resumen.EmpresaRazonSocial resumen.EmpresaNIF resumen.EmpresaDireccion resumen.EmpresaEmail totales conceptos ``` ## Visibles si (v-if="resumen.ClienteNIF") [#visibles-si--v-ifresumenclientenif] ```html resumen.ClienteNombre resumen.ClienteNIF resumen.ClienteDireccion resumen.ClienteEmail ``` ## Datos visibles solo si están rellenados [#datos-visibles-solo-si-están-rellenados] ``` resumen.LogoURL resumen.FechaVencimiento resumen.DireccionEnvio resumen.CondicionesPago resumen.Notas resumen.EnlacePago resumen.VerifactuQR ``` ## Tabla BI [#tabla-bi] Usa esta tabla tal cual: ```
Tipo Base Cuota IVA RE % Cuota RE
Tipo Base Cuota
``` # QR Veri*factu (/docs/desarrollo/flex/documentos-dinamicos/qr-verifactu) El **QR de Veri\*factu** es el código que la normativa antifraude obliga a imprimir en cada factura. Permite que cualquiera (cliente o Hacienda) **verifique la factura** escaneándolo contra la sede electrónica de la AEAT. Dinaup **genera y firma ese QR por ti** cuando registra la factura. En tu [plantilla de impresión de facturas](/docs/desarrollo/flex/documentos-dinamicos/plantilla-de-impresion-facturas) no lo calculas: solo lo **colocas** donde quieras que aparezca en el documento. El QR es **verificable**, no decorativo. Codifica los datos fiscales de la factura (emisor, número, fecha, importe) y un sello que la AEAT comprueba. No intentes recalcularlo ni montar el hash a mano: usa el que Dinaup expone. *** ## Cómo encaja en la plantilla [#cómo-encaja-en-la-plantilla] Una plantilla de impresión es un [documento dinámico](/docs/desarrollo/flex/documentos-dinamicos/crear-documento-dinamico) HTML que combina los datos de la factura con tu maquetación. Entre los datos que Dinaup pone a tu disposición está el **QR de Veri\*factu** ya resuelto, listo para pintar. | Pieza | De dónde sale | | ------------------------------------------------------- | ------------------------------------------------------------------------------ | | Datos de la factura (número, fecha, totales, conceptos) | Resumen de la factura que recibe la plantilla | | **QR de Veri\*factu** | Lo entrega Dinaup ya generado y firmado, junto al resto de datos de la factura | | Maquetación (dónde y cómo se ve el QR) | Tú, en el HTML de la plantilla | Igual que el logo, el enlace de pago o las notas, el QR es **un dato más** que muestras solo si la factura lo lleva. Para el listado completo de datos disponibles y cómo condicionar su visibilidad, consulta la [plantilla de impresión de facturas](/docs/desarrollo/flex/documentos-dinamicos/plantilla-de-impresion-facturas). *** ## Insertar el QR [#insertar-el-qr] ### Abre tu plantilla de impresión de facturas [#abre-tu-plantilla-de-impresión-de-facturas] Edita el [documento dinámico](/docs/desarrollo/flex/documentos-dinamicos/crear-documento-dinamico) que usas para imprimir facturas. Es donde defines la maquetación HTML del documento. ### Coloca el QR donde quieras que aparezca [#coloca-el-qr-donde-quieras-que-aparezca] Inserta el QR de Veri\*factu en el punto del documento donde debe imprimirse (habitualmente junto al total o en el pie de la factura). La sintaxis concreta para volcar el QR está documentada en la propia [plantilla de impresión de facturas](/docs/desarrollo/flex/documentos-dinamicos/plantilla-de-impresion-facturas), junto al resto de campos. ### Muéstralo solo si la factura lo lleva [#muéstralo-solo-si-la-factura-lo-lleva] No todas las facturas generan QR. Condiciona su impresión a que el dato venga relleno, igual que harías con el logo o las notas, para que la plantilla siga siendo válida en facturas sin Veri\*factu. El QR aparece **solo cuando la factura está acogida a Veri\*factu**. Si tu empresa aún no lo tiene activado, el dato llega vacío y la plantilla no debe pintar nada. Revisa el estado de Veri\*factu en tu empresa en la [página de Veri\*factu](/docs/rtg/pymes/facturacion/ventas/verifactu). *** ## Preguntas frecuentes [#preguntas-frecuentes] No. Dinaup genera y firma el QR de Veri\*factu al registrar la factura. La plantilla solo lo coloca en el documento. No tienes que calcular el contenido ni el sello. Porque el QR solo se genera para facturas acogidas a Veri\*factu. Si tu empresa no lo tiene activado, o la factura no entra en el régimen, el dato llega vacío. Por eso conviene condicionar su impresión a que venga relleno. Los datos fiscales de la factura (emisor, número completo, fecha de expedición e importe total) junto a un sello que permite verificarla contra la sede electrónica de la AEAT. Es el QR oficial de Veri\*factu, no uno propio de Dinaup. *** → [Plantilla de impresión de facturas](/docs/desarrollo/flex/documentos-dinamicos/plantilla-de-impresion-facturas) → [Crear un documento dinámico](/docs/desarrollo/flex/documentos-dinamicos/crear-documento-dinamico) → [Veri\*factu (producto)](/docs/rtg/pymes/facturacion/ventas/verifactu) → [Declaración Veri\*factu (legal)](/docs/cuenta/legal/declaracion-verifactu) # Filtrar informe por rango de fechas (/docs/desarrollo/flex/informes/filtrar-informe-por-rango-de-fechas) Una variable de informe formula la pregunta del intervalo y un filtro rápido la aplica sobre el campo de fecha. **Recomendación**: para informes contables utiliza siempre campos de tipo **Fecha** (sin hora). Las fechas con hora tienen implicaciones de zona horaria que pueden causar discrepancias entre regiones. *** #### Añade la variable de intervalo de fechas [#añade-la-variable-de-intervalo-de-fechas] Las variables de informe son preguntas que el sistema formula al usuario antes de ejecutar la consulta. 1. Abre la ventana de configuración del informe. 2. Pulsa sobre **`Añadir pregunta de intervalo de fecha y hora`**. 3. En **Nombre de variable** escribe `Fecha` y pulsa **Aceptar**. Configuración de variable de fecha en informe #### Configura el formato de la pregunta [#configura-el-formato-de-la-pregunta] Al pulsar "Añadir pregunta de intervalo...", el sistema crea por defecto una variable de tipo **Fecha y hora dinámica**. Puedes cambiar el formato según tus necesidades. **Tipos de formato disponibles** | Formato | Solicita al usuario | Uso recomendado | | ------------------------- | ---------------------------------- | -------------------------------------- | | **Fecha** | Un único valor de fecha | Filtrar por fecha exacta | | **Fecha y hora** | Un único valor con fecha y hora | Filtrar por momento exacto | | **Fecha dinámica** | Intervalo desde/hasta (solo fecha) | Informes contables, ventas por periodo | | **Fecha y hora dinámica** | Intervalo desde/hasta (con hora) | Logs, eventos con hora exacta | **¿Qué significa "dinámica"?** El sufijo "dinámica" indica que se solicita un **intervalo** (desde y hasta) en lugar de un valor único. Por eso, al usar "Añadir pregunta de intervalo...", el tipo predeterminado es dinámico. **Zona horaria**: los campos con hora pueden mostrar resultados diferentes según la ubicación del usuario. Un registro del "31 de enero a las 23:00 UTC" aparecerá como "1 de febrero" en zonas horarias adelantadas. Para informes contables, usa **Fecha dinámica**. Selección de formato de fecha #### Configura el filtrado rápido [#configura-el-filtrado-rápido] Vincula la variable con el campo que deseas filtrar: 1. En la sección **Filtrado rápido**, pulsa **Agregar condición**. 2. Configura los siguientes parámetros: | Parámetro | Valor | | -------------- | ---------------------------------------------------------- | | **Campo** | Fecha contable (o el campo de fecha que corresponda) | | **Operador** | Entre desde y hasta | | **Parámetros** | Selecciona las variables `Fecha (desde)` y `Fecha (hasta)` | Configuración de filtrado rápido Selección de parámetros de filtro #### Guarda y consulta el informe [#guarda-y-consulta-el-informe] Una vez configurado: 1. Guarda los cambios del informe. 2. Al consultar el informe, el sistema solicita el intervalo de fechas antes de mostrar los resultados. *** # Informes (/docs/desarrollo/flex/informes) Un **informe** es una configuración que produce un listado de datos a partir de una sección. Eliges qué columnas quieres, cómo filtrarlas, cómo agruparlas y ordenarlas, y obtienes una consulta reutilizable: para verla en pantalla, exportarla o consumirla desde la API. Todo sin escribir SQL. Un informe **siempre nace de una sección**. La sección es el origen de los datos (las "tablas" de Flex); el informe es la vista que defines sobre ella. Antes de crear un informe, ten clara la sección de la que vas a partir. *** ## Qué puedes hacer con un informe [#qué-puedes-hacer-con-un-informe] | Capacidad | Para qué sirve | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Selección de columnas** | Eliges exactamente qué campos de la sección aparecen en el listado, incluidos datos de secciones relacionadas. | | **Filtrado rápido** | Acotas los resultados con condiciones sobre los campos (igual, distinto, contiene, entre desde y hasta…) sin escribir nada de código. | | **Filtro por algoritmo** | Cuando la condición es un cálculo y no un campo directo, un [algoritmo](/docs/desarrollo/flex/algoritmos) decide qué filas entran. | | **Columnas calculadas** | Añades columnas cuyo valor lo produce un [algoritmo](/docs/desarrollo/flex/algoritmos): totales, búsquedas en otras secciones, agregados de registros relacionados. | | **Rol de columna** | Le dices al informe **qué tipo de dato** es una columna (moneda, porcentaje, cantidad…) para que la formatee y la trate bien. | | **Visibilidad de columna** | Controlas cuándo se muestra u oculta una columna sin tener que quitarla del informe. | | **Agrupación y ordenación** | Agrupas filas por uno o varios campos y ordenas el resultado como necesites. | | **Preguntas dinámicas** | El informe pregunta parámetros al usuario antes de ejecutarse (por ejemplo, un rango de fechas) y filtra con su respuesta. | | **Consumo por API** | Expones el informe como endpoint para que sistemas externos lean sus datos de forma estandarizada. | *** ## Filtrado: rápido o por algoritmo [#filtrado-rápido-o-por-algoritmo] Hay dos formas de acotar qué filas devuelve un informe, y se combinan: * **Filtrado rápido**: condiciones directas sobre los campos de la sección. Eliges un campo, un operador y un valor (o un parámetro). Es el filtro del día a día y no requiere código. * **Filtro por algoritmo**: cuando lo que decide la pertenencia de una fila es un cálculo (un total, una comparación derivada, un dato de otra sección), un [algoritmo](/docs/desarrollo/flex/algoritmos) resuelve la condición. Las **preguntas dinámicas** (también llamadas variables del informe) convierten un filtro fijo en uno interactivo: el sistema pregunta el valor al usuario justo antes de ejecutar la consulta. El caso más habitual es delimitar un periodo temporal. → Guía: [Filtrar informe por rango de fechas](/docs/desarrollo/flex/informes/filtrar-informe-por-rango-de-fechas) *** ## Columnas calculadas, agrupación y ordenación [#columnas-calculadas-agrupación-y-ordenación] Un informe no se limita a volcar campos tal cual: * **Columnas calculadas**: el valor de la columna lo genera un [algoritmo](/docs/desarrollo/flex/algoritmos). Sirve para sumar líneas de un documento, traer el nombre de un registro relacionado o calcular un importe derivado, todo dentro del propio listado. * **Agrupación**: juntas las filas por uno o varios campos para obtener subtotales y resúmenes en lugar del detalle fila a fila. * **Ordenación**: defines el orden del resultado por las columnas que elijas. Los cálculos de un informe se apoyan en **algoritmos**, que se ejecutan como consultas SQL optimizadas. Entender los tipos de algoritmo (lineal, cruzado, búsqueda…) te ayuda a decidir qué columna calculada o qué filtro necesitas. → [Algoritmos](/docs/desarrollo/flex/algoritmos) *** ## Rol de una columna [#rol-de-una-columna] El **rol** le dice al informe qué clase de dato representa una columna. No cambia el valor: cambia cómo se interpreta, se formatea y se trata en pantalla, en los totales y en la exportación. Por defecto una columna es **automática**, y el informe deduce su trato por el formato del campo. Cuando ese trato automático no acierta, fijas el rol a mano. | Rol | Cuándo usarlo | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | **Automático** | El informe decide el trato de la columna según el tipo del campo. Es el valor por defecto y vale para la mayoría de columnas. | | **Moneda** | La columna es un importe. Se presenta como dinero (decimales y símbolo monetario) y se comporta como tal en sumas y totales. | | **Porcentaje** | La columna es un tanto por ciento. Se muestra en formato porcentual en lugar de como número suelto. | | **Cantidad** | La columna es una cantidad asociada al propósito del informe (por ejemplo, unidades). El informe la trata como su magnitud principal. | | **Última vez visto** | Marca la columna que representa la fecha/momento de última actividad, para usarla como referencia temporal del registro. | El rol es sobre todo **formato y semántica**: una columna con rol *Moneda* se ve y se suma como dinero. Si una cifra aparece sin símbolo de moneda o un porcentaje sale como número crudo, casi siempre se arregla fijando el rol correcto. *** ## Visibilidad de una columna [#visibilidad-de-una-columna] La **visibilidad** controla cuándo aparece una columna sin obligarte a eliminarla del informe. Es útil para tener columnas que solo importan en ciertos contextos, o que el informe necesita para calcular o filtrar pero que no quieres mostrar. | Visibilidad | Comportamiento | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | **Siempre visible** | La columna aparece en todos los casos. | | **Siempre oculta** | La columna nunca se muestra, pero sigue formando parte del informe (sirve para cálculos o filtros internos sin ensuciar el listado). | | **Automática** | El informe decide si mostrarla según el contexto. Es el comportamiento por defecto. | | **Oculta en complementos** | La columna se ve en el informe principal, pero se oculta cuando el informe se usa como complemento dentro de otra vista. | Ocultar una columna **no es lo mismo que quitarla**. Una columna oculta sigue calculándose y puede usarse para filtrar, agrupar u ordenar; solo deja de mostrarse. Quítala del informe solo si de verdad no la necesitas para nada. *** ## Consumir informes desde la API [#consumir-informes-desde-la-api] Cualquier informe puede convertirse en una fuente de datos para integraciones externas. Los **informes API** son informes normales que cumplen unas convenciones de nombre y categoría para poder consumirse de forma estandarizada. Se dividen en **sincronizables** y **no sincronizables** según su complejidad. Es la vía recomendada para que un sistema externo lea datos de Dinaup: defines el informe una vez y lo consultas como endpoint, sin acoplarte a la estructura interna de la base de datos. → [Informes API](/docs/desarrollo/flex/informes/informes-api) · [Integraciones](/docs/desarrollo/integraciones) *** ## Subpáginas [#subpáginas] Configura un informe para que pregunte un intervalo de fechas antes de ejecutarse. Expón un informe como endpoint para integraciones: convenciones, sincronizables y no sincronizables. *** → [Filtrar informe por rango de fechas](/docs/desarrollo/flex/informes/filtrar-informe-por-rango-de-fechas) → [Informes API](/docs/desarrollo/flex/informes/informes-api) → [Algoritmos](/docs/desarrollo/flex/algoritmos) # Informes API (/docs/desarrollo/flex/informes/informes-api) Un informe API es un informe normal que cumple tres requisitos para que un sistema externo lo consuma: * Nombre: debe empezar por el prefijo `API -`. * Categoría: `Funcionalidad`. * Subcategoría: `API`. Los informes API se clasifican en dos tipos: * **Syncable** (Sincronizable) * **Non-Syncable** (No sincronizable) Ten cuidado al modificarlos: un cambio inapropiado puede generar incompatibilidades con los sistemas conectados. Recomendaciones: * **Agregar columnas**: incorporar columnas nuevas no debería afectar a la compatibilidad, aunque puede afectar al rendimiento. * **Editar columnas**: modificar columnas existentes puede provocar incompatibilidades con otros sistemas que ya usan el informe. * **Ampliación de informes**: si necesitas agregar una columna, valora crear un informe nuevo. En informes pequeños puede bastar con añadir la columna: mantener menos informes simplifica su administración. ### Syncable (Sincronizable) [#syncable-sincronizable] Informe Syncable Los informes sincronizables incluyen, además de las columnas necesarias, las columnas requeridas para la sincronización (por ejemplo `ID`, `Eliminado` o `FechaIA`). No contienen datos relacionados. En términos SQL, corresponden a consultas sencillas del tipo: ``` SELECT a, b, c FROM xx; ``` (sin JOIN, GROUP BY ni subconsultas) Ejemplo: en un informe sincronizable de ventas, se puede incluir la columna `Ventas > Cliente ID`, pero no se deben incluir niveles adicionales como `Ventas > Cliente ID > Nombre`. Estos informes son compatibles con [Dinaup PG Sync](/docs/desarrollo/integraciones/dinaup-pg-sync). ### Non-Syncable (No sincronizable) [#non-syncable-no-sincronizable] Informe No Sincronizable Los informes no sincronizables contienen datos complejos, como relaciones, filtros avanzados, agrupaciones, algoritmos o datos indirectos. Debido a esta complejidad, estos informes no son compatibles con [Dinaup PG Sync](/docs/desarrollo/integraciones/dinaup-pg-sync). # API REST: Referencia de endpoints (/docs/desarrollo/integraciones/webhook/entrantes) La API REST de Dinaup lee y escribe tus datos con peticiones HTTP desde cualquier lenguaje. Todos los endpoints se sirven desde `https://webhook.dinaup.com`. *** ## Autenticación [#autenticación] Toda petición (salvo el ping) lleva un **Token Bearer** en la cabecera HTTP: ``` Authorization: Bearer ``` El token no es tu Clave API en crudo. Dinaup lo deriva de la clave y su secreto, y lo antepone con el identificador de tu terminal: ``` _ ``` No lo compones a mano. Genera la Clave API en **dinaup.com > Claves API**, marca la clave como **compatible con webhooks**, y copia el Token Bearer ya montado desde el [Playground](#playground). El token hereda los permisos del usuario de la clave: solo accede a lo que ese usuario puede ver y escribir. → Ver [Claves API](/docs/cuenta/claves-api) Usa el token solo en tu backend. Nunca lo incrustes en código público ni en el frontend de una web. *** ## `GET /`: Ping [#get--ping] Verifica que el servidor responde. No requiere autenticación. **Request:** ```bash curl -X GET "https://webhook.dinaup.com" ``` **Response:** `200 OK` ``` "Hola :)" ``` *** ## `GET /api/whoami`: Usuario de la clave [#get-apiwhoami-usuario-de-la-clave] Devuelve el usuario asociado al token. Úsalo para comprobar que la autenticación funciona. **Request:** ```bash curl -X GET "https://webhook.dinaup.com/api/whoami" \ -H "Authorization: Bearer " ``` **Response:** `200 OK` ```json { "User": "..." } ``` El campo `User` trae la información de la sesión del usuario en Dinaup. *** ## Límites de tasa [#límites-de-tasa] Cada endpoint limita las peticiones por tenant (identificado por el token). El control es un cubo de tokens: un saldo máximo que se repone poco a poco. | Endpoint | Saldo máximo | Reposición | Periodo | | -------------------------- | ------------ | ---------- | ------- | | WriteOperations | 30 | 5 | 10 s | | Reports | 30 | 5 | 10 s | | DynamicDocuments | 30 | 5 | 10 s | | Whoami | 60 | 10 | 10 s | | Herramientas (AEAT / VIES) | 10 | 2 | 10 s | Las herramientas fiscales limitan por IP, no por token. Si superas el saldo, recibes `429 Too Many Requests` con la cabecera `Retry-After: 10`. *** ## `POST /api/reports`: Consultar informes [#post-apireports-consultar-informes] Ejecuta un [informe de Dinaup Flex](/docs/desarrollo/flex/informes) y devuelve las filas en JSON. El informe define columnas, filtros y agrupaciones; tú solo lo disparas. **Parámetros (query string):** | Parámetro | Tipo | Obligatorio | Descripción | | ----------------- | ---- | ----------- | ----------------------------------------------------- | | `id` | UUID | Sí | ID del informe | | `page` | int | No | Número de página. Por defecto 1 | | `resultsPerPage` | int | No | Resultados por página. Por defecto 10 | | `withFiles` | bool | No | Incluir URLs de archivos adjuntos. Por defecto false | | `safeColumnsName` | bool | No | Usar GUIDs como nombres de columna. Por defecto false | **Body (opcional):** JSON plano con los valores de las variables del informe, si tiene preguntas dinámicas. ```json { "variableFiltro1": "valor1", "variableFiltro2": "valor2" } ``` **Request:** ```bash curl -X POST "https://webhook.dinaup.com/api/reports?id=&page=1&resultsPerPage=100" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{}' ``` **Response:** ```json { "data": [ {"columna1": "valor1", "columna2": "valor2"}, {"columna1": "valor3", "columna2": "valor4"} ], "currentPage": 1, "totalPages": 5, "totalResults": 42, "files": [] } ``` Activa `safeColumnsName=true` en producción: los nombres de columna dejan de cambiar si renombras un campo en Dinaup. Los resultados vienen paginados, así que itera con `page` y `resultsPerPage` para conjuntos grandes. *** ## `POST /api/dynamicdocuments`: Documentos dinámicos [#post-apidynamicdocuments-documentos-dinámicos] Renderiza un [documento dinámico](/docs/desarrollo/flex/documentos-dinamicos) y devuelve su contenido. Los documentos dinámicos son plantillas que combinan datos de varias secciones en HTML, JSON o texto. **Parámetros (query string):** | Parámetro | Tipo | Obligatorio | Descripción | | --------- | ---- | ----------- | ------------------------- | | `id` | UUID | Sí | ID del documento dinámico | **Body (opcional):** JSON plano con las variables a sustituir en la plantilla. ```json { "clienteId": "abc-123" } ``` **Request:** ```bash curl -X POST "https://webhook.dinaup.com/api/dynamicdocuments?id=" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"clienteId": "abc-123"}' ``` **Response:** `200 OK` con el contenido renderizado del documento como texto. *** ## `POST /api/writeoperations`: Escribir datos [#post-apiwriteoperations-escribir-datos] Crea, edita o elimina registros en cualquier sección de Dinaup. **Parámetros (query string):** | Parámetro | Tipo | Obligatorio | Descripción | | -------------- | ------ | ----------- | ----------------------------------------------------------------- | | `sectionId` | UUID | Sí | ID de la sección donde escribir | | `FieldPrimary` | string | Sí | Campo clave que identifica registros. Normalmente `id` | | `scripts` | bool | No | Ejecutar los scripts de servidor de la sección. Por defecto false | **Headers:** ``` Authorization: Bearer Content-Type: application/json ``` ### Crear, editar y eliminar [#crear-editar-y-eliminar] La operación la decide el valor del campo `id`: | Valor de `id` | Operación | Descripción | | ------------------- | ---------- | ------------------------------------------------- | | `""` (cadena vacía) | **Crear** | Se crea un registro nuevo. Dinaup genera el ID | | UUID existente | **Editar** | Se actualizan los campos enviados de ese registro | Para **eliminar**, edita el registro con el campo `eliminado` a `1`: ```json { "id": "123e4567-e89b-12d3-a456-426614174000", "eliminado": "1" } ``` No hay endpoint DELETE. El borrado es lógico y se hace por WriteOperations. ### Nombres de campo (`pr_*`) [#nombres-de-campo-pr_] Cada campo se identifica por su columna PostgreSQL, con formato `pr_XXXXXXXXX`. Consulta los nombres de cada sección desde: * **Play Dinaup** → módulo Desarrollo → Esquema * **Dinaup Desktop** (app Windows) → configuración de la sección * **doc-flex.dinaup.com** → referencia de todas las secciones * **SDK .NET ([MyDinaup](/docs/desarrollo/dotnet/mydinaup))** → la librería tipada de tu esquema; cada columna `pr_XXXXXXXXX` con un nombre legible Los valores viajan siempre como texto (`"100.00"`, `"1"`), no como números ni booleanos. ### Formato 1: Objeto simple [#formato-1-objeto-simple] Un solo registro como diccionario de campos: ```json { "id": "", "pr_cliente": "id-del-cliente", "pr_importe": "100.00" } ``` ### Formato 2: Objeto con lista (padre + hijos) [#formato-2-objeto-con-lista-padre--hijos] Para secciones con una sección lista asociada (por ejemplo, Factura + Líneas): ```json { "Main": { "id": "", "pr_cliente": "id-del-cliente" }, "List": [ {"pr_item": "producto-1", "pr_cantidad": "10"}, {"pr_item": "producto-2", "pr_cantidad": "20"} ] } ``` ### Formato 3: Lote de objetos [#formato-3-lote-de-objetos] Varios registros en una sola petición: ```json [ {"id": "", "pr_campo1": "valor1"}, {"id": "", "pr_campo1": "valor2"} ] ``` ### Formato 4: Lote de objetos con listas [#formato-4-lote-de-objetos-con-listas] Varios registros padre-hijo en una sola petición: ```json [ { "Main": {"id": "", "pr_campo": "valor1"}, "List": [{"pr_item": "val1"}] }, { "Main": {"id": "", "pr_campo": "valor2"}, "List": [{"pr_item": "val2"}] } ] ``` **Ejemplo completo (crear un registro):** ```bash curl -X POST "https://webhook.dinaup.com/api/writeoperations?sectionId=&FieldPrimary=id&scripts=true" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "id": "", "pr_cliente": "id-del-cliente", "pr_importe": "100.00" }' ``` Un objeto simple y un lote fallan entero si una operación es inválida. Trata siempre el código de respuesta antes de dar la escritura por buena. Las escrituras respetan los permisos del usuario de la clave. Si ese usuario no puede escribir en una sección, la operación se rechaza. *** ## Herramientas fiscales [#herramientas-fiscales] Validan un identificador fiscal contra el censo oficial. Requieren token y limitan por IP. ### `GET /api/tools/aeat/NIFCheck`: Validar NIF/CIF [#get-apitoolsaeatnifcheck-validar-nifcif] Valida un NIF o CIF contra la Agencia Estatal de Administración Tributaria. | Parámetro | Tipo | Obligatorio | Descripción | | --------- | ------ | ----------- | --------------------------------- | | `nif` | string | Sí | NIF o CIF a validar | | `nombre` | string | Sí | Nombre o razón social del titular | ```bash curl -X GET "https://webhook.dinaup.com/api/tools/aeat/NIFCheck?nif=B00000000&nombre=Empresa%20SL" \ -H "Authorization: Bearer " ``` ### `GET /api/tools/vies/VATCheck`: Validar VIES [#get-apitoolsviesvatcheck-validar-vies] Valida un número de identificación fiscal intracomunitario contra el sistema VIES. Útil antes de emitir una factura con IVA al 0 % a un operador intracomunitario. | Parámetro | Tipo | Obligatorio | Descripción | | --------- | ------ | ----------- | ------------------------------ | | `nif` | string | Sí | NIF intracomunitario a validar | ```bash curl -X GET "https://webhook.dinaup.com/api/tools/vies/VATCheck?nif=ESB00000000" \ -H "Authorization: Bearer " ``` *** ## Códigos de respuesta [#códigos-de-respuesta] | Código | Significado | | ------ | ----------------------------------------------------------------------------------- | | `200` | Operación correcta | | `400` | Parámetros o cuerpo inválidos (falta `sectionId`, `FieldPrimary`, GUID mal formado) | | `401` | Token inválido o ausente | | `403` | El usuario de la clave no tiene permiso para esta operación | | `404` | Recurso no encontrado (informe, documento, sección) | | `429` | Superado el límite de tasa. Reintenta pasados los segundos de `Retry-After` | | `500` | Error interno del servidor | *** ## Playground [#playground] Prueba todos los endpoints y copia el Token Bearer de cada clave API, sin herramientas externas: [Abrir el Playground de Webhooks](https://play.dinaup.com/App/Dev/IncomingWebhooks) # API y Webhooks (/docs/desarrollo/integraciones/webhook) Dinaup integra en dos direcciones. Eliges según quién empieza la conversación. | Dirección | Quién llama | Para qué | | ------------------------ | ----------- | -------------------------------------------------------------------------- | | **API REST** (entrantes) | Tú → Dinaup | Lees informes, generas documentos y escribes registros con peticiones HTTP | | **Webhooks salientes** | Dinaup → Tú | Dinaup avisa a tu servidor cuando se crea o modifica un registro | Las dos usan el mismo servidor: `https://webhook.dinaup.com`. *** ## API REST: tú preguntas, Dinaup responde [#api-rest-tú-preguntas-dinaup-responde] Envías peticiones HTTP y recibes JSON. Sirve para conectar una tienda online, alimentar un dashboard, importar datos en lote o sincronizar con otro sistema desde cualquier lenguaje. Cinco endpoints y dos herramientas de validación fiscal: | Endpoint | Método | Para qué | | -------------------------- | ------ | ---------------------------------------------------- | | `/` | `GET` | Ping. Comprueba que el servidor responde | | `/api/whoami` | `GET` | Devuelve el usuario asociado a tu clave | | `/api/reports` | `POST` | Ejecuta un informe de Flex y devuelve sus filas | | `/api/dynamicdocuments` | `POST` | Renderiza un documento dinámico | | `/api/writeoperations` | `POST` | Crea, edita o elimina registros en cualquier sección | | `/api/tools/aeat/NIFCheck` | `GET` | Valida un NIF/CIF contra la AEAT | | `/api/tools/vies/VATCheck` | `GET` | Valida un NIF intracomunitario contra el VIES | Cada petición viaja firmada con un **Token Bearer** en la cabecera. El token hereda los permisos del usuario de la clave: solo lee y escribe lo que ese usuario puede ver. → [Referencia completa de endpoints](/docs/desarrollo/integraciones/webhook/entrantes) *** ## Webhooks salientes: Dinaup te avisa [#webhooks-salientes-dinaup-te-avisa] Configuras una URL y Dinaup le envía un `POST` cuando cambia un registro de la sección que vigilas. Reaccionas al momento, sin consultar la API en bucle. 1. Eliges la sección a vigilar y si disparas en altas, en modificaciones o en ambas. 2. Acotas con campos disparadores y campos obligatorios. 3. Tu servidor recibe el registro antes y después del cambio. → [Configuración de webhooks salientes](/docs/desarrollo/integraciones/webhook/salientes) *** ## Qué dirección uso [#qué-dirección-uso] | Necesitas | Usa | | ---------------------------------------- | --------------------------------------------------------------------------------------------- | | Leer o escribir datos desde tu código | API REST | | Crear facturas desde una tienda online | API REST: `POST /api/writeoperations` | | Volcar un informe a un dashboard | API REST: `POST /api/reports` | | Enterarte al instante de una venta nueva | Webhook saliente en la sección de ventas | | Sincronizar clientes con un CRM | Webhook saliente (avisa) + API REST (lee el detalle) | | Automatizar sin escribir código | Webhook saliente hacia [n8n, Make o Zapier](/docs/desarrollo/integraciones/zapier-make-y-n8n) | *** ## Playground [#playground] Prueba los endpoints y simula un webhook saliente desde Dinaup, sin herramientas externas. El Playground también genera el Token Bearer de cada clave API. [Abrir el Playground de Webhooks](https://play.dinaup.com/App/Dev/IncomingWebhooks) # Webhooks salientes (/docs/desarrollo/integraciones/webhook/salientes) Un webhook saliente hace que Dinaup avise a tu servidor cuando cambia un registro. Configuras una URL, y Dinaup le envía un `POST` en cuanto se cumple lo que definiste. Reaccionas al momento, sin consultar la API en bucle. *** ## Cómo funciona [#cómo-funciona] ``` [Dinaup] → se crea o modifica un registro → se cumplen las condiciones → POST → [Tu servidor] ``` 1. Un usuario o un proceso crea o modifica un registro en la sección que vigilas. 2. Dinaup comprueba las condiciones del webhook (evento, campos disparadores, campos obligatorios). 3. Si se cumplen, envía un `POST` a tu URL con el registro antes y después del cambio. *** ## Configuración [#configuración] Los webhooks salientes se crean desde el módulo **Desarrollo** de Play Dinaup. Cada uno se guarda activo desde el momento en que lo creas. ### Campos del formulario [#campos-del-formulario] | Campo | Descripción | | --------------------------- | ----------------------------------------------------------------- | | **Título** | Nombre con el que identificas el webhook | | **Sección** | La tabla que vigilas: Ventas/Ingresos, Entidades, Productos… | | **Disparar Modificaciones** | Envía cuando se actualiza un registro existente | | **Disparar Nuevos** | Envía cuando se crea un registro | | **URL** | La dirección de tu servidor que recibe el `POST` | | **Bearer Token** | Opcional. Token que Dinaup incluye en la cabecera `Authorization` | | **Campos Disparadores** | Solo dispara si cambia alguno de estos campos | | **Campos Obligatorios** | Solo dispara si estos campos están rellenos | Marca **Modificaciones**, **Nuevos** o ambos: son los dos eventos que disparan el aviso. ### Acotar el disparo [#acotar-el-disparo] Dos filtros evitan avisos con datos irrelevantes o incompletos: * **Campos disparadores.** Si eliges campos aquí, el webhook solo salta cuando cambia alguno de ellos. Un cambio en otro campo no dispara. Si no eliges ninguno, cualquier cambio dispara. * **Campos obligatorios.** El webhook no salta hasta que estos campos tengan valor. Evita, por ejemplo, avisar de un borrador de factura sin cliente. Al usar campos obligatorios, eliges el modo: | Modo | Cuándo dispara | | ---------------------------------- | ---------------------------------------------------- | | **Todos los campos seleccionados** | Solo si todos los campos obligatorios están rellenos | | **Al menos un campo** | Basta con que uno tenga valor | ### Seguridad [#seguridad] Rellena el **Bearer Token** para que Dinaup lo mande en cada petición: ``` Authorization: Bearer ``` Tu servidor compara ese token con el que configuraste y descarta lo que no cuadre. El campo es opcional; sin él, la petición llega sin cabecera `Authorization`. *** ## Payload [#payload] Dinaup envía un `POST` con el cuerpo en JSON. Dos objetos: el registro antes del cambio y después. ```json { "previousData": { "id": "123e4567-e89b-12d3-a456-426614174000", "pr_cliente": "Cliente Antiguo", "pr_importe": "100.00" }, "newData": { "id": "123e4567-e89b-12d3-a456-426614174000", "pr_cliente": "Cliente Nuevo", "pr_importe": "150.00" } } ``` * **`previousData`**: el registro tal como estaba antes. * **`newData`**: el registro tras el cambio. Comparas los dos objetos para saber qué campos cambiaron. En un alta, ambos traen el registro recién creado. Cada campo llega por su nombre `pr_*` (la columna PostgreSQL de la sección) y su valor como texto. Para traducir los nombres `pr_*` a campos legibles, consulta el esquema de la sección en Play Dinaup → módulo Desarrollo → Esquema, o en doc-flex.dinaup.com. *** ## Buenas prácticas [#buenas-prácticas] | Práctica | Motivo | | ------------------------------------ | --------------------------------------------- | | Responde con `2xx` en cuanto recibas | Tu servidor confirma que la entrega llegó | | Verifica el Bearer Token | Descarta peticiones que no vengan de Dinaup | | Procesa en asíncrono | Encola el trabajo pesado y responde rápido | | Registra lo que recibes | Te da rastro para depurar | | Usa campos disparadores | Evitas avisos por cambios que no te interesan | *** ## Casos de uso [#casos-de-uso] | Caso | Configuración | | -------------------------------------- | ------------------------------------------------------------------------------------- | | Avisar a Slack de una venta nueva | Sección Ventas/Ingresos · Nuevos · URL de n8n/Make hacia Slack | | Sincronizar clientes con un CRM | Sección Entidades · Nuevos + Modificaciones · Campos disparadores: Nombre, NIF, Email | | Actualizar stock en la tienda online | Sección Productos · Modificaciones · Campo disparador: Stock | | Email de bienvenida a clientes nuevos | Sección Entidades · Nuevos · Campo obligatorio: Email | | Generar albarán al confirmar un pedido | Sección Ventas/Ingresos · Modificaciones · Campo disparador: Estado | *** ## Probar antes de conectar [#probar-antes-de-conectar] El Playground incluye un simulador: eliges un webhook y un registro, y Dinaup manda el `POST` a la URL que le des con el payload real. Ves el cuerpo antes de programar tu receptor. [Abrir el Playground de Webhooks](https://play.dinaup.com/App/Dev/OutcomingWebhooks) # Dinaup & n8n (/docs/desarrollo/integraciones/zapier-make-y-n8n/dinaup-and-n8n) Lanza una solicitud HTTP desde **n8n** con tus credenciales de **Dinaup**. ### Crear una nueva credencial de tipo Header Auth [#crear-una-nueva-credencial-de-tipo-header-auth] 1. Abre la sección **Credenciales** en n8n. 2. Pulsa **Crear nueva** y selecciona **Header Auth**. ### Rellenar los campos de la credencial [#rellenar-los-campos-de-la-credencial] * En el campo **Name**, escribe: `Authorization` * En el campo **Value**, escribe: `Bearer XXXXXXXXXXXXXXX` *(Sustitúyelo por el token Webhook que te proporciona Dinaup)* * Asigna un nombre en la parte de arriba para identificarla: `Dinaup MiEmpresa` * Pulsa **Guardar**. ### Agregar un nodo HTTP Request al flujo [#agregar-un-nodo-http-request-al-flujo] * Abre la configuración del nodo **HTTP Request**. * En el apartado **Authentication**, selecciona la credencial creada. * Configura la URL, el método y los datos necesarios según el endpoint de Dinaup. # Zapier, Make y n8n (/docs/desarrollo/integraciones/zapier-make-y-n8n) Conecta **Dinaup** con plataformas de automatización como **Zapier**, **Make** o **n8n** mediante **webhooks**. Opcionalmente, un **Cloudflare Worker** transforma y protege las peticiones antes de que lleguen a Dinaup. ### Conexión vía Webhook [#conexión-vía-webhook] Dinaup recibe y envía datos mediante webhooks estándar. Genera una URL de webhook en tu escenario de Zapier, Make o n8n y configúrala directamente en Dinaup. ## Simplifica los webhooks (opcional) [#simplifica-los-webhooks-opcional] Intercalar un **Cloudflare Worker** entre Dinaup y tu herramienta de automatización transforma las URLs o el cuerpo de las solicitudes para adaptarlas al formato que esperan Make, Zapier o n8n. # Datos (/docs/desarrollo/recursos/datos) # Países Unión Europea (/docs/desarrollo/recursos/datos/paises-union-europea) ## Códigos [#códigos] Listado de códigos **ISO 3166-1 alfa-2** de los países de la Unión Europea. Se utilizan en facturación, Verifactu, SII y validaciones fiscales automáticas. ``` AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IT, LV, LT, LU, MT, NL, PL, PT, RO, SK, SI, ES, SE ``` ## Código y nombre [#código-y-nombre] Código y nombre de cada país miembro de la UE. | Código | País | | ------ | -------------------- | | AT | Austria | | BE | Bélgica | | BG | Bulgaria | | HR | Croacia | | CY | Chipre | | CZ | Chequia (Rep. Checa) | | DK | Dinamarca | | EE | Estonia | | FI | Finlandia | | FR | Francia | | DE | Alemania | | GR | Grecia | | HU | Hungría | | IE | Irlanda | | IT | Italia | | LV | Letonia | | LT | Lituania | | LU | Luxemburgo | | MT | Malta | | NL | Países Bajos | | PL | Polonia | | PT | Portugal | | RO | Rumanía | | SK | Eslovaquia | | SI | Eslovenia | | ES | España | | SE | Suecia | ### Fuentes [#fuentes] * [europa.eu/principles-countries-history/eu-countries\_en](https://european-union.europa.eu/principles-countries-history/eu-countries_en) # Flujo de desarrollo (/docs/desarrollo/recursos/dinaup-terminal/flujo-de-desarrollo) Esta página describe el **ciclo de trabajo recomendado** para construir sobre Dinaup con Terminal: desde que te conectas a un tenant hasta que publicas tu trabajo como módulo. No entra en el detalle conceptual de cada pieza (eso vive en la documentación de [Flex](/docs/desarrollo/flex)), sino en **el orden y el porqué** de cada fase. Terminal organiza este recorrido como un proceso por pasos. No tienes que recorrerlo entero cada vez: en el día a día saltarás directo a la fase que toque (editar un campo, ajustar un informe). Pero la primera vez, y antes de cada publicación, conviene tenerlo claro de principio a fin. Antes de empezar necesitas Terminal instalado y conectado a un tenant con **licencia Flex** activa. Si aún no lo tienes, empieza por la [guía de la sección](/docs/desarrollo/recursos/dinaup-terminal). *** ## Las cuatro fases del ciclo [#las-cuatro-fases-del-ciclo] Estas son las fases. Las tres primeras son **construcción** (defines cómo se comporta el sistema); la última es **distribución** (empaquetas y publicas lo construido). | Fase | Qué haces | Dónde se explica el concepto | | ------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------- | | **1. Conectar** | Abres Terminal y eliges el tenant sobre el que vas a trabajar. | Esta página | | **2. Modelar datos** | Creas y editas secciones y sus campos. | [Secciones](/docs/desarrollo/flex/secciones) · [Campos](/docs/desarrollo/flex/campos) | | **3. Dar comportamiento** | Añades algoritmos, informes y documentos dinámicos. | [Flex](/docs/desarrollo/flex) | | **4. Publicar** | Empaquetas todo como módulo y lo distribuyes por un canal. | [Flex](/docs/desarrollo/flex) | *** ## El ciclo en detalle [#el-ciclo-en-detalle] ### Conéctate al tenant [#conéctate-al-tenant] Al abrir Terminal, lo primero es elegir **sobre qué tenant** vas a trabajar. Un tenant es el entorno de un cliente o proyecto concreto: tiene sus propias secciones, datos y configuración. Trabaja siempre sabiendo dónde estás. Modelar contra el tenant equivocado es la forma más fácil de romper algo que funcionaba. Lo que editas con Flex afecta a **todos los usuarios** de ese tenant. Si vas a probar cambios delicados, hazlo primero en un entorno de pruebas, no sobre el tenant de producción de un cliente. ### Crea o edita una sección [#crea-o-edita-una-sección] Una **sección** es una tabla de datos: clientes, facturas, productos, lo que tu solución necesite. Es el cimiento de todo lo demás, así que empieza por aquí. Decide qué tipo de información va a guardar la sección y créala. Si vas a tener varias secciones que comparten campos comunes, plantéate apoyarlas en una **sección base** para no repetir estructura. → El modelo completo de secciones está en [Secciones](/docs/desarrollo/flex/secciones). ### Añade los campos [#añade-los-campos] Dentro de cada sección defines los **campos** (sus columnas). Para cada campo eliges tres cosas: * **Tipo**: texto, número, decimal, fecha, sí/no, relación con otra sección… * **Rol**: qué papel cumple ese dato dentro de la sección. * **Validación y comportamiento**: si es obligatorio, su rango o formato, su valor por defecto, si se autorrellena a partir de otros campos o se bloquea como solo lectura. Modela los campos pensando en cómo se van a rellenar y consultar después. Un buen diseño de campos te ahorra cálculos y correcciones más adelante. → Tipos, roles y validaciones en detalle en [Campos](/docs/desarrollo/flex/campos). ### Da comportamiento con algoritmos [#da-comportamiento-con-algoritmos] Cuando un valor no se introduce a mano sino que **se calcula**, lo resuelves con un **algoritmo**: el total de una línea, un acumulado, un dato traído de otra sección. Los algoritmos son el motor de cálculo de Flex. Se usan para rellenar campos, generar columnas en informes y componer documentos. Defínelos una vez y reutilízalos donde haga falta. → Tipos de algoritmo y cómo se conectan: [Flex](/docs/desarrollo/flex). ### Construye informes [#construye-informes] Un **informe** convierte tus secciones en listados y consultas útiles: eliges columnas, aplicas filtros y orden, agrupas y añades columnas calculadas con algoritmos. Es la forma de explotar la información que ya estás guardando, sin escribir consultas a mano. Si una solución necesita que el usuario "vea" o "filtre" datos, casi siempre es un informe. ### Genera documentos dinámicos [#genera-documentos-dinámicos] Un **documento dinámico** combina los datos de un registro con una plantilla para producir una salida con formato: una factura, un presupuesto, un correo, una respuesta para una integración. Son la capa de presentación: lo que el sistema entrega hacia fuera. Diséñalos cuando tu solución tenga que **emitir** algo, no solo guardarlo. ### Publica como módulo [#publica-como-módulo] Cuando el conjunto funciona, **empaquetas** todo el trabajo (secciones, campos, algoritmos, informes y documentos) en un **módulo** reutilizable. Es el paso que convierte una personalización suelta en algo distribuible y repetible. Publicar tiene su propio mini-recorrido, que cubre la siguiente sección. El detalle de la ventana de publicación está en [Publicar un módulo](/docs/desarrollo/recursos/dinaup-terminal/ventanas/publicar-un-modulo). *** ## La fase de publicación [#la-fase-de-publicación] Publicar no es "subir y ya". Terminal te guía por una serie de comprobaciones para que el módulo llegue completo y a quien debe. A grandes rasgos: ### Prepara el módulo [#prepara-el-módulo] Reúnes en el módulo todas las piezas que has construido. Es el momento de revisar que no falte nada y que lo que incluyes tenga sentido como una unidad coherente. ### Valida las dependencias [#valida-las-dependencias] Un módulo suele apoyarse en otras piezas (otras secciones, otros módulos). Terminal **comprueba esas dependencias** antes de dejarte publicar, para que el módulo no llegue al destino con cabos sueltos que lo dejarían a medio funcionar. Resolver las dependencias antes de publicar evita el problema clásico: instalar un módulo que "casi" funciona porque le falta algo de lo que dependía en origen. ### Asigna versión y canal [#asigna-versión-y-canal] Cada publicación lleva una **versión** (para saber qué cambió respecto a la anterior) y se envía por un **canal** (que determina quién recibe ese módulo y cuándo). Pensar versión y canal como parte de la publicación (y no como un detalle administrativo) es lo que te permite distribuir cambios de forma ordenada y poder volver atrás si hace falta. *** ## Cómo encaja con el resto [#cómo-encaja-con-el-resto] * El **qué** (el modelo de secciones, campos, algoritmos, informes y documentos) vive en la documentación de [Flex](/docs/desarrollo/flex). Esta página es solo el **orden** en que lo aplicas desde Terminal. * El **detalle de cada ventana** del Terminal (qué opción es cada cosa al diseñar secciones, editar campos o escribir algoritmos) está en [Ventanas del Terminal](/docs/desarrollo/recursos/dinaup-terminal/ventanas/disenar-secciones-y-campos). * La **instalación y la conexión inicial** al tenant las cubre la [guía de la sección](/docs/desarrollo/recursos/dinaup-terminal). * La mecánica de **empaquetar y distribuir** (módulos, versiones, canales) se desarrolla en [Publicar un módulo](/docs/desarrollo/recursos/dinaup-terminal/ventanas/publicar-un-modulo); aquí solo se sitúa dentro del ciclo. *** ## Preguntas frecuentes [#preguntas-frecuentes] No. El ciclo completo es la foto general. En el día a día entras directo a lo que necesites: ajustar un campo, retocar un informe, sacar una nueva versión de un módulo. El recorrido entero importa sobre todo la primera vez y antes de cada publicación. De abajo arriba: primero las secciones y sus campos (los datos), después los algoritmos (los cálculos), y por último informes y documentos (cómo se explotan y se presentan). Cada capa se apoya en la anterior. Para que el módulo llegue al destino entero. Si una pieza depende de otra que no incluyes, el módulo se instalaría incompleto y fallaría. La validación detecta esos huecos antes de publicar, no después. En la documentación de Flex. Allí está el concepto de secciones, campos, algoritmos, informes y documentos. Esta página se queda en el flujo: qué haces, en qué orden y por qué. *** → [Volver a Dinaup Terminal](/docs/desarrollo/recursos/dinaup-terminal) → [Secciones](/docs/desarrollo/flex/secciones) → [Campos](/docs/desarrollo/flex/campos) → [Documentación de Flex](/docs/desarrollo/flex) # Dinaup Terminal (/docs/desarrollo/recursos/dinaup-terminal) **Dinaup Terminal** (también llamado **Dinaup Desktop**) es una aplicación de escritorio para Windows pensada para el trabajo técnico sobre Dinaup. Es el entorno desde el que personal cualificado y partners **personalizan un tenant con [Flex](/docs/desarrollo/flex)** (crean secciones, campos, algoritmos, informes y documentos) y **empaquetan esas personalizaciones como módulos** para distribuirlas. No es una herramienta para el usuario final. Quien factura, atiende clientes o controla el inventario trabaja desde la aplicación web de Dinaup. Terminal está dirigido a quien construye y mantiene ese sistema por debajo. Para usar Dinaup Terminal necesitas una **licencia Flex** activa en el tenant que vas a personalizar. Sin ella puedes instalar y abrir la app, pero no editar la estructura. *** ## Para quién es [#para-quién-es] Terminal está hecho para perfiles que intervienen en la **configuración profunda** del producto: | Perfil | Para qué lo usa | | ------------------------ | ---------------------------------------------------------------------------------------------- | | **Personal técnico** | Modela las secciones, campos y algoritmos de un tenant; ajusta informes y documentos a medida. | | **Partner / integrador** | Construye una solución vertical sobre Dinaup y la publica como módulo reutilizable. | *** ## Qué puedes hacer desde Terminal [#qué-puedes-hacer-desde-terminal] Terminal es la puerta de entrada al trabajo con Flex sobre un tenant real: * **Diseñar la estructura de datos**: crear y editar [secciones](/docs/desarrollo/flex/secciones) y [campos](/docs/desarrollo/flex/campos). * **Automatizar y calcular**: definir [algoritmos](/docs/desarrollo/flex/algoritmos) y [scripts](/docs/desarrollo/flex/scripts) que reaccionan a eventos. * **Explotar la información**: construir [informes](/docs/desarrollo/flex/informes) y [documentos dinámicos](/docs/desarrollo/flex/documentos-dinamicos). * **Empaquetar y publicar**: agrupar todo ese trabajo en módulos y distribuirlos por canales. El **qué** (el modelo conceptual de secciones, campos, algoritmos, informes y documentos) vive en la documentación de **[Flex](/docs/desarrollo/flex)**. Esta sección cubre el **cómo y el dónde**: instalar la herramienta, conectarla a un tenant y seguir el ciclo de desarrollo y publicación. *** ## En esta sección [#en-esta-sección] Instala Dinaup Terminal en Windows y conéctalo al tenant que vas a personalizar. Empaqueta tus personalizaciones como módulos y distribúyelos por canales. El ciclo de trabajo recomendado: diseñar, probar y publicar cambios sobre un tenant. Personalizar un tenant con Flex modifica cómo se comporta el sistema para todos sus usuarios. Trabaja con criterio y prueba cada cambio antes de darlo por bueno. *** ## Preguntas frecuentes [#preguntas-frecuentes] La aplicación web es donde el usuario final trabaja a diario (facturar, vender, gestionar). Dinaup Terminal es el entorno técnico desde el que se personaliza ese sistema con Flex y se publican módulos. Una es para usar Dinaup; la otra, para construirlo y mantenerlo. Buena parte del trabajo de Flex (secciones, campos, informes) se configura sin escribir código. Para lógica avanzada existen los algoritmos y DinaScript. En cualquier caso, es una herramienta para perfiles técnicos, no para el usuario final. Sí. Necesitas una licencia Flex activa en el tenant que vas a personalizar. Sin ella no podrás editar su estructura. En la documentación de Flex. Esta sección se centra en la herramienta de escritorio; Flex explica los conceptos que manejas con ella. *** → [Documentación de Flex](/docs/desarrollo/flex) # Instalación y conexión (/docs/desarrollo/recursos/dinaup-terminal/instalacion-y-conexion) **Dinaup Terminal** es la aplicación de escritorio para abrir Dinaup en Windows. En esta página instalas el programa, aceptas la licencia y conectas la aplicación a tu organización para empezar a trabajar. El proceso completo son dos pasos: **instalar** (con winget o el ejecutable) y **conectar** (indicar a qué organización entras y con qué usuario). *** ## Antes de empezar [#antes-de-empezar] Para instalar y conectar Dinaup Terminal necesitas: * Un **equipo con Windows**. * Tus **datos de acceso**: el servidor de tu organización, tu **licencia** y un **usuario** con su contraseña. Si no los tienes, pídelos a quien administre Dinaup en tu empresa. La instalación no requiere permisos de administrador: la aplicación se instala dentro de tu perfil de usuario. *** ## Instalar Dinaup Terminal [#instalar-dinaup-terminal] Tienes dos formas de instalarlo (winget o la descarga del ejecutable); las dos dejan la misma aplicación, lista para abrir. ### Instálalo [#instálalo] La forma recomendada es **winget**, el gestor de paquetes de Windows. Abre PowerShell o el Símbolo del sistema y ejecuta: ```bash winget install Dinaup.CLI ``` **¿Sin winget?** Descarga el ejecutable y ábrelo con doble clic; la primera vez se copia a tu perfil de usuario y queda listo para las siguientes. [**Descargar Dinaup Terminal**](https://dinaupcdn.com/dl/latest/DinaupLauncher.exe) ### Acepta la licencia [#acepta-la-licencia] Al abrirse por primera vez, Dinaup Terminal te muestra las **condiciones de uso**. Léelas y acéptalas para continuar. Sin aceptar la licencia, la aplicación no se abre. Dinaup Terminal se mantiene actualizado por su cuenta. No tienes que reinstalarlo cada vez que sale una versión nueva: la aplicación comprueba si hay actualización y la aplica sola. *** ## Conectar a tu organización [#conectar-a-tu-organización] Una vez instalada, Dinaup Terminal necesita saber **a qué organización te conectas** y **quién eres**. Esto se hace una sola vez por equipo; después, la aplicación recuerda tu acceso. Para conectar necesitas tres datos: | Dato | Qué es | | ------------ | ------------------------------------------------------------------------------------------------------ | | **Servidor** | La dirección de la organización a la que perteneces. Identifica tu instancia de Dinaup. | | **Licencia** | El identificador de tu empresa dentro de ese servidor. Determina los datos a los que accedes. | | **Usuario** | Tu cuenta personal (usuario y contraseña). Determina qué puedes ver y hacer dentro de la organización. | Introduce los tres datos en la pantalla de acceso de Dinaup Terminal y confirma. Si son correctos, la aplicación valida tu identidad y abre Dinaup con tu organización ya cargada. La próxima vez que abras Dinaup Terminal, entrará directamente con la última organización que usaste: no tendrás que volver a teclear el servidor ni la licencia. ### Si gestionas varias organizaciones [#si-gestionas-varias-organizaciones] Dinaup Terminal puede guardar el acceso a **más de una organización** en el mismo equipo y dejarte elegir cuál abrir cada vez. Es útil si trabajas con varias empresas o entornos. Tienes el detalle de cómo manejar varias licencias y los comandos disponibles en el [resumen de Dinaup Terminal](/docs/desarrollo/recursos/dinaup-terminal). *** ## Qué ves al entrar [#qué-ves-al-entrar] Lo que puedes hacer dentro de Dinaup depende del **usuario** con el que te conectas. Cada usuario tiene un rol que define su nivel de acceso: | Rol | Qué puede hacer | | ----------------- | ------------------------------------------------------------------------------------------------------------ | | **Administrador** | Acceso completo a la organización: trabajar con todos los datos y gestionar la configuración y los usuarios. | | **Desarrollador** | Acceso orientado a configurar y adaptar el sistema, además del trabajo habitual. | | **Lectura** | Acceso de solo consulta: puede ver la información, pero no modificarla. | Si esperas poder hacer algo y la opción no aparece o está bloqueada, lo más probable es que tu usuario no tenga ese permiso. Habla con quien administre Dinaup en tu organización para revisar tu rol. *** ## Preguntas frecuentes [#preguntas-frecuentes] No. Dinaup Terminal se instala dentro de tu perfil de usuario, así que no hace falta ser administrador del equipo para descargarlo y abrirlo. No. La aplicación se actualiza sola: cada vez que la abres, comprueba si hay una versión más reciente y la aplica antes de continuar. De quien administre Dinaup en tu empresa. El servidor y la licencia identifican tu organización; el usuario y la contraseña son tu cuenta personal de acceso. Lo que ves depende del rol de tu usuario (administrador, desarrollador o lectura). Si te falta una opción, probablemente tu usuario no tiene ese permiso. Pídeselo a quien administre tu organización. *** → [Dinaup Terminal](/docs/desarrollo/recursos/dinaup-terminal) # Módulos y canales (/docs/desarrollo/recursos/dinaup-terminal/modulos-y-canales) Dinaup no es un bloque único: la funcionalidad se reparte en **módulos**, paquetes versionados que se publican en una galería compartida y se instalan en tu licencia. Cada módulo avanza por **canales** de madurez (desarrollo, beta, producción), y tu licencia decide de qué canal recibe las versiones. Entender esto te ayuda a saber **qué tienes instalado, qué versión es y por qué** unas licencias ven novedades antes que otras. *** ## Qué es un módulo [#qué-es-un-módulo] Un **módulo** es un paquete que agrupa funcionalidad relacionada y se publica con un **número de versión**. Dentro lleva las piezas que definen cómo se comporta esa parte de Dinaup: las secciones donde guardas datos, los campos de cada sección, los algoritmos de cálculo y las pantallas asociadas. Lo importante a nivel conceptual: * Un módulo es **versionado**: cada publicación tiene su versión, y se puede actualizar a una más nueva sin rehacer nada manualmente. * Un módulo es **autocontenido**: trae todo lo que necesita para funcionar, así su instalación es predecible. * Un módulo es **compartido**: vive en una galería común desde la que cualquier licencia compatible puede instalarlo. No confundas un módulo con una sección. Una [sección](/docs/desarrollo/flex/secciones) es un sitio donde guardas registros. Un módulo es el **paquete** que puede traer varias secciones, sus campos y sus algoritmos de una vez, listos para usar. *** ## La galería compartida [#la-galería-compartida] Los módulos se publican en una **galería** común. Es el catálogo desde el que tu licencia instala y actualiza funcionalidad, sin que tengas que copiar nada entre equipos ni reconstruir configuraciones a mano. Esto te da dos cosas: * **Reutilización**: una funcionalidad publicada una vez está disponible para todas las licencias compatibles. * **Consistencia**: todas las licencias que instalan el mismo módulo en la misma versión obtienen exactamente el mismo comportamiento. *** ## Canales de madurez [#canales-de-madurez] No todas las licencias deben recibir la misma versión de un módulo al mismo tiempo. Una novedad recién hecha conviene probarla antes de soltarla a quien trabaja en producción. Para eso existen los **canales**: etapas de madurez por las que va pasando cada versión. | Canal | Para qué es | Quién lo usa | | -------------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------- | | **Desarrollo** | Versión en construcción, sujeta a cambios constantes. Sirve para crear y probar mientras se trabaja. | Quien está desarrollando el módulo. | | **Beta** | Versión candidata, ya estable pero en validación. Sirve para probar en condiciones reales antes del salto final. | Equipos de prueba y validación. | | **Producción** | Versión publicada y estable. Es la que se usa para trabajar de verdad. | El cliente final, en su día a día. | El sentido es siempre el mismo: una versión nace en **desarrollo**, cuando madura pasa a **beta** para validarse, y cuando se considera estable se publica en **producción**. Cada canal es un peldaño más fiable que el anterior. **Producción** y **release** son lo mismo: el canal estable, el que reciben los clientes finales. Verás los dos nombres según el contexto. *** ## La licencia fija tu canal [#la-licencia-fija-tu-canal] Cada licencia tiene asignado **un canal**, y ese canal determina qué versión de cada módulo recibe. La asignación **no la eliges tú sobre la marcha**: viene fijada por la licencia. Esto significa que: * Una licencia de **producción** recibe versiones estables. **No** puede instalar módulos en versión de desarrollo o beta: el selector de canal está bloqueado en estable. * Una licencia de **beta** o **desarrollo** sí puede trabajar con versiones más tempranas, porque su propósito es justamente probar. El bloqueo es deliberado y te protege: evita que un entorno de trabajo real acabe ejecutando una versión a medio hacer. Un cliente que trabaja en producción **nunca** se topa por accidente con código experimental. Si esperas ver una novedad y no aparece, lo más probable es que tu licencia esté en el canal de **producción** y la novedad todavía viva en **beta** o **desarrollo**. Llegará cuando esa versión se promocione al canal estable. *** ## Autoactualización del núcleo [#autoactualización-del-núcleo] El **núcleo** de Dinaup se mantiene al día solo. Cuando hay una versión nueva publicada en el canal que corresponde a tu licencia, el sistema la incorpora: no tienes que reinstalar nada ni perseguir actualizaciones. Así, abriendo Dinaup con normalidad, trabajas siempre sobre la versión que tu canal considera vigente. La actualización es transparente y respeta el canal asignado: una licencia de producción se actualiza a la última versión **estable**, nunca a una de prueba. *** ## Compatibilidad de versión [#compatibilidad-de-versión] Como cada módulo se publica con su versión, Dinaup tiene en cuenta la **compatibilidad** entre las piezas. Un módulo declara con qué versiones del núcleo (y de otros módulos de los que dependa) funciona, de modo que solo se instalan o actualizan combinaciones que encajan. En la práctica: * No se aplica una versión de módulo que no sea compatible con el núcleo que tienes. * Las actualizaciones automáticas respetan esas reglas: si una versión nueva exigiera algo que aún no tienes, espera hasta que el conjunto sea coherente. El objetivo es que nunca te quedes con una combinación de piezas que no funcionen juntas. *** ## Preguntas frecuentes [#preguntas-frecuentes] Una sección es un sitio concreto donde guardas registros. Un módulo es el paquete versionado que puede traer varias secciones, sus campos y sus algoritmos de una sola vez. Instalas un módulo; dentro de él aparecen las secciones. Porque tu licencia lo fija. Si es de producción, el selector de canal queda bloqueado en estable a propósito, para que un entorno de trabajo real no ejecute versiones a medio hacer. Los canales de desarrollo y beta son para licencias destinadas a probar. No. El núcleo se actualiza solo a la versión vigente de tu canal. Una licencia de producción recibe siempre la última versión estable, sin que tengas que reinstalar ni perseguir actualizaciones. Casi siempre es cuestión de canal: la novedad todavía está en beta o desarrollo y tu licencia está en producción. Aparecerá cuando esa versión se promocione al canal estable. Son el mismo canal: el estable, el que reciben los clientes finales. Es solo una cuestión de nombre según el contexto. *** → [Dinaup Terminal](/docs/desarrollo/recursos/dinaup-terminal) → [Secciones (Flex)](/docs/desarrollo/flex/secciones) → [Algoritmos (Flex)](/docs/desarrollo/flex/algoritmos) # Compras y gastos (/docs/desarrollo/recursos/secciones-nucleo/compras-y-gastos) Secciones de fábrica del núcleo de Dinaup en el dominio de **compras y gastos**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Catálogos de compra [#catálogos-de-compra] Tarifa de compra pactada con un proveedor: lista de productos con precios, descuentos y condiciones de pedido (mínimos/máximos) que se aplica al comprar a esa entidad. Es el espejo de compras de los catálogos de venta; no confundir con el documento de compra (Compras / Gastos). * ID de sección: `d64c88c8-080f-436e-a5e3-74cf009b10e6` · tiene **sección lista** (líneas del documento) ### Categorías de Compra [#categorías-de-compra] Categoría con la que se clasifican las Compras/Gastos y que dirige su contabilización: subcuenta de gasto, subcuenta de devoluciones, si son servicios y si entra en la contabilidad automática. Homóloga de "Categorías de Ventas" pero para el lado de compras. * ID de sección: `003d9171-a61c-4658-b4c9-4bf7b5c91f76` ### Compras / Gastos [#compras--gastos] Factura recibida o gasto de la empresa: documento de compra con proveedor, líneas de productos/conceptos, impuestos, retención y totales calculados. Es el registro fiscal real (con nº de factura y NIF), no un presupuesto ni un pedido; genera pagos, entradas de inventario y asiento contable. * ID de sección: `8fac2930-c1ea-48b5-ab89-50a0725e86e2` · tiene **sección lista** (líneas del documento) ### Entradas de Compra [#entradas-de-compra] Recepción en almacén de mercancía de una compra a proveedor: producto, cantidad, almacén, hueco y lote, con estado Pendiente/Completada/Anulada que gobierna cómo impacta en el stock. Es el eslabón logístico de la compra — la factura vive en Compras/Gastos. * ID de sección: `3b8b467f-2f7a-439d-8c4c-cdc732ad02fd` ### Libros registros de Compras / Gastos [#libros-registros-de-compras--gastos] Maestro de libros registro para clasificar las compras y gastos (los "libros" fiscales/organizativos en los que se anotan las facturas recibidas): nombre, descripción, color y orden. Es catálogo de clasificación, no contiene las facturas. * ID de sección: `ca3736db-f579-4c93-9265-9cb8fbd56560` ### Pagos de Compras [#pagos-de-compras] Pago (o devolución) asociado a una compra/gasto: importe, método de pago, depósito monetario y estado de tramitación. Registra el flujo de dinero saliente; el documento de gasto en sí es Compras / Gastos y el cobro de ventas tiene su sección homóloga. * ID de sección: `b97a298f-0c73-4206-8567-2d3c7e2d7263` ### Presupuestos de Compras y Gastos [#presupuestos-de-compras-y-gastos] Presupuesto/cotización de una compra o gasto a un proveedor: documento previo, sin efecto contable ni de stock, con líneas de productos, importes, impuestos y descuentos. Usa esta sección para pedir precio u ofertas; la compra real va en Compras / Gastos. * ID de sección: `e9fd98be-d22e-4bfd-84a3-ad22df3173e3` · tiene **sección lista** (líneas del documento) ### Salidas de Compras [#salidas-de-compras] Salida de inventario ligada a una compra: devolución de mercancía a proveedor (típicamente por compra rectificativa). Descuenta stock del almacén vía movimiento interno; no es la salida de venta ni un movimiento interno genérico. * ID de sección: `377ed111-4619-4c2e-b3ae-a959d6a71d89` # Contabilidad y fiscal (/docs/desarrollo/recursos/secciones-nucleo/contabilidad-y-fiscal) Secciones de fábrica del núcleo de Dinaup en el dominio de **contabilidad y fiscal**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Actividades de Empresas [#actividades-de-empresas] Actividad económica declarada de la empresa (censo AEAT): epígrafe IAE, clave de actividad, régimen de IVA e IRPF y clave de operaciones predeterminada. Configuración fiscal de la propia empresa, no de sus clientes ni proveedores. * ID de sección: `0c7c944f-f276-41f3-a2ca-90103a1b3b4c` ### Asientos contables [#asientos-contables] Asiento de contabilidad de partida doble: cabecera con concepto, fecha y ejercicio, y líneas debe/haber contra subcuentas del Cuadro de cuentas. Se genera manualmente o automáticamente desde ventas, compras, cobros, pagos, nóminas, movimientos bancarios e inmovilizado. No usar para el documento comercial (factura); solo para su reflejo contable. * ID de sección: `66424ed7-e5b3-4be1-a567-6ace93896a7d` · tiene **sección lista** (líneas del documento) ### Claves de operaciones [#claves-de-operaciones] Catálogo maestro de claves fiscales de operación (códigos tipo AEAT/SII para clasificar operaciones): nombre, clave y observaciones. Los documentos fiscales referencian estas claves; aquí no hay lógica ni importes. * ID de sección: `6b3081df-9592-467f-93f1-c4e29f0d68d8` ### Códigos CNAE [#códigos-cnae] Catálogo de códigos CNAE (Clasificación Nacional de Actividades Económicas): código + descripción. Tabla de referencia para clasificar la actividad de empresas y entidades — no confundir con Epígrafes de actividades económicas (IAE) ni Códigos CPA. * ID de sección: `f71bf53b-eb5d-4eae-9b60-80da126239a2` ### Códigos CPA [#códigos-cpa] Catálogo de códigos CPA (Clasificación de Productos por Actividades): código + concepto. Dato maestro de clasificación estadística europea de productos/servicios, referenciado desde otras secciones; no confundir con CNAE (actividades) ni LER (residuos). * ID de sección: `280cafd3-ea92-4129-8caf-832ccfb60c99` ### Cuadro de cuentas [#cuadro-de-cuentas] Plan contable de la empresa: cada registro es una cuenta (grupo, subgrupo, cuenta o subcuenta) con código numérico único, jerarquía y flags fiscales. Las subcuentas son las únicas que admiten asientos. No confundir con Asientos contables (los apuntes) ni con Cuadros de cuentas oficiales (las plantillas PGC). * ID de sección: `ba5315ec-72b7-4795-b612-9f1fdf299635` ### Cuadros de cuentas oficiales [#cuadros-de-cuentas-oficiales] Plan contable oficial de referencia (p. ej. PGC español): el documento define el plan y sus líneas son los grupos/cuentas oficiales con su código numérico. Es la plantilla normativa; las subcuentas reales de la empresa viven en "Cuadro de cuentas". * ID de sección: `a34c0a77-e9a7-4c73-a959-73cb48749fbf` · tiene **sección lista** (líneas del documento) ### Datos fiscales [#datos-fiscales] Ficha fiscal de una entidad o ubicación: NIF, razón social o nombre/apellidos, y domicilio fiscal desglosado. Es la identidad tributaria usada en facturación/Verifactu; no confundir con la ficha general de la Entidad ni con direcciones de envío. * ID de sección: `f3b161a4-dbe4-44ea-9259-b41dc8f88fc1` ### Documentos oficiales [#documentos-oficiales] Registro de presentaciones fiscales/administrativas: un modelo o trámite oficial (tipo, ejercicio contable, periodo, fecha de presentación, estado y documento adjunto). Sirve para el seguimiento de trámites ante la administración; no es el archivo legal en sí (Archivo de documentos legales) ni un documento a digitalizar. * ID de sección: `c14b249c-051f-4a86-9a08-9fc0c98d483f` ### Ejercicios contables [#ejercicios-contables] Ejercicio fiscal de la empresa: año, fechas de inicio/fin, estado abierto/cerrado, tabla IRPF/Sociedades aplicable y serie de numeración de asientos. Marco temporal al que se anclan asientos y libros registro — no confundir con los cierres operativos de caja diarios. * ID de sección: `e048cebc-3d71-4e70-b076-dcd39e146781` ### Epígrafe actividades económica [#epígrafe-actividades-económica] Catálogo de epígrafes de actividades económicas (IAE): código único, descripción, categoría y parámetros de módulos (índice de cuota devengada, porcentaje de ingreso a cuenta). Referencia fiscal; no confundir con Códigos CNAE ni Actividades de Empresas. * ID de sección: `b5b8a709-9ec4-4920-9cd7-2536e35b725b` ### Impuestos [#impuestos] Tipo impositivo (IVA/recargo de equivalencia) aplicable en documentos de venta y compra: porcentaje, multiplicadores derivados, subcuentas contables y clasificación fiscal Verifactu. Es el catálogo maestro de impuestos, no un apunte fiscal. * ID de sección: `ed839ee7-95d0-4b4c-bc41-6881c48fc6de` ### Inmovilizado [#inmovilizado] Activo fijo contable de la empresa: bien adquirido que se amortiza (coste, valor residual, vida útil, cuentas contables). Enlaza la factura de compra de origen con los asientos de amortización; no es un gasto corriente (eso es Compras / Gastos) ni un vehículo/recurso operativo. * ID de sección: `3bce6b71-a934-4cf9-be13-8d215ec8bb06` ### Retenciones [#retenciones] Dato maestro de retención fiscal (IRPF y similares): porcentaje, tipo, subcuentas contables donde imputar y ámbito de aplicación (compras/ventas, tipos de venta, TPV). Es la definición reutilizable que se aplica en documentos; no confundir con "Tablas de IRPF/ Sociedades" (tramos progresivos). * ID de sección: `a5e64894-a805-4ab2-b108-044ce68de6c1` ### Tablas de IRPF/ Sociedades [#tablas-de-irpf-sociedades] Tabla de tramos impositivos de IRPF o Impuesto de Sociedades: la cabecera define tipo y estado; cada línea es un tramo (desde-hasta) con su porcentaje a aplicar. Es configuración fiscal por tramos, no la retención puntual de un documento (eso es "Retenciones"). * ID de sección: `8ca6776a-4455-4fba-9b96-173a97a38005` · tiene **sección lista** (líneas del documento) # CRM y marketing (/docs/desarrollo/recursos/secciones-nucleo/crm-y-marketing) Secciones de fábrica del núcleo de Dinaup en el dominio de **crm y marketing**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Anuncios / Publicidad [#anuncios--publicidad] Concepto creativo de anuncio publicitario dentro del marketing: producto que promociona, avatar objetivo, punto de dolor, estrategia y objetivo de campaña, con estado de ciclo creativo (nace en "Ideación"). Las variantes concretas viven en Versiones de Anuncios; su uso real, en Campañas y Resultados de Campañas. * ID de sección: `cd850f40-e02c-4c6f-90b1-9598770259c8` ### Asignaciones de Casos de éxito a Avatares de Clientes [#asignaciones-de-casos-de-éxito-a-avatares-de-clientes] Tabla de unión N:M del CRM de marketing: vincula un Caso de éxito con un Avatar de Cliente (perfil de cliente ideal). Solo las dos referencias; sin atributos propios. * ID de sección: `25c43353-59ce-4dcb-af16-fab374302872` ### Asignaciones de Entidades a Proyectos [#asignaciones-de-entidades-a-proyectos] Vínculo N:M entidad-proyecto: asigna una entidad (persona/empresa) a un proyecto con un rol. El servidor deriva rol predeterminado, nombre, foto y la incorporación a Mattermost. Un registro = una participación en un proyecto. * ID de sección: `67986864-1b07-47df-80c4-2d977f61a413` ### Asignaciones de Puntos de dolor de Clientes a Avatares de Clientes [#asignaciones-de-puntos-de-dolor-de-clientes-a-avatares-de-clientes] Tabla de unión N:M del marketing: vincula un Punto de dolor de Clientes con un Avatar de Clientes (buyer persona). Solo dos referencias; para asociar dolores a avatares, no para definirlos. * ID de sección: `7d96c5ae-ea9e-4e46-a51e-b7577db75709` ### Asignaciones de Testimonios de Clientes a Casos de éxito [#asignaciones-de-testimonios-de-clientes-a-casos-de-éxito] Vínculo N:M entre un Testimonio de Cliente y un Caso de éxito: permite mostrar el mismo testimonio en varios casos y varios testimonios por caso. Tabla de asignación pura de marketing, sin lógica. * ID de sección: `4f8bc1f7-870f-4f09-84aa-ebccd1af1bc6` ### Avatares de Clientes [#avatares-de-clientes] Buyer persona de marketing: perfil arquetípico de cliente con nombre, descripción, foto, tipo y estado. Se enriquece asociándole casos de éxito y puntos de dolor mediante secciones de asignación; no es una entidad/cliente real (eso es Entidades). * ID de sección: `2b24de5c-d6f3-4947-892f-1b8e6db2ee04` ### Campañas [#campañas] Campaña de marketing: acción publicitaria con tipo, estrategia, anuncio, plataforma, presupuesto, fechas y estado. Agrupa Resultados de Campañas (que acumulan la inversión real); no es el anuncio en sí (Anuncios / Publicidad) ni la estrategia global (Estrategias de Marketing). * ID de sección: `2c6e763a-f7eb-4099-b653-5c773410b94f` ### Casos de éxito [#casos-de-éxito] Caso de éxito comercial: historia documentada de un cliente (referente) con resumen, tipo, estado y puntos clave como líneas. Material de marketing/ventas; no confundir con Testimonios de Clientes, que se asocian a los casos vía sección de asignaciones. * ID de sección: `073caeae-7d24-448f-8b85-518db553b19c` · tiene **sección lista** (líneas del documento) ### Citas [#citas] Cita agendada con un cliente (o contacto sin ficha): fecha de inicio/fin, tipo, estado, empleado responsable, lugar y notas de preparación/conclusión. Se evalúa en la agenda automáticamente. Distinta de "Eventos de Agendas" (evento genérico) y de "Eventos de CRM" (actividad comercial registrada a posteriori). * ID de sección: `85871e82-8b4d-4f21-afa1-fdefc74fcf5e` ### Contenidos Redes Sociales [#contenidos-redes-sociales] Pieza de contenido para redes sociales (post): texto, cuenta destino, tipo, estado editorial, fecha de publicación y URL del post publicado, enlazable a una estrategia de marketing y a un producto de marketing. No es la cuenta (Cuentas en Redes Sociales) ni un anuncio de pago (Anuncios / Publicidad). * ID de sección: `a0289771-9905-4dff-b1b6-f09e34c8b6b8` ### Cuentas en Redes Sociales [#cuentas-en-redes-sociales] Registro de una cuenta/perfil de la empresa en una red social: URL, red, dueño y responsable interno. Inventario de presencia social para el módulo de marketing — no publica ni conecta con la red, solo la cataloga. * ID de sección: `1213ee06-95a9-4c61-aaa3-ec17cbf621b3` ### Entidades [#entidades] Ficha maestra de personas y empresas con las que se relaciona el negocio: clientes, proveedores, bancos, contactos y usuarios web. Centraliza datos de contacto, fiscales, comerciales y de acceso. Es el "quién" al que apuntan ventas, compras, cobros, pagos y CRM. * ID de sección: `eec5029a-440d-4505-8560-b88b3ff5917d` ### Estrategias de Marketing [#estrategias-de-marketing] Plan de marketing de alto nivel: nombre, periodo (inicio/fin), objetivos y detalles en texto libre. Es el paraguas estratégico bajo el que cuelgan campañas concretas — no mide resultados ni contiene anuncios. * ID de sección: `47bbf6d8-59bf-462f-ae29-79fbb3d9a300` ### Eventos de CRM [#eventos-de-crm] Interacción comercial planificada dentro de una Oportunidad CRM: llamada, reunión o contacto con tipo, inicio, duración y estado. Siempre cuelga de una oportunidad; para actividad no comercial usar Tareas o Anotaciones internas. * ID de sección: `fd0d1ce2-84a0-4686-8b7c-7f0664809145` ### Grupos de Entidades [#grupos-de-entidades] Agrupación arbitraria de entidades (clientes, proveedores, contactos): un grupo con tipo, observaciones y sus miembros en lista. Para segmentar/clasificar entidades en colecciones; no confunde con departamentos ni con la ficha de la entidad. * ID de sección: `2c0d89c4-7bbc-4f3b-bd2b-423ba80f6959` · tiene **sección lista** (líneas del documento) ### Historial de cambio de estado de Oportunidades CRM [#historial-de-cambio-de-estado-de-oportunidades-crm] Registro de auditoría: una entrada por cada cambio de estado de una oportunidad CRM (oportunidad + nuevo estado + fecha y autor). Solo lectura en la práctica — lo alimenta el sistema; no es el estado actual de la oportunidad, es su traza histórica. * ID de sección: `ced35b76-ad81-4cbf-a513-52e062cebd0d` ### Historial de cambio de Fases de Oportunidades CRM [#historial-de-cambio-de-fases-de-oportunidades-crm] Historial de transiciones de fase de una oportunidad CRM: qué oportunidad pasó a qué fase del proceso de venta, quién y cuándo. Registro append-only de trazabilidad del pipeline; la fase vigente vive en la propia Oportunidad CRM. * ID de sección: `fcd11d19-0710-43e0-b316-476a3119c729` ### Llamadas [#llamadas] Registro CRM de una llamada telefónica: con quién se habló, dirección (entrante/saliente), motivo, notas, transcripción, resumen y conclusiones. Es el histórico de la conversación; las tareas o eventos que deriven de ella van en sus propias secciones. * ID de sección: `84a51b78-7f95-41be-a4de-4f656571b23f` ### Métodos de captación de clientes [#métodos-de-captación-de-clientes] Catálogo de canales por los que llegan clientes nuevos (recomendación, web, publicidad...): nombre, descripción e icono. Etiqueta CRM para atribuir el origen de cada cliente; no confundir con Canales de Venta ni Campañas. * ID de sección: `34ce97cd-9632-4fdf-bf42-52adc168a25c` ### Métodos de contacto [#métodos-de-contacto] Catálogo de vías de contacto con clientes (teléfono, email, WhatsApp, visita...): nombre, descripción e icono. Maestro simple que otras secciones (CRM, entidades) referencian para clasificar cómo se contactó; no guarda contactos concretos. * ID de sección: `2ebb4ef9-d9dd-4624-aab0-a129c7a2c13d` ### Motivos de pérdidas de oportunidades [#motivos-de-pérdidas-de-oportunidades] Catálogo CRM de razones por las que se pierde una oportunidad de venta (precio, competencia...), con tipo, color, si es recuperable y días para reintentar. Se usa al cerrar Oportunidades CRM como perdidas; no registra la pérdida en sí. * ID de sección: `bdddb78b-2fb1-45d5-90ba-aa525a629680` ### Objeciones [#objeciones] Catálogo comercial de objeciones de clientes ("es caro", "ya tengo proveedor") con sus respuestas preparadas como líneas. Es material de argumentario CRM reutilizable, no el registro de una objeción concreta en una venta — para vincularla a un proceso existe Asignaciones de Objeciones a Procesos. * ID de sección: `3e2c20ef-6e49-4a1b-9038-1384a4c55c9b` · tiene **sección lista** (líneas del documento) ### Objetivos de campañas de Marketing [#objetivos-de-campañas-de-marketing] Catálogo de objetivos de marketing (notoriedad, captación, conversión...): nombre, descripción e icono. Es una tabla de clasificación que referencian Anuncios/Publicidad y Campañas; no fija metas numéricas ni periodos (eso sería Objetivos de Venta para comerciales). * ID de sección: `c7a3b071-f03f-4bcd-ae2b-43aa053d6d9a` ### Oportunidades CRM [#oportunidades-crm] Oportunidad de venta del CRM: un cliente potencial interesado en algo, con valor estimado, prioridad, proceso/fase comercial y estado (abierta/ganada/perdida). No es la venta ni el presupuesto — es el seguimiento comercial previo; su actividad se registra en Eventos de CRM. * ID de sección: `a013f0e4-bd0d-4bef-8f7d-83ba35cb9e21` ### Puntos de dolor de Clientes [#puntos-de-dolor-de-clientes] Catálogo de marketing/ventas: cada registro es un problema o frustración típica de los clientes, con tipo, estado y una lista de soluciones que la empresa ofrece (vinculables a un Producto de Marketing). No es una incidencia de un cliente concreto: es material argumental comercial. * ID de sección: `276b0425-1c1f-4ac6-93b9-9691a6ed1830` · tiene **sección lista** (líneas del documento) ### Resultados de Campañas [#resultados-de-campañas] Medición periódica del rendimiento de una campaña de marketing: un registro por periodo (Desde/Hasta) con la inversión realizada, conclusiones y una lista de KPIs a rellenar. No es la campaña ni el anuncio — es el informe de resultados de un intervalo concreto. * ID de sección: `667dea58-d1b9-42aa-a0dc-9cc340f93f66` · tiene **sección lista** (líneas del documento) ### Testimonios de Clientes [#testimonios-de-clientes] Testimonio o reseña de un cliente para marketing: texto, firma, foto, autor (entidad) y su empresa, con tipo y estado de catálogo. Material comercial reutilizable; los casos de éxito completos van en su propia sección. * ID de sección: `5d46a56c-63f9-431b-9c75-f9c7d19e762f` ### Versiones de Anuncios [#versiones-de-anuncios] Variante concreta (versión) de un anuncio publicitario: número de versión, título, creatividad (imagen) y estado, con contador de resultados de campaña. Sirve para test A/B y evolución de creatividades — el anuncio contenedor vive en Anuncios/Publicidad. * ID de sección: `20b3cfe1-c9b8-4e9b-aeaa-d9030bf33997` # Desguaces y vehículos (/docs/desarrollo/recursos/secciones-nucleo/desguaces-y-vehiculos) Secciones de fábrica del núcleo de Dinaup en el dominio de **desguaces y vehículos**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Cambios de estados de Recambios [#cambios-de-estados-de-recambios] Historial de transiciones de estado de un recambio de vehículo: qué recambio, a qué estado pasó, quién y cuándo. Registro append-only de trazabilidad; el estado vigente vive en el propio Recambio. * ID de sección: `678210b7-13a2-4a0f-bc76-02f6a3ad00ab` ### Cambios de estados de Vehículos para Desguace [#cambios-de-estados-de-vehículos-para-desguace] Log histórico de cada cambio de estado de un Vehículo para desguace: vehículo, estado nuevo, quién y cuándo. Traza de auditoría append-only; el estado vigente vive en el propio vehículo, no aquí. * ID de sección: `795be9f5-75cf-4226-923d-6b4c372c3fb6` ### Clasificación de demandas de productos [#clasificación-de-demandas-de-productos] Catálogo maestro de categorías para clasificar demandas de productos (las de "Demandas Sin Registro" y "Demandas Sin Stock"): nombre + descripción. Solo etiqueta de agrupación para análisis; no registra la demanda en sí. * ID de sección: `cd4b944c-3e3f-4baf-b3bb-56fc77f3b867` ### Códigos de Tratamiento [#códigos-de-tratamiento] Catálogo de códigos de tratamiento de residuos (normativa medioambiental): código + concepto, con nombre compuesto automáticamente. Tabla maestra de referencia para el módulo de residuos/desguace; no registra operaciones. * ID de sección: `86ce0d68-d0cb-4e90-8608-316390393885` ### Códigos LER [#códigos-ler] Catálogo de códigos LER (Lista Europea de Residuos): código oficial, concepto y unidad de medida con la que se cuantifica el residuo. Tabla maestra de clasificación para el módulo de residuos, no un registro de residuo concreto. * ID de sección: `6e7a7130-b1e3-417b-8f2d-f2a81674cabb` ### Combustibles [#combustibles] Catálogo de tipos de combustible (gasolina, diésel, eléctrico...) con icono y color, para clasificar vehículos. Lista de valores pura: sin cantidades, precios ni lógica. * ID de sección: `3cd40e9c-c099-4afe-9c76-6dbfa7ca6d25` ### Demandas Sin Registro [#demandas-sin-registro] Anotación de demanda de un producto que NO existe en el catálogo: el cliente pidió algo, no lo teníamos registrado y se apunta como texto libre para detectar oportunidades. Si el producto sí existe pero no hay stock, la sección correcta es "Demandas Sin Stock". * ID de sección: `b2f282cd-c072-4a42-a417-ea45e4996cb5` ### Demandas Sin Stock [#demandas-sin-stock] Registro de demanda no atendida por falta de stock: qué pidió un cliente y no había (producto, concepto libre o detalle de recurso), con señales de venta perdida. Para detectar qué reponer; no confunde con "Demandas Sin Registro" (producto no catalogado). * ID de sección: `c96ce0e1-7b26-4d82-aca0-42b7aafe831b` ### Detalles de Recambios [#detalles-de-recambios] Ficha maestra/plantilla de un tipo de recambio para una versión de vehículo concreta: tipo de pieza, referencias (OEM, EAN, visual), precios y costes de referencia. Los Recambios físicos en stock apuntan a esta ficha; aquí no hay unidades, solo la definición y sus precios orientativos. * ID de sección: `54372e44-7399-4c8f-a911-081fed6fee26` ### Detalles de Vehículos para desguace [#detalles-de-vehículos-para-desguace] Ficha técnica maestra de una versión de vehículo (marca + modelo + acabado + años + motor) usada en desguaces: precios de referencia de compra/venta, peso e info técnica. Es el catálogo del que cuelgan los Vehículos para desguace y los Detalles de Recambios; NO es un vehículo físico concreto. * ID de sección: `2a361175-27c8-43be-943b-f9c7f171a18d` ### Detalles vehículos de empresa [#detalles-vehículos-de-empresa] Ficha maestra técnico-comercial de un modelo de vehículo: marca, modelo, años, versión/acabado, precios y costes de referencia con margen calculado. Es la plantilla de la que las unidades físicas (Vehículos de la empresa) copian marca y modelo; no representa un vehículo concreto con matrícula. * ID de sección: `86041dd2-961d-4fb4-9014-645ee713593a` ### Familias de recambios [#familias-de-recambios] Catálogo plano de familias para clasificar recambios de desguace (motor, carrocería, electrónica...): nombre, descripción e icono. Tabla maestra de agrupación; el recambio apunta a su familia, aquí no hay jerarquía ni atributos técnicos. * ID de sección: `1b1d6afd-facc-430f-bd46-5e1ffc3493aa` ### Historial de Asignación de Precios a Recambios [#historial-de-asignación-de-precios-a-recambios] Registro de auditoría de cada cambio de precio de venta de un recambio: qué pieza, qué precio nuevo, quién y cuándo. Solo traza — el precio vigente vive en el propio Recambio. * ID de sección: `4b24d789-2d27-4b50-acf8-e933451a8f76` ### Historial de Control de Calidad de Recambios [#historial-de-control-de-calidad-de-recambios] Anotación de auditoría: registra que un recambio pasó un control de calidad, quién lo hizo y cuándo. Solo traza (recambio + empleado + fecha + texto); no guarda resultado estructurado ni estados — para incidencias está Incidencias con Recambios. * ID de sección: `4fa5d0b6-f890-4a0e-8c99-5918a7a19ebf` ### Historial de Limpieza de Recambios [#historial-de-limpieza-de-recambios] Log de limpiezas de recambios: cada registro deja constancia de que un recambio fue limpiado, con fecha y empleado de la sesión. Solo trazabilidad; el estado del recambio vive en Recambios y otros historiales (picking, revisado) cubren el resto de hitos. * ID de sección: `3b7e82a9-cca4-49a6-a2d1-70216d410018` ### Historial de Recambios Picking [#historial-de-recambios-picking] Registro histórico de un evento de picking sobre un Recambio: qué pieza se recogió, de qué hueco y almacén, quién y cuándo. Es un log de trazabilidad append-only, no un documento operativo; el movimiento de stock lo llevan otras secciones. * ID de sección: `39382599-e1ab-4ca3-a457-ff8dd175314c` ### Historial de Recambios Revisados [#historial-de-recambios-revisados] Evento de revisión de un recambio (desguace): quién lo revisó, cuándo y dónde estaba (almacén y hueco). Log inmutable de trazabilidad; el estado actual del recambio vive en la ficha de Recambios. * ID de sección: `b6b33fdc-34e3-4d42-9e37-71c075016535` ### Incidencias con Recambios [#incidencias-con-recambios] Incidencia (garantía, defecto, reclamación) sobre un Recambio ya vendido o servido en un desguace: tipo, estado, recambio afectado, pedido/venta/cliente relacionados y su resolución con fecha y días transcurridos. Distinta de "Incidencias" generales y de "Incidencias con Vehículos para desguace". * ID de sección: `a6a0af8d-e5cb-42e1-9853-ceeaaa0c8a18` ### Incidencias con Vehículos para Desguace [#incidencias-con-vehículos-para-desguace] Parte de incidencia sobre un vehículo para desguace: descripción, tipo, estado, entidad implicada y resolución con fecha y días transcurridos. Específica del vertical de desguaces; para incidencias generales usar Incidencias, y para incidencias con piezas, Incidencias con Recambios. * ID de sección: `fd36ffe0-26aa-4152-a1dc-db532724c8ac` ### Modelos de vehículos [#modelos-de-vehículos] Catálogo maestro de modelos de vehículo (marca + modelo + años de fabricación + foto). Referencia estática que consumen Vehículos de la empresa y Vehículos para desguace; no representa ningún vehículo físico concreto. * ID de sección: `ff65b90b-8d89-4c82-8064-3aada2a3913c` ### Recambios [#recambios] Pieza de recambio individual extraída (o dada de alta manualmente) para su venta, típicamente procedente de un vehículo para desguace. Cada registro es UNA pieza física con estado, ubicación, precios de venta/compra y reserva. No confundir con "Detalles de Recambios" (catálogo de definiciones) ni "Tipos de recambios" (clasificación). * ID de sección: `f120b0e9-e2b7-4069-9d2b-d25e78f69c27` ### Residuos [#residuos] Registro individual de un residuo generado: qué es (tipo, código LER), cuánto (cantidad y peso) y su estado de tratamiento. Para trazabilidad medioambiental; no confundir con Códigos LER (catálogo) ni con inventario de productos. * ID de sección: `a691a568-8ac4-4bbe-a08a-1359ee01fe3b` ### Vehículos de la empresa [#vehículos-de-la-empresa] Ficha comercial de un vehículo propiedad de la empresa: matrícula, tipo, estado, precios de compra y venta con margen calculado. Es el vehículo como activo/mercancía vendible; sus datos técnicos viven en Detalles vehículos de empresa y los vehículos a despiezar en Vehículos para desguace. * ID de sección: `ce73e331-3d68-4926-b20f-91355e9009a1` ### Vehículos para desguace [#vehículos-para-desguace] Vehículo físico que entra en un centro de desguace para ser despiezado: matrícula, bastidor, titulares, estado, ubicación en almacén y precios de compra/venta. Distinto de "Detalles de Vehículos para desguace" (la versión/ficha técnica del modelo) y de "Recambios" (las piezas extraídas de él). * ID de sección: `80145d3a-9d1b-430a-b900-212345985efe` # Catálogo de secciones del núcleo (/docs/desarrollo/recursos/secciones-nucleo) Toda instancia de Dinaup trae de fábrica un núcleo de secciones: los "planos" sobre los que trabajan los módulos Ready to Go, la API y el SDK. Este catálogo las lista todas con una descripción que responde la pregunta clave al integrar: **¿qué sección uso para esto?** Los **IDs de sección son idénticos en todas las instancias** — puedes usarlos tal cual en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o con el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente) sin descubrirlos primero. Las secciones de Estados y Tipos (auxiliares de cada sección principal) no se listan: se descubren desde su sección madre. ## Antes de escribir en una sección [#antes-de-escribir-en-una-sección] Cuatro comportamientos de la plataforma que afectan a cualquier escritura (el detalle, con ejemplos, en [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts)): 1. **El orden de los campos importa**: escribir un campo dispara los autorrellenados que dependen de él. 2. **Autorrellenado «Siempre» copia incondicionalmente**: también vacío, y al deseleccionar el origen se vacía el destino. 3. **Con scripts activados, la lógica interna se ejecuta también por API**: totales, validaciones y filtros — como en la interfaz. 4. **Los campos auto-gestionados no se envían**: fechas, autor, calculados... los pone el servidor. ## Los dominios [#los-dominios] Ventas, presupuestos, pedidos, cobros, cajas, TPV, Verifactu y envíos. Compras, presupuestos de compra, pagos y sus libros registro. Asientos, cuadros de cuentas, ejercicios, impuestos, retenciones e inmovilizado. Cuentas y movimientos bancarios, reglas de clasificación, métodos de pago y monedas. Productos, almacenes, stock, lotes, movimientos y catálogos. Entidades, oportunidades, eventos, campañas, anuncios y testimonios. Empleados, contratos, nóminas, fichajes, turnos, horarios y ausencias. Proyectos, tareas, tickets de soporte, bonos de horas e incidencias. Vehículos, recambios, residuos y los códigos del vertical de desguace. Países, provincias, municipios, códigos postales y zonas horarias. Webhooks, CRON, logs de API, archivos, anotaciones, agendas y flujos. # Inventario y productos (/docs/desarrollo/recursos/secciones-nucleo/inventario-y-productos) Secciones de fábrica del núcleo de Dinaup en el dominio de **inventario y productos**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Almacenes [#almacenes] Maestro de almacenes físicos de la empresa: tipo, estado, responsable, localización en mapa, huecos por defecto para entradas (generales, de compras y devoluciones de venta) y disponibilidad en TPV y como origen de envíos. Es configuración de inventario, no un movimiento de stock. * ID de sección: `7eec3e34-fbbd-4f1e-a77b-d4a6145686a3` ### Asignaciones de Objeciones a Productos de Marketing [#asignaciones-de-objeciones-a-productos-de-marketing] Vínculo N:M entre una objeción del argumentario y un producto de marketing: qué objeciones suelen surgir al vender ese producto. Puro enlace CRM — la objeción y sus respuestas viven en Objeciones; el producto, en Productos (Marketing). * ID de sección: `e02413e2-7178-4605-9ddc-4706d1734c00` ### Asignaciones de Testimonios de Clientes a Productos de Marketing [#asignaciones-de-testimonios-de-clientes-a-productos-de-marketing] Tabla puente N:M que vincula un Testimonio de Cliente con un Producto (Marketing): un registro = "este testimonio avala este producto". Solo el enlace, sin atributos propios. No confundir con la asignación de testimonios a otras entidades de marketing (secciones hermanas de asignación). * ID de sección: `7582818a-2595-497f-8323-64c42df543f0` ### Categorías de productos [#categorías-de-productos] Catálogo de categorías para agrupar Productos (el artículo del inventario). No confundir con Categorías de Ventas/Compra, que clasifican los importes de documentos, ni con familias de recambios: esta agrupa el maestro de productos. * ID de sección: `bfa561c0-76b9-4c0d-ac16-b951dd193aec` ### Condiciones de Objetos [#condiciones-de-objetos] Catálogo de estados de conservación de objetos físicos (nuevo, usado, dañado...): nombre, descripción, valor para integraciones (`ValorAPI`), icono y color. Maestro de clasificación que otras secciones (recambios, recursos) referencian; no registra objetos concretos. * ID de sección: `2ec65e3c-13d7-46da-9db7-79e03b32dbb8` ### Grupos de Almacenes [#grupos-de-almacenes] Agrupación lógica de almacenes: un grupo con nombre, tipo y estado cuyas líneas son los almacenes miembros. Sirve para operar o filtrar sobre conjuntos de almacenes; no gestiona stock ni ubicaciones — eso lo hacen Almacenes, Zonas y Huecos. * ID de sección: `777a913e-b9d3-4d42-b0c1-6d3dab7d280f` · tiene **sección lista** (líneas del documento) ### Historial de cambios de hueco del recurso [#historial-de-cambios-de-hueco-del-recurso] Log de reubicaciones de un recurso de la empresa: registra a qué hueco de almacén se movió, quién y cuándo. Trazabilidad de recursos (no de recambios ni productos, que tienen sus propios historiales). * ID de sección: `93408eae-ffe5-419d-970f-4bd3413d4a8f` ### Huecos en almacenes [#huecos-en-almacenes] Ubicación física concreta dentro de un almacén (estantería/hueco) donde se deposita mercancía: identificador único, zona, tipo, estado y coordenadas en el plano del almacén. Es infraestructura de almacén, no stock — el stock referencia al hueco desde recambios, salidas, etc. * ID de sección: `f57df204-fb71-4f02-8a04-708d632d9c9e` ### Lotes de productos [#lotes-de-productos] Lote/partida de un producto gestionado por lotes: identificación (serie, ID interna), fechas de disponibilidad y devolución a proveedor, coste unitario y estado que decide si se puede vender. El stock del lote lo calcula el servidor desde los movimientos internos; no confundir con Stock por Almacén. * ID de sección: `b0f097d1-6733-4d57-82bb-7c3467764666` ### Marcas comerciales [#marcas-comerciales] Maestro de marcas (fabricante/marca comercial) con nombre, logo e ID externa. Catálogo simple que otras secciones (productos, recambios, vehículos) referencian para clasificar por marca — no confundir con Modelos de vehículos ni con Actividades de Empresas. * ID de sección: `81cfe5e7-053b-4572-8204-f1bec2d20e38` ### Productos [#productos] Ficha maestra de un artículo o servicio que la empresa compra y/o vende: identidad (nombre, código de barras, marca, fabricante), unidades de medida, peso, políticas de stock y lotes, precios medios y alertas. Es el catálogo maestro; los precios pactados viven en Catálogos de compra/venta y el stock en inventario. * ID de sección: `ddf538c2-6a4e-44f3-abde-d2283ffb9392` ### Productos ( Marketing ) [#productos--marketing-] Ficha comercial de un producto o servicio para el discurso de marketing/ventas: descripción, imagen, FAQs, tipo y estado, y enlaces a testimonios y objeciones. NO es el producto vendible del catálogo (eso es Productos): es el argumentario. * ID de sección: `95e028dc-613c-4fd5-9915-64ada3ea18a0` ### Stock por Almacén [#stock-por-almacén] Proyección del stock de un producto en un almacén concreto: stock físico, disponible y umbrales mínimo/máximo. Un registro único por pareja producto-almacén (Hash). Es tabla de consulta derivada de entradas/salidas — no el sitio donde mover stock. * ID de sección: `8b34df8a-1ff1-478e-98cc-918b2e2d0173` ### Zonas de Almacén [#zonas-de-almacén] Zona física dentro de un Almacén (área de picking, recepción, etc.) con tipo, estado y coordenadas en el plano del almacén. Nivel intermedio de organización: el detalle fino de ubicación son los "Huecos en almacenes"; esto delimita áreas. * ID de sección: `33f0e0f2-a26e-43e7-9dc6-8dce4b80bdc7` # Maestros y geografía (/docs/desarrollo/recursos/secciones-nucleo/maestros-y-geografia) Secciones de fábrica del núcleo de Dinaup en el dominio de **maestros y geografía**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Códigos postales [#códigos-postales] Maestro geográfico de códigos postales: código, nombre de la zona y comunidad autónoma a la que pertenece, con flag Archivado. Se usa como referencia en direcciones y segmentación territorial; no confundir con Provincias, Municipios o Comunidades autónomas (otros niveles del maestro geográfico). * ID de sección: `12fe99c8-0250-4aae-ab85-21acc131851a` ### Colores [#colores] Catálogo de colores reutilizable: nombre, código hexadecimal e icono. Tabla maestra para clasificar visualmente registros de otras secciones (vehículos, recambios, productos...), sin lógica propia. * ID de sección: `4c87305f-053f-47a9-accb-ec8ad8444e71` ### Comunidades autónomas [#comunidades-autónomas] Maestro geográfico de comunidades autónomas: nombre, código y flag Archivada. Nivel regional del árbol geográfico de Dinaup, referenciado por Códigos postales y Provincias; no confundir con esos otros niveles. * ID de sección: `1ee1695c-3617-4978-8aff-c236cd829c21` ### Grupos de provincias [#grupos-de-provincias] Agrupación con nombre de provincias (p. ej. zonas comerciales o de tarifas de envío): el registro es el grupo y sus líneas son las provincias incluidas. Usar cuando algo se aplica por conjunto de provincias, no para dar de alta provincias individuales (eso es Base - Provincias). * ID de sección: `049c17bd-69ea-4c69-a593-5eb0a8628e3d` · tiene **sección lista** (líneas del documento) ### Municipios [#municipios] Maestro geográfico de municipios: nombre, provincia (que arrastra el país), comunidad autónoma y códigos oficiales INE y AEAT. Tabla de referencia para direcciones y datos fiscales — no confundir con Códigos postales ni Provincias, que son maestros aparte. * ID de sección: `9c09b492-e2ab-49bf-b294-cdf8115c7f2f` ### Países [#países] Catálogo maestro de países: nombre, códigos ISO (alfa-2, alfa-3, numérico de 3 dígitos), prefijo telefónico, bandera y configuración de métodos de envío (Sendcloud). Referencia geográfica base; no confundir con Provincias ni Comunidades autónomas. * ID de sección: `79018517-bc68-453a-a5e2-eb9dddcf0e28` ### Provincias [#provincias] Catálogo maestro de provincias: nombre, código de provincia, país y comunidad autónoma. Nivel intermedio de la jerarquía geográfica (País → Comunidad → Provincia → Municipio); no confundir con Municipios ni Grupos de provincias. * ID de sección: `16b96ccb-26ea-4c46-8a7c-805bf5c864d7` ### Ubicaciones en mapa [#ubicaciones-en-mapa] Punto geográfico con nombre para pintar en mapas: dirección postal completa, teléfono y coordenadas en texto libre. Es un marcador reutilizable (tiendas, puntos de recogida...), no la dirección fiscal de una entidad ni una dirección de envío. * ID de sección: `4f4d602c-59ac-4b75-bbb9-1c95f5ad0d35` ### Zonas horarias [#zonas-horarias] Maestro de zonas horarias: nombre y su WindowsID (identificador de time zone de Windows). Tabla de referencia del sistema para localizar horas; los registros marcados como de sistema quedan bloqueados contra edición. * ID de sección: `7d2bb3c2-b9b7-4c09-994c-447a8635412b` # Plataforma y sistema (/docs/desarrollo/recursos/secciones-nucleo/plataforma-y-sistema) Secciones de fábrica del núcleo de Dinaup en el dominio de **plataforma y sistema**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Administración de Archivos [#administración-de-archivos] Registro documental de un archivo subido al sistema: fichero binario más metadatos (nombre, extensión, MIME, tamaño, carpeta/categoría, scope). Es el gestor documental genérico de la empresa, no los adjuntos específicos de otras secciones ni los documentos legales. * ID de sección: `9994737b-9e67-4c8f-9620-f4061717e114` ### Agendas [#agendas] Calendario con nombre que agrupa eventos: cada agenda es un contenedor (nombre + descripción) al que se asocian Eventos de Agendas y empleados asignados. No contiene los eventos — solo los organiza. * ID de sección: `2714bac6-a36c-4050-940c-4b4cc3bcdd75` ### Anotaciones internas [#anotaciones-internas] Notas internas de empleados sobre cualquier registro del sistema: comentario de texto, con flags para mostrarse como comentario público, en documentación o como galería de fotos. Su lista lleva los adjuntos y menciones. Para comunicación interna anclada a un dato, no para eventos CRM ni tickets. * ID de sección: `bc58c60f-7fe4-4c91-9f54-ed25d19c74e0` · tiene **sección lista** (líneas del documento) ### Archivo de documentos legales [#archivo-de-documentos-legales] Archivador de documentos legales de la empresa (contratos, escrituras, certificados...): título, tipo, estado, entidad relacionada y notas. Es el índice del documento archivado; no es el log de eventos legales (Logs de Eventos Legales) ni la cola de digitalización (Documentos pendientes de digitalizar). * ID de sección: `e69873c3-bab1-40af-b992-782a7e617e28` ### Áreas de acceso web [#áreas-de-acceso-web] Credencial/canal de acceso externo a Dinaup: cada registro define un área con API Key, clave secreta, lista blanca de IPs/objetos y valores por defecto (empresa, ubicación, empleado). Es configuración de integración, no datos de negocio. * ID de sección: `d62290ec-652d-4afd-933e-695235972ff1` ### Cambios de estados de Recursos de la Empresa [#cambios-de-estados-de-recursos-de-la-empresa] Historial de cambios de estado de un recurso de la empresa: qué recurso pasó a qué estado, cuándo y por qué empleado. Registro de auditoría append-only — el estado vigente vive en el propio Recurso; aquí queda la traza de cada transición. * ID de sección: `94f82d39-ce6e-4472-8c37-a44d8fdefb89` ### Categorías de Archivos [#categorías-de-archivos] Carpeta del gestor documental de Dinaup: nombre en formato ruta ("Archivos/..." o "Sistema/..."), carpeta padre, color e icono, con contadores de archivos y tamaño. Organiza los registros de Administración de Archivos; no guarda ficheros, solo la jerarquía. * ID de sección: `8f18d18a-c4be-4542-86e4-ead2fc3ff435` ### Correspondencias internas [#correspondencias-internas] Mensaje interno entre usuarios de la empresa (tipo nota/comunicado con hasta 5 adjuntos), con estado de envío y logs legales de autoría, apertura y lectura del destinatario. Es mensajería interna trazable, no email a clientes ni anotación libre sobre un registro. * ID de sección: `88ca852c-a4f9-4abe-b6a1-38bb41be2023` ### Dinaup Registros de Componentes [#dinaup-registros-de-componentes] Log técnico interno de Dinaup: cada registro es una ejecución de un componente/servicio en background (enum) con su duración en segundos e información adicional. Telemetría de plataforma, no datos de negocio; solo lectura para diagnóstico. * ID de sección: `677500eb-4c50-40d3-abb7-0f8dba9e965a` ### Documentos pendientes de digitalizar [#documentos-pendientes-de-digitalizar] Bandeja de entrada documental: un archivo (ticket, factura, nómina...) subido a la espera de convertirse en su registro definitivo (Compra/Gasto, Venta/Ingreso o Nómina), con tipo, estado, encargado y JSON de análisis por IA. No es el documento contable final — es su paso previo. * ID de sección: `c850fb66-2985-4cf3-b845-2be49b3c6d36` ### Empresas administradas [#empresas-administradas] Ficha de configuración global de cada empresa gestionada en Dinaup: identidad corporativa, datos registrales, y todos los valores por defecto (numeraciones, estados iniciales, métodos de pago, impresiones, políticas de fichaje e inventario) que el resto de secciones consumen al crear registros. * ID de sección: `8bcba7c2-11b2-4f81-a7a7-35f65de8aa51` ### Eventos de Agendas [#eventos-de-agendas] Evento de calendario dentro de una agenda: título, inicio y fin en UTC y detalles. Es el bloque genérico de agenda (Base - Agendas); no confundir con Citas (con cliente) ni con Eventos de CRM (actividad comercial). * ID de sección: `56faa05a-531d-461f-a6f8-0efef0faf9de` ### Flujos de Estado [#flujos-de-estado] Definición de las transiciones de estado permitidas para una sección concreta: qué estados pueden pasar a qué otros. El documento fija la sección (tipo de estados) y sus líneas son las transiciones origen→destino. Es configuración de flujo, no un registro de cambios de estado (eso son los "Historial de cambios de estado"). * ID de sección: `2faebf06-802e-412c-999c-6d387834be04` · tiene **sección lista** (líneas del documento) ### Flujos de Procesos [#flujos-de-procesos] Definición de un flujo de estados para registros de un tipo dado: la cabecera identifica el flujo (nombre, tipo de registro, icono) y cada línea es un paso/estado permitido del flujo. Configuración maestra, no un registro operativo. * ID de sección: `99a9772e-5d98-4461-b602-e0e18f192a8b` · tiene **sección lista** (líneas del documento) ### Historial de Cambios de Estados de Registros [#historial-de-cambios-de-estados-de-registros] Traza de auditoría genérica: cada registro anota que un registro de otra sección cambió a un Estado de Registros, con fecha, empleado y autor. El registro auditado se vincula por el destinador (solo en alta). No confundir con los historiales específicos (pedidos, recambios, vehículos...). * ID de sección: `29f928a5-5b25-4344-b401-6cbd553ab55c` ### Historial de ejecucción de Ritmos operativos [#historial-de-ejecucción-de-ritmos-operativos] Registro de cada ejecución de un Ritmo Operativo: qué ritmo corrió, cuándo, cuánto duró y hasta tres valores numéricos de resultado más observaciones. Es un log append-only para trazar y medir los ritmos; el ritmo en sí (definición y programación) vive en Ritmos Operativos. * ID de sección: `6b27a8be-7ea0-43f4-88a1-e79a9be9a706` ### HTTP CRON [#http-cron] Tarea programada que llama periódicamente a una URL externa (HTTP polling): método, bearer opcional, intervalo en segundos y ventana horaria/días de ejecución. Para lanzar peticiones salientes recurrentes; lo inverso (recibir avisos de Dinaup) es Webhook Salientes. * ID de sección: `2ccf4f1a-ce66-43bd-a49d-b5353343ec13` ### Logs de Eventos Legales [#logs-de-eventos-legales] Registro inmutable de un evento con relevancia legal (consentimientos, notificaciones, procesos con trazabilidad): quién, cuándo, qué datos y sobre qué entidad. Los campos clave son de solo alta — se escribe una vez y no se retoca. No es log técnico (eso es Registro de Errores API / Actividad API). * ID de sección: `a6f1de41-d7a4-441d-8857-7ac913db45ee` ### Notificaciones [#notificaciones] Notificación interna dirigida a un empleado: cuerpo, metadatos y control de lectura (leída sí/no y cuándo). Es la bandeja in-app de avisos del sistema — no es email ni webhook saliente; para integraciones externas existe Webhook Salientes. * ID de sección: `2a9c17c7-eeea-4113-bb18-a1a2bf85ef96` ### Ordenes de Transportes de recursos [#ordenes-de-transportes-de-recursos] Orden de mover recursos de la empresa entre dos ubicaciones en mapa, con chofer, vehículo, fechas planificadas/confirmadas y estado calculado (Planificando/Programado/Transportando/Transportado/Cancelado). Admite órdenes "simbólicas" (sin logística real). No confundir con Envíos de paquetería: aquí se transportan recursos internos, no bultos a clientes. * ID de sección: `49ab5f2d-cdd7-4802-973b-9d2a824b6a9c` · tiene **sección lista** (líneas del documento) ### Recursos de la empresa [#recursos-de-la-empresa] Activo físico individual identificable (vehículo, maquinaria, objeto único) con ficha de compra/venta, titularidad, estado, localización y almacenaje. Úsala para unidades únicas con matrícula/bastidor y trazabilidad propia; el stock a granel va por Productos e inventario. * ID de sección: `e01155e9-ddc2-45e3-9093-b86d44a93267` ### Registro de Errores API [#registro-de-errores-api] Log de errores de la API de Dinaup: qué acceso API falló, desde qué IP y aplicación, en qué función (enum) y con qué detalle de error. Sección de auditoría técnica de solo consulta habitual, no de negocio. * ID de sección: `d8a97473-ea12-4d17-b88e-b8716b847f00` ### Registros de Actividad API [#registros-de-actividad-api] Log agregado del uso de la API: por acceso, función, aplicación e IP registra número de peticiones, errores y duraciones total/promedio. Telemetría de consumo, no de fallos individuales (eso es Registro de Errores API). * ID de sección: `397bc8ec-2a86-4e24-9529-f1688108ccc9` ### Ritmos Operativos [#ritmos-operativos] Rutina operativa recurrente de la empresa (revisión periódica que alguien debe ejecutar cada N horas), con responsables, departamento, prioridad y última ejecución autocalculada. Es la definición del ritmo; cada ejecución real se registra en Historial de ejecución de Ritmos operativos. * ID de sección: `9ae0b146-3c92-40b2-89df-75c5702cbcbf` ### Sección de pruebas API [#sección-de-pruebas-api] Sandbox para probar la API de Dinaup: un campo de cada tipo (booleano, enum, decimal, entero, fechas/horas con y sin segundos, texto, relación, lista) y autorrellenados de ejemplo. Sin significado de negocio — no usarla para datos reales. * ID de sección: `3aa455c1-c14c-437a-8e85-45bc2521f433` · tiene **sección lista** (líneas del documento) ### Webhook Salientes [#webhook-salientes] Suscripción webhook: cuando en una sección de Dinaup se crean o modifican registros, el servidor hace POST a la URL configurada (con bearer opcional). Es el push saliente por eventos; para polling saliente periódico usa HTTP CRON. * ID de sección: `e637e767-f7cd-450c-ab5a-6c3cffe78a94` # Proyectos, tareas y soporte (/docs/desarrollo/recursos/secciones-nucleo/proyectos-tareas-y-soporte) Secciones de fábrica del núcleo de Dinaup en el dominio de **proyectos, tareas y soporte**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Actividad en Tareas de Proyectos [#actividad-en-tareas-de-proyectos] Registro de tiempo/trabajo de un empleado sobre una tarea de proyecto: inicio, fin, tiempo total en minutos y descripción. Es el parte de trabajo (time tracking); no es la tarea ni el fichaje laboral. * ID de sección: `35d1d661-7e94-432c-951c-a0fee5565743` ### Ampliaciones de horas en Bonos [#ampliaciones-de-horas-en-bonos] Recarga de un bono de horas existente: añade importe (sin impuestos) a un Bono de horas, con estado de trámite y factura de venta opcional. No crea el bono ni registra su consumo — solo lo amplía. * ID de sección: `07c7d2d1-a188-4fb2-ad41-17df3b66d439` ### Asignaciones de Tareas a Tareas [#asignaciones-de-tareas-a-tareas] Vínculo de dependencia entre dos tareas de proyecto (Tarea1 depende/relaciona con Tarea2), con tipo de dependencia y proyecto de contexto. Es la tabla de enlaces del Gantt de proyectos; no es la asignación de personas a tareas (eso es Asignaciones de Empleados) ni de tareas a tickets. * ID de sección: `fbcbb1d6-dc58-4c55-bc19-c8b3e0208690` ### Asignaciones de Tareas a Tickets & Soporte [#asignaciones-de-tareas-a-tickets--soporte] Vínculo entre un ticket de soporte y una tarea de proyecto: cada registro ata un ticket a la tarea (de un proyecto concreto) que lo resuelve, con observaciones. Es la tabla puente ticket↔tarea, no el ticket ni la tarea en sí. * ID de sección: `20a1cf58-77d2-45d9-b838-b54014b8a80c` ### Bonos horas [#bonos-horas] Bolsa de horas prepagada de un cliente: saldo que se amplía con "Ampliaciones de horas en Bonos" y se consume desde Tareas de Proyectos. El servidor calcula ampliado, gastado y saldo; no es un presupuesto ni una tarifa. * ID de sección: `8af32d17-67f8-45be-9dba-38da706db680` ### Flujos de Proyectos [#flujos-de-proyectos] Plantilla de flujo de trabajo para tareas de proyectos: define, para un tipo de tarea, la secuencia ordenada de estados por los que pasa. Es configuración maestra, no una tarea ni un proyecto concretos. * ID de sección: `fcd970b8-9933-47dd-ae0e-fd4213970628` · tiene **sección lista** (líneas del documento) ### Incidencias [#incidencias] Incidencia reportada por un cliente: descripción, tipo, estado, resolución y preferencias de recontacto (días de la semana y franjas horarias de mañana/tarde). Distinta de Tickets / Soporte: aquí el foco es el aviso puntual y cuándo localizar al cliente. * ID de sección: `48106f20-46bd-4d92-823c-c5dea5fc262e` ### Prioridades en Tickets & Soporte [#prioridades-en-tickets--soporte] Catálogo de niveles de prioridad para tickets de soporte: número de prioridad, título, color e icono. Solo define la escala — la asignación a cada ticket vive en la sección de Tickets. * ID de sección: `ad4a3b4f-7366-421b-9c70-9d6efdcfaa89` ### Proyectos [#proyectos] Proyecto de trabajo con clave única, estado, flujo (kanban/Agile), cliente, equipo y contadores de tareas por fase. Es el contenedor del que cuelgan Tareas de Proyectos, Tickets y asignaciones de entidades; no confundir con Tareas (el trabajo) ni con Procesos de Venta. * ID de sección: `362caf2d-605b-47dc-a1e2-db9c22f44cb9` ### Resoluciones de Tickets & Soporte [#resoluciones-de-tickets--soporte] Catálogo de tipos de resolución con los que se cierra un ticket de soporte (resuelto, duplicado, no reproducible...): nombre, descripción e icono. Es el maestro de resoluciones, no el ticket ni su historial. * ID de sección: `2d949e1c-0881-4aa3-b4da-af115c60f304` ### Respuestas a Tickets de Soporte [#respuestas-a-tickets-de-soporte] Mensaje del hilo de conversación de un ticket de soporte: contenido, autor y fecha, ligado a su ticket. Un registro = una respuesta; el ticket en sí y su estado viven en Tickets & Soporte. * ID de sección: `214c08f6-80e3-4479-b159-0100b5b60ba3` ### Roles en Proyectos [#roles-en-proyectos] Catálogo de roles que una entidad puede desempeñar en un proyecto (jefe de proyecto, desarrollador...), con descripción, funciones, icono y flag de alta automática en el canal de Mattermost. Maestro simple que consumen las asignaciones a proyectos. * ID de sección: `e9f1e1e2-29b1-4369-b273-bebde330984e` ### Severidad Tickets & Soporte [#severidad-tickets--soporte] Catálogo de niveles de severidad para tickets de soporte (crítica, alta, media...), con color, orden y descripción. Distinto de Prioridades en Tickets: severidad mide el impacto del problema, no la urgencia de atención. * ID de sección: `510cfeba-4c88-4814-b2fa-13b95f7d6bc5` ### Tareas [#tareas] Tarea personal/operativa simple: título, contenido, empleado responsable, tipo, estado, prioridad y fechas de inicio/fin, evaluable en agenda. Para trabajo suelto del día a día — las tareas dentro de un proyecto van en Tareas de Proyectos. * ID de sección: `22aff5d9-acb9-4fa7-a9e0-1a4e297abfdb` ### Tareas de Proyectos [#tareas-de-proyectos] Tarea de gestión de proyectos (tipo Jira): clave+resumen, tipo, estado dentro del flujo del proyecto, asignado, progreso, dependencias y tiempo/coste imputado. Siempre pertenece a un Proyecto. No confundir con "Tareas" (tareas generales fuera de proyectos) ni con "Actividad en Tareas de Proyectos" (los registros de tiempo). * ID de sección: `a14bf5fd-12ae-494f-8aaf-f6537c951c1e` ### Tickets & Soporte [#tickets--soporte] Ticket de soporte/incidencia de un cliente: asunto, contenido, autor, tipo, estado, prioridad, severidad y resolución, con numeración por serie. Las conversaciones van en "Respuestas a Tickets de Soporte"; esto es la cabecera del caso. * ID de sección: `8302a305-745b-4047-982b-c6d37b9790c2` # RRHH y laboral (/docs/desarrollo/recursos/secciones-nucleo/rrhh-y-laboral) Secciones de fábrica del núcleo de Dinaup en el dominio de **rrhh y laboral**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Asignaciones de Empleados a Agendas [#asignaciones-de-empleados-a-agendas] Vínculo empleado-agenda: da acceso/suscripción de un empleado a una agenda concreta. Registro puramente relacional con flag Activo; el empleado se toma de la sesión al crear. No confundir con Eventos de Agendas (las citas) ni con la propia sección Agendas. * ID de sección: `65bae43a-c46c-4f06-a4cc-d518835f4e43` ### Asignaciones de Empleados a Categorías de Archivos [#asignaciones-de-empleados-a-categorías-de-archivos] Permiso de un empleado sobre una categoría de archivos: qué empleado puede acceder a qué categoría y con qué nivel (campo Permiso). Es la ACL del gestor documental por categorías — la categoría en sí vive en Categorías de Archivos. * ID de sección: `3e831673-eaf3-4ddc-9b2c-029689a7b300` ### Asignaciones de Empleados a Subdepartamento [#asignaciones-de-empleados-a-subdepartamento] Vínculo N:M entre un empleado y un departamento/subdepartamento: quién pertenece a qué área organizativa. El empleado lo fija la sesión al crear; el servidor mantiene coherente el par departamento-subdepartamento. No es la ficha del departamento ni del empleado — solo la pertenencia. * ID de sección: `fca6a52f-5578-4614-9c6d-711320f40fad` ### Asignaciones de Horarios [#asignaciones-de-horarios] Vincula un horario laboral a un empleado (o agenda) durante un periodo Desde/Hasta, con prioridad para resolver solapes. Es la asignación temporal, no la definición del horario (eso vive en Horarios). * ID de sección: `02dccb8a-f5aa-4604-b2d9-a1be0bc157c4` ### Ausencias laborales [#ausencias-laborales] Ausencia de un empleado en un rango de fechas (vacaciones, baja, permiso...), con motivo tipificado, estado de tramitación y duración en días y minutos calculada sola. No es un fichaje ni un turno: es el periodo en que el empleado NO trabaja. * ID de sección: `eea8a43b-8e0f-4065-90cd-a17c074ee664` ### Cargos de trabajo [#cargos-de-trabajo] Catálogo de puestos/cargos laborales de la empresa: nombre del cargo y descripción del puesto. Tabla maestra de RRHH que otras secciones (empleados, contratos) referencian; no es el contrato ni el empleado. * ID de sección: `ad1f835b-6c23-4d9b-bd51-c820e8adb714` ### Contratos laborales [#contratos-laborales] Contrato laboral de un empleado: vigencia (inicio obligatorio, fin opcional), estado, documento escaneado y política de vacaciones (días anuales y cómputo de fines de semana/festivos). Registro RRHH de condiciones; el empleado en sí vive en la sección Empleados y las ausencias en Ausencias laborales. * ID de sección: `e1fd361e-cf56-42a0-9da3-dd50ae7b4bd0` ### Definición de jornadas [#definición-de-jornadas] Plantilla de jornada laboral: define los tramos horarios de trabajo y descanso de un día tipo. El servidor totaliza turnos y duraciones automáticamente. Es la definición reutilizable que consumen horarios y asignaciones — no un registro de fichaje real. * ID de sección: `eeadf6d0-3ae9-4e04-af8d-975ac34441f6` · tiene **sección lista** (líneas del documento) ### Departamentos [#departamentos] Unidad organizativa de la empresa: nombre, jefe, misión, color e imagen. Es el nivel superior del organigrama — los Subdepartamentos cuelgan de él y los empleados se vinculan mediante asignaciones, no con un campo directo aquí. * ID de sección: `2a702caa-795b-4c12-aef0-3e5409cb8ca6` ### Empleados [#empleados] Ficha de empleado/usuario interno de la empresa: identidad, datos laborales (horario, departamento, cargo, manager), acceso al sistema (rol, 2FA, licencia), permisos de venta/TPV y subcuentas contables. Usar para el personal propio; los clientes y proveedores externos van en Entidades. * ID de sección: `c6e071c7-776f-4300-aa55-c711fd1da916` ### Festivos [#festivos] Calendario laboral de festivos: un periodo (Inicio–Fin, normalmente el año natural) cuyas líneas son las fechas festivas concretas. Se usa para cómputos laborales/horarios; no confundir con Ausencias laborales (faltas individuales) ni con Eventos de agendas. * ID de sección: `683de8f0-13f5-4ce2-88ef-0d32c3adb666` · tiene **sección lista** (líneas del documento) ### Grupos de empleados [#grupos-de-empleados] Agrupación arbitraria de empleados con nombre, detalles y contador automático de miembros; las líneas de la lista son los empleados que pertenecen al grupo. Úsala para colectivos transversales (equipos, comités, turnos de guardia), no para la estructura orgánica (eso son Departamentos/Subdepartamentos). * ID de sección: `fb45074f-65e2-41a8-9841-9220e2999069` · tiene **sección lista** (líneas del documento) ### Historial de Descansos [#historial-de-descansos] Registro de un descanso de jornada de un empleado dentro del control horario: entrada y salida del descanso con evidencia técnica (IP, navegador, URL, fingerprint) y posible anulación supervisada. Complementa a "Registros de fichajes laborales" (jornada completa); aquí solo pausas. * ID de sección: `b8881637-bab8-494b-ae99-3d6596554bda` ### Horarios [#horarios] Plantilla semanal de trabajo: un horario con nombre cuyas líneas asignan una jornada (Definición de jornadas) a cada día de la semana. Es el catálogo que luego se asigna a empleados; no registra fichajes ni fechas concretas. * ID de sección: `5ce545e6-0cfd-4c7a-ba52-fcf42fec001d` · tiene **sección lista** (líneas del documento) ### Motivos de ausencias [#motivos-de-ausencias] Catálogo de motivos de ausencia laboral (vacaciones, baja, permiso...) con su categoría, si exige justificante y si descuenta del saldo de días. Es el maestro que clasifica las Ausencias laborales; no registra la ausencia en sí. * ID de sección: `2f263d3e-0828-4cd2-a574-21d0f5673e6d` ### Motivos de horas extras [#motivos-de-horas-extras] Catálogo de motivos para turnos de horas extra o complementarias: nombre, tipo de turno y flag de fuerza mayor (solo válido en horas extra). Se referencia desde los registros de jornada/fichajes — aquí no se registran horas. * ID de sección: `39ee21a3-3ad8-45ca-8bbc-0635cc0481b6` ### Nóminas [#nóminas] Nómina mensual de un empleado: periodo (Desde/Hasta), conceptos en lista (devengos, deducciones, retenciones) y totales calculados por el servidor. Usar para el recibo de salarios individual; no para contratos ni fichajes. * ID de sección: `48b24e31-ada5-4487-9534-5f15a41c21c2` · tiene **sección lista** (líneas del documento) ### Recursos de departamentos [#recursos-de-departamentos] Recurso de contacto/operativo asignado a un departamento (y opcionalmente a un subdepartamento): un texto libre `Recurso` (extensión, email, sala, equipo...) clasificado por tipo. Es un dato del organigrama, no un recurso de empresa físico (eso es "Recursos de la empresa"). * ID de sección: `0805950d-ab7c-4ced-8ee1-ea9d751572ce` ### Registros de fichajes laboral [#registros-de-fichajes-laboral] Fichaje individual de entrada/salida de un empleado con evidencia técnica (IP, navegador, URL, fingerprint) y tiempo trabajado calculado. Es el evento crudo del reloj; el turno consolidado con saldos vive en Turnos de trabajo. * ID de sección: `c2b312ad-9909-4ef3-a405-14ef72031290` ### Socios / Comuneros [#socios--comuneros] Registro de los socios o comuneros de la empresa: cada registro vincula una entidad como socio (única) y su lista guarda el histórico de participaciones con porcentaje y vigencia (fecha inicio/fin). Para composición societaria, no para clientes ni empleados. * ID de sección: `5688dd01-cb38-406b-9fdf-4ae0f9d72d43` · tiene **sección lista** (líneas del documento) ### Subdepartamentos [#subdepartamentos] Subdivisión organizativa dentro de un Departamento: nombre, jefe, misión, color e imagen. Segundo nivel del organigrama; los empleados se vinculan mediante la sección de asignaciones, no aquí. * ID de sección: `e553920a-cf2d-4db5-9f4a-1b4394237c55` ### Turnos de trabajo [#turnos-de-trabajo] Turno individual de un empleado en una fecha: programación (inicio/fin), realización real en tres capas (fichaje, supervisor, sistema), retrasos, horas extra/complementarias y saldos. Es el registro operativo diario del control horario; no confundir con Horarios ni Definición de jornadas, que son las plantillas que lo generan. * ID de sección: `4709d046-d1c5-49bd-a76b-768c9acc1ceb` # Tesorería (/docs/desarrollo/recursos/secciones-nucleo/tesoreria) Secciones de fábrica del núcleo de Dinaup en el dominio de **tesorería**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Cuentas Bancarias [#cuentas-bancarias] Cuenta bancaria de la empresa: banco, titular, IBAN/CCC, subcuenta contable, estado y saldo autocalculado desde Movimientos bancarios. Es el maestro sobre el que se concilian movimientos y se referencian cobros/pagos; no es la caja de efectivo (eso es Cajas). * ID de sección: `fa7d1d75-6767-43bd-b411-3f363b5c0ba2` ### Métodos de pago [#métodos-de-pago] Catálogo de formas de pago/cobro (efectivo, transferencia, tarjeta...): compatibilidad con conciliación bancaria, tramitación automática, depósito asociado e importe mínimo. Maestro que referencian ventas, compras, cobros, pagos y movimientos. * ID de sección: `a0495ef9-7de0-4f4c-8435-82ee5acca0d0` ### Monedas [#monedas] Catálogo maestro de divisas: código ISO 4217, símbolo, etiquetas singular/plural con género, icono y color de presentación. Solo define la moneda; no guarda tipos de cambio ni importes. * ID de sección: `bf47cd77-0008-45b9-933d-e1edf8508520` ### Movimientos bancarios [#movimientos-bancarios] Apunte de extracto bancario de una cuenta (depósito monetario tipo Cuenta Bancaria): fecha, concepto, importe, saldo y estado de conciliación contra cobros, pagos, otros movimientos o una subcuenta contable. No es el cobro/pago en sí — es el reflejo del banco que se concilia con ellos. * ID de sección: `3cbdf508-3ad5-4414-b4c3-edc56df1d06a` ### Reglas de clasificación de movimientos bancarios [#reglas-de-clasificación-de-movimientos-bancarios] Regla automática de conciliación: si el concepto del movimiento bancario contiene un texto, se le asigna tipo y/o entidad. Configuración del clasificador, no un movimiento en sí (eso es Movimientos bancarios). * ID de sección: `fdca825c-9a30-4e8d-8ac0-4092c20755f4` # Ventas y cobros (/docs/desarrollo/recursos/secciones-nucleo/ventas-y-cobros) Secciones de fábrica del núcleo de Dinaup en el dominio de **ventas y cobros**. El ID de sección es idéntico en todas las instancias: úsalo directamente en la [API REST](/docs/desarrollo/integraciones/api-rest-referencia) o el [SDK .NET](/docs/desarrollo/dotnet/sdk/cliente). Cómo se comportan al escribir (autorrellenado, orden de campos, scripts): [Escribir en secciones](/docs/desarrollo/dotnet/sdk/cliente/escritura-autorrellenado-y-scripts). ### Asignaciones de Empleados a Procesos de Venta [#asignaciones-de-empleados-a-procesos-de-venta] Vínculo N:M que da a un empleado acceso a un Proceso de Venta (pipeline comercial). Un registro = un empleado con acceso a un proceso, con flag Activo. Solo control de acceso; las etapas están en "Fases de Procesos de Venta". * ID de sección: `63441db9-9488-4c32-a340-9395b1994635` ### Cajas [#cajas] Caja de efectivo/TPV de la empresa (maestro): punto donde se cobra y se guarda dinero, con saldo calculado desde las transacciones monetarias internas, límites de saldo y subcuenta contable. No registra movimientos — eso son Movimientos de Caja y Cierres de Caja. * ID de sección: `be9ab2d0-0572-451a-a10f-a53b651ab799` ### Canales de Venta [#canales-de-venta] Catálogo de canales por los que se vende (tienda física, web propia, marketplace...): nombre, web y entidad dueña del canal, con reglas asociadas en Reglas de Canales de Venta. Solo clasifica el origen de la venta — no procesa pedidos. * ID de sección: `f932622d-add5-4595-aa4f-40af0c90ecf9` ### Carritos de compra [#carritos-de-compra] Línea de carrito de e-commerce: un producto o recurso que un visitante/cliente tiene en su carrito web antes de convertirse en Pedido. Registro efímero con caducidad, sesión web, IP y user-agent; no es venta ni pedido todavía. * ID de sección: `f895b47a-0be9-40cf-a07e-2e069b9ddea0` ### Catálogos de venta [#catálogos-de-venta] Lista de precios de venta: agrupa productos con precio, descuentos y límites de pedido, aplicable siempre o restringida por ubicación. Úsala para tarifas comerciales de venta; para precios de compra a proveedor existe la sección hermana Catálogos de compra. * ID de sección: `ff5a07a8-add8-4c23-8bac-530d23cdf82f` · tiene **sección lista** (líneas del documento) ### Categorías de Ventas [#categorías-de-ventas] Catálogo maestro de categorías para clasificar líneas de venta: nombre, subcuentas contables (ventas y devoluciones), flags de TPV y de servicios. Configuración, no documento; distinta de "Categorías de productos" (marketing/catálogo) y de "Categorías de Compra". * ID de sección: `f4b84624-1fc2-40cc-88d2-99a227ae7a32` ### Cierres de Caja [#cierres-de-caja] Arqueo de un depósito monetario en un rango de fechas: saldo inicial, totales de entradas/salidas por cobros de ventas, pagos de compras y otros movimientos, saldo final teórico, importe confirmado contado a mano y diferencia. Es la foto de cuadre de caja, no un movimiento. * ID de sección: `17d4d716-81ee-4d68-9edf-6b0614492018` ### Cobros de Ventas [#cobros-de-ventas] Registro de cobro asociado a una Venta / Ingreso: importe cobrado, método de pago, depósito monetario destino, estado (pendiente/tramitado), vencimiento y enlace a movimiento bancario o asiento contable. Es el flujo de dinero entrante de una venta, no la venta en sí. * ID de sección: `10f52508-2ad5-4afe-9d0b-ef12d5914f10` ### Direcciones de envíos [#direcciones-de-envíos] Direcciones de entrega guardadas de una entidad (cliente): destinatario, dirección normalizada por código postal/municipio/provincia/país y contacto. Es la libreta de direcciones para envíos de paquetería y pedidos — no la dirección fiscal de la entidad, que vive en su ficha. * ID de sección: `54fa3578-5509-426a-b96f-e42fdd7bee9d` ### Entradas de inventario [#entradas-de-inventario] Entrada manual de stock de un producto en un almacén (ajuste de inventario, no compra): producto + cantidad + almacén, con lote y hueco opcionales según el modo de gestión del producto. Genera y gobierna un Movimiento interno de inventario que modifica el stock real y disponible. * ID de sección: `1f3747d6-5c20-4610-b93b-b1b11c24fad5` ### Entradas de ventas [#entradas-de-ventas] Entrada de inventario por devolución de cliente ligada a una venta (rectificativa): registra que un producto vendido vuelve a un almacén y aumenta el stock vía movimiento interno. No es una entrada de compra (Entradas de Compra) ni una entrada manual (Entradas de inventario). * ID de sección: `f4a3773e-6e90-4fa5-b873-dae8fe01c3e9` ### Enumeraciones nativas [#enumeraciones-nativas] Catálogo de las enumeraciones del motor de Dinaup: cada registro es un enum nativo con su ID de rol de campo, título, descripción y flag de obsoleta. Sus valores concretos viven en Valores enumeraciones nativas. Metacatálogo de sistema, no configuración de negocio del usuario. * ID de sección: `aa26761b-141d-44be-a783-3ab58d01da93` ### Envíos de paquetería [#envíos-de-paquetería] Expedición física de bultos a un destinatario: dirección de entrega, transportista/tarifa, código y enlace de seguimiento, peso total y estado de trámite. Se enlaza a la Venta o Pedido que lo origina; sus líneas son los productos, recursos o lotes que van dentro. No es un transporte interno de recursos (eso es Ordenes de Transportes). * ID de sección: `6520ba88-853b-4732-8d12-74a13dd1a104` · tiene **sección lista** (líneas del documento) ### Fases de Procesos de Venta [#fases-de-procesos-de-venta] Etapa de un pipeline comercial (Proceso de Venta): título, orden dentro del proceso, color e icono. Configura las columnas del embudo por las que avanzan las oportunidades; no registra el paso de una oportunidad por la fase (eso es el "Historial de cambio de Fases"). * ID de sección: `9ac67dbe-73f4-4d84-866b-5594e8423a07` ### Historial de pagos Redsys [#historial-de-pagos-redsys] Registro de cada intento de pago en el TPV virtual Redsys: la respuesta cruda de la pasarela (campos Ds\*), importe, estado, pedido y datos de sesión del pagador. Es un log de auditoría de transacciones — la configuración del terminal vive en TPVs Redsys; el cobro contable, en Cobros de Ventas. * ID de sección: `9183f153-9e75-4c23-a45a-c6bbe035ee84` ### Libros registros de Ventas / Ingresos [#libros-registros-de-ventas--ingresos] Catálogo maestro: libro registro fiscal al que se adscriben las ventas/ingresos (p. ej. libro de facturas emitidas). Solo nombre, descripción, orden y color; su gemelo para el lado del gasto es Libros registros de Compras / Gastos. * ID de sección: `8065a1ea-038f-43a0-b8af-bdf571a7ea3f` ### Motivos de Cancelación de Pedido [#motivos-de-cancelación-de-pedido] Catálogo de motivos por los que se cancela un pedido: cada motivo lleva el estado de pedido cancelado al que mueve, un mensaje para el cliente y un color. Es el maestro de motivos, no el registro de la cancelación de un pedido concreto. * ID de sección: `3daf107c-d6d1-4796-9639-0ca3a24f668a` ### Movimiento interno de inventario (Compra-Venta) [#movimiento-interno-de-inventario-compra-venta] Registro espejo que modifica el stock (físico y disponible) de un producto en un almacén/hueco/lote, generado y mantenido por documentos de origen como Entradas de Compra o Salidas de Venta. Casi todo es read-only: no se crea a mano — es la huella contable del inventario. * ID de sección: `7c7f78fd-56d0-4030-b85a-d57e5ffd98cd` ### Movimientos de Caja [#movimientos-de-caja] Entrada o retirada de efectivo en una caja (depósito monetario tipo Caja): importe, concepto, estado de tramitación y trazabilidad contable. Para dinero de caja física — no confundir con Movimientos bancarios ni con cobros/pagos de documentos. * ID de sección: `b2b46811-3ecd-4b1b-947e-06626b029f43` ### Movimientos internos de inventario [#movimientos-internos-de-inventario] Apunte de ajuste de stock: modifica el inventario y/o el stock disponible de un producto en un almacén (con hueco y lote opcionales), en positivo o negativo. Es el movimiento atómico interno, no una entrada de compra ni una salida de venta. * ID de sección: `5ae1b0e1-f930-4a05-ba01-f83fba68562a` ### Numeraciones / Series [#numeraciones--series] Serie de numeración de documentos: clave de serie, separador, contador actual y límites opcionales. La consumen ventas, compras, pedidos, productos, lotes, recambios, tickets... para generar sus códigos secuenciales. Configuración maestra — el contador lo gestiona el servidor. * ID de sección: `a63e7622-30ca-425b-978e-1dd01c140de8` ### Objetivos de Venta [#objetivos-de-venta] Objetivo mensual de facturación de un empleado con esquema de comisiones: importe base mensual, % de comisión sobre lo que supere el objetivo y tope mensual de comisión, vigente entre dos fechas que deben ser mes completo. No confundir con Objetivos de campañas de Marketing (metas de campañas, no de comerciales). * ID de sección: `0adeb595-2d4f-4d49-a3f3-da03adbd5c1d` ### Pedidos [#pedidos] Documento de pedido de venta: encargo de un cliente aún no facturado, con líneas de productos/recursos, cálculo completo de importes, descuentos e impuestos, estado de trámite y vencimiento. Se distingue de Ventas / Ingresos en que es el paso previo: desde él se genera la venta y el envío. * ID de sección: `e6c3fd00-6a90-48a5-9ae9-7f6755e5edd9` · tiene **sección lista** (líneas del documento) ### Presupuestos de venta [#presupuestos-de-venta] Documento comercial previo a la venta: oferta de productos/servicios a un cliente con precios, descuentos e impuestos, sin efecto fiscal ni de facturación. Nace en estado Borrador y puede convertirse en Venta/Ingreso; usar Ventas / Ingresos para la factura real. * ID de sección: `ff4ea09c-1b83-462f-b782-60b8717d92a9` · tiene **sección lista** (líneas del documento) ### Procesos de Venta [#procesos-de-venta] Definición de un pipeline comercial del CRM: nombre, descripción, color, fase inicial y quién puede usarlo. Las etapas viven en Fases de Procesos de Venta; los seguimientos de oportunidades se visualizan en kanban por proceso. Es configuración, no un seguimiento concreto. * ID de sección: `3b4006d3-cc13-49d7-a976-ba0e7eb9a71f` ### Registros Verifactu [#registros-verifactu] Log de envíos Verifactu a la AEAT: por cada factura (venta) registrada guarda el XML/JSON enviado, la respuesta, el tipo de operación, estado y flag de reintento. Registro técnico de cumplimiento generado por el servidor — la factura en sí vive en Ventas/Ingresos. * ID de sección: `e2c892d9-431c-4d3f-ab53-1bb2f524a38b` ### Salidas de inventario [#salidas-de-inventario] Salida manual de stock de un producto desde un almacén (ajuste, merma, consumo...): cantidad, lote y hueco opcionales, con estado (pendiente/completada/anulada) que decide cómo impacta el stock. No es la salida generada por una venta; es el documento de salida directa del módulo de inventario. * ID de sección: `f09b320f-e100-45c4-a677-0954455471d7` ### Salidas de ventas [#salidas-de-ventas] Salida física de inventario ligada a una venta: descuenta stock de un producto (con lote/hueco si aplica) desde un almacén al entregarlo al cliente. Distinta de "Salidas de inventario" (salidas genéricas) y de la venta misma: aquí se mueve stock, no dinero. * ID de sección: `2c7d5f11-1b45-4f3a-85fa-7aefa0699cfa` ### Tarifas de envíos [#tarifas-de-envíos] Tabla de costes y precios de envío por tramos de peso para una empresa de transporte, con límites por provincias, grupo de entidades o grupo de almacenes. Define cuánto cuesta y a cuánto se cobra el envío; no es el envío en sí (eso es Envíos de paquetería). * ID de sección: `07bbe1d8-c7ab-4cde-a5e9-6b74ae2870e4` · tiene **sección lista** (líneas del documento) ### TPVs Redsys [#tpvs-redsys] Configuración de un TPV virtual Redsys: código de comercio (FUC), número de terminal, configuración avanzada de API y estado inicial que recibirán los pagos. Es la pasarela configurada; las transacciones reales viven en Historial de pagos Redsys. * ID de sección: `b643c685-b404-4c8f-acb8-dd0854af4123` ### Valores enumeraciones nativas [#valores-enumeraciones-nativas] Cada valor posible de una enumeración nativa de Dinaup: número interno (ValorNativo), título legible, descripción, estilo de texto y flag de obsoleto. Es metacatálogo del sistema (documenta los enums del motor); no es una lista de valores configurable por el usuario para su negocio. * ID de sección: `53bdcc8e-5c1f-4bd4-9906-5cb86b6992d3` ### Ventas / Ingresos [#ventas--ingresos] Documento de venta/factura emitida: cabecera fiscal (cliente, impuestos, Verifactu, numeración) con líneas de productos/recursos vendidos. Es la factura real, no la propuesta (Presupuestos de venta) ni el encargo (Pedidos); genera cobros, salidas de inventario y asientos. * ID de sección: `0ce4c6ac-54aa-488d-b8b8-e3a20d79f7a4` · tiene **sección lista** (líneas del documento) # Contabilidad (/docs/rtg/pymes/contabilidad) ## Cuadro de cuentas [#cuadro-de-cuentas] Organiza la estructura contable de la empresa, con las cuentas agrupadas por código y naturaleza. Puedes crear, modificar o importar el plan contable oficial. Cuadro de cuentas ### Atajos rápidos [#atajos-rápidos] * **`43.` + `Enter`**\ Rellena la **próxima subcuenta libre** bajo el grupo 43.\ Ejemplo: si la última era `43000000`, se crea `43000001`. * **`43.0` + `Enter`**\ Rellena la **primera subcuenta terminada en cero**.\ Ejemplo: crea `43000000` si aún no existe. > El 43 es solo un ejemplo: sirve con cualquier cuenta.