{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_6076\\879577847.py:48: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", " df0 = pd.read_sql(query, conn)\n" ] } ], "source": [ "import pyodbc\n", "import configparser\n", "import pandas as pd\n", "import numpy as np \n", "from datetime import datetime, time\n", "\n", "\n", "config = configparser.ConfigParser()\n", "config.read(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CODIGOS\\relatório_improdutivo\\credenciais.ini\")\n", "\n", "# Conexão com o banco\n", "conn = pyodbc.connect(\n", " f\"DRIVER={{SQL Server}};\"\n", " f\"SERVER={config['banco']['host']},1433;\"\n", " f\"DATABASE=GINSENG;\"\n", " f\"UID={config['banco']['user']};\"\n", " f\"PWD={config['banco']['password']}\")\n", "\n", "#gerar query\n", "query = '''\n", "SELECT \n", " e.pdv,\n", " COALESCE(e.SKU_PARA, e.SKU) AS SKU_FINAL,\n", " MAX(e.[ESTOQUE ATUAL]) AS [ESTOQUE ATUAL],\n", " MAX(e.[ESTOQUE EM TRANSITO]) AS [ESTOQUE EM TRANSITO],\n", " MAX(e.[PEDIDO PENDENTE]) AS [PEDIDO PENDENTE],\n", " d.salescurve AS Curva,\n", " e.CATEGORIA,\n", " d.dayswithoutsales AS DiasSemVenda,\n", " d.nextcycleprojection,\n", " d.secondtonextcycleprojection\n", "FROM \n", " estoque_mar e \n", "LEFT JOIN draft d \n", " ON d.loja_id = e.PDV \n", " AND d.code = COALESCE(e.SKU_PARA, e.SKU)\n", "WHERE \n", " d.businessunit = 'EUD'\n", "GROUP BY \n", " e.pdv,\n", " COALESCE(e.SKU_PARA, e.SKU),\n", " d.salescurve,\n", " e.CATEGORIA,\n", " d.dayswithoutsales,\n", " d.nextcycleprojection,\n", " d.secondtonextcycleprojection\n", "'''\n", "df0 = pd.read_sql(query, conn)\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\joao.herculano\\AppData\\Local\\Temp\\ipykernel_6076\\1692316838.py:25: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", " dfv0 = pd.read_sql(query_vendas, conn)\n" ] } ], "source": [ "query_vendas = '''\n", "SELECT \n", "\tB.PDV, \n", "\tB.SKU,\n", "\tB.DESCRICAO,\n", "\tSUM(CAST(b.VENDAS AS DECIMAL(18,2))) AS VENDAS_CICLO,\n", "\tC.Ciclo\n", "FROM base_vendas_bi b\n", "INNER JOIN ciclos_data_2025 c \n", " ON CAST(b.[DATA] AS DATE) = CONVERT(DATE, c.[Date], 103) AND C.MARCA = 'BOT'\n", "LEFT JOIN (\n", " SELECT SKU, MAX(ORIGEM) AS ORIGEM\n", " FROM estoque_mar\n", " GROUP BY SKU\n", ") e ON b.SKU = e.SKU\n", "WHERE b.[DATA] > '2024-07-28'\n", "GROUP BY\n", "B.PDV, \n", "\tB.SKU,\n", "\tB.DESCRICAO,\n", "\tC.Ciclo,\n", "\tE.ORIGEM \n", "'''\n", "\n", "dfv0 = pd.read_sql(query_vendas, conn)\n", "\n", "conn.close()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "df=df0" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | PDV | \n", "SKU | \n", "DESCRICAO | \n", "C202411 | \n", "C202412 | \n", "C202413 | \n", "C202414 | \n", "C202415 | \n", "C202416 | \n", "C202417 | \n", "... | \n", "C202502 | \n", "C202503 | \n", "C202504 | \n", "C202505 | \n", "C202506 | \n", "C202507 | \n", "C202508 | \n", "C202509 | \n", "C202510 | \n", "C202511 | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "11201 | \n", "1004 | \n", "FLORATTA DES COL MY BLUE 75ml | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 1 | \n", "11201 | \n", "1005 | \n", "DEM FLORATTA DES COL MY BLUE 4ml | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 2 | \n", "11201 | \n", "1078 | \n", "MATCH SRUM CAP POS QUIMICA 50ml | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 3 | \n", "11201 | \n", "1296 | \n", "PMPCK THE BLEND DES ANTIT AER 2x75g | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 4 | \n", "11201 | \n", "1302 | \n", "PMPCK LILY DES ANTIT AER 2x75g | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 188531 | \n", "5699 | \n", "90770 | \n", "PIN BALAO O BOTICARIO PAIS/25 UNIT | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 188532 | \n", "5699 | \n", "90772 | \n", "PIN AMOR O BOTICARIO PAIS/25 UNIT | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 188533 | \n", "5699 | \n", "90774 | \n", "PIN MELHOR PAI O BOTICARIO PAIS/25 UNIT | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 188534 | \n", "5699 | \n", "90776 | \n", "SACOLA TOP M O BOTICARIO PAIS 2025 UNIT | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 188535 | \n", "8074 | \n", "43151 | \n", "MATERIAL POS CONSUMO | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
188536 rows × 21 columns
\n", "| \n", " | Ciclo | \n", "INICIO CICLO | \n", "FIM CICLO | \n", "DURAÇÃO | \n", "MARCA | \n", "Date | \n", "NUM_CICLO | \n", "ANO_CICLO | \n", "CICLOMAIS2 | \n", "dias_ate_inicio | \n", "
|---|---|---|---|---|---|---|---|---|---|---|
| 2346 | \n", "C202513 | \n", "2025-08-27 | \n", "2025-09-16 | \n", "21 | \n", "EUDORA | \n", "2025-08-27 | \n", "13 | \n", "C2025 | \n", "C202515 | \n", "29 | \n", "
| \n", " | Ciclo | \n", "Veiculo | \n", "Tipo de Promoção | \n", "Estratégia de Promoção | \n", "Tipo_mecanica | \n", "Promo Período Limitado? | \n", "EAM | \n", "Categoria | \n", "Cód. Combo | \n", "Código do Item | \n", "... | \n", "0.34.2 | \n", "0.35.2 | \n", "0.2.3 | \n", "0.25.3 | \n", "0.28.3 | \n", "0.3.3 | \n", "0.32.3 | \n", "0.34.3 | \n", "0.35.3 | \n", "BSO | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "202513 | \n", "Guia CF | \n", "Promoção CF | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "NaN | \n", "Não | \n", "PERF. FEMININA | \n", "NaN | \n", "85268 | \n", "... | \n", "59.47 | \n", "61.22 | \n", "0.2 | \n", "0.25 | \n", "0.28 | \n", "0.3 | \n", "0.32 | \n", "0.34 | \n", "0.35 | \n", "Sim | \n", "
| 1 | \n", "202513 | \n", "Guia CF | \n", "Promoção CF | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "NaN | \n", "Não | \n", "PERF. FEMININA | \n", "NaN | \n", "93541 | \n", "... | \n", "30.57 | \n", "31.47 | \n", "0.2 | \n", "0.25 | \n", "0.28 | \n", "0.3 | \n", "0.32 | \n", "0.34 | \n", "0.35 | \n", "Sim | \n", "
| 2 | \n", "202513 | \n", "Guia CF | \n", "Promoção CF | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "NaN | \n", "Não | \n", "PERF. FEMININA | \n", "NaN | \n", "53138 | \n", "... | \n", "35.67 | \n", "36.72 | \n", "0.2 | \n", "0.25 | \n", "0.28 | \n", "0.3 | \n", "0.32 | \n", "0.34 | \n", "0.35 | \n", "Sim | \n", "
| 3 | \n", "202513 | \n", "Guia CF | \n", "Promoção CF | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "NaN | \n", "Não | \n", "PERF. FEMININA | \n", "NaN | \n", "50762 | \n", "... | \n", "23.43 | \n", "24.12 | \n", "0.2 | \n", "0.25 | \n", "0.28 | \n", "0.3 | \n", "0.32 | \n", "0.34 | \n", "0.35 | \n", "Sim | \n", "
| 4 | \n", "202513 | \n", "Guia CF | \n", "Promoção CF | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "NaN | \n", "Não | \n", "PERF. FEMININA | \n", "NaN | \n", "49803 | \n", "... | \n", "28.53 | \n", "29.37 | \n", "0.2 | \n", "0.25 | \n", "0.28 | \n", "0.3 | \n", "0.32 | \n", "0.34 | \n", "0.35 | \n", "Sim | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 345 | \n", "202513 | \n", "Fora Guia | \n", "Promoção RE | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "Ciclo todo | \n", "Não | \n", "CABELOS | \n", "NaN | \n", "53094 | \n", "... | \n", "0.00 | \n", "0.00 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "Sim | \n", "
| 346 | \n", "202513 | \n", "Fora Guia | \n", "Promoção RE | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "Ciclo todo | \n", "Não | \n", "CABELOS | \n", "NaN | \n", "55803 | \n", "... | \n", "0.00 | \n", "0.00 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "Sim | \n", "
| 347 | \n", "202513 | \n", "Fora Guia | \n", "Promoção RE | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "Ciclo todo | \n", "Não | \n", "CABELOS | \n", "NaN | \n", "93106 | \n", "... | \n", "0.00 | \n", "0.00 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "Sim | \n", "
| 348 | \n", "202513 | \n", "Fora Guia | \n", "Promoção RE | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "Ciclo todo | \n", "Não | \n", "CABELOS | \n", "NaN | \n", "93105 | \n", "... | \n", "0.00 | \n", "0.00 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "Sim | \n", "
| 349 | \n", "202513 | \n", "Fora Guia | \n", "Promoção RE | \n", "Movimentar Flow | \n", "Desconto Direto | \n", "Ciclo todo | \n", "Não | \n", "CABELOS | \n", "NaN | \n", "55805 | \n", "... | \n", "0.00 | \n", "0.00 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "Sim | \n", "
350 rows × 47 columns
\n", "| \n", " | pdv | \n", "SKU_FINAL | \n", "ESTOQUE ATUAL | \n", "ESTOQUE EM TRANSITO | \n", "PEDIDO PENDENTE | \n", "Curva | \n", "CATEGORIA | \n", "DiasSemVenda | \n", "nextcycleprojection | \n", "secondtonextcycleprojection | \n", "... | \n", "C202502 | \n", "C202503 | \n", "C202504 | \n", "C202505 | \n", "C202506 | \n", "C202507 | \n", "C202508 | \n", "C202509 | \n", "C202510 | \n", "C202511 | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "20968 | \n", "93541 | \n", "23 | \n", "0 | \n", "0 | \n", "B | \n", "PERFUMARIA | \n", "13.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "9.0 | \n", "3.0 | \n", "1.0 | \n", "1.0 | \n", "21.0 | \n", "3.0 | \n", "1.0 | \n", "13.0 | \n", "1.0 | \n", "1.0 | \n", "
| 1 | \n", "20969 | \n", "93541 | \n", "27 | \n", "0 | \n", "0 | \n", "B | \n", "PERFUMARIA | \n", "3.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "18.0 | \n", "3.0 | \n", "8.0 | \n", "9.0 | \n", "23.0 | \n", "4.0 | \n", "9.0 | \n", "2.0 | \n", "11.0 | \n", "1.0 | \n", "
| 2 | \n", "20991 | \n", "93541 | \n", "20 | \n", "0 | \n", "0 | \n", "B | \n", "PERFUMARIA | \n", "5.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "12.0 | \n", "1.0 | \n", "9.0 | \n", "14.0 | \n", "16.0 | \n", "6.0 | \n", "8.0 | \n", "26.0 | \n", "9.0 | \n", "1.0 | \n", "
| 3 | \n", "20992 | \n", "93541 | \n", "178 | \n", "0 | \n", "0 | \n", "E | \n", "PERFUMARIA | \n", "0.0 | \n", "0.0 | \n", "121.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
| 4 | \n", "20995 | \n", "93541 | \n", "67 | \n", "0 | \n", "0 | \n", "B | \n", "PERFUMARIA | \n", "3.0 | \n", "14.0 | \n", "53.0 | \n", "... | \n", "12.0 | \n", "13.0 | \n", "4.0 | \n", "10.0 | \n", "43.0 | \n", "8.0 | \n", "6.0 | \n", "27.0 | \n", "1.0 | \n", "2.0 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 3207 | \n", "20998 | \n", "53094 | \n", "275 | \n", "0 | \n", "0 | \n", "A | \n", "CABELOS | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "190.0 | \n", "208.0 | \n", "48.0 | \n", "47.0 | \n", "179.0 | \n", "31.0 | \n", "44.0 | \n", "18.0 | \n", "180.0 | \n", "69.0 | \n", "
| 3208 | \n", "21278 | \n", "53094 | \n", "38 | \n", "0 | \n", "0 | \n", "A | \n", "CABELOS | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "27.0 | \n", "15.0 | \n", "24.0 | \n", "13.0 | \n", "71.0 | \n", "13.0 | \n", "8.0 | \n", "20.0 | \n", "30.0 | \n", "21.0 | \n", "
| 3209 | \n", "21495 | \n", "53094 | \n", "4 | \n", "0 | \n", "0 | \n", "A | \n", "CABELOS | \n", "2.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "9.0 | \n", "0.0 | \n", "0.0 | \n", "5.0 | \n", "5.0 | \n", "3.0 | \n", "2.0 | \n", "5.0 | \n", "6.0 | \n", "1.0 | \n", "
| 3210 | \n", "22541 | \n", "53094 | \n", "46 | \n", "0 | \n", "0 | \n", "A | \n", "CABELOS | \n", "2.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "9.0 | \n", "6.0 | \n", "4.0 | \n", "10.0 | \n", "24.0 | \n", "42.0 | \n", "4.0 | \n", "3.0 | \n", "9.0 | \n", "8.0 | \n", "
| 3211 | \n", "24255 | \n", "53094 | \n", "4 | \n", "56 | \n", "25 | \n", "E | \n", "CABELOS | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
3212 rows × 66 columns
\n", "