import pandas as pd
from datetime import datetime
import dash
from dash import dcc, html, dash_table
import plotly.graph_objects as go
# Dados
data = {
'NF': ['17535', '17536'],
'Qtd Unidades': [308, 1282],
'Início Sistêmico': [datetime(2024, 6, 24, 10, 15), datetime(2024, 6, 24, 8, 0)],
'Final Sistêmico': [datetime(2024, 6, 24, 12, 15), datetime(2024, 6, 24, 10, 13)],
'Início Adequação': [datetime(2024, 6, 24, 13, 15), datetime(2024, 6, 24, 11, 37)],
'Final Adequação': [datetime(2024, 6, 24, 18, 50), datetime(2024, 6, 24, 17, 2)],
'Início Amostragem': [datetime(2024, 6, 25, 8, 0), datetime(2024, 6, 24, 17, 3)],
'Final Amostragem': [datetime(2024, 6, 25, 9, 6), datetime(2024, 6, 24, 17, 56)],
}
df = pd.DataFrame(data)
# Cálculos
df['Tempo Total Processo'] = df['Final Amostragem'] - df['Início Sistêmico']
df['Tempo Adequação'] = df['Final Adequação'] - df['Início Adequação']
df['Tempo Amostragem'] = df['Final Amostragem'] - df['Início Amostragem']
df['Produtividade por Pessoa'] = df['Qtd Unidades'] / 3
df['Tempo Total (h)'] = df['Tempo Total Processo'].dt.total_seconds() / 3600
df['Adequação (h)'] = df['Tempo Adequação'].dt.total_seconds() / 3600
df['Amostragem (h)'] = df['Tempo Amostragem'].dt.total_seconds() / 3600
# App
app = dash.Dash(__name__)
app.title = "Dashboard de NFs"
app.layout = html.Div([
html.H1("Dashboard de Indicadores de NFs", style={"textAlign": "center"}),
dcc.Graph(
figure=go.Figure(data=[
go.Bar(name='Tempo Total (h)', x=df['NF'], y=df['Tempo Total (h)'], marker_color='blue'),
go.Bar(name='Adequação (h)', x=df['NF'], y=df['Adequação (h)'], marker_color='orange'),
go.Bar(name='Amostragem (h)', x=df['NF'], y=df['Amostragem (h)'], marker_color='green')
]).update_layout(
barmode='group',
title='Comparativo de Tempos por NF',
xaxis_title='NF',
yaxis_title='Tempo (horas)',
legend_title='Fase'
)
),
html.H2("Tabela de Dados"),
dash_table.DataTable(
data=df[['NF', 'Qtd Unidades', 'Tempo Total (h)', 'Adequação (h)', 'Amostragem (h)', 'Produtividade por Pessoa']].round(2).to_dict('records'),
columns=[{"name": i, "id": i} for i in ['NF', 'Qtd Unidades', 'Tempo Total (h)', 'Adequação (h)', 'Amostragem (h)', 'Produtividade por Pessoa']],
style_table={'overflowX': 'auto'},
style_cell={'textAlign': 'center'},
style_header={'fontWeight': 'bold'},
)
])
if __name__ == '__main__':
app.run_server(debug=True)