public Decimal AdicionarSeguimientoCasoSevero(Decimal ID_EMPLEADO,
            String COND_FACT,
            String ORIGEN,
            String DESCRIPCION_ACCIDENTE,
            String PRONOSTICO,
            String OBS_PRONOSTICO,
            Boolean CALIFICADO,
            String OBS_CALIFICADO,
            Boolean PCL,
            String OBS_PCL,
            Boolean APELO_PCL,
            String OBS_APELO_PCL,
            Boolean LABORANDO,
            String OBS_LABORANDO,
            Boolean REUBICADO,
            Boolean REUBICADO_ORD_JUD,
            String OBS_REUBICADO,
            Boolean REABILITADO,
            String OBS_REABILITADO,
            Boolean INCAPACITADO,
            String OBS_INCAPACITADO,
            String ACTITUD,
            EstadosCaso ESTADO_CASO,
            Decimal ID_SOLICITUD,
            List<DetalleSeguimientoCasoSevero> listaDetallesSeguimiento,
            String NOMBRE_CASO_SEVERO,
            Programa.Areas ID_AREA,
            List<RecomendacionCasoSevero> listaRecomendaciones,
            List<DiagnosticoCasoSevero> listaDiagnosticosAdicionales)
        {
            Boolean correcto = true;

            Decimal ID_MAESTRA_CASO_SEVERO = 0;

            Conexion conexion = new Conexion(Empresa);
            conexion.IniciarTransaccion();

            try
            {
                ID_MAESTRA_CASO_SEVERO = AdicionarRegistroProgSeguimientoCasosSeveros(ID_EMPLEADO, COND_FACT, ORIGEN, DESCRIPCION_ACCIDENTE, PRONOSTICO, OBS_PRONOSTICO, CALIFICADO, OBS_CALIFICADO, PCL, OBS_PCL, APELO_PCL, OBS_APELO_PCL, LABORANDO, OBS_LABORANDO, REUBICADO, REUBICADO_ORD_JUD, OBS_REUBICADO, REABILITADO, OBS_REABILITADO, INCAPACITADO, OBS_INCAPACITADO, false, new DateTime(), new DateTime(), null, ACTITUD, ESTADO_CASO, ID_SOLICITUD, conexion);

                if (ID_MAESTRA_CASO_SEVERO <= 0)
                {
                    conexion.DeshacerTransaccion();
                    correcto = false;
                    ID_MAESTRA_CASO_SEVERO = 0;
                }
                else
                {
                    Programa _prog = new Programa(Empresa, Usuario);
                    foreach (DetalleSeguimientoCasoSevero detalleCaso in listaDetallesSeguimiento)
                    {
                        if (detalleCaso.GENERA_COMPROMISO == true)
                        {
                            detalleCaso.ID_COMPROMISO_GENERADO = _prog.AdicionarRegistroCompromisoEnActividad(ID_MAESTRA_CASO_SEVERO, NOMBRE_CASO_SEVERO, Programa.TiposGeneraCompromiso.CASOSEVERO.ToString(), detalleCaso.SEGUIMIENTO, detalleCaso.ENCARGADO_COMPROMISO, detalleCaso.FECHA_COMPROMISO, detalleCaso.OBSERVACIONES, MaestraCompromiso.EstadosCompromiso.ABIERTO.ToString(), ID_AREA.ToString(), conexion);

                            if (detalleCaso.ID_COMPROMISO_GENERADO <= 0)
                            {
                                conexion.DeshacerTransaccion();
                                correcto = false;
                                ID_MAESTRA_CASO_SEVERO = 0;
                                MensajeError = _prog.MensajeError;
                                break;
                            }
                        }
                        else
                        {
                            detalleCaso.ID_COMPROMISO_GENERADO = 0;
                        }

                        if (correcto == true)
                        {
                            Decimal ID_DETALLE_SEGUIMIENTO = AdicionarRegistroProgDetSegCasoSevero(ID_MAESTRA_CASO_SEVERO, detalleCaso.FECHA_SEGUIMIENTO, detalleCaso.SEGUIMIENTO, detalleCaso.GENERA_COMPROMISO, detalleCaso.ID_COMPROMISO_GENERADO, conexion);

                            if (ID_DETALLE_SEGUIMIENTO <= 0)
                            {
                                conexion.DeshacerTransaccion();
                                correcto = false;
                                ID_MAESTRA_CASO_SEVERO = 0;
                                break;
                            }
                        }
                    }

                    if (correcto == true)
                    {
                        foreach (RecomendacionCasoSevero recomendacion in listaRecomendaciones)
                        {
                            if (recomendacion.ID_RECOMENDACION == 0)
                            {
                                decimal ID_RECOMENDACICON = AdicionarRegistroProgRecomendacionesCasoSevero(ID_MAESTRA_CASO_SEVERO, recomendacion.RECOMENDACION, recomendacion.FCH_RECOM_DESDE, recomendacion.FCH_RECOM_HASTA, recomendacion.TIPO_ENTIDAD_EMITE, recomendacion.ID_ENTIDAD_EMITE, conexion);

                                if (ID_RECOMENDACICON <= 0)
                                {
                                    conexion.DeshacerTransaccion();
                                    correcto = false;
                                    ID_MAESTRA_CASO_SEVERO = 0;
                                    break;
                                }
                            }
                        }
                    }

                    if (correcto == true)
                    {
                        foreach (DiagnosticoCasoSevero diagnostico in listaDiagnosticosAdicionales)
                        {
                            if (diagnostico.ID_DIAGNOSTICO == 0)
                            {
                                decimal ID_DIAGNOSTICO = AdicionarRegistroProgDiagnosticosAdicionalesCasoSevero(ID_MAESTRA_CASO_SEVERO, diagnostico.REGISTRO_DIAGNOSTICO, diagnostico.DSC_DIAG, diagnostico.CLASE_DIAGNOSTICO, conexion);

                                if (ID_DIAGNOSTICO <= 0)
                                {
                                    conexion.DeshacerTransaccion();
                                    correcto = false;
                                    ID_MAESTRA_CASO_SEVERO = 0;
                                    break;
                                }
                            }
                        }
                    }
                }

                if (correcto == true)
                {
                    conexion.AceptarTransaccion();
                }
            }
            catch (Exception ex)
            {
                correcto = false;
                conexion.DeshacerTransaccion();
                MensajeError = ex.Message;
                ID_MAESTRA_CASO_SEVERO = 0;
            }
            finally
            {
                conexion.Desconectar();
            }

            return ID_MAESTRA_CASO_SEVERO;
        }
        public Decimal AdicionarRegistroProgSeguimientoCasosSeveros(Decimal ID_EMPLEADO,
            String COND_FACT,
            String ORIGEN,
            String DESCRIPCION_ACCIDENTE,
            String PRONOSTICO,
            String OBS_PRONOSTICO,
            Boolean CALIFICADO,
            String OBS_CALIFICADO,
            Boolean PCL,
            String OBS_PCL,
            Boolean APELO_PCL,
            String OBS_APELO_PCL,
            Boolean LABORANDO,
            String OBS_LABORANDO,
            Boolean REUBICADO,
            Boolean REUBICADO_ORD_JUD,
            String OBS_REUBICADO,
            Boolean REABILITADO,
            String OBS_REABILITADO,
            Boolean INCAPACITADO,
            String OBS_INCAPACITADO,
            Boolean RECOMENDACIONES,
            DateTime FCH_RECOM_DESDE,
            DateTime FCH_RECOM_HASTA,
            String OBS_RECOMENDACIONES,
            String ACTITUD,
            EstadosCaso ESTADO_CASO,
            Decimal ID_SOLICITUD,
            Conexion conexion)
        {
            tools _tools = new tools();

            String sql = null;
            String informacion = null;
            Boolean ejecutar = true;

            Decimal ID_MAESTRA_CASO_SEVERO = 0;

            sql = "usp_prog_seguimiento_casos_severos_adicionar ";

            if (ID_EMPLEADO != 0)
            {
                sql += ID_EMPLEADO + ", ";
                informacion += "ID_EMPLEADO = '" + ID_EMPLEADO + "', ";
            }
            else
            {
                MensajeError += "El campo ID_EMPLEADO no puede ser nulo\n";
                ejecutar = false;
            }

            if (String.IsNullOrEmpty(COND_FACT) == false)
            {
                sql += "'" + COND_FACT + "', ";
                informacion += "COND_FACT = '" + COND_FACT + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "COND_FACT = 'null', ";
            }

            if (String.IsNullOrEmpty(ORIGEN) == false)
            {
                sql += "'" + ORIGEN + "', ";
                informacion += "ORIGEN = '" + ORIGEN + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "ORIGEN = 'null', ";
            }

            if (String.IsNullOrEmpty(DESCRIPCION_ACCIDENTE) == false)
            {
                sql += "'" + DESCRIPCION_ACCIDENTE + "', ";
                informacion += "DESCRIPCION_ACCIDENTE = '" + DESCRIPCION_ACCIDENTE + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "DESCRIPCION_ACCIDENTE = 'null', ";
            }

            if (String.IsNullOrEmpty(PRONOSTICO) == false)
            {
                sql += "'" + PRONOSTICO + "', ";
                informacion += "PRONOSTICO = '" + PRONOSTICO + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "PRONOSTICO = 'null', ";
            }

            if (String.IsNullOrEmpty(OBS_PRONOSTICO) == false)
            {
                sql += "'" + OBS_PRONOSTICO + "', ";
                informacion += "OBS_PRONOSTICO = '" + OBS_PRONOSTICO + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_PRONOSTICO = 'null', ";
            }

            if (CALIFICADO == true)
            {
                sql += "'True', ";
                informacion += "CALIFICADO = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "CALIFICADO = 'False', ";
            }

            if (String.IsNullOrEmpty(OBS_CALIFICADO) == false)
            {
                sql += "'" + OBS_CALIFICADO + "', ";
                informacion += "OBS_CALIFICADO = '" + OBS_CALIFICADO + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_CALIFICADO = 'null', ";
            }

            if (PCL == true)
            {
                sql += "'True', ";
                informacion += "PCL = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "PCL = 'False', ";
            }

            if (String.IsNullOrEmpty(OBS_PCL) == false)
            {
                sql += "'" + OBS_PCL + "', ";
                informacion += "OBS_PCL = '" + OBS_PCL + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_PCL = 'null', ";
            }

            if (APELO_PCL == true)
            {
                sql += "'True', ";
                informacion += "APELO_PCL = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "APELO_PCL = 'False', ";
            }

            if (String.IsNullOrEmpty(OBS_APELO_PCL) == false)
            {
                sql += "'" + OBS_APELO_PCL + "', ";
                informacion += "OBS_APELO_PCL = '" + OBS_APELO_PCL + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_APELO_PCL = 'null', ";
            }

            if (LABORANDO == true)
            {
                sql += "'True', ";
                informacion += "LABORANDO = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "LABORANDO = 'False', ";
            }

            if (String.IsNullOrEmpty(OBS_LABORANDO) == false)
            {
                sql += "'" + OBS_LABORANDO + "', ";
                informacion += "OBS_LABORANDO = '" + OBS_LABORANDO + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_LABORANDO = 'null', ";
            }

            if (REUBICADO == true)
            {
                sql += "'True', ";
                informacion += "REUBICADO = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "REUBICADO = 'False', ";
            }

            if (REUBICADO_ORD_JUD == true)
            {
                sql += "'True', ";
                informacion += "REUBICADO_ORD_JUD = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "REUBICADO_ORD_JUD = 'False', ";
            }

            if (String.IsNullOrEmpty(OBS_REUBICADO) == false)
            {
                sql += "'" + OBS_REUBICADO + "', ";
                informacion += "OBS_REUBICADO = '" + OBS_REUBICADO + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_REUBICADO = 'null', ";
            }

            if (REABILITADO == true)
            {
                sql += "'True', ";
                informacion += "REABILITADO = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "REABILITADO = 'False', ";
            }

            if (String.IsNullOrEmpty(OBS_REABILITADO) == false)
            {
                sql += "'" + OBS_REABILITADO + "', ";
                informacion += "OBS_REABILITADO = '" + OBS_REABILITADO + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_REABILITADO = 'null', ";
            }

            if (INCAPACITADO == true)
            {
                sql += "'True', ";
                informacion += "INCAPACITADO = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "INCAPACITADO = 'False', ";
            }

            if (String.IsNullOrEmpty(OBS_INCAPACITADO) == false)
            {
                sql += "'" + OBS_INCAPACITADO + "', ";
                informacion += "OBS_INCAPACITADO = '" + OBS_INCAPACITADO + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_INCAPACITADO = 'null', ";
            }

            if (RECOMENDACIONES == true)
            {
                sql += "'True', ";
                informacion += "RECOMENDACIONES = 'True', ";
            }
            else
            {
                sql += "'False', ";
                informacion += "RECOMENDACIONES = 'False', ";
            }

            if (FCH_RECOM_DESDE != new DateTime())
            {
                sql += "'" + _tools.obtenerStringConFormatoFechaSQLServer(FCH_RECOM_DESDE) + "', ";
                informacion += "FCH_RECOM_DESDE = '" + FCH_RECOM_DESDE.ToShortDateString() + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "FCH_RECOM_DESDE = 'null', ";
            }

            if (FCH_RECOM_HASTA != new DateTime())
            {
                sql += "'" + _tools.obtenerStringConFormatoFechaSQLServer(FCH_RECOM_HASTA) + "', ";
                informacion += "FCH_RECOM_HASTA = '" + FCH_RECOM_HASTA.ToShortDateString() + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "FCH_RECOM_HASTA = 'null', ";
            }

            if (String.IsNullOrEmpty(OBS_RECOMENDACIONES) == false)
            {
                sql += "'" + OBS_RECOMENDACIONES + "', ";
                informacion += "OBS_RECOMENDACIONES = '" + OBS_RECOMENDACIONES + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "OBS_RECOMENDACIONES = 'null', ";
            }

            if (String.IsNullOrEmpty(ACTITUD) == false)
            {
                sql += "'" + ACTITUD + "', ";
                informacion += "ACTITUD = '" + ACTITUD + "', ";
            }
            else
            {
                sql += "null, ";
                informacion += "ACTITUD = 'null', ";
            }

            sql += "'" + ESTADO_CASO.ToString() + "', ";
            informacion += "ESTADO_CASO = '" + ESTADO_CASO.ToString() + "', ";

            sql += "'" + Usuario + "', ";
            informacion += "USU_CRE = '" + Usuario.ToString() + "', ";

            if (ID_SOLICITUD != 0)
            {
                sql += ID_SOLICITUD;
                informacion += "ID_SOLICITUD = '" + ID_SOLICITUD + "'";
            }
            else
            {
                MensajeError += "El campo ID_SOLICITUD no puede ser nulo\n";
                ejecutar = false;
            }

            if (ejecutar)
            {
                try
                {
                    ID_MAESTRA_CASO_SEVERO = Convert.ToDecimal(conexion.ExecuteScalar(sql));

                    #region auditoria
                    auditoria _auditoria = new auditoria(Empresa);
                    _auditoria.Adicionar(Usuario, tabla.PROG_SEGUIMIENTO_CASOS_SEVEROS, tabla.ACCION_ADICIONAR, sql, informacion, conexion);
                    #endregion auditoria
                }
                catch (Exception e)
                {
                    MensajeError = e.Message;
                    ID_MAESTRA_CASO_SEVERO = 0;
                }
            }

            return ID_MAESTRA_CASO_SEVERO;
        }