Promoción no pasa en cajas

Asociados reportan que tienen publicidad, correo, comunicado, de ciertas promociones pero que al pasar en cajas no las están respetando. 

Existen variedad de escenarios para cuando una promoción no pasa en cajas y puede derivarse a una falla en el sistema origen de promociones (MMS) o bien que en POS no la está respetando por alguna falla en sincronización. 

Query: Sku consulta detalle

DECLARE @SKU nvarchar(6) = 154951                                                 
            
--WARRITY = 1 APLICA GARANTÍA
--WARRITY = 0 NO APLICA GARANTÍA Y SE REPORTA CON NEGOCIO NO ES FALLA
--select * from [8664-pos01].posdb.pos.itemdetail where groupid in (select TriggerGroupID from promotiondetail where promoid=40472) and sku=148891
--update [8734-pos01].posdb.pos.itemdetail set isactive = 0 where sku = 136074 and groupid = 333987 and isactive = 1
Declare @F1 int,@F2 int,@F3 int,@F4 int,@F5 int


-- Promocion Vigente en ItemDetail - PMA
Select 'Vigentes' 'ItemDetail',ph.PromoID,ph.Description,ph.TypeID,pt.[Description], ph.StartDate,ph.EndDate,PH.StatusID,CASE PH.StatusID WHEN 0 THEN 'Vacia' WHEN 1 THEN 'Con Planes' WHEN 2 THEN 'Bines Asignados' WHEN 3 THEN 'Tiendas Activadas' WHEN 4 THEN 'Articulos asignados' WHEN 5 THEN 'Tiendas y Articulos asignados' WHEN 6 THEN 'Finalizada' WHEN 7 THEN 'Peticion por autorizacion' WHEN 8 THEN 'Autorizada'  WHEN 9 THEN 'Modificada despues de autorizar'  WHEN 10 THEN 'Reautorizada'  WHEN 11 THEN 'Cancelada'  ELSE 'UNKNOWN - No existe tipo de Estatus'  END    as 'ESTATUS',CASE PH.CustomerTypeID    WHEN 0 THEN 'No aplica tienda' WHEN 1 THEN 'PISO' WHEN 2 THEN 'PRO' WHEN 3 THEN 'PISO Y PRO' ELSE '? - No existe tipo - ' + CAST(PH.CustomerTypeID AS CHAR) END AS 'TIPO CTE' ,ph.Created,ph.Modified,id.SKU,Case When pdp.promoid is null then d.[description] else d2.[description] end 'Tipo',Case When id.DiscountTypeID = 2 then id.quantity else pd.TriggerQuantity end 'Compra',Case When id.DiscountTypeID = 2 then '-' else pd.TargetQuantity end 'Regalo',Case When pdp.promoid is null then id.Discount else pdp.Amount end 'Monto',Case When pdp.promoid is null then id.IsActive else pdp.IsActive end 'ID/PDP Active',Ph.IsActive 'PH Active',pd.triggergroupid,Pd.IsActive 'PD Active',IGH.IsActive 'IGH Active' from ItemDetail id (NoLock) LEFT JOIN ItemGroupHeader igh (NoLock) on id.groupid =	 igh.GroupID  LEFT JOIN PromotionHeader ph (Nolock) on ph.promoid = igh.promoid LEFT JOIN PromotionDetail pd (Nolock) on pd.promoid = igh.promoid and pd.TriggerGroupID = igh.GroupID LEFT JOIN PromotionDetailPrice pdp (Nolock) ON pdp.promoid = pd.promoid and pd.sequence = pdp.sequence LEFT JOIN DiscountType d (NoLock) on d.DiscountTypeID = id.DiscountTypeID LEFT JOIN DiscountType d2 (NoLock) on d2.DiscountTypeID = pdp.DiscountTypeID LEFT JOIN PromoType pt (Nolock) on ph.typeid = pt.PromoType where sku =  @sku and CONVERT(DATE, GETDATE()) BETWEEN convert(date,ph.startdate) AND convert(date,ph.enddate )
-- Promocion COMBO Vigente en ItemDetail
Select 'COMBOS Activos' 'Estatus',id.sku,id.GroupID,kh.kitnum, kh.KitPrice,kd.SKU,kd.ComponentPrice,ph.PromoID,ph.[Description],ph.StartDate,ph.EndDate,ph.StatusID,ph.TypeID,ph.IsActive,ph.Created,ph.Modified,ph.Deleted from ItemDetail id (NoLock)LEFT JOIN ItemKitHdr kh (NoLock) on kh.kitnum = id.sku LEFT JOIN ItemKitdtl kd (NoLock) on kd.kitnum = id.sku LEFT JOIN PromotionDetail pd (NoLock) on pd.triggergroupid = id.groupid LEFT JOIN PromotionHeader ph (NoLock) on pd.promoid = ph.Promoid Where convert(date,getdate()) between convert(date,ph.startdate) AND convert(date,ph.enddate ) and id.IsActive = 1 and pd.isactive = 1 and ph.isactive = 1 and id.sku = @sku and ph.typeid = 4 

