Oi, Gerson! Como vai?
Agradeço por compartilhar seu código com a comunidade Alura.
Gostei da forma como você expandiu a proposta original, separando bem as responsabilidades entre Paciente, HistoricoMedico, Consulta e Medico. O uso de internal em HistoricoMedico mantém o controle de acesso dentro do projeto, alinhado com a ideia de proteger dados sensíveis.
Também foi interessante ver o filtro no método ExibirHistorico, utilizando StringComparison.OrdinalIgnoreCase, o que deixa a busca mais robusta. Como ponto de atenção, o HistoricoMedico poderia ter uma propriedade interna como CodigoProntuario para ficar ainda mais próximo do enunciado da atividade e reforçar o conceito de encapsulamento no nível da classe.
Uma dica interessante para o futuro é expor coleções apenas para leitura, evitando modificações externas. Veja este exemplo:
private List<Consulta> consultas = new();
public IReadOnlyList<Consulta> Consultas => consultas.AsReadOnly();
Esse código usa AsReadOnly() para permitir leitura da lista sem permitir alterações externas, reforçando o encapsulamento.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!