Ejemplo n.º 1
0
        public ActionResult Indicador5([FromHeader] string ibge, [FromRoute] ParamsRouteIndicador5 model, [FromQuery] ParamsQueryIndicador5 modelquery)
        {
            try
            {
                ibge = _config.GetConnectionString(Connection.GetConnection(ibge));
                string sqlSelectTipo  = string.Empty;
                string sqlFiltros     = string.Empty;
                string sqlAgrupamento = string.Empty;

                // Campos do Select
                sqlSelectTipo = " SELECT ";
                if (model.desdobramento == "unidade_saude")
                {
                    sqlSelectTipo += $@" COALESCE(ES.ID,-1) CODIGO_UNIDADE, COALESCE(ES.NOME_FANTASIA,'SEM UNIDADE DE SAÚDE') UNIDADE_SAUDE, ";
                }
                else if (model.desdobramento == "equipe")
                {
                    sqlSelectTipo += $@" COALESCE(EQ.ID,-1) CODIGO_EQUIPE, COALESCE(EQ.DSC_AREA || ' - ' || EQ.COD_INE, 'SEM EQUIPE') EQUIPE, ";
                }
                else if (model.desdobramento == "agente_saude")
                {
                    sqlSelectTipo += $@" COALESCE(ME.CSI_CODMED,-1) CODIGO_AGENTE, COALESCE(ME.CSI_NOMMED,'SEM AGENTE DE SAÚDE') AGENTE_SAUDE, ";
                }


                // Filtros
                string quadrimestre = modelquery.quadrimestre != null?modelquery.quadrimestre.ToString() : "NULL";

                int?ano = modelquery.ano != null ? modelquery.ano : DateTime.Now.Year;

                //filtro por idade inicial
                if (modelquery.idade_inicial != null)
                {
                    sqlFiltros += $@" AND CAST((SELECT IDADE FROM PRO_IDADE_PACIENTE(C.CSI_DTNASC, CURRENT_DATE)) AS NUMERIC(15,2)) >= {(modelquery.idade_inicial / 100)?.ToString("N2").Replace(",", ".")}";
                }

                //filtro por idade final
                if (modelquery.idade_final != null)
                {
                    sqlFiltros += $@" AND CAST((SELECT IDADE FROM PRO_IDADE_PACIENTE(C.CSI_DTNASC, CURRENT_DATE)) AS NUMERIC(15,2)) <= {(modelquery.idade_final / 100)?.ToString("N2").Replace(",", ".")}";
                }

                if (!string.IsNullOrEmpty(modelquery.equipes))
                {
                    sqlFiltros += $@" AND EQ.ID IN({modelquery.equipes}) ";
                }

                if (modelquery.agente_saude != null)
                {
                    sqlFiltros += $@" AND ME.CSI_CODMED = {modelquery.agente_saude} ";
                }

                // Agrupamentos
                if (model.desdobramento == "unidade_saude")
                {
                    sqlAgrupamento = $@" GROUP BY ES.ID, ES.NOME_FANTASIA ORDER BY ES.NOME_FANTASIA ";
                }
                else if (model.desdobramento == "equipe")
                {
                    sqlAgrupamento = $@" GROUP BY EQ.ID, EQ.NOME_REFERENCIA, EQ.DSC_AREA, EQ.COD_INE ORDER BY EQ.NOME_REFERENCIA ";
                }
                else if (model.desdobramento == "agente_saude")
                {
                    sqlAgrupamento = $@" GROUP BY ME.CSI_CODMED, ME.CSI_NOMMED ";
                }


                var registros = _repository.Indicador5(ibge, sqlSelectTipo, sqlFiltros, sqlAgrupamento, quadrimestre, (int)ano);

                if (model.desdobramento == "total")
                {
                    var total = new Indicador5TotalViewModel()
                    {
                        porcentagem = Helper.CalculaPorcentagem(
                            registros.FirstOrDefault().qtde_individuos,
                            registros.FirstOrDefault().qtde_metas
                            ),
                        porcentagem_valida = Helper.CalculaPorcentagem(
                            registros.FirstOrDefault().qtde_individuos,
                            registros.FirstOrDefault().qtde_metas_validas
                            ),
                        qtde_individuos    = registros.FirstOrDefault().qtde_individuos,
                        qtde_metas         = registros.FirstOrDefault().qtde_metas,
                        qtde_metas_validas = registros.FirstOrDefault().qtde_metas_validas,
                    };
                    return(Ok(total));
                }
                else if (model.desdobramento == "unidade_saude")
                {
                    var unidades = new List <Indicador5UnidadeSaudeViewModel>();
                    foreach (var item in registros)
                    {
                        var unidade = new Indicador5UnidadeSaudeViewModel()
                        {
                            codigo_unidade     = item.codigo_unidade,
                            porcentagem        = Helper.CalculaPorcentagem(item.qtde_individuos, item.qtde_metas),
                            porcentagem_valida = Helper.CalculaPorcentagem(item.qtde_individuos, item.qtde_metas_validas),
                            qtde_individuos    = item.qtde_individuos,
                            qtde_metas         = item.qtde_metas,
                            qtde_metas_validas = item.qtde_metas_validas,
                            unidade_saude      = item.unidade_saude
                        };
                        unidades.Add(unidade);
                    }

                    return(Ok(unidades));
                }
                else if (model.desdobramento == "equipe")
                {
                    var equipes = new List <Indicador5EquipeViewModel>();
                    foreach (var item in registros)
                    {
                        var equipe = new Indicador5EquipeViewModel()
                        {
                            codigo_equipe      = item.codigo_equipe,
                            equipe             = item.equipe,
                            porcentagem        = Helper.CalculaPorcentagem(item.qtde_individuos, item.qtde_metas),
                            porcentagem_valida = Helper.CalculaPorcentagem(item.qtde_individuos, item.qtde_metas_validas),
                            qtde_individuos    = item.qtde_individuos,
                            qtde_metas         = item.qtde_metas,
                            qtde_metas_validas = item.qtde_metas_validas,
                        };
                        equipes.Add(equipe);
                    }
                    return(Ok(equipes));
                }
                else if (model.desdobramento == "agente_saude")
                {
                    var agentes = new List <Indicador5AgenteSaudeViewModel>();
                    foreach (var item in registros)
                    {
                        var agente = new Indicador5AgenteSaudeViewModel()
                        {
                            porcentagem        = Helper.CalculaPorcentagem(item.qtde_individuos, item.qtde_metas),
                            porcentagem_valida = Helper.CalculaPorcentagem(item.qtde_individuos, item.qtde_metas_validas),
                            agente_saude       = item.agente_saude,
                            codigo_agente      = item.codigo_agente,
                            qtde_individuos    = item.qtde_individuos,
                            qtde_metas         = item.qtde_metas,
                            qtde_metas_validas = item.qtde_metas_validas,
                        };
                        agentes.Add(agente);
                    }
                    return(Ok(agentes));
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                var response = TrataErro.GetResponse(ex.Message, true);
                return(StatusCode((int)HttpStatusCode.InternalServerError, response));
            }
        }
Ejemplo n.º 2
0
        public ActionResult PublicoAlvo([FromHeader] string ibge, [FromRoute] ParamsRouteIndicador5 model, [FromQuery] ParamsQueryIndicador5 modelquery)
        {
            try
            {
                ibge = _config.GetConnectionString(Connection.GetConnection(ibge));

                if (modelquery.pagesize == null)
                {
                    modelquery.pagesize = 20;
                }

                string sqlSelect  = string.Empty;
                string sqlFiltros = string.Empty;

                // Filtros
                string quadrimestre = modelquery.quadrimestre != null?modelquery.quadrimestre.ToString() : "NULL";

                int?ano = modelquery.ano != null ? modelquery.ano : DateTime.Now.Year;

                //filtro por idade inicial
                if (modelquery.idade_inicial != null)
                {
                    sqlFiltros += $@" AND CAST((SELECT IDADE FROM PRO_IDADE_PACIENTE(C.CSI_DTNASC, CURRENT_DATE)) AS NUMERIC(15,2)) >= {(modelquery.idade_inicial / 100)?.ToString("N2").Replace(",", ".")}";
                }

                //filtro por idade final
                if (modelquery.idade_final != null)
                {
                    sqlFiltros += $@" AND CAST((SELECT IDADE FROM PRO_IDADE_PACIENTE(C.CSI_DTNASC, CURRENT_DATE)) AS NUMERIC(15,2)) <= {(modelquery.idade_final / 100)?.ToString("N2").Replace(",", ".")}";
                }

                if (modelquery.equipes != null && modelquery.equipes.Length > 0)
                {
                    string joinEquipes = String.Join(", ", modelquery.equipes);
                    sqlFiltros += $@" AND EQ.ID IN({joinEquipes}) ";
                }

                if (modelquery.agente_saude != null)
                {
                    sqlFiltros += $@" AND ME.CSI_CODMED = {modelquery.agente_saude} ";
                }


                // Qtde. de registros
                var countRegistros = _repository.CountPublicoAlvo(ibge, sqlFiltros, quadrimestre, (int)ano);
                Response.Headers.Add("X-Total-Count", countRegistros.ToString());

                // Select + paginação
                modelquery.page = modelquery.page * modelquery.pagesize;
                sqlSelect       = $@" SELECT FIRST {modelquery.pagesize} SKIP {modelquery.page} ";

                var itens = _repository.PublicoAlvo(ibge, sqlSelect, sqlFiltros, quadrimestre, (int)ano);

                return(Ok(itens));
            }
            catch (Exception ex)
            {
                var response = TrataErro.GetResponse(ex.Message, true);
                return(StatusCode((int)HttpStatusCode.InternalServerError, response));
            }
        }