Su Template de datos para la gestión de devoluciones y reembolsos
Su Template de datos para la gestión de devoluciones y reembolsos
- Campos de datos recomendados para recopilar
- Pasos clave del proceso que debe seguir
- Instrucciones para extraer los datos
Atributos para la gestión de devoluciones y reembolsos
| Nombre | Descripción | ||
|---|---|---|---|
| Fecha y hora del evento EventTime | Fecha y hora que indican cuándo tuvo lugar una actividad o un evento concreto. | ||
| Descripción La fecha y hora del evento registran el momento exacto en que tuvo lugar una actividad. Cada actividad del Registro de eventos tiene una fecha y hora asociadas, que determinan el orden cronológico de los eventos. Este atributo es fundamental para todos los análisis de Process Mining basados en el tiempo. Se utiliza para calcular los tiempos de ciclo entre actividades, identificar tiempos de espera y cuellos de botella, medir la duración total de los casos y comprobar el cumplimiento de los acuerdos de nivel de servicio (SLA). La precisión de las fechas y horas influye directamente en la fiabilidad de cualquier análisis del rendimiento. Por qué es importante Esta fecha y hora son esenciales para calcular todas las métricas de duración, como los tiempos de ciclo y de espera, fundamentales para analizar el rendimiento. Dónde obtenerlo Corresponde a los campos de fecha de creación o modificación de distintas tablas, como 'SalesTable.createdDateTime' para la creación de pedidos o 'WMSJournalTrans.createdDateTime' para los diarios del almacén. Ejemplos 2023-10-26T10:00:00Z2023-10-26T14:30:15Z2023-10-27T09:05:42Z | |||
| ID del caso de devolución ReturnCaseId | Identificador único del caso de devolución y reembolso de un cliente, que vincula todas las actividades relacionadas. | ||
| Descripción El ID del caso de devolución es el identificador principal de cada instancia única del proceso de devolución. Vincula todas las actividades asociadas a una devolución o solicitud de reembolso concreta, desde la creación inicial del pedido de devolución hasta su cierre final. En el análisis de procesos, este ID es fundamental para reconstruir el recorrido completo de cada devolución. Permite hacer un seguimiento de todo el ciclo, medir los tiempos de ciclo totales y analizar las diferencias entre casos. Todos los eventos, datos y métricas se agregan y relacionan mediante este identificador. Por qué es importante Este es el identificador esencial del caso que conecta todos los pasos del proceso y permite rastrear y analizar cada devolución de principio a fin. Dónde obtenerlo Suele ser el número de autorización de devolución de mercancía (RMA) o el número de pedido de venta de tipo 'Returned Order' en el módulo 'Sales and marketing'. Se encuentra en tablas como 'SalesTable', donde 'SalesType' tiene el valor 'Returned Order'. Ejemplos RMA-001234RMA-001235RMA-001236 | |||
| Nombre de la actividad ActivityName | Nombre del evento de negocio o la tarea concreta que tuvo lugar durante el proceso de devolución y reembolso. | ||
| Descripción Este atributo describe un paso o evento concreto del ciclo de devolución y reembolso, como 'Pedido de devolución creado', 'Artículo recibido' o 'Nota de crédito contabilizada'. Cada actividad representa un punto específico del proceso que queda registrado en el sistema. Analizar la secuencia y la frecuencia de estas actividades es la base de Process Mining. Permite visualizar los mapas de procesos, identificar cuellos de botella entre pasos y descubrir variantes habituales y poco frecuentes. El conjunto de actividades define el alcance del proceso analizado. Por qué es importante Define los pasos del proceso y permite visualizar su flujo e identificar cuellos de botella, retrabajo y desviaciones. Dónde obtenerlo Es un atributo conceptual derivado de los eventos del sistema. Puede generarse asignando nombres fáciles de entender a los cambios de estado de tablas como 'SalesTable' y 'WMSJournalTable' o a eventos específicos registrados. Ejemplos Pedido de devolución creadoArtículo recibidoCódigo de disposición aplicadoNota de crédito contabilizada | |||
| Canal de devolución ReturnChannel | El método o canal por el que el cliente inició la devolución. | ||
| Descripción Este atributo especifica el canal que utilizó el cliente para iniciar la devolución, por ejemplo, 'Portal en línea', 'En tienda', 'Llamada al servicio de atención al cliente' o 'Correo postal'. Segmentar el análisis del proceso por canal de devolución ayuda a evaluar el rendimiento y la eficiencia de cada canal. Una empresa puede comparar los tiempos de ciclo, los costes y la satisfacción del cliente entre canales para identificar buenas prácticas y áreas en las que conviene invertir o mejorar. Este análisis es clave para el Dashboard 'Rendimiento del uso de los canales de devolución'. Por qué es importante Permite comparar el rendimiento de los distintos canales de devolución y optimizar los más eficientes y rentables. Dónde obtenerlo Esta información puede almacenarse en el encabezado de la orden de devolución ('SalesTable') o deducirse del usuario que creó la orden. Es posible que se necesite lógica personalizada o un campo específico. Ejemplos Portal webQuiosco en tiendaAtención al cliente | |||
| Código de disposición DispositionCode | Código que indica el resultado de la inspección del artículo y la acción que se debe realizar a continuación. | ||
| Descripción El código de disposición se asigna durante la inspección de calidad de un artículo devuelto. Determina el paso siguiente del proceso, como 'Credit', 'Replace', 'Scrap' o 'Return to Customer'. Este atributo es un punto de decisión fundamental en el proceso de devoluciones. Analizar los datos por código de disposición permite a las empresas comprender los resultados de las devoluciones, hacer un seguimiento del impacto financiero de dar de baja artículos y evaluar la eficiencia de las distintas rutas de resolución, como el reemplazo frente al reembolso. Por qué es importante Este código determina la ruta que seguirá un caso de devolución después de la inspección, por lo que es fundamental para analizar las variantes del proceso y sus resultados empresariales. Dónde obtenerlo Este es un campo clave del módulo de gestión de calidad. Está asociado al procesamiento de órdenes de calidad u órdenes de inspección. Ejemplos CRDTREPL-DSCRAPRTV | |||
| Código del motivo de devolución ReturnReasonCode | El motivo que indica el cliente para devolver el artículo. | ||
| Descripción El código del motivo de devolución registra el motivo que indica el cliente, como 'Artículo defectuoso', 'Talla incorrecta', 'No coincide con la descripción' o 'Ya no lo necesita'. Esta información suele recopilarse al iniciar la devolución. Analizar los motivos de devolución es fundamental para identificar las causas raíz. Ayuda a las empresas a detectar problemas de calidad de los productos, descripciones inexactas o errores logísticos. La información obtenida de estos datos puede impulsar mejoras en el diseño de productos, el marketing y las operaciones de la cadena de suministro para reducir las devoluciones futuras. Por qué es importante Permite comprender por qué se producen las devoluciones y analizar sus causas raíz para reducir su frecuencia y mejorar la satisfacción del cliente. Dónde obtenerlo Suele almacenarse en el nivel de línea de la orden de devolución. Busque los campos de código de motivo en la tabla 'SalesLine' de las órdenes de devolución. Ejemplos DEFECTOARTÍCULO_INCORRECTOYA_NO_LO_QUIEREDAÑADO_DURANTE_EL_TRANSPORTE | |||
| ID del producto ProductId | El identificador único del producto que se devuelve. | ||
| Descripción El ID del producto, que suele ser la unidad de mantenimiento de existencias (SKU), identifica el artículo específico que devuelve el cliente. Cada línea de la orden de devolución está asociada a un ID del producto. Analizar las devoluciones por producto es esencial para identificar los artículos con una tasa de devolución elevada. Esto puede indicar problemas de control de calidad, descripciones inexactas o defectos de fabricación. Este análisis ayuda a priorizar las investigaciones y mejoras relacionadas con los productos. Por qué es importante Permite analizar las devoluciones por producto e identificar artículos con problemas de calidad o un volumen elevado de devoluciones. Dónde obtenerlo Corresponde al campo 'ItemId' de la tabla 'SalesLine' de la orden de devolución. Ejemplos SKU-A-123SKU-B-456SKU-C-789 | |||
| Usuario responsable ResponsibleUser | Usuario o empleado que realizó una actividad concreta o es responsable de ella. | ||
| Descripción Este atributo identifica a la persona responsable de ejecutar un paso del proceso. Puede ser quien recibió el artículo en el almacén, quien realizó la inspección de calidad o quien contabilizó la nota de crédito en el área financiera. Analizar el proceso por usuario ayuda a comprender la distribución de la carga de trabajo, identificar a quienes obtienen mejores resultados y detectar posibles necesidades de formación. También permite investigar casos gestionados por personas o equipos concretos y garantizar una adecuada segregación de funciones. Por qué es importante Permite analizar la distribución de la carga de trabajo y el rendimiento de cada persona o equipo, así como detectar oportunidades de formación o asignación de recursos. Dónde obtenerlo Se encuentra en los campos 'created by' o 'modified by' de los registros de transacciones, como 'SalesTable.createdBy' o los ID de usuario vinculados en las tablas de diarios. Ejemplos Alicia.WRoberto.JCristina.P | |||
| Cumple la política IsPolicyAdherent | Indicador de si la aprobación de la devolución cumple las políticas establecidas. | ||
| Descripción Este atributo booleano calculado indica si una devolución cumple todos los criterios definidos en la política de devoluciones de la empresa. Puede basarse en factores como el plazo para devolver el artículo, su estado o el motivo de la devolución. Este atributo respalda directamente el Dashboard 'Resumen del cumplimiento de las aprobaciones de devoluciones' y el KPI 'Tasa de aprobación de devoluciones conformes'. Permite cuantificar el cumplimiento de las políticas, identificar los casos aprobados como excepciones y analizar los motivos y la frecuencia de esas excepciones. Esto es fundamental para la gobernanza y el control de costes. Por qué es importante Mide directamente el cumplimiento de las reglas empresariales y ayuda a identificar y reducir las aprobaciones de devoluciones que no las cumplen y que pueden provocar pérdidas de ingresos. Dónde obtenerlo Es un atributo derivado. Para calcularlo, habría que comparar los atributos de la devolución, como la fecha y el motivo, con reglas empresariales predefinidas. Ejemplos truefalse | |||
| Estado de la orden de devolución ReturnOrderStatus | El estado general de la orden de devolución en el momento del evento. | ||
| Descripción Este atributo indica el estado actual del encabezado de la orden de devolución, como 'Abierta', 'Facturada' o 'Cancelada'. Ofrece una visión general de la etapa del ciclo de vida en la que se encuentra el caso. Las actividades muestran los pasos detallados del proceso, mientras que el estado general resulta útil para filtrar y segmentar los casos. Por ejemplo, un analista puede centrarse solo en los casos 'Abiertos' para conocer la carga de trabajo actual o analizar el flujo del proceso de los casos que finalmente se 'Cancelan'. Por qué es importante Ofrece un resumen general del estado del caso, útil para filtrar casos y comprender resultados como las cancelaciones. Dónde obtenerlo Esta información se encuentra en el campo 'SalesStatus' o 'DocumentStatus' de la tabla 'SalesTable'. Ejemplos Orden abiertaEntregadaFacturadaCancelada | |||
| Estado del SLA SlaStatus | Indica si el caso se resolvió dentro del plazo objetivo del acuerdo de nivel de servicio. | ||
| Descripción Este atributo calculado ofrece un estado sencillo del cumplimiento del SLA, normalmente 'A tiempo' o 'Atrasado'. Se determina comparando la marca de tiempo de la última actividad, por ejemplo, 'Orden de devolución cerrada', con 'RefundSlaTargetDate'. Este atributo simplifica los informes de rendimiento en Dashboards como 'Rendimiento del SLA de resolución de reembolsos'. En lugar de tener que comparar fechas, los usuarios disponen de un estado directo y fácil de entender. Así pueden filtrar y agregar datos rápidamente para calcular la 'Tasa de cumplimiento del SLA de resolución'. Por qué es importante Ofrece una indicación clara e inmediata del cumplimiento del SLA, lo que facilita filtrar los casos atrasados y analizar las causas raíz de las demoras. Dónde obtenerlo Es un atributo derivado que se calcula comparando la marca de tiempo de la actividad de resolución final con el atributo 'RefundSlaTargetDate'. Ejemplos A tiempoAtrasado | |||
| Fecha objetivo del SLA del reembolso RefundSlaTargetDate | La fecha límite para resolver por completo el caso de devolución y reembolso. | ||
| Descripción Este atributo define la fecha límite del acuerdo de nivel de servicio (SLA) para resolver un caso de devolución. Es la fecha en la que se espera que el cliente reciba una resolución definitiva, como un reembolso contabilizado o un artículo de reemplazo enviado. Esta fecha objetivo es esencial para supervisar el rendimiento frente a los compromisos de servicio. Se utiliza para calcular el KPI 'Tasa de cumplimiento del SLA de resolución' y alimentar el Dashboard 'Rendimiento del SLA de resolución de reembolsos'. Al comparar esta fecha con la fecha real de finalización del proceso, la empresa puede detectar incumplimientos del SLA y gestionar de forma proactiva los casos pendientes desde hace más tiempo. Por qué es importante Es el valor de referencia para medir el rendimiento del proceso, hacer seguimiento del cumplimiento del SLA e identificar los casos atrasados. Dónde obtenerlo Es posible que no exista un campo estándar para este dato. A menudo se calcula sumando un período de SLA predefinido (por ejemplo, 14 días) a la fecha de creación de la devolución. También podría almacenarse en un campo personalizado. Ejemplos 2023-11-10T23:59:59Z2023-11-15T23:59:59Z | |||
| Hora de finalización EndTime | Fecha y hora que indican cuándo se completó una actividad concreta. | ||
| Descripción La hora de finalización representa el momento en que se completó una actividad. Mientras que StartTime marca el inicio, EndTime señala el final y permite calcular el tiempo de procesamiento de esa tarea concreta. Este atributo es fundamental para analizar el rendimiento en detalle, sobre todo en tareas con una duración medible, como 'Inspección del artículo'. Al comparar StartTime y EndTime, se puede medir con precisión el tiempo de procesamiento activo de las tareas y distinguirlo del tiempo de espera entre ellas. Esto ayuda a localizar ineficiencias en actividades concretas, no solo entre ellas. Por qué es importante Permite calcular el tiempo de procesamiento activo de cada actividad y distinguir el tiempo de espera del tiempo de trabajo efectivo. Dónde obtenerlo A menudo hay que calcularla. Por ejemplo, podría ser el valor de 'modifiedDateTime' correspondiente a un cambio de estado que finaliza una actividad, o bien el StartTime de la actividad siguiente. Ejemplos 2023-10-26T10:15:00Z2023-10-26T14:45:20Z2023-10-27T09:55:12Z | |||
| ID de la nota de crédito CreditNoteId | El identificador único del documento de nota de crédito creado para un reembolso. | ||
| Descripción Al procesar un reembolso, se genera un documento financiero conocido como nota de crédito o abono. Este atributo almacena el ID único de ese documento. Este ID vincula directamente el proceso operativo de devolución con los registros financieros del sistema contable. Resulta útil para las auditorías y para analizar en detalle las discrepancias financieras, ya que permite rastrear un caso de devolución hasta la transacción financiera específica que lo liquidó. Por qué es importante Vincula el proceso operativo de devolución con la transacción financiera correspondiente, algo fundamental para las auditorías y la conciliación financiera. Dónde obtenerlo El número de la nota de crédito suele encontrarse en el campo 'InvoiceId' de la tabla 'CustInvoiceJour', donde el tipo de transacción es 'Credit note'. Puede vincularse con la orden de devolución. Ejemplos CN-10056CN-10057CN-10058 | |||
| ID del almacén WarehouseId | El identificador del almacén o la ubicación donde se recibe el artículo devuelto. | ||
| Descripción Este atributo identifica el almacén físico o centro de devoluciones específico que procesa el artículo devuelto. Cada ubicación puede tener procesos, recursos o niveles de rendimiento distintos. Analizar el proceso por almacén permite comparar el rendimiento entre ubicaciones. Puede ayudar a identificar qué instalaciones procesan las devoluciones con mayor eficiencia, detectar cuellos de botella regionales y orientar las decisiones sobre asignación de recursos y estandarización de procesos en toda la red logística. Por qué es importante Permite comparar el rendimiento de los distintos almacenes o centros de devoluciones e identificar cuellos de botella regionales o buenas prácticas. Dónde obtenerlo Esta información se almacena en el campo 'InventLocationId' de las transacciones relacionadas con el inventario, como el diario de llegada ('WMSJournalTable') o la tabla 'SalesLine'. Ejemplos WH-EASTWH-WESTCENTRAL-DC | |||
| ID del cliente CustomerId | El identificador único del cliente que inició la devolución. | ||
| Descripción El ID del cliente es el identificador único de la cuenta asociada a la devolución. Vincula la transacción de devolución con un cliente específico del CRM o de la base de datos de clientes. Analizar las devoluciones por cliente permite identificar a quienes devuelven artículos con una frecuencia inusualmente alta, lo que podría indicar un comportamiento fraudulento o una insatisfacción persistente. También permite segmentar a los clientes, por ejemplo, para ofrecer servicios de devolución prémium a los de mayor valor. Por qué es importante Vincula el proceso de devolución con un cliente específico, lo que permite analizar los datos por cliente e identificar patrones de devolución o posibles fraudes. Dónde obtenerlo Es el campo 'CustAccount' de la tabla 'SalesTable' de la orden de devolución. Ejemplos CUST-00045CUST-00192CUST-00315 | |||
| Importe del reembolso solicitado RequestedRefundAmount | El importe total del reembolso solicitado por el cliente. | ||
| Descripción Este atributo representa el importe inicial del reembolso solicitado o previsto al comienzo del proceso de devolución. Suele basarse en el precio de compra original de los artículos devueltos. Este valor sirve como referencia para el 'Análisis de discrepancias en el importe del reembolso'. Al comparar el importe solicitado con el reembolsado, la empresa puede detectar diferencias debidas a cargos por reposición de existencias, reembolsos parciales por productos dañados u otros ajustes. Esto ayuda a supervisar la precisión financiera y el cumplimiento de las políticas. Por qué es importante Sirve como referencia para medir la precisión financiera al compararlo con el importe real del reembolso procesado. Dónde obtenerlo Suele ser el importe de la línea o el importe total de la línea de la orden de venta original que se devuelve. Se encuentra en 'SalesLine.LineAmount'. Ejemplos 99.99150.0024.50 | |||
| Importe real del reembolso ActualRefundAmount | El importe final del reembolso emitido al cliente. | ||
| Descripción Este atributo contiene el importe final confirmado que se reembolsó al cliente. Se registra cuando se crea y contabiliza la nota de crédito. Es un atributo clave para el análisis financiero y se utiliza directamente en el Dashboard 'Análisis de discrepancias en el importe del reembolso' y en el KPI 'Tasa de precisión del importe del reembolso'. Analizar estos datos ayuda a comprender el impacto financiero de las devoluciones y los ajustes realizados durante el proceso. Por qué es importante Representa el impacto financiero real de la devolución y es fundamental para calcular la precisión de los reembolsos y comprender los resultados financieros. Dónde obtenerlo Este valor se encuentra en los detalles de la transacción contabilizada de la nota de crédito. Está relacionado con las tablas 'CustTrans' y 'CustInvoiceJour' de la nota de crédito. Ejemplos 99.99135.000.00 | |||
| Sistema de origen SourceSystem | Sistema de información del que se extrajeron los datos de los eventos. | ||
| Descripción Este atributo identifica el sistema de información de origen de los datos. En este caso, será principalmente 'Microsoft Dynamics 365'. En las organizaciones grandes, un proceso puede abarcar varios sistemas. Especificar el sistema de origen de cada evento es fundamental para la gobernanza de datos, la resolución de problemas de extracción y la comprensión del entorno tecnológico del proceso. También confirma el origen de los datos analizados. Por qué es importante Aporta información esencial sobre el origen de los datos, necesaria para la gobernanza y la validación de datos, así como para comprender el entorno de sistemas del proceso. Dónde obtenerlo Suele ser un valor estático que se añade durante el proceso de extracción, transformación y carga (ETL) para indicar el origen del conjunto de datos. Ejemplos Microsoft Dynamics 365 F&OD365-PROD | |||
| Tipo de devolución ReturnType | Clasifica la devolución según el resultado previsto, como un reembolso o un reemplazo. | ||
| Descripción Este atributo clasifica el caso de devolución según el tipo de resolución que solicita el cliente o que ofrece la empresa. Entre los tipos habituales se encuentran el 'Reembolso' monetario, el cambio por un artículo de 'Reemplazo' o la 'Reparación'. Esta clasificación resulta útil para analizar las distintas rutas del proceso. El proceso para emitir un reembolso es muy diferente del necesario para enviar un artículo de reemplazo. Segmentar por tipo de devolución permite analizar con mayor precisión los tiempos de ciclo y los cuellos de botella específicos de cada ruta de resolución. Por qué es importante Permite segmentar el análisis según el resultado previsto, ya que los procesos de reembolso y reemplazo tienen pasos y tiempos de ciclo distintos. Dónde obtenerlo Puede ser un campo personalizado del encabezado de la orden de devolución o deducirse del código de disposición o de transacciones posteriores, como la creación de una orden de venta de reemplazo. Ejemplos ReembolsoReemplazoCrédito en tienda | |||
| Última actualización de los datos LastDataUpdate | Fecha y hora que indican cuándo se actualizaron por última vez los datos del proceso. | ||
| Descripción Este atributo registra la fecha y hora en que se extrajeron por última vez los datos del sistema de origen y se actualizaron en la herramienta de Process Mining. Sirve como referencia para saber qué tan recientes son los datos analizados. Conocer la fecha y hora de la última actualización permite evaluar la actualidad del análisis. Ayuda a interpretar correctamente los Dashboards y los KPI, ya que indica si se consultan datos en tiempo real o una instantánea de un momento concreto. Esto es fundamental para la supervisión operativa. Por qué es importante Indica qué tan recientes son los datos y permite a quienes analizan el proceso saber hasta qué punto está actualizada la información obtenida. Dónde obtenerlo Es un atributo de metadatos que se genera y almacena durante la incorporación de datos. Suele representar la fecha y hora de finalización del trabajo ETL. Ejemplos 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
Actividades de gestión de devoluciones y reembolsos
| Actividad | Descripción | ||
|---|---|---|---|
| Artículo recibido | Indica la recepción física del artículo devuelto en el almacén o centro de devoluciones designado. Se registra cuando se contabiliza el diario de llegada asociado al pedido de devolución. | ||
| Por qué es importante Este es un hito fundamental que marca el paso de la acción del cliente a la tramitación interna. Es el punto de partida para calcular todos los tiempos de gestión interna, como los de inspección y disposición. Dónde obtenerlo Fecha y hora de contabilización del diario WMS o del diario de llegada del artículo asociado a la línea ReturnOrder. Esto actualiza las transacciones de inventario al estado 'Registered' o 'Received'. Capturar Evento de contabilización del diario de llegada del artículo vinculado a la línea del pedido de devolución. Tipo de evento explicit | |||
| Código de disposición aplicado | Esta actividad representa la finalización de la inspección y la decisión sobre qué hacer con el artículo devuelto. Se asigna un código de disposición a la línea de devolución, como 'Credit', 'Scrap' o 'Replace'. | ||
| Por qué es importante Este es un punto de decisión clave que determina la ruta posterior del proceso, ya sea un reembolso, un cambio o un rechazo. Las demoras en esta etapa pueden afectar considerablemente el tiempo total de resolución. Dónde obtenerlo Este evento se registra cuando se completa el campo DispositionCode en la transacción de inventario de la línea del pedido de devolución o en el diario relacionado. Capturar Evento de actualización al establecer un DispositionCode para la línea del pedido de devolución. Tipo de evento explicit | |||
| Nota de crédito contabilizada | La nota de crédito se contabiliza oficialmente en los libros financieros y el crédito queda disponible para el cliente. Esto indica que, desde el punto de vista de la empresa, el reembolso se ha completado. | ||
| Por qué es importante Este es un hito financiero fundamental que confirma que el reembolso se ha tramitado en el sistema. Suele ser una actividad clave para medir el cumplimiento de los SLA de reembolso. Dónde obtenerlo Fecha y hora de contabilización del diario de facturas del pedido de devolución, que finaliza la nota de crédito. El estado del pedido de devolución cambia a 'Invoiced'. Capturar Contabilización del diario de facturas del pedido de devolución. Tipo de evento explicit | |||
| Pedido de devolución cerrado | El pedido de devolución ha llegado a su estado final: todas las transacciones físicas y financieras se han completado. Esto suele ocurrir después de contabilizar la nota de crédito o enviar el artículo de reemplazo. | ||
| Por qué es importante Este es el evento de fin principal de un proceso de devolución completado correctamente. El tiempo transcurrido desde la creación hasta este punto representa el tiempo de ciclo total del caso. Dónde obtenerlo Se deduce del cambio del campo de estado ReturnOrder a un valor final, como 'Invoiced' o 'Closed'. Esto indica que no se espera ninguna otra tramitación. Capturar Cambio del campo SalesTable.Status o SalesTable.DocumentStatus a un estado final. Tipo de evento inferred | |||
| Pedido de devolución creado | Esta actividad marca el inicio del proceso de devolución, cuando se crea en el sistema una autorización de devolución de mercancía (RMA) o un pedido de devolución. Se registra como un evento explícito al crear un nuevo registro ReturnOrder en Dynamics 365. | ||
| Por qué es importante Este es el evento de inicio principal de todo el proceso de devoluciones. Analizar el tiempo transcurrido desde esta actividad hasta las siguientes permite conocer el tiempo de entrega total del proceso e identificar cuellos de botella en las primeras etapas. Dónde obtenerlo Este evento se registra a partir de la fecha y hora de creación del encabezado ReturnOrder. Suele encontrarse en SalesTable, donde SalesType tiene el valor 'Returned Order'. Capturar Evento de creación del registro SalesTable con SalesType = 'Returned Order'. Tipo de evento explicit | |||
| Artículo de reemplazo enviado | Se contabiliza el albarán del artículo de reemplazo, lo que indica que se ha enviado al cliente. Esto marca la finalización del proceso de gestión del cambio. | ||
| Por qué es importante Este es un hito clave de la variante de cambio y representa el cumplimiento de la obligación de la empresa con el cliente. Es fundamental para hacer un seguimiento de los tiempos de ciclo de los cambios. Dónde obtenerlo Fecha de contabilización del diario de albarán del pedido de venta de reemplazo. Esto actualiza el estado del pedido a 'Delivered'. Capturar Contabilización del albarán del pedido de venta de reemplazo. Tipo de evento explicit | |||
| Diario de llegada creado | Esta actividad indica que el almacén espera recibir el artículo devuelto. Consiste en crear un diario de llegada, que prepara el sistema para la recepción física de los productos. | ||
| Por qué es importante Este paso separa la preparación logística de la recepción física. Ayuda a analizar la preparación del almacén y la planificación de las devoluciones entrantes. Dónde obtenerlo Creación de un registro en WMSJournalTable con JournalType 'Arrival'. El diario está vinculado a la línea del pedido de devolución. Capturar Fecha y hora de creación del registro WMSJournalTable correspondiente a la devolución. Tipo de evento explicit | |||
| Nota de crédito creada | Se genera una nota de crédito cuando la disposición es 'Credit', lo que autoriza el reembolso al cliente. Este es el inicio formal de la etapa de liquidación financiera del proceso. | ||
| Por qué es importante Esta actividad marca la aprobación del reembolso. El tiempo transcurrido entre la disposición y la creación de la nota de crédito permite detectar demoras administrativas al iniciar el reembolso. Dónde obtenerlo Puede deducirse de la creación de un nuevo registro SalesTable con un valor negativo, vinculado al pedido de devolución original, o de la ejecución del trabajo por lotes 'Create credit note'. Capturar Creación de una nota de crédito, a menudo mediante la contabilización de la factura del pedido de devolución. Tipo de evento explicit | |||
| Orden de calidad generada | Se crea una orden de calidad formal, lo que indica que el artículo devuelto debe someterse a una inspección estructurada. Esto es habitual cuando las devoluciones requieren pruebas detalladas o comprobaciones con respecto a los estándares de calidad. | ||
| Por qué es importante Esta actividad marca el inicio de una inspección formal. El seguimiento del tiempo desde este punto permite medir la eficiencia y la duración del flujo de trabajo de control de calidad. Dónde obtenerlo Fecha y hora de creación de un registro en InventQualityOrderTable vinculado al pedido de devolución. Capturar Creación de un registro InventQualityOrderTable. Tipo de evento explicit | |||
| Pedido de devolución cancelado | El pedido de devolución se cancela antes de completarse. Puede deberse a una solicitud del cliente o a que el artículo nunca se devolvió. | ||
| Por qué es importante Este es un final alternativo del proceso que no se completa correctamente. Analizar los motivos de la cancelación de las devoluciones puede aportar información sobre el comportamiento de los clientes o los fallos del proceso. Dónde obtenerlo Se deduce del cambio del campo de estado ReturnOrder a 'Cancelled'. Es un estado final distinto del cierre correcto de un pedido. Capturar Cambio del campo SalesTable.Status a 'Cancelled'. Tipo de evento inferred | |||
| Pedido de devolución confirmado | Representa la confirmación formal del pedido de devolución en el sistema, que suele activar la lógica de los pasos posteriores. Normalmente se registra como una acción explícita o un cambio de estado en el encabezado ReturnOrder. | ||
| Por qué es importante La confirmación es un paso clave antes de que pueda comenzar la logística. Las demoras entre la creación y la confirmación pueden indicar acumulación de trabajo administrativo o problemas del sistema. Dónde obtenerlo Puede identificarse mediante el registro de diario 'Confirmation' del pedido de devolución o un cambio en el campo DocumentStatus de SalesTable. Capturar Ejecución de la función 'Confirm sales order' para el pedido de devolución. Tipo de evento explicit | |||
| Pedido de reemplazo creado | Se crea un nuevo pedido de venta para enviar un artículo de reemplazo al cliente. Esta actividad tiene lugar cuando la acción de disposición es 'Replace and Credit' o 'Replace and Scrap'. | ||
| Por qué es importante Esta actividad inicia la variante del proceso de cambio. Para comprender la complejidad y los costes de los cambios, es fundamental hacer un seguimiento de esta ruta por separado de la ruta de reembolso. Dónde obtenerlo Creación de un nuevo registro SalesTable para el artículo de reemplazo, que suele generarse automáticamente y vincularse al pedido de devolución original. Capturar Creación de un nuevo pedido de venta vinculado al pedido de devolución mediante la acción de disposición. Tipo de evento explicit | |||
Guías de extracción
Pasos
- Requisitos previos: registre una aplicación en Azure Active Directory. Antes de conectarse a la API de Dynamics 365, debe registrar una aplicación en su inquilino de Azure AD. Conceda a esta aplicación permisos delegados para acceder a Dynamics 365 Finance & Operations, por ejemplo,
Financials.ReadWrite.Allo un permiso personalizado. - Configure el ID de aplicación en Dynamics 365. En Dynamics 365, vaya a System administration > Setup > Azure Active Directory applications. Añada el ID de aplicación (cliente) del registro de la aplicación en Azure AD y asígnelo a una cuenta de usuario con los roles de seguridad necesarios para leer las entidades de datos requeridas.
- Obtenga un token de acceso OAuth 2.0. Escriba un script, por ejemplo, en PowerShell o Python, para autenticarse en el endpoint de Microsoft Identity Platform. Use las credenciales de la aplicación (ID y secreto de cliente) para solicitar un token de acceso para la URL del recurso de Dynamics 365.
- Identifique la URL de su entorno de Dynamics 365. Localice la URL base de su entorno de Dynamics 365. El endpoint de Web API suele tener este formato:
https://[YourD365FinanceAndOpsURL].dynamics.com/data. - Cree y ejecute solicitudes a la API OData. Para cada una de las 12 actividades requeridas, cree una URL específica para una solicitud OData GET. Use
$selectpara recuperar solo las columnas necesarias y$filterpara especificar el intervalo de fechas y las condiciones de estado pertinentes. Incluya el token de autenticación obtenido en el paso 3 como token Bearer en el encabezado de autorización de cada solicitud. - Desarrolle un script de extracción. Cree un script que recorra la lista de solicitudes OData. El script debe gestionar la autenticación, ejecutar cada solicitud GET y almacenar los datos JSON resultantes. Tenga en cuenta los límites de la API e incluya pausas si es necesario.
- Gestione la paginación de la API. Dynamics 365 divide los resultados extensos en páginas. El script debe comprobar si la respuesta incluye la propiedad
@odata.nextLink. Si existe, debe enviar otra solicitud a esa URL para recuperar la página siguiente y repetir el proceso hasta que no se proporcionenextLink. - Transforme y unifique los datos. Procese la respuesta JSON de cada una de las 12 llamadas a la API. Para cada actividad, cree un registro estandarizado con
ReturnCaseId,ActivityName,EventTimey otros atributos. Por ejemplo, para el evento 'Return Order Created', asigneReturnOrderNumberaReturnCaseId, establezcaActivityNamecomo 'Return Order Created' y asignecreatedDateTimeaEventTime. Combine los registros transformados de todas las llamadas en una sola lista o tabla. - Limpie y estandarice las marcas de tiempo. Asegúrese de que todos los valores de
EventTimetengan un formato uniforme, preferiblemente UTC, con un formato comoYYYY-MM-DDTHH:MM:SSZ. Gestione los registros con marcas de tiempo ausentes o no válidas según sea necesario. - Exporte el Registro de eventos final. Cuando haya recopilado y transformado todos los datos en un único conjunto unificado, expórtelo a un archivo CSV. Asegúrese de que los encabezados de columna coincidan con los requisitos de ProcessMind:
ReturnCaseId,ActivityName,EventTime,ResponsibleUser,DispositionCode, etc. El archivo estará listo para cargarse.
Configuración
- URL del endpoint de la API: URL base de su instancia de Dynamics 365 Finance & Operations. Tiene el formato
https://[YourEnvironmentName].dynamics.com/data. - Aplicación de Azure AD: Debe registrar una aplicación en Azure AD con un ID y un secreto de cliente. Necesita permisos de API para acceder a las entidades de datos de Dynamics 365.
- Filtrado por intervalo de fechas: Es fundamental aplicar un filtro de fechas en cada llamada a la API mediante el parámetro OData
$filtersobre un campo de fecha pertinente, comocreatedDateTimeomodifiedDateTime. Para empezar, suele ser conveniente extraer los datos de los últimos 3 a 6 meses y mantener así la extracción en un volumen manejable. - Filtro de empresa: Para extraer datos de una entidad jurídica específica, incluya el parámetro de consulta
cross-company=truey, a continuación, use$filteren el campodataAreaId. Por ejemplo,?cross-company=true&$filter=dataAreaId eq '[YourCompanyCode]'. - Preferencia de paginación: Use el encabezado
Prefer: odata.maxpagesize=[value]en las solicitudes para controlar el número de registros devueltos por página. Es habitual usar un valor entre1000y5000. Esto ayuda a evitar tiempos de espera de la API en entidades con muchos datos. - Limitación de solicitudes a la API: Tenga en cuenta los límites de protección del servicio de API de Dynamics 365. El script de extracción debe gestionar las respuestas
429 (Too Many Requests), normalmente mediante una espera exponencial o un mecanismo sencillo de pausa y reintento.
a Consulta de ejemplo graphql
/*
This is a conceptual guide representing multiple, distinct OData API calls.
You will need a script (e.g., Python, PowerShell) to execute these calls sequentially,
authenticate with a bearer token, handle pagination, and union the results into a single file.
Replace [YourD365URL], [StartDate], [EndDate], and [YourCompanyCode] with your specific values.
*/
// Base URL for all requests
const string BaseUrl = "https://[YourD365URL].dynamics.com/data";
const string CompanyFilter = "?cross-company=true&$filter=dataAreaId eq '[YourCompanyCode]' and ";
const string DateFilterCreated = "createdDateTime ge [StartDate]T00:00:00Z and createdDateTime le [EndDate]T23:59:59Z";
const string DateFilterModified = "modifiedDateTime ge [StartDate]T00:00:00Z and modifiedDateTime le [EndDate]T23:59:59Z";
// 1. Return Order Created
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}{DateFilterCreated}&$select=ReturnOrderNumber,createdDateTime,createdby,ReturnReasonCodeId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser, ReturnReasonCodeId -> ReturnReasonCode
// 2. Return Order Confirmed
// This often updates the header status. We look for a modification time on confirmed orders.
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Confirmed' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby,ReturnReasonCodeId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Confirmed' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 3. Arrival Journal Created
GET {BaseUrl}/WarehouseArrivalJournalHeaders{CompanyFilter}{DateFilterCreated}&$expand=WarehouseArrivalJournalLines($select=InventTransactionId)&$select=JournalNumber,createdDateTime,createdby
// Note: This requires post-processing to link JournalNumber to a ReturnCaseId via InventTransactionId.
// Mapping: Link via InventTrans -> ReturnCaseId, 'Arrival Journal Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 4. Item Received (Arrival Journal Posted)
GET {BaseUrl}/WarehouseArrivalJournalHeaders{CompanyFilter}JournalPosted eq 'Yes' and {DateFilterModified}&$expand=WarehouseArrivalJournalLines($select=InventTransactionId)&$select=JournalNumber,modifiedDateTime,modifiedby
// Mapping: Link via InventTrans -> ReturnCaseId, 'Item Received' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 5. Quality Order Generated
GET {BaseUrl}/InventQualityOrders{CompanyFilter}{DateFilterCreated}&$select=QualityOrderId,InventTransId,createdDateTime,CreatedByUserId,ItemId
// Mapping: Link via InventTransId -> ReturnCaseId, 'Quality Order Generated' -> ActivityName, createdDateTime -> EventTime, CreatedByUserId -> ResponsibleUser, ItemId -> ProductId
// 6. Disposition Code Applied
// This is a status change on the return line.
GET {BaseUrl}/ReturnOrderLines{CompanyFilter}ReturnDispositionCodeId ne '' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby,ReturnDispositionCodeId,ItemId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Disposition Code Applied' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser, ReturnDispositionCodeId -> DispositionCode, ItemId -> ProductId
// 7. Credit Note Created
// Look for sales orders with type 'Returned Order' that are not yet invoiced.
GET {BaseUrl}/SalesOrderHeadersV2{CompanyFilter}SalesOrderProcessingStatus eq 'Open' and SalesOrderType eq 'ReturnedOrder' and {DateFilterCreated}&$select=SalesOrderNumber,createdDateTime,createdby
// Mapping: SalesOrderNumber -> ReturnCaseId, 'Credit Note Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 8. Credit Note Posted
// Look for posted invoice journals linked to a return order.
GET {BaseUrl}/SalesInvoiceJournalHeaders{CompanyFilter}SalesOrderType eq 'ReturnedOrder' and {DateFilterCreated}&$select=SalesOrderNumber,InvoiceDate,createdby
// Mapping: SalesOrderNumber -> ReturnCaseId, 'Credit Note Posted' -> ActivityName, InvoiceDate -> EventTime, createdby -> ResponsibleUser
// 9. Replacement Order Created
// Disposition code on the return line triggers a replacement order.
GET {BaseUrl}/SalesOrderHeadersV2{CompanyFilter}SalesOrderOriginType eq 'ReturnOrder' and {DateFilterCreated}&$select=SalesOrderNumber,createdDateTime,createdby,ReturnOrderNumber
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Replacement Order Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 10. Replacement Item Shipped
// Check for posted packing slips related to the replacement sales order.
GET {BaseUrl}/SalesPackingSlipJournals{CompanyFilter}{DateFilterCreated}&$select=SalesOrderNumber,DeliveryDate,createdby
// Note: This requires linking SalesOrderNumber back to the original ReturnOrderNumber for the ReturnCaseId.
// Mapping: Link SalesOrderNumber -> ReturnCaseId, 'Replacement Item Shipped' -> ActivityName, DeliveryDate -> EventTime, createdby -> ResponsibleUser
// 11. Return Order Closed
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Closed' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Closed' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 12. Return Order Cancelled
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Canceled' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Cancelled' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser Pasos
- Habilite el endpoint TDS: Compruebe que el endpoint Tabular Data Stream (TDS) esté habilitado en su entorno de Dynamics 365 Dataverse. Un administrador del sistema puede habilitarlo en el centro de administración de Power Platform, en Environment > Settings > Features.
- Identifique la URL del entorno: Busque la URL de su entorno. Suele tener este formato:
yourorg.crm.dynamics.com. El nombre del servidor del endpoint TDS será esta URL con el puerto 5558; por ejemplo,yourorg.crm.dynamics.com,5558. - Conéctese con un cliente SQL: Use un cliente SQL compatible con TDS, como SQL Server Management Studio (SSMS) o Azure Data Studio.
- Autentíquese: Conéctese al servidor con su cuenta de Azure Active Directory, que debe tener los permisos adecuados en el entorno de Dataverse, normalmente el rol System Administrator o System Customizer.
- Prepare la consulta: Copie la consulta SQL completa que aparece en la sección
queryde este documento y péguela en una ventana de consulta nueva de su cliente SQL. - Defina los parámetros: Localice los marcadores de posición de la consulta. Sustituya
'{StartDate}'y'{EndDate}'por el intervalo de fechas que desea extraer, por ejemplo,'2023-01-01'y'2023-12-31'. Actualice también los valores de marcador de posición de los códigos de estado o disposición para que coincidan con su configuración de Dynamics 365. - Ejecute la consulta: Ejecute la consulta modificada en la base de datos de Dataverse. El tiempo de ejecución dependerá del volumen de datos y del intervalo de fechas seleccionado.
- Revise los resultados: Cuando termine la consulta, compruebe que el conjunto de datos devuelto incluya las columnas esperadas:
ReturnCaseId,ActivityName,EventTimey los atributos recomendados. - Exporte el Registro de eventos: Exporte los resultados de la consulta a un archivo CSV. La mayoría de los clientes SQL incluyen una función para guardar los resultados directamente en un archivo. Asegúrese de guardar el archivo con codificación UTF-8.
- Cargue los datos en ProcessMind: El archivo CSV exportado está listo para cargarse en ProcessMind como un nuevo Registro de eventos para analizar el proceso.
Configuración
- Requisitos previos: Necesita una cuenta de usuario con, al menos, acceso de lectura a las tablas de Dataverse pertinentes (por ejemplo, SalesTable, SalesLine, CustInvoiceJour). Los permisos suelen gestionarse mediante roles de seguridad, como System Administrator, o un rol personalizado con permisos suficientes para las tablas.
- Endpoint TDS: El endpoint TDS de Dataverse debe estar habilitado en el entorno. Esta función permite ejecutar consultas SQL directas de solo lectura en la base de datos de Dataverse.
- Intervalo de fechas: La consulta incluye los marcadores de posición
'{StartDate}'y'{EndDate}'. Para el análisis inicial, se recomienda un intervalo de 3 a 6 meses, que proporciona un conjunto de datos representativo sin causar problemas de rendimiento. - Filtro de empresa: Tal como está escrita, la consulta se ejecutará en todas las entidades jurídicas (empresas) a las que tenga acceso el usuario. Para analizar una sola empresa, quite los comentarios y añada una cláusula
WHEREque filtre el campoDATAAREAIDen cada parte de la instrucciónUNION ALL; por ejemplo,AND st.DATAAREAID = '[YourCompanyID]'. - Marcadores de posición para lógica personalizada: La consulta incluye marcadores de posición como
[YourReplaceCode1]para los códigos de disposición y notas sobre la vinculación de pedidos de reemplazo. Debe configurarlos según sus procesos de negocio y la configuración de Dynamics 365. - Rendimiento: Las consultas directas al endpoint TDS pueden ser lentas con conjuntos de datos grandes. La conexión está optimizada para consultas analíticas, pero las combinaciones complejas de millones de filas pueden agotar el tiempo de espera. Se recomienda aplicar filtros de fecha estrictos.
a Consulta de ejemplo sql
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Created' AS ActivityName,
st.CREATEDDATETIME AS EventTime,
st.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Confirmed' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.DOCUMENTSTATUS = 1 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Arrival Journal Created' AS ActivityName,
wjt.CREATEDDATETIME AS EventTime,
wjt.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN WMSJOURNALTABLE wjt ON st.SALESID = wjt.ORDERID AND st.DATAAREAID = wjt.DATAAREAID
WHERE st.SALESTYPE = 3 AND wjt.JOURNALTYPE = 4 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Item Received' AS ActivityName,
wjt.POSTEDDATETIME AS EventTime,
wjt.POSTEDUSERID AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN WMSJOURNALTABLE wjt ON st.SALESID = wjt.ORDERID AND st.DATAAREAID = wjt.DATAAREAID
WHERE st.SALESTYPE = 3 AND wjt.JOURNALTYPE = 4 AND wjt.POSTEDDATETIME IS NOT NULL AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Quality Order Generated' AS ActivityName,
iqot.CREATEDDATETIME AS EventTime,
iqot.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
iqot.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN INVENTQUALITYORDERTABLE iqot ON sl.INVENTTRANSID = iqot.INVENTTRANSID AND sl.DATAAREAID = iqot.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Disposition Code Applied' AS ActivityName,
iqot.VALIDATEDDATETIME AS EventTime,
iqot.VALIDATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
iqot.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN INVENTQUALITYORDERTABLE iqot ON sl.INVENTTRANSID = iqot.INVENTTRANSID AND sl.DATAAREAID = iqot.DATAAREAID
WHERE st.SALESTYPE = 3 AND iqot.VALIDATEDDATETIME IS NOT NULL AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Credit Note Created' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Credit Note Posted' AS ActivityName,
cij.CREATEDDATETIME AS EventTime,
cij.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN CUSTINVOICEJOUR cij ON st.SALESID = cij.SALESID AND st.DATAAREAID = cij.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
ro.RETURNITEMNUM AS ReturnCaseId,
'Replacement Order Created' AS ActivityName,
replacement_so.CREATEDDATETIME AS EventTime,
replacement_so.CREATEDBY AS ResponsibleUser,
NULL AS DispositionCode,
NULL AS ReturnReasonCode,
replacement_so.SALESORIGINID AS ReturnChannel,
replacement_sl.ITEMID AS ProductId
FROM SALESTABLE ro
JOIN SALESLINE rol ON ro.SALESID = rol.SALESID AND ro.DATAAREAID = rol.DATAAREAID
JOIN SALESTABLE replacement_so ON ro.CUSTACCOUNT = replacement_so.CUSTACCOUNT AND ro.DATAAREAID = replacement_so.DATAAREAID
JOIN SALESLINE replacement_sl ON replacement_so.SALESID = replacement_sl.SALESID AND replacement_so.DATAAREAID = replacement_sl.DATAAREAID
WHERE ro.SALESTYPE = 3
AND rol.RETURNDISPOSITIONCODEID IN ('[YourReplaceCode1]', '[YourReplaceCode2]')
AND replacement_so.SALESTYPE = 1
AND replacement_so.CREATEDDATETIME > ro.CREATEDDATETIME
-- The join above is a basic example and must be replaced with your system's specific logic for linking returns to replacements.
AND ro.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
ro.RETURNITEMNUM AS ReturnCaseId,
'Replacement Item Shipped' AS ActivityName,
cpsj.CREATEDDATETIME AS EventTime,
cpsj.CREATEDBY AS ResponsibleUser,
NULL AS DispositionCode,
NULL AS ReturnReasonCode,
replacement_so.SALESORIGINID AS ReturnChannel,
cpsl.ITEMID AS ProductId
FROM SALESTABLE ro
JOIN SALESLINE rol ON ro.SALESID = rol.SALESID AND ro.DATAAREAID = rol.DATAAREAID
JOIN SALESTABLE replacement_so ON ro.CUSTACCOUNT = replacement_so.CUSTACCOUNT AND ro.DATAAREAID = replacement_so.DATAAREAID
JOIN CUSTPACKINGSLIPJOUR cpsj ON replacement_so.SALESID = cpsj.SALESID AND replacement_so.DATAAREAID = cpsj.DATAAREAID
JOIN CUSTPACKINGSLIPTRANS cpsl ON cpsj.PACKINGSLIPID = cpsl.PACKINGSLIPID AND cpsj.SALESID = cpsl.SALESID AND cpsj.DATAAREAID = cpsl.DATAAREAID
WHERE ro.SALESTYPE = 3
AND rol.RETURNDISPOSITIONCODEID IN ('[YourReplaceCode1]', '[YourReplaceCode2]')
AND replacement_so.SALESTYPE = 1
AND replacement_so.CREATEDDATETIME > ro.CREATEDDATETIME
-- The join above is a basic example and must be replaced with your system's specific logic for linking returns to replacements.
AND ro.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Closed' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Cancelled' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 4 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'; ¿Todo listo para empezar?
Use este Template para agilizar la recopilación de datos y empezar a descubrir información que le permita mejorar el proceso de devoluciones y reembolsos. Comience hoy mismo a trabajar para agilizar la gestión y aumentar la satisfacción del cliente.
Elimine los retrasos en devoluciones y reembolsos: optimice su proceso hoy mismo
Reduzca el tiempo de ciclo un 30 % y mejore la satisfacción del cliente.
No se requiere tarjeta de crédito. La configuración lleva solo unos minutos.