Oii Isabelle,
Parabéns pela resolução do desafio. A sua abordagem utilizando os métodos .isPositive() e .isNegative() da classe Duration foi excelente.
Essa escolha deixou o seu código muito mais legível e semântico do que fazer comparações manuais (como if (horas > 0)). Isso demonstra que você explorou bem a documentação da API de Data e Hora do Java.
Tenho apenas um ponto de atenção para que seu código fique perfeito e execute sem problemas:
Formatação de minutos negativos
Quando a duração é negativa (banco de horas negativo), o método .toMinutesPart() também retorna o valor com sinal negativo. Isso pode gerar uma saída visualmente estranha, como: Saldo de horas: -1h -30min.
Pra corrigir isso e deixar o visual mais limpo (apenas com um sinal de menos no início ou na hora), você pode usar a classe Math.abs() para remover o sinal da parte dos minutos.
Veja como ficaria esse ajuste no seu else if:
} else if (horaExtra.isNegative()) {
// Math.abs garante que os minutos apareçam sem o sinal negativo repetido
System.out.println("Saldo de horas: " + horaExtra.toHours() + "h " + Math.abs(horaExtra.toMinutesPart()) + "min");
}
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!