public void DoLogOnEnd(ClientCreditAnalysisModel clientCreditAnalysisModel, ClassifyPersonalResultModel classifyPersonalResultModel)
        {
            var filePath = this.GetLogPathFile(clientCreditAnalysisModel, "ClientCreditAnalysisModel03End.json");

            JsonHelper.SerializeToFile(filePath, clientCreditAnalysisModel, true, true);

            var fileclassifyPersonalResultModelPath = this.GetLogPathFile(clientCreditAnalysisModel, "ClassifyPersonalResultModel.json");

            JsonHelper.SerializeToFile(fileclassifyPersonalResultModelPath, classifyPersonalResultModel, true, true);

            if (clientCreditAnalysisModel.ImageFile != null)
            {
                var fileName      = this.GetImageFileName(clientCreditAnalysisModel, "FaceLandmarksPoint.jpg");
                var filePathImage = this.GetLogPathFile(clientCreditAnalysisModel, fileName);
                Helper.SaveFile(filePathImage, clientCreditAnalysisModel.ImageFile);
            }
        }
        /// <summary>
        /// Responsavel por fazer a analise dos dados do cliente.
        /// </summary>
        public async Task <bool> DoCreditAnalysisAsync(ClientCreditAnalysisModel clientCreditAnalysisModel)
        {
            /// Validamos se um modelo foi informado pelo cliente,
            if (clientCreditAnalysisModel.ModelType.ToInteger() == 0)
            {
                /// Em caso de negativa, informamos ao cliente que o modelo nao foi informado
                this.AddError("Modelo não selecionado");
                return(false);
            }

            /// Preenche os dados do upload
            this.FillFileByte(clientCreditAnalysisModel);

            /// Gero um ID para o cliente com base na data e hora do envio
            clientCreditAnalysisModel.Id = DateTime.Now.ToFileName();

            /// Faz o log dos dados de entrada para possivel analse posterior em casos de erro ou melhora do modelo
            this.DoLogOnBegin(clientCreditAnalysisModel);

            /// COnverto os dados do request do frontEnd para ToCreditAnalysisMLModel
            var creditAnalysisMLModel = this.ToCreditAnalysisMLModel(clientCreditAnalysisModel);

            /// Crio o objeto de container de resultado da analise de credito
            var classifyPersonalResultModel = new ClassifyPersonalResultModel()
            {
            };

            /// Faco a analise de risco de credito, e pego o score
            classifyPersonalResultModel.CreditAnalysisScore = await this._creditAnalysisMLService.ClassifyAsync(creditAnalysisMLModel);

            /// Crio uma faixa de risco do score
            classifyPersonalResultModel.CreditAnalysisScoreRisk = AnalysisHelper.GetScoreRisk(classifyPersonalResultModel.CreditAnalysisScore);

            /// Faco a analise de nivel de não pagamento, caso tenho um indice alto de nao pagamento, nego o pedido do cliente
            if (classifyPersonalResultModel.CreditAnalysisScoreRisk == ScoreRiskEnum.High || classifyPersonalResultModel.CreditAnalysisScoreRisk == ScoreRiskEnum.VeryHigh)
            {
                /// Adiciono uma mensagem ao usuario e para o processamento
                this.AddError("Analise de pagamento em dia baixo.");
                clientCreditAnalysisModel.MessageError = this.GetFirstError();
                return(false);
            }

            /// Faco uma analise da self do cliente, onde analise se existe uma pessoa
            classifyPersonalResultModel.ClassifyPerson = this.ClassifyPerson(clientCreditAnalysisModel);
            /// Faco uma analise da self do cliente, onde analise se existe conteudo explicito
            classifyPersonalResultModel.ClassifyExplicitSex = this.ClassifyExplicitSex(clientCreditAnalysisModel);

            /// Apos a analise da foto, verificamos se ela e valida
            if (!this.IsValid())
            {
                /// Caso nao seja valido, retorno a primeria mensagem de erro ao usuario e para o processamento
                clientCreditAnalysisModel.MessageError = this.GetFirstError();
                return(this.IsValid());
            }

            /// Continuamos com a analise
            /// Fazermos a analise dos dados informados pelo usuario em relacao a self informada por ele
            classifyPersonalResultModel.VisionFaceResul = await this.ClassifyPersonalDataAsync(clientCreditAnalysisModel);

            /// apos a analise,salvo os dados processados por ela
            classifyPersonalResultModel.Status       = this.IsValid();
            classifyPersonalResultModel.MessageError = this.GetFirstError();

            ///Caso o processamento de imagem tenha retornado dados
            if (classifyPersonalResultModel.VisionFaceResul.Any())
            {
                /// Pego a idade e genero do processamento
                clientCreditAnalysisModel.VisionFaceAge    = classifyPersonalResultModel.VisionFaceResul.FirstOrDefault().FaceAttributes.Age;
                clientCreditAnalysisModel.VisionFaceGender = classifyPersonalResultModel.VisionFaceResul.FirstOrDefault().FaceAttributes.Gender;
            }

            /// Faco o log do pos processamento
            this.DoLogOnEnd(clientCreditAnalysisModel, classifyPersonalResultModel);

            /// retorno o status do processamento
            return(this.IsValid());
        }