-- Promocion COMBO VENCIDO en ItemDetail
-- Select 'COMBOS Vencidos' 'Estatus',id.sku,id.GroupID,kh.kitnum, kh.KitPrice,kd.SKU,kd.ComponentPrice,ph.PromoID,ph.[Description],ph.StartDate,ph.EndDate,ph.StatusID,ph.TypeID,ph.IsActive,ph.Created,ph.Modified,ph.Deleted from ItemDetail id (NoLock)LEFT JOIN ItemKitHdr kh (NoLock) on kh.kitnum = id.sku LEFT JOIN ItemKitdtl kd (NoLock) on kd.kitnum = id.sku LEFT JOIN PromotionDetail pd (NoLock) on pd.triggergroupid = id.groupid LEFT JOIN PromotionHeader ph (NoLock) on pd.promoid = ph.Promoid Where NOT convert(date,getdate()) between ph.StartDate and ph.EndDate and id.IsActive = 1 and pd.isactive = 1 and ph.isactive = 1 and id.sku = @sku and ph.typeid = 4 
--SKU esta en una promocion de Precio (TAB, ROP, Clearance). NOTA: Estas bajan del AdManager.
SELECT 'APTHDR/DET',ah.AdNumber, ah.AdType, ah.PromoID, ah.BeginDate, ah.EndingDate, ad.SKU, ad.ItemRetail,ad.itemstatus, ip.PromoPrc, ip.PromoStart, ip.PromoEnd, ip.PromoType FROM aptdet ad INNER JOIN apthdr ah ON ah.AdNumber = ad.AdNumber INNER JOIN ItemPLU ip ON ip.SKU = ad.SKU WHERE ad.SKU = @SKU AND CONVERT(DATE, GETDATE()) BETWEEN ah.BeginDate AND ah.EndingDate

