{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4dda0350",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np \n",
    "import glob\n",
    "import os "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4d6a9919",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Caminho onde estão as subpastas com os arquivos CSV\n",
    "\n",
    "# Set the path to the folder containing CSV files\n",
    "folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\EUDORA\\C10\\draft\"  # arquivo dos drafts\n",
    "\n",
    "# Pattern to match all CSV files\n",
    "csv_files = glob.glob(os.path.join(folder_path, '*.csv'))\n",
    "\n",
    "# Read and concat all CSVs\n",
    "df_draft = pd.concat([pd.read_csv(file) for file in csv_files], ignore_index=True)\n",
    "\n",
    "df_draft['match'] = 1 \n",
    "\n",
    "df_draft.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aa56ee52",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "# Caminho onde estão as subpastas com os arquivos CSV\n",
    "pasta_entrada = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\EUDORA\\C10\\estoque\"\n",
    "\n",
    "# Lista todas as subpastas dentro de \"ESTOQUE\"\n",
    "subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]\n",
    "\n",
    "df_list = []\n",
    "\n",
    "# Percorre todas as subpastas\n",
    "for subpasta in subpastas:\n",
    "    arquivos = [f for f in os.listdir(subpasta) if f.endswith(\".csv\")]\n",
    "    nome_pasta = os.path.basename(subpasta)  # Obtém o nome da pasta\n",
    "\n",
    "    for arquivo in arquivos:\n",
    "        caminho_arquivo = os.path.join(subpasta, arquivo)\n",
    "        try:\n",
    "            df = pd.read_csv(caminho_arquivo, encoding=\"utf-8\", low_memory=False)  # Melhor para grandes volumes de dados\n",
    "            df[\"Arquivo_Origem\"] = arquivo  # Adiciona o nome do arquivo de origem\n",
    "            df[\"Pasta_Origem\"] = nome_pasta  # Adiciona o nome da pasta de origem\n",
    "            df_list.append(df)\n",
    "        except Exception as e:\n",
    "            print(f\"Erro ao ler o arquivo {arquivo}: {e}\")\n",
    "\n",
    "if df_list:\n",
    "    df_estoque = pd.concat(df_list, ignore_index=True)\n",
    "\n",
    "df_estoque['PDV'] = df_estoque['PDV'].astype(str)\n",
    "\n",
    "df_estoque['SKU_FINAL'] = np.where(df_estoque['SKU_PARA'] == \"-\", df_estoque['SKU'], df_estoque['SKU_PARA'])\n",
    "\n",
    "df_estoque['SKU_FINAL']=df_estoque['SKU_FINAL'].astype(str)\n",
    "\n",
    "df_estoque = df_estoque[df_estoque['Arquivo_Origem']== \"EUD.csv\"]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "db3b7495",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_bi_vendas = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\EUDORA\\C10\\data (1).xlsx\")\n",
    "\n",
    "df_bi_vendas['Ciclo_ultimos2'] = df_bi_vendas['Ciclo'].str.rsplit('.', n=1).str[-1]\n",
    "\n",
    "df_bi_vendas['Ciclo_ano'] = df_bi_vendas['Ciclo'].str.rsplit('.', n=1).str[0]\n",
    "\n",
    "df_bi_vendas['Ciclo_ano'] = df_bi_vendas['Ciclo_ano'].str.replace(\"C\",\"\")\n",
    "\n",
    "df_bi_vendas['CICLO_FINAL'] = 'C20' + df_bi_vendas['Ciclo_ano'].astype(str) + df_bi_vendas['Ciclo_ultimos2'].astype(str)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dbd61b6a",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_pdv = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BASE DE DADOS LANÇAMENTO\\EUDORA\\PDV\\DB_PDV.xlsx\",sheet_name='Export')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "29504e7c",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_pdv = df_pdv.rename(columns={'DESCRIÇÃO':'DESCRIÇÃO PDV'})\n",
    "\n",
    "df_pdv = df_pdv.drop(columns=['REGIÃO', 'ESTADO','CIDADE','GESTÃO'])\n",
    "\n",
    "df_pdv['PDV'] = df_pdv['PDV DESC'].str.split(\"-\").str[0].str.strip()\n",
    "\n",
    "df_pdv['UF'] = np.where(df_pdv['UF'] == 'VDC','BA',df_pdv['UF'])\n",
    "\n",
    "#ignorando a PDV que ainda não está online\n",
    "df_pdv = df_pdv[df_pdv['DESCRIÇÃO PDV'] != '23813-COMERCIO-HIB VALENTE']\n",
    "df_pdv = df_pdv[df_pdv['STATUS'] == 'ATIVO']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ae39bc1e",
   "metadata": {},
   "outputs": [],
   "source": [
    "calendario = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BASE DE DADOS LANÇAMENTO\\EUDORA\\CALENDARIO_CICLO\\Ciclo_Expandido_com_Datas.xlsx\")\n",
    "\n",
    "calendario['Date'] = pd.to_datetime(calendario['Date'])\n",
    "\n",
    "# Get today (normalized to midnight)\n",
    "today = pd.Timestamp(\"today\").normalize()\n",
    "\n",
    "calendario['NUM_CICLO'] = calendario['Ciclo'].str[-2:].astype(int)\n",
    "\n",
    "calendario['ANO_CICLO'] = calendario['Ciclo'].str[0:5]\n",
    "\n",
    "calendario = calendario[calendario['MARCA'] == \"EUDORA\"]\n",
    "\n",
    "calendario['CICLOMAIS2'] = calendario['ANO_CICLO'].astype(str) + (calendario['NUM_CICLO'].astype(int) + 3).astype(str).str.zfill(2)       #<<< MUDAR O \"4\" (CICLO ATUAL + 4 PARA ACHAR O CICLO DA SUGESTÃO) EX: C202505 -> C202509\n",
    "ciclo_mais2 = calendario[calendario['Date'].dt.normalize() == today]['CICLOMAIS2'].iloc[0]\n",
    "\n",
    "# Filter rows where date matches today\n",
    "filtered_calendario = calendario[calendario['Ciclo'] == ciclo_mais2][:1]\n",
    "\n",
    "filtered_calendario['dias_ate_inicio'] = filtered_calendario['INICIO CICLO'].iloc[0] - today\n",
    "\n",
    "filtered_calendario['dias_ate_inicio'] = filtered_calendario['dias_ate_inicio'].dt.days.astype(int)\n",
    "\n",
    "filtered_calendario['match'] = 1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5ac3914a",
   "metadata": {},
   "outputs": [],
   "source": [
    "#df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\BASE DE DADOS LANÇAMENTO\\EUDORA\\TABELA_PEDIDO\\Pedidos Semanais Especiais - GKD - 202509.xlsx\")\n",
    "\n",
    "#df_tabela = df_tabela[df_tabela['Região'] == 'NNE'] \n",
    "\n",
    "#df_tabela = df_tabela[(df_tabela['Canal'] != 'Ecomm') | (df_tabela['Canal'] != 'Ecomm | VD') | (df_tabela['Canal'] != 'Ecomm | Loja')] #perguntar se isso aqui é vdd\n",
    "\n",
    "#df_tabela['Canal'] = np.where((df_tabela['Canal'] == \"Loja\") | (df_tabela['Canal'] == \"Todos\") | (df_tabela['Canal'] == \"Loja | VD\"),\"TODOS\",\"VD\")\n",
    "\n",
    "#df_tabela = df_tabela[df_tabela['Tipo de promoção'].str.contains('Lançamentos', na=False)]#"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f8ea9d1a",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_tabela = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\EUDORA\\C10\\Tabela-de-Promos_C10-1746728296536.xlsx (1).xlsx\")\n",
    "\n",
    "df_tabela = df_tabela[['Código do Item','Descrição do Item','Chamada Promocional','Valor do Guia','Preço Promocionado','% de Desconto']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1a338b98",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_similares = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\EUDORA\\C10\\PRODUTOS SIMILARES.xlsx\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "39ddc830",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_similares = pd.merge(left=df_similares,right=calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO']], how= 'left', left_on = 'CICLO SIMILAR',right_on = 'Ciclo' )\n",
    "\n",
    "df_similares = df_similares.drop(columns=['INICIO DO CICLO SIMILAR','FIM DO CICLO SIMILAR', 'DURAÇÃO DO CICLO DO SIMILAR','Ciclo','DESCRIÇÃO SIMILAR'])\n",
    "\n",
    "df_similares = df_similares.rename(columns={'INICIO CICLO':'INICIO CICLO SIMILAR','FIM CICLO':'FIM CICLO SIMILAR','DURAÇÃO':'DURAÇÃO CICLO SIMILAR'})\n",
    "df_similares.drop_duplicates(inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c2eb0975",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_draft = df_draft.rename(columns={'Descrição':'DESCRIÇÃO SIMILAR'})\n",
    "\n",
    "df_draft = df_draft.drop(columns=['Categoria','Subcategoria', 'Lançamento', 'Desativação',\n",
    "                                   'Dias sem venda','Projeção Próximo Ciclo', 'Projeção Próximo Ciclo + 1',\n",
    "                                   'Promoção Próximo Ciclo', 'Promoção Próximo Ciclo + 1','Compra inteligente semanal/Sugestão de compra',\n",
    "                                    'Compra inteligente Próximo Ciclo',\n",
    "                                    'Compra inteligente Próximo Ciclo + 1', 'Item Desativado',\n",
    "                                    'Data Prevista Regularização', 'Carteira Bloqueada Para Novos Pedidos',\n",
    "                                    'Planograma', 'Quantidade por caixa', 'Preço Sell In','Item analisado', 'Histórico de Vendas do Ciclo 202505'])\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c6d00ef5",
   "metadata": {},
   "outputs": [],
   "source": [
    "caminho_pasta = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\BD_LANÇAMENTOS\\EUDORA\\C10\\venda_pratico\"\n",
    "\n",
    "# Lista todos os arquivos Excel na pasta\n",
    "arquivos_excel = [\n",
    "    f for f in os.listdir(caminho_pasta)\n",
    "    if f.lower().endswith(('.xlsx', '.xls'))\n",
    "]\n",
    "caminho_arquivo = os.path.join(caminho_pasta, arquivos_excel[0])\n",
    "\n",
    "df_venda_diaria = pd.read_excel(caminho_arquivo)\n",
    "\n",
    "df_venda_diaria.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a82629ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_venda_diaria['PDV'] = df_venda_diaria['Unidade de Negócio'].str.split(\"-\").str[0].str.strip()\n",
    "\n",
    "df_venda_diaria['Dia'] = pd.to_datetime(df_venda_diaria['Dia'], format='%d/%m/%Y')\n",
    "\n",
    "df_venda_diaria = pd.merge(left=df_venda_diaria,right=calendario[['Ciclo','Date']],left_on='Dia',right_on='Date',how='inner')\n",
    "\n",
    "df_venda_diaria = df_venda_diaria.drop(columns='Date')\n",
    "\n",
    "df_venda_diaria.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4cd37229",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_venda_diaria = df_venda_diaria.drop_duplicates()\n",
    "\n",
    "df_venda_diaria.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "15773282",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_venda_agrupado = df_venda_diaria.groupby(['PDV', 'Código do Produto','Ciclo'])['Quantidade'].sum().reset_index()\n",
    "df_venda_agrupado['Quantidade'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "11a29a22",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_pdv['match'] = 1\n",
    "\n",
    "df_similares['match'] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7f9ff38f",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = pd.merge(left=df_similares,right=df_pdv, on='match',how='inner')\n",
    "df_final.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "63c52601",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_draft['PDV'] = df_draft['PDV'].astype(str)\n",
    "df_final = pd.merge(left=df_final,right=df_draft,right_on=['SKU','PDV'],left_on=['PRODUTO SIMILAR','PDV'],how='left')\n",
    "df_final.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6dcc2058",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_similares['MATCH'] = 1 \n",
    "df_pdv['MATCH'] = 1\n",
    "\n",
    "df_temp = pd.merge(right=df_similares[['PRODUTO LANÇAMENTO', 'DESCRIÇÃO DO LANÇAMENTO','MATCH']],left=df_pdv, on= 'MATCH',how='inner')\n",
    "df_temp = df_temp.drop_duplicates()\n",
    "\n",
    "df_temp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "90a54c84",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final['match'] = 1\n",
    "df_final['match'] = df_final['match'].astype(int)\n",
    "df_final = pd.merge(left=df_final, right=filtered_calendario[['Ciclo','INICIO CICLO','FIM CICLO','DURAÇÃO','match','dias_ate_inicio']], right_on='match',left_on='match',how='inner')\n",
    "df_final.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "15b16b69",
   "metadata": {},
   "outputs": [],
   "source": [
    "#df_final['PDV'] = df_final['PDV'].astype(str)\n",
    "\n",
    "#df_final = pd.merge(left=df_final,right=df_pdv[['PDV', 'CANAL', 'DESCRIÇÃO PDV', 'PDV DESC','UF','ANALISTA','SUPERVISOR']],on = 'PDV',how='inner')\n",
    "df_final.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6a453dc4",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_bi_vendas = df_bi_vendas.rename(columns={'Quantidade':'Vendas Ciclo Lançamento'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a2a92cc7",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_bi_vendas['PDV'] = df_bi_vendas['PDV'].astype(str) \n",
    "df_bi_vendas['SKU2'] = df_bi_vendas['SKU2'].astype(str) \n",
    "\n",
    "df_final['PRODUTO SIMILAR'] = df_final['PRODUTO SIMILAR'].astype(str)\n",
    "\n",
    "df_final['SKU'] = df_final['SKU'].astype(str)\n",
    "\n",
    "df_final = pd.merge(left=df_final,right=df_bi_vendas,right_on=['PDV','SKU2','CICLO_FINAL'],left_on=['PDV','PRODUTO SIMILAR','CICLO SIMILAR'],how='left')\n",
    "df_final.shape   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b8cf0aa0",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.drop(columns='Quantidade') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "085cde87",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.drop(columns=['SKU','match',\n",
    "       'Ciclo_y',\n",
    "       'SKU1', 'SKU2', 'Campanha','TOTAL PV',\n",
    "       'Ciclo_ultimos2', 'Ciclo_ano', 'CICLO_FINAL'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "57d4871f",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final['CANAL'] = np.where((df_final['CANAL'] == 'LJ') | (df_final['CANAL'] == 'HIB'), \"TODOS\" , np.where((df_final['CANAL'] == 'CD') | (df_final['CANAL'] == 'VD'), \"VD\", df_final['CANAL']))\n",
    "\n",
    "df_final['CANAL'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e4e5868e",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_tabela['Código do Item'] = df_tabela['Código do Item'].astype(str).str.replace('.0','',regex=False)\n",
    "df_final['PRODUTO LANÇAMENTO'] = df_final['PRODUTO LANÇAMENTO'].astype(str)\n",
    "\n",
    "df_final = pd.merge(left=df_final,right=df_tabela,right_on=['Código do Item'],left_on=['PRODUTO LANÇAMENTO'],how='left')\n",
    "df_final.shape  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d6b65a39",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_estoque = df_estoque.rename(columns={'SKU_FINAL':'SKU_PARA_VALIDACAO'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aaa90522",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = pd.merge( left= df_final, right = df_estoque[['SKU_PARA_VALIDACAO','Arquivo_Origem','PDV']], left_on= ['PRODUTO SIMILAR','PDV'], right_on=['SKU_PARA_VALIDACAO','PDV'], how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "94f1a76f",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.drop(columns=[\n",
    "'SKU_PARA_VALIDACAO'\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "efa6b757",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final['PDV_SKU'] = df_final['PDV'].astype(str) + df_final['PRODUTO SIMILAR'].astype(str) \n",
    "\n",
    "df_final['UFPRODUTO'] = df_final['UF'].astype(str) + df_final['PRODUTO SIMILAR'].astype(str)\n",
    "\n",
    "\n",
    "VENDA_SIMILAR_6_MESES= df_final.columns[22:28]\n",
    "\n",
    "df_final['Pico Vendas Similar Ultimos 6 ciclos'] = df_final[VENDA_SIMILAR_6_MESES].max(axis=1)\n",
    "\n",
    "df_final = df_final.drop_duplicates()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f10b3982",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_venda_agrupado['Código do Produto'] = df_venda_agrupado['Código do Produto'].astype(str)\n",
    "\n",
    "df_final = pd.merge(left=df_final,right=df_venda_agrupado,right_on=['PDV','Código do Produto','Ciclo'],left_on=['PDV','PRODUTO SIMILAR','CICLO SIMILAR'],how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8f96e45b",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.drop(columns=['Ciclo','Código do Produto','Vendas Ciclo Lançamento'])\n",
    "\n",
    "df_final = df_final.rename(columns={'Quantidade':'Vendas Ciclo Lançamento'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "596cd352",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final.columns[24:41]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "41c64323",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Suponha que os meses estão nas colunas 10 a 26 (17 colunas = 17 meses)\n",
    "colunas_mensais = df_final.columns[24:41]\n",
    "\n",
    "# Passo 1: Soma todas as linhas (itens) por mês → resultado: total por mês\n",
    "soma_mensal = df_final[colunas_mensais].sum()\n",
    "\n",
    "# Passo 2: Calcula a variação percentual de um mês para o outro\n",
    "variacao_mensal = soma_mensal.pct_change()\n",
    "\n",
    "# Passo 3: Calcula a média da variação (ignorando o primeiro NaN)\n",
    "media_variacao = variacao_mensal[1:].mean()\n",
    "\n",
    "# Calcula média e desvio padrão\n",
    "media = variacao_mensal.mean()\n",
    "desvio = variacao_mensal.std()\n",
    "\n",
    "# Define limite (ex: 2 desvios padrão)\n",
    "limite_superior = media + 2 * desvio\n",
    "limite_inferior = media - 2 * desvio\n",
    "\n",
    "# Filtra dados dentro do limite\n",
    "filtro = variacao_mensal.between(limite_inferior, limite_superior)\n",
    "df_filtrado = variacao_mensal[filtro]\n",
    "CRESCIMENTO = round(df_filtrado.mean(),4)\n",
    "\n",
    "df_final['CRESCIMENTO'] = CRESCIMENTO\n",
    "\n",
    "CRESCIMENTO\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f32d8326",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final.columns[28:29]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3c027cfc",
   "metadata": {},
   "outputs": [],
   "source": [
    "venda_similar_mesmo_ciclo_ano_passado = df_final.columns[28:29] #<<<<<<< CICLO ATUAL É  [10:11]\n",
    "ciclo_ano_passado = df_final.columns[18:19].str.split(\" \")[0][-1]\n",
    "df_final[ciclo_ano_passado] = df_final[venda_similar_mesmo_ciclo_ano_passado]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "28f74b58",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final['Vendas Ciclo Lançamento'] = df_final['Vendas Ciclo Lançamento'].fillna(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "58642d77",
   "metadata": {},
   "outputs": [],
   "source": [
    "vendas_todos_historicos = df_final.columns[24:40]\n",
    "\n",
    "df_final['MEDIANA DO HISTÓRICO'] = df_final[vendas_todos_historicos].median(axis=1)\n",
    "\n",
    "df_final['MEDIANA DO HISTÓRICO'] = np.where((df_final['MEDIANA DO HISTÓRICO']<1) & (df_final['MEDIANA DO HISTÓRICO'] >0),1,df_final['MEDIANA DO HISTÓRICO'] )#validar se foi\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "69473155",
   "metadata": {},
   "outputs": [],
   "source": [
    "crescimento = df_final['CRESCIMENTO']\n",
    "vendas_lanc = df_final['Vendas Ciclo Lançamento']\n",
    "pico_similar = df_final['Pico Vendas Similar Ultimos 6 ciclos']\n",
    "mediana_hist = df_final['MEDIANA DO HISTÓRICO']\n",
    "\n",
    "# Primeiro cálculo intermediário\n",
    "calc_lanc = crescimento * vendas_lanc + vendas_lanc\n",
    "calc_pico = crescimento * pico_similar + pico_similar\n",
    "\n",
    "df_final['PV GINSENG'] = np.where(\n",
    "    calc_lanc != 0,\n",
    "    round(calc_lanc, 0),\n",
    "    np.where(\n",
    "        mediana_hist > 0,\n",
    "        round(crescimento * mediana_hist + mediana_hist,0),\n",
    "        round(calc_pico/2, 0)\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ea512a48",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final.columns[39]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3cf3efe7",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.rename(columns={df_final.columns[36]: \"C-4\", df_final.columns[37]: \"C-3\",df_final.columns[38]: \"C-2\",df_final.columns[39]: \"C-1\"})\n",
    "\n",
    "df_final.drop(columns=df_final.columns[28:35], inplace=True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2b8b3551",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "marca_promo =  df_estoque['Arquivo_Origem'].iloc[0].replace('.csv','')\n",
    "\n",
    "df_final['INICIO CICLO'] = pd.to_datetime(df_final['INICIO CICLO'], dayfirst=True).dt.strftime('%d/%m/%Y')\n",
    "\n",
    "df_final['FIM CICLO'] = pd.to_datetime(df_final['FIM CICLO'], dayfirst=True).dt.strftime('%d/%m/%Y')\n",
    "\n",
    "df_final['INICIO CICLO SIMILAR'] = pd.to_datetime(df_final['INICIO CICLO SIMILAR'], dayfirst=True).dt.strftime('%d/%m/%Y')\n",
    "\n",
    "df_final['FIM CICLO SIMILAR'] = pd.to_datetime(df_final['FIM CICLO SIMILAR'], dayfirst=True).dt.strftime('%d/%m/%Y')\n",
    "\n",
    "\n",
    "\n",
    "df_final = df_final.rename(columns={'Ciclo_x': 'Ciclo'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "93b589d9",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "43f96709",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.drop(columns=['CRESCIMENTO','dias_ate_inicio','UFPRODUTO','Arquivo_Origem','UFPRODUTO','Código do Item','PDV_SKU',\n",
    "                                  'FIM DO CICLO','INICIO DO CICLO','DURAÇÃO CICLO'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "edd78734",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = pd.merge(left=df_final,right=df_pdv[['PDV','CANAL','UF']],how='inner',on='PDV')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7ac9e24c",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9c4cbae7",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.drop(columns=['CANAL_x'])\n",
    "\n",
    "df_final = df_final.rename(columns={'CANAL_y':'CANAL', 'UF_y':'UF'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7d904672",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Columns to bring up front\n",
    "priority_cols = [\n",
    "    'Ciclo','INICIO CICLO','FIM CICLO','ANALISTA','SUPERVISOR','UF','CANAL','PDV', 'DESCRIÇÃO PDV','DURAÇÃO',\t\n",
    "    'PRODUTO LANÇAMENTO','DESCRIÇÃO DO LANÇAMENTO',\n",
    "    'PRODUTO SIMILAR','DESCRIÇÃO SIMILAR','CICLO SIMILAR','INICIO CICLO SIMILAR','FIM CICLO SIMILAR','Estoque Atual',\n",
    "    'Estoque em Transito',\t'Pedido Pendente',\n",
    "\t'C-4',\t'C-3',\t'C-2',\t'C-1'\n",
    "]\n",
    "\n",
    "# All remaining columns\n",
    "other_cols = [col for col in df_final.columns if col not in priority_cols]\n",
    "\n",
    "# Reorder\n",
    "df_final = df_final[priority_cols + other_cols]\n",
    "\n",
    "df_final['SUGESTÃO ABTASTECIMENTO'] = ''\n",
    "\n",
    "df_final['VENDAS R$ ABASTECIMENTO'] = ''\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9d817ecd",
   "metadata": {},
   "outputs": [],
   "source": [
    "colunas_usadas = ['PDV', 'PRODUTO LANÇAMENTO', '% de Desconto', 'Chamada Promocional']\n",
    "df_temp = df_final[[col for col in colunas_usadas if col in df_final.columns]].copy()\n",
    "\n",
    "# Agrupa por PDV e PRODUTO LANÇAMENTO\n",
    "agrupado = df_temp.groupby(['PDV', 'PRODUTO LANÇAMENTO'], dropna=False).agg({\n",
    "    '% de Desconto': lambda x: list(pd.unique(x.dropna())),\n",
    "    'Chamada Promocional': lambda x: list(pd.unique(x.dropna())),\n",
    "}).reset_index()\n",
    "\n",
    "# Expande para colunas fixas com nomes novos e valores em branco se vazio\n",
    "for i in range(4):\n",
    "    agrupado[f'% de desconto_{i+1}'] = agrupado['% de Desconto'].apply(lambda x: x[i] if len(x) > i else '')\n",
    "    agrupado[f'Mecanica de desconto_{i+1}'] = agrupado['Chamada Promocional'].apply(lambda x: x[i] if len(x) > i else '')\n",
    "\n",
    "# Remove as colunas de lista original\n",
    "agrupado = agrupado.drop(columns=['% de Desconto', 'Chamada Promocional'])\n",
    "\n",
    "# Junta ao df_final\n",
    "colunas_merge = ['PDV', 'PRODUTO LANÇAMENTO']\n",
    "df_final = df_final.merge(agrupado, on=colunas_merge, how='left')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "446d0d5b",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.drop(columns=['Chamada Promocional','Preço Promocionado','% de Desconto','Descrição do Item','TIPO PRODUTO'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "922d2af3",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final = df_final.drop_duplicates()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "92d051d8",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_final.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "08faefd9",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "from openpyxl import load_workbook\n",
    "from openpyxl.styles import PatternFill, Font\n",
    "\n",
    "\n",
    "# Export to Excel\n",
    "output_file = f'C:\\\\Users\\\\joao.herculano\\\\Documents\\\\Lançamento_{marca_promo}_{ciclo_mais2}COMPLEMENTO.xlsx'\n",
    "with pd.ExcelWriter(output_file, engine='openpyxl') as writer:\n",
    "    df_final.to_excel(writer, index=False, sheet_name='Sheet1')\n",
    "\n",
    "# Apply styles\n",
    "wb = load_workbook(output_file)\n",
    "ws = wb['Sheet1']\n",
    "\n",
    "# Style header\n",
    "header_fill = PatternFill(start_color='ADD8E6', end_color='ADD8E6', fill_type='solid')  # Light Blue\n",
    "header_font = Font(color='FFFFFF', bold=True)  # White & Bold\n",
    "\n",
    "for cell in ws[1]:\n",
    "    cell.fill = header_fill\n",
    "    cell.font = header_font\n",
    "\n",
    "# Style rows: gray/white alternating\n",
    "gray_fill = PatternFill(start_color='DDDDDD', end_color='DDDDDD', fill_type='solid')  # Light gray\n",
    "\n",
    "for i, row in enumerate(ws.iter_rows(min_row=2, max_row=ws.max_row), start=2):\n",
    "    if i % 2 == 0:\n",
    "        for cell in row:\n",
    "            cell.fill = gray_fill\n",
    "\n",
    "# Save styled workbook\n",
    "wb.save(output_file)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
