public Boolean ActualizarSeguimientoCasoSevero(Decimal ID_ACCIDENTE,
            String RIESGO_GENERADOR,
            String TIPO_ACCIDENTE,
            String TIPO_LESION,
            String PARTE_CUERPO,
            String AGENTE_LESION,
            String MECANISMO_LESION,
            String SITIO,
            String COND_INSEGURA,
            String ACTO_INSEGURO,
            String FACTORES_TRABAJO,
            String FACTORES_PERSONALES,
            Decimal ID_INCAPACIDAD,
            List<DetalleSeguimientoAccidente> listaDetallesSeguimiento,
            String NOMBRE_ACCIDENTE,
            Programa.Areas ID_AREA,
            List<FactorCausaAccidente> listaFactores)
        {
            Boolean correcto = true;

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

            try
            {
                if (ActualizarRegistroProgSeguimientoAccidentes(ID_ACCIDENTE, RIESGO_GENERADOR, TIPO_ACCIDENTE, TIPO_LESION, PARTE_CUERPO, AGENTE_LESION, MECANISMO_LESION, SITIO, COND_INSEGURA, ACTO_INSEGURO, FACTORES_TRABAJO, FACTORES_PERSONALES, ID_INCAPACIDAD, conexion) == false)
                {
                    correcto = false;
                    conexion.DeshacerTransaccion();
                }
                else
                {
                    Programa _prog = new Programa(Empresa, Usuario);
                    foreach (DetalleSeguimientoAccidente detalleAccidente in listaDetallesSeguimiento)
                    {
                        if (detalleAccidente.GENERA_COMPROMISO == true)
                        {
                            detalleAccidente.ID_COMPROMISO_GENERADO = _prog.AdicionarRegistroCompromisoEnActividad(ID_ACCIDENTE, NOMBRE_ACCIDENTE, Programa.TiposGeneraCompromiso.ACCIDENTE.ToString(), detalleAccidente.SEGUIMIENTO, detalleAccidente.ENCARGADO_COMPROMISO, detalleAccidente.FECHA_COMPROMISO, detalleAccidente.OBSERVACIONES, MaestraCompromiso.EstadosCompromiso.ABIERTO.ToString(), ID_AREA.ToString(), conexion);

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

                        if (correcto == true)
                        {
                            Decimal ID_DETALLE_SEGUIMIENTO = AdicionarRegistroProgDetSegAccidente(ID_ACCIDENTE, detalleAccidente.FECHA_SEGUIMIENTO, detalleAccidente.SEGUIMIENTO, detalleAccidente.GENERA_COMPROMISO, detalleAccidente.ID_COMPROMISO_GENERADO, conexion);

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

                    if (correcto == true)
                    {
                        String IDS_CAUSAS = "";
                        foreach (FactorCausaAccidente factor in listaFactores)
                        {
                            Decimal ID_RELACION = AdicionarFactorAUnAccidente(ID_ACCIDENTE, factor.ID_CAUSA, factor.VALOR_ITEM, conexion);

                            if (String.IsNullOrEmpty(IDS_CAUSAS) == true)
                            {
                                IDS_CAUSAS = factor.ID_CAUSA.ToString();
                            }
                            else
                            {
                                IDS_CAUSAS += "," + factor.ID_CAUSA.ToString();
                            }

                            if (ID_RELACION <= 0)
                            {
                                conexion.DeshacerTransaccion();
                                correcto = false;
                                ID_ACCIDENTE = 0;
                                break;
                            }
                        }

                        if (correcto == true)
                        {
                            if (DesactivarFactoresRelacionadosConAccidente(ID_ACCIDENTE, IDS_CAUSAS, conexion) == false)
                            {
                                conexion.DeshacerTransaccion();
                                correcto = false;
                                ID_ACCIDENTE = 0;
                            }
                        }
                    }
                }

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

            return correcto;
        }
        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;
        }