--SKU esta en una promoción de POS. NOTA: Estas bajan del Sistema de Promociones.--nota fallo con algun sku
SELECT 'IN' 'Vigentes',substring(pf.recordlist,CharIndex(@sku,pf.recordlist),19)'Promo',pf.CreateDateTime,ph.PromoID,ph.[Description], ph.PromoType,CASE ph.PromoType WHEN 1 THEN 'Meses Sin Intereses' WHEN 2 THEN 'NxM' WHEN 3 THEN 'Producto Gratis' WHEN 4 THEN 'Paquetes' WHEN 5 THEN 'Porcentaje de Descuento' WHEN 6 THEN 'Monto de Descuento' WHEN 7THEN 'Mercancia al Mismo Precio' WHEN 8 THEN 'Regalo Gratis' WHEN 9 THEN 'Descuento por Tender' WHEN 10 THEN 'Porcentaje de Descuento' WHEN 12 THEN 'Ahorrapack'  WHEN 14 THEN 'NLP' WHEN 15 THEN 'Inmejorable' ELSE 'No Identificada' END AS PromoTypeDesc, ph.StartDate, ph.EndDate, pf.TableName, pf.RecordList FROM PromoFiles pf INNER JOIN PromoHdr ph ON ph.PromoID = pf.PromoID WHERE pf.RecordList LIKE CONCAT('%', CONVERT(NVARCHAR(20),@SKU),'%') AND CONVERT(DATE, GETDATE()) BETWEEN ph.StartDate AND ph.EndDate
Select 'PromoPack',* from PromoPack (NoLock) where Item = @sku and Promoid in (Select pf.Promoid FROM PromoFiles pf INNER JOIN PromoHdr ph ON ph.PromoID = pf.PromoID WHERE pf.RecordList LIKE CONCAT('%', CONVERT(NVARCHAR(20),@SKU),'%') AND CONVERT(DATE, GETDATE()) BETWEEN ph.StartDate AND ph.EndDate)
--Promociones no Activas en año en curso
SELECT 'OUT' 'Vigencia',substring(pf.recordlist,CharIndex(@sku,pf.recordlist),19)'Promo',pf.CreateDateTime,ph.PromoID,ph.[Description], ph.PromoType,CASE ph.PromoType WHEN 1 THEN 'Meses Sin Intereses' WHEN 2 THEN 'NxM' WHEN 3 THEN 'Producto Gratis' WHEN 4 THEN 'Paquetes' WHEN 5 THEN 'Porcentaje de Descuento' WHEN 6 THEN 'Monto de Descuento' WHEN 7THEN 'Mercancia al Mismo Precio' WHEN 8 THEN 'Regalo Gratis' WHEN 9 THEN 'Descuento por Tender' WHEN 10 THEN 'Porcentaje de Descuento' WHEN 12 THEN 'Ahorrapack'  WHEN 14 THEN 'NLP' WHEN 15 THEN 'Inmejorable' ELSE 'No Identificada' END AS PromoTypeDesc, ph.StartDate, ph.EndDate, pf.TableName, pf.RecordList FROM PromoFiles pf INNER JOIN PromoHdr ph ON ph.PromoID = pf.PromoID WHERE pf.RecordList LIKE CONCAT('%', CONVERT(NVARCHAR(20),@SKU),'%') AND CONVERT(DATE, GETDATE()) NOT BETWEEN ph.StartDate AND ph.EndDate and year(pf.createdatetime) >= year(getdate())

--SKU Precios Aplicados 'ITEMPLU'
select 'Itemplu', Description, UOM, Warranty, TaxCode, proprice, pronivel1, pronivel2, Warranty, sku,retailprice, Case When Taxcode = 1 then retailprice * 1.16 when Taxcode = 2 then retailprice * 1.08 else retailprice end as retailiva, promoprc , Case When Taxcode = 1 then promoprc * 1.16 when Taxcode = 2 then promoprc * 1.08 else promoprc end as promoiva,PromoStart,PromoEnd,promonumb,RestrictCode,family1,family2,family3,family4,family5,ExceptType12,* from itemplu (NoLock) where sku in (@SKU)
	If ((Select [type] From Itemplu (NoLock) where sku = @sku)='G')
	Begin
		select 'Itemplu - Hijos',sku,retailprice, Case When Taxcode = 1 then retailprice * 1.16 when Taxcode = 2 then retailprice * 1.08 else retailprice end as retailiva ,promoprc, Case When Taxcode = 1 then promoprc * 1.16 when Taxcode = 2 then promoprc * 1.08 else promoprc end as promoiva,PromoStart,PromoEnd,promonumb,RestrictCode,family1,family2,family3,family4,family5,ExceptType12,* from itemplu (NoLock) where sku in (SELECT sku FROM ItemKitDtl WHERE KitNum =  @sku)
	End

--SKU Cantidades 'ITEMREPLEN'
Select CurQOH,QtyReserved,OnOrderQty,LabelType,* from Itemreplen where sku = @sku


--SKU Paquetes
SELECT * FROM ItemKitHdr WHERE KitNum = @SKU OR KitNum IN (SELECT KitNum FROM ItemKitDtl WHERE SKU = @SKU)
SELECT * FROM ItemKitDtl WHERE KitNum IN (SELECT KitNum FROM ItemKitHdr WHERE KitNum = @SKU OR KitNum IN (SELECT KitNum FROM ItemKitDtl WHERE SKU = @SKU))

--SKU Infonavit
Select * from InfvItem where item = @sku

