public static List <GraficoEscopoCompletudeDTO> CalcularGraficoEscopoCompletude(Guid oidProjeto, Session session)
        {
            List <GraficoEscopoCompletudeDTO> lista = new List <GraficoEscopoCompletudeDTO>();
            Dictionary <string, GraficoEscopoCompletudeDTO> modulosDic = new Dictionary <string, GraficoEscopoCompletudeDTO>();

            //Adiciona os modulos na lista.
            foreach (Modulo item in Modulo.GetModuloPorProjeto(session, oidProjeto))
            {
                GraficoEscopoCompletudeDTO dto = new GraficoEscopoCompletudeDTO();
                dto.Modulo            = item.TxNome;
                dto.TotalPontosModulo = item.NbPontosTotal;
                lista.Add(dto);
                modulosDic.Add(dto.Modulo, dto);
            }

            //Preenche os dados com as estorias.
            foreach (Estoria est in Estoria.GetEstoriasPorProjetoByOid(session, oidProjeto))
            {
                if (est.EstoriaFilho.Count <= 0)
                {
                    string keyMap = Modulo.RnRecuperarModuloRaiz(est.Modulo).TxNome;
                    if (est.CsSituacao.Equals(CsEstoriaDomain.EmDesenv))
                    {
                        modulosDic[keyMap].PontosEmDesenv += est.NbTamanho;
                    }
                    else if (est.CsSituacao.Equals(CsEstoriaDomain.Pronto))
                    {
                        modulosDic[keyMap].PontosProntos += est.NbTamanho;
                    }
                    else if (est.CsEmAnalise)
                    {
                        modulosDic[keyMap].PontosEmAnalise += est.NbTamanho;
                    }
                    else
                    {
                        modulosDic[keyMap].PontoNaoIniciados += est.NbTamanho;
                    }

                    modulosDic[keyMap].SomaModulo += est.NbTamanho;
                }
            }

            foreach (GraficoEscopoCompletudeDTO dto in lista)
            {
                //Existe desvio ou solicitação de mudança.
                double diff = dto.SomaModulo - dto.TotalPontosModulo;
                if (dto.SomaModulo > dto.TotalPontosModulo)
                {
                    //SOLICITAÇÂO DE MUDANÇA.
                    if (dto.PontoNaoIniciados > 0)
                    {
                        if (dto.PontoNaoIniciados >= diff)
                        {
                            dto.PontoNaoIniciados = dto.PontoNaoIniciados - diff;
                            dto.PontosMudanca     = diff;
                            diff = 0;
                        }
                        else
                        {
                            dto.PontosMudanca = dto.PontoNaoIniciados;
                            diff -= dto.PontoNaoIniciados;
                            dto.PontoNaoIniciados = 0;
                        }
                    }

                    if (diff > 0 && dto.PontosEmAnalise > 0)
                    {
                        if (dto.PontosEmAnalise >= diff)
                        {
                            dto.PontosEmAnalise = dto.PontosEmAnalise - diff;
                            dto.PontosMudanca  += diff;
                            diff = 0;
                        }
                        else
                        {
                            dto.PontosMudanca += dto.PontosEmAnalise;
                            diff -= dto.PontosEmAnalise;
                            dto.PontosEmAnalise = 0;
                        }
                    }
                    //DESVIO...

                    if (dto.PontosProntos > 0 && dto.PontosProntos > dto.TotalPontosModulo)
                    {
                        double diffDesvio = dto.PontosProntos - dto.TotalPontosModulo;
                        if (dto.PontosProntos >= diffDesvio)
                        {
                            dto.PontosProntos = dto.PontosProntos - diffDesvio;
                            dto.PontosDesvio += diffDesvio;
                            diffDesvio        = 0;
                        }
                        else
                        {
                            dto.PontosDesvio += dto.PontosProntos;
                            diffDesvio       -= dto.PontosProntos;
                            dto.PontosProntos = 0;
                        }
                    }
                }
                else
                {
                    dto.PontoNaoIniciados += dto.TotalPontosModulo - dto.SomaModulo;
                }

                dto.PercNaoInciado = calcPerc(dto.PontoNaoIniciados, dto.TotalPontosModulo);
                dto.PercEmAnalise  = calcPerc(dto.PontosEmAnalise, dto.TotalPontosModulo);
                dto.PercEmDesenv   = calcPerc(dto.PontosEmDesenv, dto.TotalPontosModulo);
                dto.PercProntos    = calcPerc(dto.PontosProntos, dto.TotalPontosModulo);
                dto.PercMudanca    = calcPerc(dto.PontosMudanca, dto.TotalPontosModulo);
                dto.PercDesvio     = calcPerc(dto.PontosDesvio, dto.TotalPontosModulo);
            }

            return(lista);
        }