validarDataConsolidacao static method

String? validarDataConsolidacao(
  1. String? dataConsolidacao
)

Valida data de consolidação no formato AAAAMMDD

Retorna null se válido, ou uma mensagem de erro se inválido

Implementation

static String? validarDataConsolidacao(String? dataConsolidacao) {
  if (dataConsolidacao == null || dataConsolidacao.isEmpty) {
    return 'Data de consolidação é obrigatória';
  }

  // Verifica se tem exatamente 8 caracteres
  if (dataConsolidacao.length != 8) {
    return 'Data de consolidação deve ter formato AAAAMMDD';
  }

  // Verifica se são apenas números
  if (!RegExp(r'^\d{8}$').hasMatch(dataConsolidacao)) {
    return 'Data de consolidação deve conter apenas números no formato AAAAMMDD';
  }

  // Verifica se é uma data válida
  final ano = int.parse(dataConsolidacao.substring(0, 4));
  final mes = int.parse(dataConsolidacao.substring(4, 6));
  final dia = int.parse(dataConsolidacao.substring(6, 8));

  if (ano < 1900 || ano > 2099) {
    return 'Ano da data deve estar entre 1900 e 2099';
  }

  if (mes < 1 || mes > 12) {
    return 'Mês da data deve estar entre 01 e 12';
  }

  if (dia < 1 || dia > 31) {
    return 'Dia da data deve estar entre 01 e 31';
  }

  // Tenta criar um DateTime para validar se a data é válida
  try {
    DateTime(ano, mes, dia);
  } catch (e) {
    return 'Data inválida: $dataConsolidacao';
  }

  // Verifica se não é data futura
  final data = DateTime(ano, mes, dia);
  final agora = DateTime.now();
  if (data.isAfter(agora)) {
    printW('Aviso: Data de consolidação é futura ($dataConsolidacao)');
  }

  // Verifica se não é muito antiga
  final limiteAntigo = DateTime(2010, 1, 1);
  if (data.isBefore(limiteAntigo)) {
    printW('Aviso: Data de consolidação é muito antiga ($dataConsolidacao)');
  }

  return null;
}