/// <summary>
        /// Realiza carga en tablas temporales del contenido del archivo Excel
        /// </summary>
        /// <param name="IdTipoPrestacion">Id. de tipo de prestación</param>
        /// <param name="NombreArchivo">Nombre del archivo adjunto</param>
        /// <param name="ContenidoArchivo">Contenido binario del archivo adjunto</param>
        /// <returns>Retorna Id. de encabezado de carga de prestaciones</returns>
        public int UploadArchivoPrestaciones(int IdTipoPrestacion, string NombreArchivo, byte[] ContenidoArchivo)
        {
            Init();
            try
            {
                using (LQCEEntities context = new LQCEEntities())
                {
                    if (string.IsNullOrEmpty(NombreArchivo))
                        throw new Exception("No se ha señalado nombre de archivo Excel");
                    if (ContenidoArchivo == null)
                        throw new Exception("No se ha incluido contenido del archivo Excel");

                    RepositorioTIPO_PRESTACION _RepositorioTIPO_PRESTACION = new RepositorioTIPO_PRESTACION(context);
                    RepositorioCARGA_PRESTACIONES_ESTADO _RepositorioCARGA_PRESTACIONES_ESTADO = new RepositorioCARGA_PRESTACIONES_ESTADO(context);
                    RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO _RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO = new RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO(context);

                    var objTipoPrestacion = _RepositorioTIPO_PRESTACION.GetById(IdTipoPrestacion);
                    if (objTipoPrestacion == null)
                        throw new Exception("No se ha encontrado información del Tipo de Prestación");

                    var objEstado = _RepositorioCARGA_PRESTACIONES_ESTADO.GetById((int)ENUM_CARGA_PRESTACIONES_ESTADO.Pendiente);
                    if (objEstado == null)
                        throw new Exception("No se ha encontrado información del Estado de Carga de Prestaciones");

                    var objEstadoDetalle = _RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO.GetById((int)ENUM_CARGA_PRESTACIONES_DETALLE_ESTADO.Pendiente);
                    if (objEstadoDetalle == null)
                        throw new Exception("No se ha encontrado información del Estado de Detalle de Carga de Prestaciones");

                    string archivo = DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + NombreArchivo;
                    File.WriteAllBytes(Properties.Settings.Default.DIR_CARGA_EXCEL + archivo, ContenidoArchivo);

                    var datos = ISExcel.ReadExcelFile(Properties.Settings.Default.DIR_CARGA_EXCEL + archivo, true);
                    if (datos == null)
                        throw new Exception("No se ha leido información en la planilla Excel");

                    CARGA_PRESTACIONES_ENCABEZADO objEncabezado = new CARGA_PRESTACIONES_ENCABEZADO();
                    objEncabezado.FECHA_CARGA = DateTime.Now;
                    objEncabezado.TIPO_PRESTACION = objTipoPrestacion;
                    objEncabezado.CARGA_PRESTACIONES_ESTADO = objEstado;
                    objEncabezado.ARCHIVO = archivo;
                    objEncabezado.ACTIVO = true;
                    context.AddToCARGA_PRESTACIONES_ENCABEZADO(objEncabezado);

                    if (IdTipoPrestacion == (int)ENUM_TIPO_PRESTACION.Humanas)
                    {
                        foreach (DataRow item in datos.Rows)
                        {
                            bool TieneDatos = false;
                            foreach (var col in item.ItemArray)
                            {
                                if (!string.IsNullOrEmpty(col.ToString()))
                                    TieneDatos = true;
                            }
                            if (TieneDatos)
                            {
                                // Convertir fecha formato dd.mm.aa
                                DateTime? pasoFR = null;
                                if (!string.IsNullOrEmpty(item["FECHA RECEPCION"].ToString()))
                                {
                                    string[] arrFechaRecepcion = item["FECHA RECEPCION"].ToString().Split('.');
                                    if (arrFechaRecepcion.Count() == 3)
                                    {
                                        int? dias = ISConvert.ToNullableInteger(arrFechaRecepcion[0]);
                                        int? mes = ISConvert.ToNullableInteger(arrFechaRecepcion[1]);
                                        int? año = ISConvert.ToNullableInteger(arrFechaRecepcion[2]);
                                        if (dias.HasValue && mes.HasValue && año.HasValue)
                                        {
                                            if (año < 100)
                                            {
                                                año = año + 2000;
                                            }
                                            string fr = dias.Value.ToString() + "-"
                                                + mes.Value.ToString() + "-"
                                                + año.Value.ToString();
                                            pasoFR = ISConvert.ToNullableDateTime(fr);
                                        }
                                    }
                                }

                                CARGA_PRESTACIONES_HUMANAS_DETALLE objDetalle = new CARGA_PRESTACIONES_HUMANAS_DETALLE();
                                objDetalle.CARGA_PRESTACIONES_ENCABEZADO = objEncabezado;
                                objDetalle.NOMBRE = item["NOMBRE"].ToString();
                                objDetalle.FICHA = item["FICHA"].ToString();
                                if (pasoFR.HasValue)
                                {
                                    objDetalle.FECHA_RECEPCION = pasoFR.Value.ToString("dd-MM-yyyy") + " " + item["HORA RECEPCION"].ToString();
                                }
                                else
                                {
                                    objDetalle.FECHA_RECEPCION = item["FECHA RECEPCION"].ToString() + "." + item["HORA RECEPCION"].ToString();
                                }
                                objDetalle.TELEFONO = item["TELEFONO"].ToString();
                                objDetalle.MEDICO = item["MEDICO"].ToString();
                                objDetalle.PROCEDENCIA = item["PROCEDENCIA"].ToString();
                                objDetalle.PREVISION = item["PREVISION"].ToString();
                                objDetalle.GARANTIA = item["GARANTIA"].ToString();
                                objDetalle.PENDIENTE = item["PENDIENTE"].ToString();
                                objDetalle.PAGADO = item["PAGADO"].ToString();
                                objDetalle.TOTAL = item["TOTAL"].ToString();
                                objDetalle.RECEPCION = item["RECEPCION"].ToString();
                                objDetalle.EDAD = item["EDAD"].ToString();
                                objDetalle.RUT = item["RUT"].ToString();

                                objDetalle.ACTIVO = true;
                                objDetalle.CARGA_PRESTACIONES_DETALLE_ESTADO = objEstadoDetalle;
                                objDetalle.MENSAJE_ERROR = "";
                                objDetalle.FECHA_ACTUALIZACION = DateTime.Now;
                                objDetalle.CLIENTE = null;
                                objDetalle.VALOR_FICHA = null;
                                objDetalle.VALOR_FECHA_MUESTRA = null;
                                objDetalle.VALOR_FECHA_RECEPCION = null;
                                objDetalle.PREVISION1 = null;
                                objDetalle.GARANTIA1 = null;
                                objDetalle.VALOR_FECHA_ENTREGA_RESULTADOS = null;

                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 1", "VALOR 1");
                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 2", "VALOR 2");
                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 3", "VALOR 3");
                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 4", "VALOR 4");
                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 5", "VALOR 5");
                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 6", "VALOR 6");
                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 7", "VALOR 7");
                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 8", "VALOR 8");
                                AgregarExamenHumano(context, objDetalle, item, "EXAMEN 9", "VALOR 9");

                                ValidarPrestacionHumana(context, objDetalle);

                                context.AddToCARGA_PRESTACIONES_HUMANAS_DETALLE(objDetalle);
                            }
                        }
                    }
                    else if (IdTipoPrestacion == (int)ENUM_TIPO_PRESTACION.Veterinarias)
                    {
                        foreach (DataRow item in datos.Rows)
                        {
                            // Convertir fecha formato dd.mm.aa
                            DateTime? pasoFR = null;
                            if (!string.IsNullOrEmpty(item["FECHA RECEPCION"].ToString()))
                            {
                                string[] arrFechaRecepcion = item["FECHA RECEPCION"].ToString().Split('.');
                                if (arrFechaRecepcion.Count() == 3)
                                {
                                    int? dias = ISConvert.ToNullableInteger(arrFechaRecepcion[0]);
                                    int? mes = ISConvert.ToNullableInteger(arrFechaRecepcion[1]);
                                    int? año = ISConvert.ToNullableInteger(arrFechaRecepcion[2]);
                                    if (dias.HasValue && mes.HasValue && año.HasValue)
                                    {
                                        if (año < 100)
                                        {
                                            año = año + 2000;
                                        }
                                        string fr = dias.Value.ToString() + "-"
                                            + mes.Value.ToString() + "-"
                                            + año.Value.ToString();
                                        pasoFR = ISConvert.ToNullableDateTime(fr);
                                    }
                                }
                            }

                            CARGA_PRESTACIONES_VETERINARIAS_DETALLE objDetalle = new CARGA_PRESTACIONES_VETERINARIAS_DETALLE();
                            objDetalle.CARGA_PRESTACIONES_ENCABEZADO = objEncabezado;
                            objDetalle.FICHA = item["INGRESO"].ToString();
                            objDetalle.NOMBRE = item["NOMBRE"].ToString();
                            objDetalle.ESPECIE = item["ESPECIE"].ToString();
                            objDetalle.RAZA = item["RAZA"].ToString();
                            objDetalle.SEXO = item["SEXO"].ToString();
                            objDetalle.EDAD = item["EDAD"].ToString();
                            objDetalle.TELEFONO = item["TELEFONO"].ToString();
                            objDetalle.PROCEDENCIA = item["PROCEDENCIA"].ToString();
                            objDetalle.GARANTIA = item["GARANTIA"].ToString();
                            objDetalle.PENDIENTE = item["PENDIENTE"].ToString();
                            objDetalle.TOTAL = item["TOTAL"].ToString();
                            objDetalle.RECEPCION = item["RECEPCION"].ToString();
                            objDetalle.MEDICO = item["MEDICO"].ToString();
                            objDetalle.SOLICITA = item["SOLICITANTE"].ToString();
                            if (pasoFR.HasValue)
                            {
                                objDetalle.FECHA_RECEPCION = pasoFR.Value.ToString("dd-MM-yyyy") + " " + item["HORA RECEPCION"].ToString();
                            }
                            else
                            {
                                objDetalle.FECHA_RECEPCION = item["FECHA RECEPCION"].ToString() + "." + item["HORA RECEPCION"].ToString();
                            }
                            objDetalle.FICHA_CLINICA = item["FICHA"].ToString();
                            //objDetalle.FECHA_MUESTRA = item["FECHA MUESTRA"].ToString();
                            //objDetalle.FECHA_RESULTADOS = item["FECHA RESULTADOS"].ToString();
                            //objDetalle.PAGADO = item["PAGADO"].ToString();
                            objDetalle.ACTIVO = true;
                            objDetalle.CARGA_PRESTACIONES_DETALLE_ESTADO = objEstadoDetalle;
                            objDetalle.MENSAJE_ERROR = "";
                            objDetalle.FECHA_ACTUALIZACION = DateTime.Now;
                            objDetalle.VALOR_FICHA = null;
                            objDetalle.CLIENTE = null;
                            //objDetalle.VALOR_FECHA_MUESTRA = null;
                            objDetalle.VALOR_FECHA_RECEPCION = null;
                            objDetalle.PREVISION = null;
                            objDetalle.GARANTIA1 = null;
                            //objDetalle.VALOR_FECHA_ENTREGA_RESULTADOS = null;
                            objDetalle.ESPECIE1 = null;
                            objDetalle.RAZA1 = null;

                            AgregarExamenVeterinario(context, objDetalle, item, "EXAMEN 1", "VALOR 1");
                            AgregarExamenVeterinario(context, objDetalle, item, "EXAMEN 2", "VALOR 2");
                            AgregarExamenVeterinario(context, objDetalle, item, "EXAMEN 3", "VALOR 3");
                            AgregarExamenVeterinario(context, objDetalle, item, "EXAMEN 4", "VALOR 4");
                            AgregarExamenVeterinario(context, objDetalle, item, "EXAMEN 5", "VALOR 5");

                           ValidarPrestacionVeterinaria(context, objDetalle);

                            context.AddToCARGA_PRESTACIONES_VETERINARIAS_DETALLE(objDetalle);

                        }
                    }
                    else
                    {
                        throw new Exception("Tipo de prestación no válido");
                    }

                    context.SaveChanges();

                    return objEncabezado.ID;
                }
            }
            catch (Exception ex)
            {
                ISException.RegisterExcepcion(ex);
                Error = ex.Message;
                throw ex;
            }
        }
 private void AgregarExamenVeterinario(LQCEEntities context, CARGA_PRESTACIONES_VETERINARIAS_DETALLE objDetalle, DataRow item, string ColumnaExamen, string ColumnaValor)
 {
     if (!string.IsNullOrEmpty(item[ColumnaExamen].ToString()) || !string.IsNullOrEmpty(item[ColumnaValor].ToString()))
     {
         CARGA_PRESTACIONES_VETERINARIAS_EXAMEN objExamen = new CARGA_PRESTACIONES_VETERINARIAS_EXAMEN();
         objExamen.CARGA_PRESTACIONES_VETERINARIAS_DETALLE = objDetalle;
         objExamen.NOMBRE_EXAMEN = item[ColumnaExamen].ToString();
         objExamen.VALOR_EXAMEN = item[ColumnaValor].ToString();
         objExamen.ACTIVO = true;
         objExamen.FECHA_ACTUALIZACION = DateTime.Now;
         objExamen.EXAMEN = null;
         context.AddToCARGA_PRESTACIONES_VETERINARIAS_EXAMEN(objExamen);
     }
 }
        private List<string> ValidarPrestacionVeterinaria(LQCEEntities context, CARGA_PRESTACIONES_VETERINARIAS_DETALLE objDetalle)
        {
            RepositorioPRESTACION_VETERINARIA _RepositorioPRESTACION_VETERINARIA = new RepositorioPRESTACION_VETERINARIA(context);
            RepositorioCLIENTE _RepositorioCLIENTE = new RepositorioCLIENTE(context);
            RepositorioCLIENTE_SINONIMO _RepositorioCLIENTE_SINONIMO = new RepositorioCLIENTE_SINONIMO(context);
            RepositorioPREVISION _RepositorioPREVISION = new RepositorioPREVISION(context);
            RepositorioGARANTIA _RepositorioGARANTIA = new RepositorioGARANTIA(context);
            RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO _RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO = new RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO(context);
            RepositorioEXAMEN _RepositorioEXAMEN = new RepositorioEXAMEN(context);
            RepositorioEXAMEN_SINONIMO _RepositorioEXAMEN_SINONIMO = new RepositorioEXAMEN_SINONIMO(context);
            RepositorioESPECIE _RepositorioESPECIE = new RepositorioESPECIE(context);
            RepositorioRAZA _RepositorioRAZA = new RepositorioRAZA(context);

            var EstadoConError = _RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO.GetById((int)ENUM_CARGA_PRESTACIONES_DETALLE_ESTADO.ConError);
            if (EstadoConError == null)
                throw new Exception("No se encuentra registro de error en la tabla Estado de Detalle Carga Prestaciones");

            var EstadoValidado = _RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO.GetById((int)ENUM_CARGA_PRESTACIONES_DETALLE_ESTADO.Validado);
            if (EstadoValidado == null)
                throw new Exception("No se encuentra registro de error en la tabla Estado de Detalle Carga Prestaciones");

            List<string> ListaValidaciones = new List<string>();

            // Ingreso
            if (string.IsNullOrEmpty(objDetalle.FICHA))
            {
                ListaValidaciones.Add("No se ha señalado numero de ingreso");
            }
            else
            {
                int? _ficha = ISConvert.ToNullableInteger(objDetalle.FICHA);
                if (!_ficha.HasValue)
                {
                    ListaValidaciones.Add("INGRESO debe ser numérico");
                }
                else
                {
                    objDetalle.VALOR_FICHA = _ficha.Value;

                    var objPrestacionVeterinaria = _RepositorioPRESTACION_VETERINARIA.GetById(_ficha.Value);
                    if (objPrestacionVeterinaria != null)
                        ListaValidaciones.Add("Ya existe una prestación en el sistema con el mismo número de ingreso");
                }
            }

            // Nombre
            if (string.IsNullOrEmpty(objDetalle.NOMBRE))
            {
                ListaValidaciones.Add("No se ha señalado nombre del paciente");
            }

            // Especie
            if (string.IsNullOrEmpty(objDetalle.ESPECIE))
            {
                ListaValidaciones.Add("No se ha señalado ESPECIE en la ficha");
            }
            else
            {
                var objEspecie = _RepositorioESPECIE.GetByFilter(objDetalle.ESPECIE).FirstOrDefault();
                if (objEspecie != null)
                {
                    objDetalle.ESPECIE1 = objEspecie;

                    // Raza
                    if (string.IsNullOrEmpty(objDetalle.RAZA))
                    {
                        //ListaValidaciones.Add("No se ha señalado RAZA en la ficha");
                    }
                    else
                    {
                        var objRaza = _RepositorioRAZA.GetByFilter(objEspecie.ID, objDetalle.RAZA).FirstOrDefault();
                        if (objRaza != null)
                        {
                            objDetalle.RAZA1 = objRaza;
                        }
                        else
                        {
                            ListaValidaciones.Add("No se ha podido identificar la RAZA en la ficha");
                        }
                    }
                }
                else
                {
                    ListaValidaciones.Add("No se ha podido identificar la ESPECIE en la ficha");
                }
            }

            // Procedencia
            ////if (string.IsNullOrEmpty(objDetalle.PROCEDENCIA))
            ////{
            ////    ListaValidaciones.Add("No se ha señalado PROCEDENCIA en la ficha");
            ////}

            // Garantia
            if (string.IsNullOrEmpty(objDetalle.GARANTIA))
            {
                //ListaValidaciones.Add("No se ha señalado GARANTIA en la ficha");
            }
            else
            {
                var objGarantia = _RepositorioGARANTIA.GetByFilter(objDetalle.GARANTIA).FirstOrDefault();
                if (objGarantia != null)
                {
                    objDetalle.GARANTIA1 = objGarantia;
                }
                else
                {
                    ListaValidaciones.Add("No se ha podido identificar la GARANTIA en la ficha");
                }
            }

            // Total
            if (string.IsNullOrEmpty(objDetalle.TOTAL))
            {
                ListaValidaciones.Add("No se ha señalado TOTAL en la ficha");
            }
            else
            {
                int? _total = ISConvert.ToNullableInteger(objDetalle.TOTAL);
                if (!_total.HasValue)
                {
                    ListaValidaciones.Add("Total no tiene el formato correcto");
                }
                else
                {
                    objDetalle.VALOR_TOTAL = _total.Value;
                }
            }

            // Solicitante
            if (string.IsNullOrEmpty(objDetalle.SOLICITA))
            {
                ListaValidaciones.Add("No se ha señalado SOLICITANTE en la ficha");
            }
            else
            {
                if (objDetalle.SOLICITA.ToUpper().Trim() == "PARTICULAR")
                {
                    var objCliente = _RepositorioCLIENTE.GetByFilter(null, null, null, null, "", objDetalle.MEDICO).FirstOrDefault();
                    if (objCliente != null)
                    {
                        objDetalle.CLIENTE = objCliente;
                    }
                    else
                    {
                        var objClienteSinonimo = _RepositorioCLIENTE_SINONIMO.GetByFilterWithReferences(null, objDetalle.MEDICO).FirstOrDefault();
                        if (objClienteSinonimo != null)
                        {
                            objClienteSinonimo.CLIENTE = objClienteSinonimo.CLIENTE;
                        }
                        else
                        {
                            ListaValidaciones.Add("No se ha podido identificar CLIENTE MEDICO de la prestación");
                        }
                    }
                }
                else
                {
                    var objCliente = _RepositorioCLIENTE.GetByFilter(null, null, null, null, "", objDetalle.SOLICITA).FirstOrDefault();
                    if (objCliente != null)
                    {
                        objDetalle.CLIENTE = objCliente;
                    }
                    else
                    {
                        var objClienteSinonimo = _RepositorioCLIENTE_SINONIMO.GetByFilterWithReferences(null, objDetalle.SOLICITA).FirstOrDefault();
                        if (objClienteSinonimo != null)
                        {
                            objClienteSinonimo.CLIENTE = objClienteSinonimo.CLIENTE;
                        }
                        else
                        {
                            ListaValidaciones.Add("No se ha podido identificar CLIENTE SOLICITANTE de la prestación");
                        }
                    }
                }
            }

            // Fecha de Recepcion
            if (string.IsNullOrEmpty(objDetalle.FECHA_RECEPCION))
            {
                ListaValidaciones.Add("No se ha señalado FECHA DE RECEPCIÓN en la ficha");
            }
            else
            {
                DateTime? pasoFR = ISConvert.ToNullableDateTime(objDetalle.FECHA_RECEPCION);
                if (!pasoFR.HasValue)
                {
                    ListaValidaciones.Add("FECHA DE RECEPCIÓN no tiene el formato correcto");
                }
                else
                {
                    objDetalle.VALOR_FECHA_RECEPCION = pasoFR.Value;
                }
            }

            // Ficha Clinica
            if (string.IsNullOrEmpty(objDetalle.FICHA_CLINICA))
            {
                //ListaValidaciones.Add("No se ha señalado TOTAL en la ficha");
            }
            else
            {
                int? _ficha = ISConvert.ToNullableInteger(objDetalle.FICHA_CLINICA);
                if (!_ficha.HasValue)
                {
                    ListaValidaciones.Add("FICHA no tiene el formato correcto");
                }
                else
                {
                    objDetalle.VALOR_FICHA_CLINICA = _ficha.Value;
                }
            }

            // Examenes
            int contadorExamen = 1;
            int contadorExamenesRegistrados = 0;
            int contadorValorExamen = 0;
            foreach (var item in objDetalle.CARGA_PRESTACIONES_VETERINARIAS_EXAMEN.Where(pe => pe.ACTIVO))
            {
                if (!string.IsNullOrEmpty(item.VALOR_EXAMEN) || !string.IsNullOrEmpty(item.NOMBRE_EXAMEN))
                {
                    contadorExamenesRegistrados++;
                    if (string.IsNullOrEmpty(item.NOMBRE_EXAMEN))
                    {
                        ListaValidaciones.Add("No ha señalado nombre de examen [" + contadorExamen.ToString() + "]");
                    }
                    else
                    {
                        bool ExamenExiste = false;
                        var objExamen = _RepositorioEXAMEN.GetByFilter((int)ENUM_TIPO_PRESTACION.Humanas, "", item.NOMBRE_EXAMEN).FirstOrDefault();
                        if (objExamen != null)
                        {
                            ExamenExiste = true;
                            item.EXAMEN = objExamen;
                        }
                        else
                        {
                            var objExamenSinonimo = _RepositorioEXAMEN_SINONIMO.GetByFilterWithReferences(null, item.NOMBRE_EXAMEN).FirstOrDefault();
                            if (objExamenSinonimo != null)
                            {
                                ExamenExiste = true;
                                item.EXAMEN = objExamenSinonimo.EXAMEN;
                            }
                            else
                            {
                                ListaValidaciones.Add("No se ha encontrado información del examen [" + contadorExamen.ToString() + "]");
                            }
                        }
                        if (ExamenExiste && string.IsNullOrEmpty(item.VALOR_EXAMEN))
                        {
                            ListaValidaciones.Add("No se ha señalado valor del examen [" + contadorExamen.ToString() + "; " + item.NOMBRE_EXAMEN + "]");
                        }
                    }
                    if (string.IsNullOrEmpty(item.VALOR_EXAMEN))
                    {
                        //ListaValidaciones.Add("No se ha señalado valor de examen [" + contadorExamen.ToString() + "]");
                    }
                    else
                    {
                        int? _valorExamen = ISConvert.ToNullableInteger(item.VALOR_EXAMEN);
                        if (!_valorExamen.HasValue)
                        {
                            ListaValidaciones.Add("Valor de examen no tiene el formato correcto [" + contadorExamen.ToString() + "]");
                        }
                        //else if (_valorExamen == 0)
                        //{
                        //    //ListaValidaciones.Add("Valor de examen no tiene el formato correcto [" + contadorExamen.ToString() + "]");
                        //}
                        else
                        {
                            contadorValorExamen++;
                            item.VALOR_VALOR_EXAMEN = _valorExamen;
                        }
                    }
                    // PENDIENTE: Validar que el valor del examen sea igual al convenio

                    //context.ApplyPropertyChanges("CARGA_PRESTACIONES_VETERINARIAS_EXAMEN", item);
                }
                else if (contadorExamen == 1)
                {
                    ListaValidaciones.Add("No ha señalado nombre y valor de examen [" + contadorExamen.ToString() + "]");
                }
                contadorExamen++;
            }

            if(contadorExamenesRegistrados == 0)
                ListaValidaciones.Add("La ficha debe registrar al menos 1 examen. ");
            if (contadorValorExamen == 0)
                ListaValidaciones.Add("La ficha debe registrar al menos 1 examen con valor. ");

            if (ListaValidaciones.Any())
            {
                objDetalle.CARGA_PRESTACIONES_DETALLE_ESTADO = EstadoConError;
                string errores = "";
                foreach (var item in ListaValidaciones)
                    errores += item + Environment.NewLine;
                objDetalle.MENSAJE_ERROR = errores;
            }
            else
            {
                objDetalle.CARGA_PRESTACIONES_DETALLE_ESTADO = EstadoValidado;
                objDetalle.MENSAJE_ERROR = "";
            }
            //context.ApplyPropertyChanges("CARGA_PRESTACIONES_VETERINARIAS_DETALLE", objDetalle);

            return ListaValidaciones;
        }
        public int Add(int CARGA_PRESTACIONES_DETALLE_ESTADOId, int CARGA_PRESTACIONES_ENCABEZADOId, int CLIENTEId, int ESPECIE1Id, int GARANTIA1Id, int PREVISIONId, int RAZA1Id, System.DateTime FECHA_ACTUALIZACION, string FICHA = "", string NOMBRE = "", string ESPECIE = "", string RAZA = "", string EDAD = "", string SEXO = "", string SOLICITA = "", string TELEFONO = "", string MEDICO = "", string PROCEDENCIA = "", string FECHA_RECEPCION = "", string FECHA_MUESTRA = "", string FECHA_RESULTADOS = "", string PENDIENTE = "", string GARANTIA = "", string PAGADO = "", string TOTAL = "", string FICHA_CLINICA = "", string RECEPCION = "", string MENSAJE_ERROR = "", int? VALOR_FICHA = null, DateTime? VALOR_FECHA_MUESTRA = null, DateTime? VALOR_FECHA_RECEPCION = null, DateTime? VALOR_FECHA_ENTREGA_RESULTADOS = null, int? VALOR_FICHA_CLINICA = null, int? VALOR_TOTAL = null)
        {
            Init();
            try
            {
                 using (LQCEEntities context = new LQCEEntities())
                {
                    RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO _repositorioCARGA_PRESTACIONES_DETALLE_ESTADO = new RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO(context);
                    CARGA_PRESTACIONES_DETALLE_ESTADO _objCARGA_PRESTACIONES_DETALLE_ESTADO = _repositorioCARGA_PRESTACIONES_DETALLE_ESTADO.GetById(CARGA_PRESTACIONES_DETALLE_ESTADOId);
                    if(Equals(_objCARGA_PRESTACIONES_DETALLE_ESTADO,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado CARGA_PRESTACIONES_DETALLE_ESTADO con Id =",CARGA_PRESTACIONES_DETALLE_ESTADOId.ToString()));
                    }

                    RepositorioCARGA_PRESTACIONES_ENCABEZADO _repositorioCARGA_PRESTACIONES_ENCABEZADO = new RepositorioCARGA_PRESTACIONES_ENCABEZADO(context);
                    CARGA_PRESTACIONES_ENCABEZADO _objCARGA_PRESTACIONES_ENCABEZADO = _repositorioCARGA_PRESTACIONES_ENCABEZADO.GetById(CARGA_PRESTACIONES_ENCABEZADOId);
                    if(Equals(_objCARGA_PRESTACIONES_ENCABEZADO,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado CARGA_PRESTACIONES_ENCABEZADO con Id =",CARGA_PRESTACIONES_ENCABEZADOId.ToString()));
                    }

                    RepositorioCLIENTE _repositorioCLIENTE = new RepositorioCLIENTE(context);
                    CLIENTE _objCLIENTE = _repositorioCLIENTE.GetById(CLIENTEId);
                    if(Equals(_objCLIENTE,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado CLIENTE con Id =",CLIENTEId.ToString()));
                    }

                    RepositorioESPECIE _repositorioESPECIE1 = new RepositorioESPECIE(context);
                    ESPECIE _objESPECIE1 = _repositorioESPECIE1.GetById(ESPECIE1Id);
                    if(Equals(_objESPECIE1,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado ESPECIE1 con Id =",ESPECIE1Id.ToString()));
                    }

                    RepositorioGARANTIA _repositorioGARANTIA1 = new RepositorioGARANTIA(context);
                    GARANTIA _objGARANTIA1 = _repositorioGARANTIA1.GetById(GARANTIA1Id);
                    if(Equals(_objGARANTIA1,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado GARANTIA1 con Id =",GARANTIA1Id.ToString()));
                    }

                    RepositorioPREVISION _repositorioPREVISION = new RepositorioPREVISION(context);
                    PREVISION _objPREVISION = _repositorioPREVISION.GetById(PREVISIONId);
                    if(Equals(_objPREVISION,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado PREVISION con Id =",PREVISIONId.ToString()));
                    }

                    RepositorioRAZA _repositorioRAZA1 = new RepositorioRAZA(context);
                    RAZA _objRAZA1 = _repositorioRAZA1.GetById(RAZA1Id);
                    if(Equals(_objRAZA1,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado RAZA1 con Id =",RAZA1Id.ToString()));
                    }

                    CARGA_PRESTACIONES_VETERINARIAS_DETALLE _CARGA_PRESTACIONES_VETERINARIAS_DETALLE = new CARGA_PRESTACIONES_VETERINARIAS_DETALLE();

                    //properties

                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.FICHA = FICHA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.NOMBRE = NOMBRE;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.ESPECIE = ESPECIE;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.RAZA = RAZA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.EDAD = EDAD;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.SEXO = SEXO;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.SOLICITA = SOLICITA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.TELEFONO = TELEFONO;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.MEDICO = MEDICO;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.PROCEDENCIA = PROCEDENCIA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.FECHA_RECEPCION = FECHA_RECEPCION;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.FECHA_MUESTRA = FECHA_MUESTRA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.FECHA_RESULTADOS = FECHA_RESULTADOS;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.PENDIENTE = PENDIENTE;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.GARANTIA = GARANTIA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.PAGADO = PAGADO;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.TOTAL = TOTAL;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.FICHA_CLINICA = FICHA_CLINICA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.RECEPCION = RECEPCION;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.MENSAJE_ERROR = MENSAJE_ERROR;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.FECHA_ACTUALIZACION = FECHA_ACTUALIZACION;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.VALOR_FICHA = VALOR_FICHA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.VALOR_FECHA_MUESTRA = VALOR_FECHA_MUESTRA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.VALOR_FECHA_RECEPCION = VALOR_FECHA_RECEPCION;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.VALOR_FECHA_ENTREGA_RESULTADOS = VALOR_FECHA_ENTREGA_RESULTADOS;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.VALOR_FICHA_CLINICA = VALOR_FICHA_CLINICA;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.VALOR_TOTAL = VALOR_TOTAL;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.ACTIVO = true;

                    //parents

                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.CARGA_PRESTACIONES_DETALLE_ESTADO = _objCARGA_PRESTACIONES_DETALLE_ESTADO;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.CARGA_PRESTACIONES_ENCABEZADO = _objCARGA_PRESTACIONES_ENCABEZADO;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.CLIENTE = _objCLIENTE;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.ESPECIE1 = _objESPECIE1;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.GARANTIA1 = _objGARANTIA1;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.PREVISION = _objPREVISION;
                    _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.RAZA1 = _objRAZA1;

                    context.AddObject("CARGA_PRESTACIONES_VETERINARIAS_DETALLE",_CARGA_PRESTACIONES_VETERINARIAS_DETALLE);
                    context.SaveChanges();

                    return _CARGA_PRESTACIONES_VETERINARIAS_DETALLE.ID;
                }
            }
            catch(Exception ex)
            {
                 ISException.RegisterExcepcion(ex);
                Error = ex.Message;
                throw ex;
            }
        }