Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

Construindo um dashboard para avaliação de crédito

O ENUNCIADO:
"O objetivo é criar uma interface que permita aos usuários fornecer seus dados pessoais, a fim de receberem uma avaliação sobre a sua elegibilidade para crédito."

A RESOLUÇÃO COM MEU INCREMENTO (pesquisei na página sobre o dash):


from dash import Dash, dcc, html
from dash.dependencies import Input, Output, State
import dash_bootstrap_components as dbc

app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
app.layout = html.Div([
    html.H1('Análise de Elegibilidade de Crédito', className='text-center mb-4'),
    dbc.Container([
        dbc.Row([
            dbc.Col([
                dbc.InputGroup([
                    dbc.InputGroupText('Idade'),
                    dbc.Input(id='idade', type='number', placeholder='Digite sua idade'),
                ], className='mb-3'),
                dbc.InputGroup([
                    dbc.InputGroupText('Tipo de Trabalho'),
                    dbc.Select(id='tipo_trabalho', options=[
                        {'label': 'CLT', 'value': 'clt'},
                        {'label': 'Profissional liberal', 'value': 'profissional_liberal'},
                        {'label': 'Autônomo', 'value': 'autônomo'},
                        {'label': 'Aposentado', 'value': 'aposentado'},
                        {'label': 'Desempregado', 'value': 'desempregado'},
                        {'label': 'Outro', 'value': 'outro'}
                    ]),
                ], className='mb-3'),
                dbc.InputGroup([
                    dbc.InputGroupText('Renda Mensal'),
                    dbc.Input(id='renda_mensal', type='number', placeholder='Digite sua renda mensal'),
                ], className='mb-3'),
                dbc.InputGroup([
                    dbc.InputGroupText('Score de Crédito'),
                    dbc.Input(id='score_credito', type='number', placeholder='Digite seu score de crédito'),
                ], className='mb-3'),
                dbc.InputGroup([
                    dbc.InputGroupText('Número de Dependentes'),
                    dbc.Input(id='num_dependentes', type='number', placeholder='Digite o número de dependentes'),
                ], className='mb-3'),
                dbc.InputGroup([
                    dbc.InputGroupText('Valor do Empréstimo Solicitado'),
                    dbc.Input(id='valor_emprestimo', type='number', placeholder='Digite o valor do empréstimo solicitado'),
                ], className='mb-3'),
                dbc.InputGroup([
                    dbc.Button('Verificar Elegibilidade', id='botao_verificar', color='primary'),
                html.Div(id='resultado_container', className='mt-3')
                ], className='mb-3'),
            ])
        ])
    ])
])

@app.callback(
        Output('resultado_container', 'children'),
        Input('botao_verificar', 'n_clicks'),
        State('idade', 'value'),
        State('tipo_trabalho', 'value'),
        State('renda_mensal', 'value'),
        State('score_credito', 'value'),
        State('num_dependentes', 'value'),
        State('valor_emprestimo', 'value'),
        prevent_initial_call=True
)

def processar_analise(n_clicks, idade, tipo_trabalho, renda_mensal, score_credito, num_dependentes, valor_emprestimo):
    # Proteção para o código não travar caso o usuário clique com campos vazios
    if None in [idade, tipo_trabalho, renda_mensal, score_credito, num_dependentes, valor_emprestimo]:
        return "Por favor, preencha todos os campos."
    # Chama a função que faz os testes matemáticos de elegibilidade
    resultado = verificar_elegibilidade(idade, tipo_trabalho, renda_mensal, score_credito, num_dependentes, valor_emprestimo)
    return resultado

def verificar_elegibilidade(idade, tipo_trabalho, renda_mensal, score_credito, num_dependentes, valor_emprestimo):
    # Lógica de verificação de elegibilidade (exemplo simplificado)
    if idade < 18:
        return "Não elegível: idade mínima não atingida."
    if renda_mensal < 5000:
        return "Não elegível: renda mensal insuficiente."
    if score_credito < 850:
        return "Não elegível: score de crédito baixo."
    if valor_emprestimo > renda_mensal * 10:
        return "Não elegível: valor do empréstimo solicitado muito alto."
    return "Elegível para o empréstimo."

if __name__ == '__main__':
    app.run(debug=True)

OBSERVAÇÃO: Há comandos dados em aula que já foram atualizados na biblioteca, por isso a diferença.

O RETORNO VISUAL:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá, Roberta! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou o Dash para criação de interface com Python, utilizou muito bem o callback para processar os dados e ainda compreendeu a importância da interatividade para análise de elegibilidade de crédito.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Validação: aplicar verificações mais robustas para evitar inconsistências nos dados.
  • Feedback visual: usar componentes do Bootstrap para destacar mensagens de resultado.
  • Escalabilidade: estruturar funções para facilitar futuras regras de negócio mais complexas.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: Roberta, você prefere continuar praticando com interfaces simples para consolidar fundamentos ou acha mais interessante avançar para dashboards completos com múltiplas páginas e gráficos interativos?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Questionamento:
Ah, uma pergunta: Roberta, você prefere continuar praticando com interfaces simples para consolidar fundamentos ou acha mais interessante avançar para dashboards completos com múltiplas páginas e gráficos interativos?

Resposta:
A minha experiência de aprendizagem sempre foi escalonada. Iniciar com atividades simples para fixação conceitual, e seguir aumentando a dificuldade até a complexidade 100%. Saltar de imediato a absorção de conceitos básicos ou intermediários sempre prejudica a compreensão da interatividade deles. Mesmo quando ministrava aulas, aplicava em meus planos de aula esse escalonamento e obtinha um ótimo nivelamento de aprendizagem entre os alunos.

Sugestão:
Há algo que me incomoda nas aulas que poderia ser conjecturado pela Alura. A imagem dos professores fica em cima das telas, e como na maioria das vezes não usam o recurso de Word Wrap, o fluxo da aula acaba prejudicando o acompanhamento sequencial.
Em várias ocasiões precisei voltar o vídeo inúmeras vezes para compreender o que era necessário ser feito, e conseguir acompanhar visualmente o código que havia sido escrito. O uso da barra pelo(s) professor(es) é tão rápido, que me faz entender que às vezes esquecem que para o sucesso da interatividade de uma aula à distância, o seguimento da informação precisa ser completo.
Por exemplo: na primeira aula no VSCode, ouvi o professor dizer "salvei, rodei". A pergunta que me assaltou no momento foi: "ok, salvei, salvei como?" Obviamente que tenho pouca paciência com adultos disfuncionais, e eu mesma fui procurar saber como salvar usando atalhos de teclado naquele ambiente. Mas, se ao menos na primeira vez o professor tivesse dito "salvei (ctrl/s), rodei (botão play)", teria sido suficiente para eu não perder tempo procurando entender como eu precisava fazer aquilo.
Partindo do pressuposto que o público alvo da Alura também conta, em uma boa porcentagem, com pessoas que estão tendo contato a primeira vez (meu caso, por exemplo), a conceituação é uma parte significativamente importante para o sucesso do sentido de satisfação dos alunos com o "estar fazendo o curso", sem contar com a efetividade de aprendizagem em si.