--SKU Cambio de Precio
SELECT	TOP 16 PCDate, PCTime, pa.SKU, CASE ChgType  WHEN 1000 THEN 'Pending' WHEN 1100 THEN 'Cambio en precio - Tienda'	WHEN 3100 THEN 'Cambio en costo - Tienda' WHEN 1300 THEN 'Linea'	WHEN 1200 THEN 'Cambio Precio'	WHEN 3200 THEN 'Cambio Precio'	WHEN 1400 THEN 'Promoción'    ELSE 'Regresa Precio' END AS Type,CASE WHEN pa.EmployeeNo = 0 THEN 'No disponible'ELSE (CAST (pa.EmployeeNo  AS VARCHAR(10)) + ' - ' + E.FirstName + ' ' + E.LastName) END AS Employee,JobTitle,	PCOldRetail,CASE WHEN I.TaxCode = 0 THEN pa.PCOldRetail	ELSE CAST(ISNULL((pa.PCOldRetail  * (T.Rate/100)) + pa.PCOldRetail,0) as numeric (10,4)) END AS PreviousPrice, PCNewRetail, CASE WHEN I.TaxCode = 0 THEN PCNewRetail ELSE CAST(ISNULL((pa.PCNewRetail  * (T.Rate/100)) + pa.PCNewRetail,0) as numeric(10,4)) END AS NewPrice FROM PCAuditLog pa JOIN Employee e ON pa.EmployeeNo = e.EmployeeNo	INNER JOIN dbo.ItemPLU I ON  pa.SKU = I.SKU LEFT JOIN dbo.Tax T ON I.TaxCode = T.TaxCode WHERE pa.SKU = @SKU ORDER BY PCDate desc,pctime desc

Primero debemos validar si la promoción reportada está configurada de manera correcta y si se observa en SMS y por lo tanto en BD. Para posteriormente validar en que sistema o aplicativo no se ve reflejada. 

Debemos de tomar como PRECIO MASTER al consultado en SMS/CONSULTA DE ARTICULOS 

Ejemplo: SKUs de pinturas (109390, 108676) regalan un galón (109389) 

Procedemos a consultar en SMS si la promoción está reflejada al consultar, tomaremos en este caso el sku de pintura de 19L 109390 y 108676

Como podemos observar ninguno de los dos skus indica que regalan otro producto o que tenga alguna promoción activa. Procedemos a buscar en BD para confirmar.

La primera tabla (ITEMDETAIL) contiene las promociones ya sean activas o inactivas, en este caso la promoción simplemente no existe, pero como tienda comenta que ellos tienen publicidad, correo, etc. Debemos enviar el incidente con el equipo de MMS para que corroboren en sistema origen, con el siguente comentario: 

“SKUs no cuentan con promoción en Itemdetail, Equipo MMS favor de validar en sistema origen y en su caso cancelar o dar seguimiento con AdCom” 

Nota: Anexar las evidencias correspondientes. 

UNA O VARIAS CAJAS NO PASAN PROMOCION

Si las promociones están bien configuradas y tienda menciona que es en una sola caja o dos y que en otras si está pasando la promoción debemos de descargar un tema de sincronización, si vemos que la caja no está sincronizada podemos hacer lo siguiente

Nos conectamos al servidor de POSSMS para ingresar a la BD de la caja

–### BORRAR Tabla FileSyncExecution para Forzar FULL SYNC # NOTA Solo usarlo en cajas con falta de Información

   --Delete posdb.pos.itemdetail  
   --Delete POSDB.dbo.FileSyncExecution 

Una vez eliminado monitoreamos la sincronización de la caja con el siguiente query:

SELECT * FROM POSDB.pos.AcctPeriod

select * from posdb.dbo.filesyncexecution where execution_time >= '2024-07-18 00:00:00.000' -- cambiamos la fecha

La caja una vez que está sincronizada podremos verlo de la siguiente manera:

En caso de que no sincronice la caja, será necesario realizar un restore a la bd de la caja. 

SI VEMOS TODO CORRECTO Y EL ASOCIADO QUE LEVANTA EL TICKET NO ES DE CAJAS, es muy probable que lo que falta es totalizar, ya que las promociones se ven hasta totalizar la venta. 

PROMOCION SE VISUALIZA EN BD PERO NO EN CAJAS NI SMS 

Esto puede deberse a que si bien tenemos la promoción en BD pero no está activa, las 4 banderas de Active deben de esta en 1 

En este caso el ticket debe ser direccionado igualmente a Mercaderías. 

Loading

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *