class MovimientosComprobantes {
  MovimientosComprobantes({
    this.result,
    this.response,
    this.message,
  });

  Result? result;
  bool? response;
  String? message;

  factory MovimientosComprobantes.fromJson(Map<String, dynamic> json) => MovimientosComprobantes(
    result: Result.fromJson(json["result"]),
    response: json["response"],
    message: json["message"],
  );

  Map<String, dynamic> toJson() => {
    "result": result?.toJson(),
    "response": response,
    "message": message,
  };
}

class Result {
  Result({
    this.datosGenerales,
    this.registros,
  });

  DatosGenerales? datosGenerales;
  List<Registro>? registros;

  factory Result.fromJson(Map<String, dynamic> json) => Result(
    datosGenerales: DatosGenerales.fromJson(json["datosGenerales"]),
    registros: List<Registro>.from(json["registros"].map((x) => Registro.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "datosGenerales": datosGenerales?.toJson(),
    "registros": List<dynamic>.from(registros!.map((x) => x.toJson())),
  };
}

class DatosGenerales {
  DatosGenerales({
    this.factura,
    this.notadecredito,
    this.notadecargo,
    this.pago,
  });

  Factura? factura;
  Factura? notadecredito;
  Factura? notadecargo;
  Factura? pago;

  factory DatosGenerales.fromJson(Map<String, dynamic> json) => DatosGenerales(
    factura: Factura.fromJson(json["FACTURA"]),
    notadecredito: Factura.fromJson(json["NOTADECREDITO"]),
    notadecargo: Factura.fromJson(json["NOTADECARGO"]),
    pago: Factura.fromJson(json["PAGO"]),
  );

  Map<String, dynamic> toJson() => {
    "FACTURA": factura?.toJson(),
    "NOTADECREDITO": notadecredito?.toJson(),
    "NOTADECARGO": notadecargo?.toJson(),
    "PAGO": pago?.toJson(),
  };
}

class Factura {
  Factura({
    this.total,
  });

  int? total;

  factory Factura.fromJson(Map<String, dynamic> json) => Factura(
    total: json["total"],
  );

  Map<String, dynamic> toJson() => {
    "total": total,
  };
}

class Registro {
  Registro({
    this.folio,
    this.fechaEmision,
    this.pedido,
    this.total,
    this.moneda,
    this.acciones,
    this.tipocomprobante,
  });

  String? folio;
  String? fechaEmision;
  String? pedido;
  String? total;
  String? moneda;
  String? acciones;
  Tipocomprobante? tipocomprobante;

  factory Registro.fromJson(Map<String, dynamic> json) => Registro(
    folio: json["FOLIO"],
    fechaEmision: json["FECHA_EMISION"],
    pedido: json["PEDIDO"],
    total: json["TOTAL"],
    moneda: json["MONEDA"],
    acciones: json["ACCIONES"],
    tipocomprobante: tipocomprobanteValues.map![json["TIPOCOMPROBANTE"]],
  );

  Map<String, dynamic> toJson() => {
    "FOLIO": folio,
    "FECHA_EMISION": fechaEmision,
    "PEDIDO": pedido,
    "TOTAL": total,
    "MONEDA": moneda,
    "ACCIONES": acciones,
    "TIPOCOMPROBANTE": tipocomprobanteValues.reverse![tipocomprobante],
  };
}

enum Tipocomprobante { FACTURA, NOTADECREDITO, PAGO, NOTADECARGO }

final tipocomprobanteValues = EnumValues({
  "FACTURA": Tipocomprobante.FACTURA,
  "NOTADECARGO": Tipocomprobante.NOTADECARGO,
  "NOTADECREDITO": Tipocomprobante.NOTADECREDITO,
  "PAGO": Tipocomprobante.PAGO
});

class EnumValues<T> {
  Map<String, T>? map;
  Map<T, String>? reverseMap;

  EnumValues(this.map);

  Map<T, String>? get reverse {
    reverseMap ??= map!.map((k, v) => new MapEntry(v, k));
    return reverseMap;
  }
}