diff --git a/LattesExtractor/.gitignore b/LattesExtractor/.gitignore
new file mode 100644
index 0000000..ea26ec2
--- /dev/null
+++ b/LattesExtractor/.gitignore
@@ -0,0 +1 @@
+.data
diff --git a/LattesExtractor/App.config b/LattesExtractor/App.config
index 342c12c..3fca24f 100644
--- a/LattesExtractor/App.config
+++ b/LattesExtractor/App.config
@@ -1,44 +1,51 @@
-
+
-
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
diff --git a/LattesExtractor/Collections/Channel.cs b/LattesExtractor/Collections/Channel.cs
new file mode 100644
index 0000000..5e726c5
--- /dev/null
+++ b/LattesExtractor/Collections/Channel.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LattesExtractor.Collections
+{
+ // https://codereview.stackexchange.com/questions/32500/golang-channel-in-c#answer-32510
+ public class Channel
+ {
+ private BlockingCollection _buffer;
+
+ public Channel() : this(1) { }
+
+ public Channel(int size)
+ {
+ _buffer = new BlockingCollection(new ConcurrentQueue(), size);
+ }
+
+ public bool Send(T t)
+ {
+ try
+ {
+ _buffer.Add(t);
+ }
+ catch (InvalidOperationException)
+ {
+ // will be thrown when the collection gets closed
+ return false;
+ }
+ return true;
+ }
+
+ public bool Receive(out T val)
+ {
+ try
+ {
+ val = _buffer.Take();
+ }
+ catch (InvalidOperationException)
+ {
+ // will be thrown when the collection is empty and got closed
+ val = default(T);
+ return false;
+ }
+ return true;
+ }
+
+ public void Close()
+ {
+ _buffer.CompleteAdding();
+ }
+
+ public IEnumerable Range()
+ {
+ while (Receive(out T val))
+ {
+ yield return val;
+ }
+ }
+ }
+}
diff --git a/LattesExtractor/Controller/CurriculumVitaeProcessorController.cs b/LattesExtractor/Controller/CurriculumVitaeProcessorController.cs
index b849d52..d58d266 100644
--- a/LattesExtractor/Controller/CurriculumVitaeProcessorController.cs
+++ b/LattesExtractor/Controller/CurriculumVitaeProcessorController.cs
@@ -10,126 +10,108 @@
using LattesExtractor.Entities.Xml;
using LattesExtractor.DAO;
using log4net;
+using LattesExtractor.Collections;
namespace LattesExtractor.Controller
{
class CurriculumVitaeProcessorController
{
- private LattesModule lattesModule = null;
- private int _sequence = 0;
-
private static readonly ILog Logger = LogManager.GetLogger(typeof(CurriculumVitaeProcessorController).Name);
- internal static void ProcessCurriculumVitaes(LattesModule lattesModule)
- {
- List threads = new List();
- int i = 0;
-
- CurriculumVitaeProcessorController pcvt = new CurriculumVitaeProcessorController(lattesModule, i++);
- threads.Add(new Thread(new ThreadStart(pcvt.ThreadRun)));
+ private LattesModule _lattesModule;
+ private Channel _curriculumVitaeForProcess;
+ private int _workItemCount = 0;
+ private XmlSerializer _curriculumVitaeUnserializer = new XmlSerializer(typeof(CurriculoVitaeXml));
- pcvt = new CurriculumVitaeProcessorController(lattesModule, i++);
- threads.Add(new Thread(new ThreadStart(pcvt.ThreadRun)));
- pcvt = new CurriculumVitaeProcessorController(lattesModule, i++);
- threads.Add(new Thread(new ThreadStart(pcvt.ThreadRun)));
-
- pcvt = new CurriculumVitaeProcessorController(lattesModule, i++);
- threads.Add(new Thread(new ThreadStart(pcvt.ThreadRun)));
+ public CurriculumVitaeProcessorController(
+ LattesModule lattesModule,
+ Channel curriculumVitaeForProcess
+ )
+ {
+ _lattesModule = lattesModule;
+ _curriculumVitaeForProcess = curriculumVitaeForProcess;
+ }
- // inicia as threads
- i = 0;
- foreach (Thread t in threads)
+ public void ProcessCurriculumVitaes(ManualResetEvent doneEvent)
+ {
+ try
{
- t.Name = String.Format("Thread {0}", i);
- t.Start();
+ var processDoneEvent = new ManualResetEvent(false);
+ foreach (var curriculoEntry in _curriculumVitaeForProcess.Range())
+ {
+ Interlocked.Increment(ref _workItemCount);
+ ThreadPool.QueueUserWorkItem(o => ProcessCurriculumVitae(curriculoEntry, processDoneEvent));
+ }
+ if (_workItemCount > 0)
+ {
+ processDoneEvent.WaitOne();
+ }
}
-
- // espera os processos concluirem a execução
- foreach (Thread t in threads)
+ finally
{
- t.Join();
+ doneEvent.Set();
}
}
- public CurriculumVitaeProcessorController(LattesModule lattesModule, int seq)
+ private void ProcessCurriculumVitae(CurriculoEntry curriculoEntry, ManualResetEvent doneEvent)
{
- this.lattesModule = lattesModule;
- this._sequence = seq;
- }
-
- public void ThreadRun()
- {
- XmlSerializer curriculumVitaeUnserializer = new XmlSerializer(typeof(CurriculoVitaeXml));
-
- XmlDocument curriculumVitaeXml;
- XDocument curriculumVitaeXDocument;
- CurriculoVitaeXml curriculumVitae;
-
- CurriculoEntry curriculoEntry;
- string filename;
-
- var lattesDatabase = new LattesDatabase();
-
- ProfessorDAOService professorDAOService = new ProfessorDAOService(lattesDatabase);
-
- while (lattesModule.HasNextCurriculumVitaeForProcess)
+ try
{
- curriculoEntry = lattesModule.GetNextCurriculumVitaeForProcess();
-
- // para ie caso da thread não conseguir pegar ie ultimo arquivo v tempo
- if (curriculoEntry == null)
- continue;
+ var filename = _lattesModule.GetCurriculumVitaeFileName(curriculoEntry.NumeroCurriculo);
- filename = lattesModule.GetCurriculumVitaeFileName(curriculoEntry.NumeroCurriculo);
- //curriculumXMLFile = new FileStream(filename, FileMode.Open);
-
- curriculumVitaeXml = new XmlDocument();
- //curriculumVitaeXml.Load(curriculumXMLFile);
+ var curriculumVitaeXml = new XmlDocument();
curriculumVitaeXml.Load(filename);
- // nescessário para ie deserialize reconhecer ie Xml
+ // nescessário para o deserialize reconhecer o Xml
curriculumVitaeXml.DocumentElement.SetAttribute("xmlns", "http://tempuri.org/LMPLCurriculo");
- curriculumVitaeXDocument = XDocument.Parse(curriculumVitaeXml.InnerXml);
+ var curriculumVitaeXDocument = XDocument.Parse(curriculumVitaeXml.InnerXml);
+ var curriculumVitae = _curriculumVitaeUnserializer.Deserialize(curriculumVitaeXDocument.CreateReader()) as CurriculoVitaeXml;
+ curriculoEntry.NomeProfessor = curriculumVitae.DADOSGERAIS.NOMECOMPLETO;
+
+ var professorDAOService = new ProfessorDAOService(new LattesDatabase());
+ Logger.Debug(String.Format(
+ "Iniciando processamento currículo {0} do Professor {1}...",
+ curriculoEntry.NumeroCurriculo,
+ curriculumVitae.DADOSGERAIS.NOMECOMPLETO
+ ));
- try
+ if (professorDAOService.ProcessCurriculumVitaeXML(curriculumVitae, curriculoEntry))
{
- curriculumVitae = (CurriculoVitaeXml)curriculumVitaeUnserializer.Deserialize(curriculumVitaeXDocument.CreateReader());
+ Logger.Info($"Currículo {curriculoEntry.NumeroCurriculo} do Professor {curriculumVitae.DADOSGERAIS.NOMECOMPLETO} processado com sucesso !");
+ File.Delete(filename);
}
- catch (Exception ex)
+
+ }
+ catch (Exception ex)
+ {
+ Logger.Error(String.Format(
+ "Erro durante a leitura do XML {0}: {1}\n{2}",
+ curriculoEntry.NumeroCurriculo,
+ ex.Message,
+ ex.StackTrace
+ ));
+
+ int sequencia = 1;
+ while (ex.InnerException != null)
{
- Logger.Error(String.Format("Erro durante a leitura do XML:", ex.Message));
- Logger.Error(ex.StackTrace);
- if (ex.InnerException != null)
- {
- Logger.Error("Excessão Interna:");
- int sequencia = 1;
- while (ex.InnerException != null)
- {
- ex = ex.InnerException;
- Logger.Error(String.Format("Excessão Interna [{0}]: {1}", sequencia++, ex.Message));
- Logger.Error(ex.StackTrace);
- }
- }
- continue;
+ ex = ex.InnerException;
+ Logger.Error(String.Format(
+ "Excessão Interna [{0}]: {1}\n{2}",
+ sequencia++,
+ ex.Message,
+ ex.StackTrace
+ ));
}
-
- // limpa ponteiros
- curriculumVitaeXDocument = null;
- curriculumVitaeXml = null;
-
- Logger.Info(String.Format("Processando XML {0} do Professor {1} [Thread {2}]", curriculoEntry.NumeroCurriculo, curriculumVitae.DADOSGERAIS.NOMECOMPLETO, this._sequence));
-
- // processa curriculo
- if (professorDAOService.ProcessCurriculumVitaeXML(curriculumVitae, curriculoEntry))
- File.Delete(filename);
- else {
- lattesDatabase.Database.Connection.Close();
- lattesDatabase = new LattesDatabase();
- professorDAOService.LattesDatabase = lattesDatabase;
+ }
+ finally
+ {
+ if (Interlocked.Decrement(ref _workItemCount) == 0)
+ {
+ doneEvent.Set();
}
}
}
}
-}
+}
\ No newline at end of file
diff --git a/LattesExtractor/Controller/DownloadCurriculumVitaeController.cs b/LattesExtractor/Controller/DownloadCurriculumVitaeController.cs
deleted file mode 100644
index d1dd908..0000000
--- a/LattesExtractor/Controller/DownloadCurriculumVitaeController.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-using LattesExtractor.Entities.Database;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using LattesExtractor.Service;
-using log4net;
-using LattesExtractor.Entities;
-
-namespace LattesExtractor.Controller
-{
- class DownloadCurriculumVitaeController
- {
- private LattesModule lattesModule;
- private LattesDatabase db;
- private int _sequence;
-
- private static readonly ILog Logger = LogManager.GetLogger(typeof(DownloadCurriculumVitaeController).Name);
-
- public static void DownloadUpdatedCurriculums(LattesModule lattesModule)
- {
- List threads = new List();
-
- // cria n threads para tornar ie download mais performático
- int i = 0;
- DownloadCurriculumVitaeController rcvt = new DownloadCurriculumVitaeController(lattesModule, i++);
- threads.Add(new Thread(new ThreadStart(rcvt.ThreadRun)));
-
- rcvt = new DownloadCurriculumVitaeController(lattesModule, i++);
- threads.Add(new Thread(new ThreadStart(rcvt.ThreadRun)));
-
- rcvt = new DownloadCurriculumVitaeController(lattesModule, i++);
- threads.Add(new Thread(new ThreadStart(rcvt.ThreadRun)));
-
- rcvt = new DownloadCurriculumVitaeController(lattesModule, i++);
- threads.Add(new Thread(new ThreadStart(rcvt.ThreadRun)));
-
- // inicia as threads
-
- foreach (Thread t in threads)
- {
- t.Start();
- }
-
- // espera os processos concluirem v execução
-
- foreach (Thread t in threads)
- {
- t.Join();
- }
- }
-
- private DownloadCurriculumVitaeController(LattesModule lattesModule, int sequence)
- {
- this.lattesModule = lattesModule;
- this._sequence = sequence;
- this.db = new LattesDatabase();
- }
-
- internal void ThreadRun()
- {
- CurriculoEntry curriculumVitae;
- int read;
- byte[] buffer = new byte[4096];
- DownloadCurriculumVitaeService dcvs = new DownloadCurriculumVitaeService(this.db, this.lattesModule.WSCurriculoClient);
-
- while (lattesModule.HasNextCurriculumVitaeNumberToDownload)
- {
- curriculumVitae = lattesModule.GetNextCurriculumVitaeNumberToDownload();
-
- // verifica eu ie processo conseguiu pegar ie utimo registro na pilha
- if (curriculumVitae == null)
- continue;
-
- MemoryStream ms = dcvs.GetCurriculumVitaeIfUpdated(curriculumVitae);
-
- if (ms != null)
- {
- if (File.Exists(lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo)))
- File.Delete(lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo));
-
- FileStream wc = new FileStream(lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo), FileMode.CreateNew);
- while ((read = ms.Read(buffer, 0, buffer.Length)) > 0)
- {
- wc.Write(buffer, 0, read);
- }
- ms.Close();
-
- lattesModule.AddCurriculumVitaeForProcess(curriculumVitae);
-
- wc.Flush();
- wc.Close();
- if (curriculumVitae.NomeProfessor == null)
- Logger.Info(String.Format("Curriculo {0} baixado - Thread {1}", curriculumVitae.NumeroCurriculo, this._sequence));
- else
- Logger.Info(String.Format("Curriculo {0} - {1} baixado - Thread {2}",
- curriculumVitae.NumeroCurriculo, curriculumVitae.NomeProfessor, this._sequence));
- } else
- {
- if (curriculumVitae.NumeroCurriculo == null || curriculumVitae.NumeroCurriculo == "")
- {
- Logger.Error(String.Format("O número do curríuculo Lattes do professor {0} não foi encontrado - Thread {1}",
- curriculumVitae.NomeProfessor, this._sequence));
- }
- }
- }
-
- Logger.Info(String.Format("Download Thread {0} terminou", this._sequence));
- }
- }
-}
diff --git a/LattesExtractor/Controller/DownloadFromRestServiceCurriculumVitaeController.cs b/LattesExtractor/Controller/DownloadFromRestServiceCurriculumVitaeController.cs
new file mode 100644
index 0000000..d5944ca
--- /dev/null
+++ b/LattesExtractor/Controller/DownloadFromRestServiceCurriculumVitaeController.cs
@@ -0,0 +1,301 @@
+using ICSharpCode.SharpZipLib.Core;
+using ICSharpCode.SharpZipLib.Zip;
+using LattesExtractor.Collections;
+using LattesExtractor.Entities;
+using LattesExtractor.Entities.Database;
+using log4net;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Json;
+using System.Threading;
+
+namespace LattesExtractor.Controller
+{
+ class DownloadFromRestServiceCurriculumVitaeController
+ {
+ private static readonly ILog Logger = LogManager.GetLogger(typeof(DownloadFromRestServiceCurriculumVitaeController).Name);
+
+ private LattesModule _lattesModule;
+ private Channel _curriculumVitaesForDownload;
+ private Channel _curriculumVitaesForProcess;
+
+ private Channel _retryDownload = new Channel();
+
+ private int _pendingCurriculums = 0;
+
+ private string _urlMetadata = "http://buscacv.cnpq.br/buscacv/rest/espelhocurriculo/{0}";
+ private string _urlDownloadXml = "http://buscacv.cnpq.br/buscacv/rest/download/curriculo/{0}";
+
+ public DownloadFromRestServiceCurriculumVitaeController(
+ LattesModule lattesModule,
+ LattesDatabase db,
+ Channel curriculumVitaesForDownload,
+ Channel curriculumVitaesForProcess
+ )
+ {
+ _lattesModule = lattesModule;
+ _curriculumVitaesForDownload = curriculumVitaesForDownload;
+ _curriculumVitaesForProcess = curriculumVitaesForProcess;
+ }
+
+ public void DownloadUpdatedCurriculums(ManualResetEvent doneEvent)
+ {
+ try
+ {
+ ThreadPool.QueueUserWorkItem(o => RetryQueueProcessing(doneEvent));
+
+ foreach (var c in _curriculumVitaesForDownload.Range())
+ {
+ Interlocked.Increment(ref _pendingCurriculums);
+ _retryDownload.Send(
+ new RetryMessage
+ {
+ CurriculumVitae = c,
+ PendingRetries = 5,
+ }
+ );
+ }
+
+ if (_pendingCurriculums > 0)
+ {
+ doneEvent.WaitOne();
+ doneEvent = null;
+ }
+ }
+ finally
+ {
+ if (doneEvent != null)
+ {
+ doneEvent.Set();
+ }
+ Logger.Info(String.Format("Download terminou"));
+ }
+ }
+
+ private void RetryQueueProcessing(ManualResetEvent doneDownloadEvent)
+ {
+ foreach (var rm in _retryDownload.Range())
+ {
+ //ThreadPool.QueueUserWorkItem(o =>
+ DownloadCurriculumVitae(rm, doneDownloadEvent)
+ //)
+ ;
+ }
+ }
+
+ private void DownloadCurriculumVitae(RetryMessage retryMessage, ManualResetEvent doneDownloadEvent)
+ {
+ var curriculumVitae = retryMessage.CurriculumVitae;
+ var wc = new WebClient();
+ try
+ {
+ var stream = wc.OpenRead(String.Format(_urlMetadata, curriculumVitae.NumeroCurriculo));
+
+ DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(MetadataResponse));
+ var response = ser.ReadObject(stream) as MetadataResponse;
+
+ if (response.CodRhCript == null || response.CodRhCript.Trim().Length == 0)
+ {
+ Logger.Error(String.Format(
+ "Não foi possível baixar o currículo de número {0}",
+ curriculumVitae.NumeroCurriculo
+ ));
+ return;
+ }
+
+ curriculumVitae.NomeProfessor = response.Document.NomeCompleto;
+
+ if (NeedsToBeUpdated(curriculumVitae, response) == false)
+ {
+ Logger.Info(String.Format("Currículo {0} - {1} já esta atualizado.", curriculumVitae.NumeroCurriculo, curriculumVitae.NomeProfessor));
+ return;
+ }
+
+ DownloadXml(curriculumVitae, response, wc);
+
+ if (curriculumVitae.NomeProfessor == null || curriculumVitae.NomeProfessor.Trim().Length == 0)
+ {
+ Logger.Info(String.Format("Curriculo {0} baixado", curriculumVitae.NumeroCurriculo));
+ return;
+ }
+
+ Logger.Info(String.Format("Curriculo {0} - {1} baixado", curriculumVitae.NumeroCurriculo, curriculumVitae.NomeProfessor));
+ }
+ catch (WebException exception)
+ {
+ Logger.Error(String.Format(
+ "Erro ao realizar requisão do Currículo {2} (Tentativas Sobrando {3}): {0}\n{1}",
+ exception.Message,
+ exception.StackTrace,
+ curriculumVitae.NumeroCurriculo,
+ retryMessage.PendingRetries
+ ));
+ retryMessage.PendingRetries--;
+ if (retryMessage.PendingRetries > 0)
+ {
+ Thread.Sleep(10000);
+ Interlocked.Increment(ref _pendingCurriculums);
+ _retryDownload.Send(retryMessage);
+ }
+ }
+ finally
+ {
+ wc.Dispose();
+ if (Interlocked.Decrement(ref _pendingCurriculums) == 0)
+ {
+ doneDownloadEvent.Set();
+ _retryDownload.Close();
+ }
+ }
+ }
+
+ private void DownloadXml(CurriculoEntry curriculumVitae, MetadataResponse response, WebClient wc)
+ {
+ var link = String.Format(_urlDownloadXml, response.CodRhCript);
+ Logger.Debug(String.Format(
+ "Currículo {0} marcado para download ({1})...",
+ curriculumVitae.NumeroCurriculo,
+ link
+ ));
+ var stream = wc.OpenRead(link);
+
+ if (File.Exists(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo)))
+ {
+ File.Delete(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo));
+ }
+
+ var zis = new ZipInputStream(stream);
+ zis.GetNextEntry();
+ FileStream xml = new FileStream(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo), FileMode.CreateNew);
+
+ var buffer = new byte[4096];
+ int read;
+ while ((read = zis.Read(buffer, 0, buffer.Length)) > 0)
+ {
+ xml.Write(buffer, 0, read);
+ }
+ xml.Close();
+
+ _curriculumVitaesForProcess.Send(curriculumVitae);
+ }
+
+ private bool NeedsToBeUpdated(CurriculoEntry curriculumVitae, MetadataResponse response)
+ {
+ if (response.Document.DataAtualizacao == null || response.Document.DataAtualizacao.Length == 0)
+ {
+ return true;
+ }
+
+ var horaAtualizacao = response.Document.HoraAtualizacao;
+ if (horaAtualizacao == null || horaAtualizacao.Length == 0)
+ {
+ horaAtualizacao = "000000";
+ }
+
+ var dataAtualizacaoLattes = DateTime.ParseExact(
+ String.Format("{0} {1}", response.Document.DataAtualizacao, horaAtualizacao),
+ "ddMMyyyy %Hmmss",
+ null
+ );
+
+ if (dataAtualizacaoLattes == null)
+ {
+ return true;
+ }
+
+ var dataAtualizacaoCorrente = GetDataAtualizacaoProfessor(curriculumVitae.NumeroCurriculo);
+ if (dataAtualizacaoCorrente == null)
+ {
+ return true;
+ }
+
+ if (dataAtualizacaoCorrente < dataAtualizacaoLattes)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ private Nullable GetDataAtualizacaoProfessor(string numeroCurriculo)
+ {
+ var db = new LattesDatabase();
+ var p = db.Professor.FirstOrDefault(prof => prof.NumeroCurriculo == numeroCurriculo);
+
+ if (p == null)
+ {
+ return null;
+ }
+
+ return p.DataUltimaAtualizacaoCurriculo;
+ }
+ }
+
+ class TimeoutWebClient : WebClient
+ {
+ public int Timeout = 0;
+
+ public TimeoutWebClient(int timeout) : base ()
+ {
+ Timeout = timeout;
+ }
+
+ protected override WebRequest GetWebRequest(Uri uri)
+ {
+ WebRequest w = base.GetWebRequest(uri);
+ if (Timeout > 0)
+ {
+ w.Timeout = Timeout;
+ }
+ return w;
+ }
+ }
+
+ internal class RetryMessage
+ {
+ public CurriculoEntry CurriculumVitae;
+ public int PendingRetries = 5;
+ }
+
+#pragma warning disable CS0649
+ [DataContract]
+ internal class MetadataResponse
+ {
+ [DataMember(Name = "cod_rh_cript_s")]
+ public string CodRhCript;
+ [DataMember(Name = "docs")]
+ public List Docs;
+
+ public MetadataResponseDocument Document
+ {
+ get { return Docs[0]; }
+ }
+ }
+
+ [DataContract]
+ internal class MetadataResponseDocument
+ {
+ [DataMember(Name = "dataAtualizacao")]
+ public string DataAtualizacao;
+ [DataMember(Name = "horaAtualizacao")]
+ public string HoraAtualizacao;
+ [DataMember(Name = "numeroIdentificador")]
+ public string NumeroIdentificador;
+ [DataMember(Name = "dadosGerais")]
+ public MetadataResponseGeneralData DadosGerais;
+
+ public string NomeCompleto { get { return DadosGerais.NomeCompleto; } }
+ }
+
+ [DataContract]
+ internal class MetadataResponseGeneralData
+ {
+ [DataMember(Name = "nomeCompleto")]
+ public string NomeCompleto;
+ }
+#pragma warning restore CS0649
+}
diff --git a/LattesExtractor/Controller/DownloadFromWebServiceCurriculumVitaeController.cs b/LattesExtractor/Controller/DownloadFromWebServiceCurriculumVitaeController.cs
new file mode 100644
index 0000000..0dc439f
--- /dev/null
+++ b/LattesExtractor/Controller/DownloadFromWebServiceCurriculumVitaeController.cs
@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using LattesExtractor.Service;
+using log4net;
+using LattesExtractor.Entities;
+using LattesExtractor.Collections;
+
+namespace LattesExtractor.Controller
+{
+ class DownloadFromWebServiceCurriculumVitaeController
+ {
+ private static readonly ILog Logger = LogManager.GetLogger(typeof(DownloadFromWebServiceCurriculumVitaeController).Name);
+
+ private LattesModule _lattesModule;
+ private DownloadCurriculumVitaeWebService _dcvs;
+ private Channel _curriculumVitaesForDownload;
+ private Channel _curriculumVitaesForProcess;
+
+ public DownloadFromWebServiceCurriculumVitaeController(
+ LattesModule lattesModule,
+ DownloadCurriculumVitaeWebService downloadCurriculumVitaeService,
+ Channel curriculumVitaesForDownload,
+ Channel curriculumVitaesForProcess
+ )
+ {
+ _lattesModule = lattesModule;
+ _dcvs = downloadCurriculumVitaeService;
+ _curriculumVitaesForDownload = curriculumVitaesForDownload;
+ _curriculumVitaesForProcess = curriculumVitaesForProcess;
+ }
+
+ public void DownloadUpdatedCurriculums(ManualResetEvent doneEvent)
+ {
+ try
+ {
+ foreach (var curriculumVitae in _curriculumVitaesForDownload.Range())
+ {
+ DownloadCurriculumVitae(curriculumVitae);
+ }
+ }
+ finally
+ {
+ doneEvent.Set();
+ Logger.Info(String.Format("Download terminou"));
+ }
+ }
+
+ private void DownloadCurriculumVitae(CurriculoEntry curriculumVitae)
+ {
+ try
+ {
+ if (curriculumVitae.NumeroCurriculo == null || curriculumVitae.NumeroCurriculo.Trim().Length == 0)
+ {
+ Logger.Error(String.Format(
+ "O número do curríuculo Lattes do professor {0} não foi encontrado",
+ curriculumVitae.NomeProfessor
+ ));
+ return;
+ }
+
+ int read;
+ byte[] buffer = new byte[4096];
+ MemoryStream ms = _dcvs.GetCurriculumVitaeIfUpdated(curriculumVitae);
+
+ if (ms == null)
+ {
+ return;
+ }
+
+ if (File.Exists(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo)))
+ {
+ File.Delete(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo));
+ }
+
+ FileStream wc = new FileStream(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo), FileMode.CreateNew);
+ while ((read = ms.Read(buffer, 0, buffer.Length)) > 0)
+ {
+ wc.Write(buffer, 0, read);
+ }
+ ms.Close();
+
+ _curriculumVitaesForProcess.Send(curriculumVitae);
+
+ wc.Flush();
+ wc.Close();
+
+ if (curriculumVitae.NomeProfessor == null || curriculumVitae.NomeProfessor.Trim().Length == 0)
+ {
+ Logger.Info(String.Format("Curriculo {0} baixado", curriculumVitae.NumeroCurriculo));
+ return;
+ }
+
+ Logger.Info(String.Format("Curriculo {0} - {1} baixado", curriculumVitae.NumeroCurriculo, curriculumVitae.NomeProfessor));
+ }
+ catch (Exception exception)
+ {
+ Logger.Error(String.Format(
+ "Erro ao buscar o currículo {0}, mensagem: {1}\n{2}",
+ curriculumVitae.NumeroCurriculo,
+ exception.Message,
+ exception.StackTrace
+ ));
+ }
+ }
+ }
+}
diff --git a/LattesExtractor/Controller/ImportCurriculumVitaeFromFolderController.cs b/LattesExtractor/Controller/ImportCurriculumVitaeFromFolderController.cs
index 4257431..db85576 100644
--- a/LattesExtractor/Controller/ImportCurriculumVitaeFromFolderController.cs
+++ b/LattesExtractor/Controller/ImportCurriculumVitaeFromFolderController.cs
@@ -8,68 +8,115 @@
using LattesExtractor.Entities;
using ICSharpCode.SharpZipLib.Core;
using ICSharpCode.SharpZipLib.Zip;
+using LattesExtractor.Collections;
namespace LattesExtractor.Controller
{
class ImportCurriculumVitaeFromFolderController
{
- private LattesModule lattesModule;
-
private static readonly ILog Logger = LogManager.GetLogger(typeof(ImportCurriculumVitaeFromFolderController).Name);
- public static void LoadCurriculums(LattesModule lattesModule, string folder)
- {
- int read;
- byte[] buffer = new byte[4096];
- MemoryStream ms;
- CurriculoEntry curriculumVitae;
+ private LattesModule _lattesModule;
+ private string _importFolder;
+ private Channel _channel;
+ private int _workItemCount = 0;
- if (!Directory.Exists(folder))
- {
- Logger.Info(String.Format("Pasta de trabalho não foi encontrado ({0})", folder));
- return;
- }
+ public ImportCurriculumVitaeFromFolderController(
+ LattesModule lattesModule,
+ string importFolder,
+ Channel channel
+ )
+ {
+ _lattesModule = lattesModule;
+ _importFolder = importFolder;
+ _channel = channel;
+ }
- bool exists = false;
- foreach(string filename in Directory.EnumerateFiles(folder))
+ public void LoadCurriculums(ManualResetEvent doneEvent)
+ {
+ try
{
- exists = true;
- String numeroCurriculo = filename.Substring(folder.Length + 1);
- numeroCurriculo = numeroCurriculo.Substring(0, numeroCurriculo.Length - 4);
- curriculumVitae = new CurriculoEntry
+ if (!Directory.Exists(_importFolder))
{
- NumeroCurriculo = numeroCurriculo,
- };
-
- if (File.Exists(lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo)))
- File.Delete(lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo));
-
- if (filename.EndsWith(".xml")) {
- File.Copy(filename, lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo));
- lattesModule.AddCurriculumVitaeForProcess(curriculumVitae);
- continue;
+ Logger.Info(String.Format("Pasta de trabalho não foi encontrado ({0})", _importFolder));
+ return;
}
- ms = UnzipCurriculumVitae(filename);
-
- FileStream wc = new FileStream(lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo), FileMode.CreateNew);
- while ((read = ms.Read(buffer, 0, buffer.Length)) > 0)
+ if (Directory.GetFiles(_importFolder).Length == 0)
{
- wc.Write(buffer, 0, read);
+ throw new Exception(String.Format("Não foram encontrados currículos na pasta {0} !", _importFolder));
}
- ms.Close();
- lattesModule.AddCurriculumVitaeForProcess(curriculumVitae);
+ var unzipDoneEvent = new ManualResetEvent(false);
+ foreach (string filename in Directory.EnumerateFiles(_importFolder))
+ {
+ string numeroCurriculo = filename.Substring(_importFolder.Length + 1);
+ numeroCurriculo = numeroCurriculo.Substring(0, numeroCurriculo.Length - 4);
+ var curriculumVitae = new CurriculoEntry { NumeroCurriculo = numeroCurriculo };
+
+ if (File.Exists(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo)))
+ {
+ File.Delete(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo));
+ }
+ if (filename.EndsWith(".xml"))
+ {
+ File.Copy(filename, _lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo));
+ _channel.Send(curriculumVitae);
+ continue;
+ }
+
+ Interlocked.Increment(ref _workItemCount);
+ ThreadPool.QueueUserWorkItem(o => UnzipAndCopy(unzipDoneEvent, filename, curriculumVitae));
+ }
+ if (_workItemCount > 0)
+ {
+ unzipDoneEvent.WaitOne();
+ }
+ }
+ finally
+ {
+ doneEvent.Set();
}
+ }
- if (exists == false)
+ private void UnzipAndCopy(ManualResetEvent doneEvent, string filename, CurriculoEntry curriculumVitae)
+ {
+ try
{
- throw new Exception(String.Format("Não foram encontrados currículos na pasta {0} !", folder));
+ int read;
+ byte[] buffer = new byte[4096];
+ using (var ms = UnzipCurriculumVitae(filename))
+ {
+ using (FileStream wc = new FileStream(_lattesModule.GetCurriculumVitaeFileName(curriculumVitae.NumeroCurriculo), FileMode.CreateNew))
+ {
+ while ((read = ms.Read(buffer, 0, buffer.Length)) > 0)
+ {
+ wc.Write(buffer, 0, read);
+ }
+ }
+ }
+ _channel.Send(curriculumVitae);
+ }
+ catch (ZipException exception)
+ {
+ Logger.Error(String.Format(
+ "Erro ao importar currículo {2}: {0}\n{1}",
+ exception.Message,
+ exception.StackTrace,
+ curriculumVitae.NumeroCurriculo
+ ));
+ }
+ finally
+ {
+ if (Interlocked.Decrement(ref _workItemCount) == 0)
+ {
+ doneEvent.Set();
+ }
}
}
- private static MemoryStream UnzipCurriculumVitae(string filename)
+ private MemoryStream UnzipCurriculumVitae(string filename)
{
ZipInputStream zis;
MemoryStream xml;
diff --git a/LattesExtractor/Controller/LoadCurriculumVitaeNumberController.cs b/LattesExtractor/Controller/LoadCurriculumVitaeNumberController.cs
deleted file mode 100644
index 529837e..0000000
--- a/LattesExtractor/Controller/LoadCurriculumVitaeNumberController.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using LattesExtractor.Entities;
-using System.Data;
-using System.Data.OleDb;
-
-namespace LattesExtractor.Controller
-{
- class LoadCurriculumVitaeNumberController
- {
- internal static void LoadCurriculumVitaeNumbers(LattesModule lattesModule)
- {
- // ler do banco de dados do RM para pegar os profissionais
-
- // Criando adaptador que busca todos os registros da planilha
- DataTable dataTable = new DataTable();
-
- using (OleDbDataAdapter adapter = new OleDbDataAdapter(lattesModule.LattesCurriculumVitaeQuery, lattesModule.LattesCurriculumVitaeODBCConnection))
- {
- CurriculoEntry ce;
- adapter.Fill(dataTable);
- foreach (DataRow row in dataTable.Rows)
- {
- ce = null;
- if (dataTable.Columns.Count == 1)
- {
- ce = new CurriculoEntry()
- {
- NumeroCurriculo = row[dataTable.Columns[0]].ToString().Trim(),
- };
- }
- else
- {
- if (dataTable.Columns.Count == 2)
- {
- ce = new CurriculoEntry()
- {
- NumeroCurriculo = row[dataTable.Columns[0]].ToString().Trim(),
- NomeProfessor = row[dataTable.Columns[1]].ToString().Trim(),
- };
- }
- else
- {
- if (dataTable.Columns.Count == 3)
- {
- ce = new CurriculoEntry()
- {
- NomeProfessor = row[dataTable.Columns[0]].ToString().Trim(),
- DataNascimento = row[dataTable.Columns[1]].ToString().Trim(),
- CPF = row[dataTable.Columns[2]].ToString().Trim(),
- NumeroCurriculo = "",
- };
- } else
- {
- if (dataTable.Columns.Count == 4)
- {
- ce = new CurriculoEntry()
- {
- NumeroCurriculo = row[dataTable.Columns[0]].ToString().Trim(),
- NomeProfessor = row[dataTable.Columns[1]].ToString().Trim(),
- DataNascimento = row[dataTable.Columns[2]].ToString().Trim(),
- CPF = row[dataTable.Columns[3]].ToString().Trim(),
- };
- }
- }
- }
- }
-
- if (ce != null
- && ((ce.NumeroCurriculo != null && ce.NumeroCurriculo.Length > 0)
- || (ce.NomeProfessor != null && ce.NomeProfessor.Length > 0
- && ce.DataNascimento != null && ce.DataNascimento.Length > 0)
- && ce.CPF != null && ce.CPF.Length > 0))
- lattesModule.AddCurriculumVitaeNumberToDownload(ce);
- }
- }
- }
- }
-}
diff --git a/LattesExtractor/Controller/LoadCurriculumVitaeNumberFromCSVController.cs b/LattesExtractor/Controller/LoadCurriculumVitaeNumberFromCSVController.cs
new file mode 100644
index 0000000..9687828
--- /dev/null
+++ b/LattesExtractor/Controller/LoadCurriculumVitaeNumberFromCSVController.cs
@@ -0,0 +1,83 @@
+using LattesExtractor.Collections;
+using LattesExtractor.Entities;
+using LINQtoCSV;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace LattesExtractor.Controller
+{
+ class LoadCurriculumVitaeNumberFromCSVController
+ {
+ private LattesModule _lattesModule;
+ private Channel _channel;
+ private string _filename;
+
+ public LoadCurriculumVitaeNumberFromCSVController(LattesModule lattesModule, string filename, Channel channel)
+ {
+ _lattesModule = lattesModule;
+ _filename = filename;
+ _channel = channel;
+ }
+
+ public void LoadCurriculumVitaeNumbers(ManualResetEvent doneEvent)
+ {
+ try
+ {
+ CsvContext cc = new CsvContext();
+
+ CsvFileDescription inputFileDescription = new CsvFileDescription
+ {
+ SeparatorChar = ';',
+ FirstLineHasColumnNames = true,
+ EnforceCsvColumnAttribute = true,
+ FileCultureName = "pt-BR", // default is the current culture
+ IgnoreTrailingSeparatorChar = true,
+ };
+
+ var rows = cc.Read(
+ new StreamReader(
+ File.Open(_filename, FileMode.Open),
+ Encoding.GetEncoding("iso-8859-15")
+ ),
+ inputFileDescription
+ );
+
+ foreach (var row in rows)
+ {
+ _channel.Send(
+ new CurriculoEntry
+ {
+ NumeroCurriculo = row.NumeroCurriculo,
+ NomeProfessor = row.NomeProfessor,
+ DataNascimento = row.DataNascimento,
+ CPF = row.CPF,
+ }
+ );
+ }
+ }
+ finally
+ {
+ doneEvent.Set();
+ }
+ }
+ }
+
+ class CSVResume
+ {
+#pragma warning disable CS0649
+ [CsvColumn(FieldIndex = 1, CanBeNull = true, Name = "NumeroCurriculo")]
+ public String NumeroCurriculo;
+ [CsvColumn(FieldIndex = 2, CanBeNull = true, Name = "NomeProfessor")]
+ public String NomeProfessor;
+ [CsvColumn(FieldIndex = 3, CanBeNull = true, Name = "DataNascimento")]
+ public String DataNascimento;
+ [CsvColumn(FieldIndex = 4, CanBeNull = true, Name = "CPF")]
+ public String CPF;
+#pragma warning restore CS0649
+ }
+}
diff --git a/LattesExtractor/Controller/LoadCurriculumVitaeNumberFromOleDbController.cs b/LattesExtractor/Controller/LoadCurriculumVitaeNumberFromOleDbController.cs
new file mode 100644
index 0000000..702eb74
--- /dev/null
+++ b/LattesExtractor/Controller/LoadCurriculumVitaeNumberFromOleDbController.cs
@@ -0,0 +1,109 @@
+using LattesExtractor.Collections;
+using LattesExtractor.Entities;
+using System.Data;
+using System.Data.OleDb;
+using System.Threading;
+
+namespace LattesExtractor.Controller
+{
+ class LoadCurriculumVitaeNumberFromOleDbController
+ {
+ private LattesModule _lattesModule;
+ private Channel _channel;
+ private string _query;
+ private string _connectionString;
+
+ public LoadCurriculumVitaeNumberFromOleDbController(LattesModule lattesModule, string connectionString, string query, Channel channel)
+ {
+ _lattesModule = lattesModule;
+ _connectionString = connectionString;
+ _query = query;
+ _channel = channel;
+ }
+
+ public void LoadCurriculumVitaeNumbers(object threadContext)
+ {
+ ManualResetEvent doneEvent = (ManualResetEvent)threadContext;
+ try
+ {
+ DataTable dataTable = new DataTable();
+ using (OleDbDataAdapter adapter = new OleDbDataAdapter(_query, _connectionString))
+ {
+ adapter.Fill(dataTable);
+ foreach (DataRow row in dataTable.Rows)
+ {
+ if (dataTable.Columns.Count == 1)
+ {
+ AddToChannel(
+ new CurriculoEntry()
+ {
+ NumeroCurriculo = row[dataTable.Columns[0]].ToString().Trim(),
+ }
+ );
+ continue;
+ }
+
+ if (dataTable.Columns.Count == 2)
+ {
+ AddToChannel(
+ new CurriculoEntry()
+ {
+ NumeroCurriculo = row[dataTable.Columns[0]].ToString().Trim(),
+ NomeProfessor = row[dataTable.Columns[1]].ToString().Trim(),
+ }
+ );
+ continue;
+
+ }
+
+ if (dataTable.Columns.Count == 3)
+ {
+ AddToChannel(
+ new CurriculoEntry()
+ {
+ NomeProfessor = row[dataTable.Columns[0]].ToString().Trim(),
+ DataNascimento = row[dataTable.Columns[1]].ToString().Trim(),
+ CPF = row[dataTable.Columns[2]].ToString().Trim(),
+ NumeroCurriculo = "",
+ }
+ );
+ continue;
+ }
+
+ if (dataTable.Columns.Count == 4)
+ {
+ AddToChannel(
+ new CurriculoEntry()
+ {
+ NumeroCurriculo = row[dataTable.Columns[0]].ToString().Trim(),
+ NomeProfessor = row[dataTable.Columns[1]].ToString().Trim(),
+ DataNascimento = row[dataTable.Columns[2]].ToString().Trim(),
+ CPF = row[dataTable.Columns[3]].ToString().Trim(),
+ }
+ );
+ continue;
+ }
+ }
+ }
+ }
+ finally
+ {
+ doneEvent.Set();
+ }
+ }
+
+ private void AddToChannel(CurriculoEntry ce)
+ {
+ if (
+ (ce.NumeroCurriculo != null && ce.NumeroCurriculo.Length > 0) || (
+ ce.NomeProfessor != null && ce.NomeProfessor.Length > 0 &&
+ ce.DataNascimento != null && ce.DataNascimento.Length > 0 &&
+ ce.CPF != null && ce.CPF.Length > 0
+ )
+ )
+ {
+ _channel.Send(ce);
+ }
+ }
+ }
+}
diff --git a/LattesExtractor/Controller/LoadFromTempDirectory.cs b/LattesExtractor/Controller/LoadFromTempDirectory.cs
index b942db3..a234726 100644
--- a/LattesExtractor/Controller/LoadFromTempDirectory.cs
+++ b/LattesExtractor/Controller/LoadFromTempDirectory.cs
@@ -1,41 +1,44 @@
-using LattesExtractor.Entities.Database;
-using System;
-using System.Collections.Generic;
using System.IO;
-using System.Threading;
-using LattesExtractor.Service;
-using log4net;
using LattesExtractor.Entities;
-using ICSharpCode.SharpZipLib.Core;
-using ICSharpCode.SharpZipLib.Zip;
+using LattesExtractor.Collections;
+using System.Threading;
+using System.Collections.Generic;
namespace LattesExtractor.Controller
{
class LoadFromTempDirectory
{
- private static readonly ILog Logger = LogManager.GetLogger(typeof(LoadFromTempDirectory).Name);
+ private LattesModule _lattesModule;
+ private string _tempDirectory = null;
+ private Channel _channel = null;
+
+ public LoadFromTempDirectory(LattesModule lattesModule, string tempDirectory, Channel channel)
+ {
+ _lattesModule = lattesModule;
+ _tempDirectory = tempDirectory;
+ _channel = channel;
+ }
- public static void LoadCurriculums(LattesModule lattesModule)
+ public bool HasPendingResumes()
{
- bool exists = false;
- foreach(string filename in Directory.EnumerateFiles(lattesModule.TempDirectory))
+ return Directory.GetFiles(this._tempDirectory).Length > 0;
+ }
+
+ public void LoadCurriculums(ManualResetEvent doneEvent)
+ {
+ try
{
- string numeroCurriculo = filename.Substring(lattesModule.TempDirectory.Length + 1);
- numeroCurriculo = numeroCurriculo.Substring(0, numeroCurriculo.Length - 4);
- lattesModule.AddCurriculumVitaeForProcess(new CurriculoEntry
+ foreach (string filename in Directory.EnumerateFiles(this._tempDirectory))
{
- NumeroCurriculo = numeroCurriculo,
- });
-
- exists = true;
+ string numeroCurriculo = filename.Substring(this._tempDirectory.Length + 1);
+ numeroCurriculo = numeroCurriculo.Substring(0, numeroCurriculo.Length - 4);
+ _channel.Send(new CurriculoEntry { NumeroCurriculo = numeroCurriculo });
+ }
}
-
- if (exists)
+ finally
{
- Logger.Info(String.Format("Foram encontrados XMLs pendentes na pasta '{0}' !'", lattesModule.TempDirectory));
- return;
+ doneEvent.Set();
}
-
}
}
}
diff --git a/LattesExtractor/Controller/LoadJCRTableController.cs b/LattesExtractor/Controller/LoadJCRTableController.cs
index f0feda0..9723028 100644
--- a/LattesExtractor/Controller/LoadJCRTableController.cs
+++ b/LattesExtractor/Controller/LoadJCRTableController.cs
@@ -1,100 +1,100 @@
-using LattesExtractor.DAO;
-using LattesExtractor.Entities.CSV;
-using LattesExtractor.Entities.Database;
-using LINQtoCSV;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-namespace LattesExtractor.Controller
-{
- class LoadJCRTableController
- {
- public static void LoadJCRTable(LattesModule lattesModule)
- {
- LoadJCRTableCSV(lattesModule);
- }
-
- private static void LoadJCRTableCSV(LattesModule lattesModule)
- {
- JCRDAOService dao = new JCRDAOService(new LattesDatabase());
-
- CsvContext cc = new CsvContext();
-
- CsvFileDescription inputFileDescription = new CsvFileDescription
- {
- SeparatorChar = ',',
- FirstLineHasColumnNames = false,
- EnforceCsvColumnAttribute = true,
- FileCultureName = "pt-BR" // default is the current culture
- };
-
- IEnumerable jcrFile = cc.Read(
- new StreamReader(File.Open(lattesModule.JCRFileName, FileMode.Open),
- Encoding.GetEncoding("iso-8859-15")), inputFileDescription);
-
- var jcrQuery = from q in jcrFile select q;
-
- dao.CreateJCR("00000000", "Não Informado", "Não Informado", 0,
- null, null, null, null, null, null, null, null, null, null);
-
- foreach (var jcr in jcrQuery)
- {
- if (jcr.Rank == "Rank"
- || jcr.Rank.StartsWith("Journal Data Filtered By")
- || jcr.Rank.StartsWith("Copyright"))
- continue;
-
- if (jcr.CitedHalfLife == ">10.0")
- jcr.CitedHalfLife = "11.0";
-
- if (jcr.CitingHalfLife == ">10.0")
- jcr.CitingHalfLife = "11.0";
-
- dao.CreateJCR(jcr.Issn,
- jcr.FullJournalTitle,
- jcr.JCRAbbreviatedTitle,
- ToInt(jcr.Rank),
- ToInt(jcr.TotalCites),
- ToNullableDecimal(jcr.JournalImpactFactor),
- ToNullableDecimal(jcr.ImpactFactorWithoutJournalSelfCites),
- ToNullableDecimal(jcr.FiveYearImpactFactor),
- ToNullableDecimal(jcr.ImmediacyIndex),
- ToNullableInt(jcr.CitableItems),
- ToNullableDecimal(jcr.EigenfactorScore),
- ToNullableDecimal(jcr.ArticleInfluenceScore),
- ToNullableDecimal(jcr.AverageJournalImpactFactorPercentile),
- ToNullableDecimal(jcr.NormalizedEigenfactor));
- }
- }
-
- public static Nullable ToNullableDecimal(string str)
- {
- if (str == null || str == "" || str == "Not Available")
- return null;
-
- return decimal.Parse(AdjustNumbers(str));
- }
- public static int ToInt(string str)
- {
- if (str == null || str == "" || str == "Not Available")
- return 0;
-
- return int.Parse(AdjustNumbers(str));
- }
- public static Nullable ToNullableInt(string str)
- {
- if (str == null || str == "" || str == "Not Available")
- return null;
-
- return int.Parse(AdjustNumbers(str));
- }
-
- public static string AdjustNumbers(string str)
- {
- return str.Replace(",", "").Replace(".", ",");
- }
- }
+using LattesExtractor.DAO;
+using LattesExtractor.Entities.CSV;
+using LattesExtractor.Entities.Database;
+using LINQtoCSV;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace LattesExtractor.Controller
+{
+ class LoadJCRTableController
+ {
+ public static void LoadJCRTable(LattesModule lattesModule)
+ {
+ LoadJCRTableCSV(lattesModule);
+ }
+
+ private static void LoadJCRTableCSV(LattesModule lattesModule)
+ {
+ JCRDAOService dao = new JCRDAOService(new LattesDatabase());
+
+ CsvContext cc = new CsvContext();
+
+ CsvFileDescription inputFileDescription = new CsvFileDescription
+ {
+ SeparatorChar = ',',
+ FirstLineHasColumnNames = false,
+ EnforceCsvColumnAttribute = true,
+ FileCultureName = "pt-BR" // default is the current culture
+ };
+
+ IEnumerable jcrFile = cc.Read(
+ new StreamReader(File.Open(lattesModule.JCRFileName, FileMode.Open),
+ Encoding.GetEncoding("iso-8859-15")), inputFileDescription);
+
+ var jcrQuery = from q in jcrFile select q;
+
+ dao.CreateJCR("00000000", "Não Informado", "Não Informado", 0,
+ null, null, null, null, null, null, null, null, null, null);
+
+ foreach (var jcr in jcrQuery)
+ {
+ if (jcr.Rank == "Rank"
+ || jcr.Rank.StartsWith("Journal Data Filtered By")
+ || jcr.Rank.StartsWith("Copyright"))
+ continue;
+
+ if (jcr.CitedHalfLife == ">10.0")
+ jcr.CitedHalfLife = "11.0";
+
+ if (jcr.CitingHalfLife == ">10.0")
+ jcr.CitingHalfLife = "11.0";
+
+ dao.CreateJCR(jcr.Issn,
+ jcr.FullJournalTitle,
+ jcr.JCRAbbreviatedTitle,
+ ToInt(jcr.Rank),
+ ToInt(jcr.TotalCites),
+ ToNullableDecimal(jcr.JournalImpactFactor),
+ ToNullableDecimal(jcr.ImpactFactorWithoutJournalSelfCites),
+ ToNullableDecimal(jcr.FiveYearImpactFactor),
+ ToNullableDecimal(jcr.ImmediacyIndex),
+ ToNullableInt(jcr.CitableItems),
+ ToNullableDecimal(jcr.EigenfactorScore),
+ ToNullableDecimal(jcr.ArticleInfluenceScore),
+ ToNullableDecimal(jcr.AverageJournalImpactFactorPercentile),
+ ToNullableDecimal(jcr.NormalizedEigenfactor));
+ }
+ }
+
+ public static Nullable ToNullableDecimal(string str)
+ {
+ if (str == null || str == "" || str == "Not Available")
+ return null;
+
+ return decimal.Parse(AdjustNumbers(str));
+ }
+ public static int ToInt(string str)
+ {
+ if (str == null || str == "" || str == "Not Available")
+ return 0;
+
+ return int.Parse(AdjustNumbers(str));
+ }
+ public static Nullable ToNullableInt(string str)
+ {
+ if (str == null || str == "" || str == "Not Available")
+ return null;
+
+ return int.Parse(AdjustNumbers(str));
+ }
+
+ public static string AdjustNumbers(string str)
+ {
+ return str.Replace(",", "").Replace(".", ",");
+ }
+ }
}
\ No newline at end of file
diff --git a/LattesExtractor/DAO/ProfessorDAOService.cs b/LattesExtractor/DAO/ProfessorDAOService.cs
index 38b2eb8..063a25a 100644
--- a/LattesExtractor/DAO/ProfessorDAOService.cs
+++ b/LattesExtractor/DAO/ProfessorDAOService.cs
@@ -166,12 +166,9 @@ public Professor ProcurarProfessorPorNumeroCurriculo(string curriculumVitaeNumbe
///
public bool ProcessCurriculumVitaeXML(CurriculoVitaeXml cvXml, CurriculoEntry curriculumVitae)
{
- Professor professor = null;
bool criarProfessor = false;
try
{
- //LattesDatabase.Configuration.AutoDetectChangesEnabled = false;
-
if (cvXml.NUMEROIDENTIFICADOR != null && !cvXml.NUMEROIDENTIFICADOR.Equals("") && cvXml.NUMEROIDENTIFICADOR != curriculumVitae.NumeroCurriculo)
{
Logger.Error(String.Format("Curriculo {0} solicitado não corresponde ao recebido {1} !", curriculumVitae.NumeroCurriculo, cvXml.NUMEROIDENTIFICADOR));
@@ -183,9 +180,28 @@ public bool ProcessCurriculumVitaeXML(CurriculoVitaeXml cvXml, CurriculoEntry cu
try
{
- ProcessarCache(cvXml);
+ if (curriculumVitae.DataUltimaAtualizacao == null)
+ {
+ curriculumVitae.DataUltimaAtualizacao = DateTime.ParseExact(
+ String.Format("{0} {1}", cvXml.DATAATUALIZACAO, cvXml.HORAATUALIZACAO),
+ Utils.ParseDateFormat(cvXml.FORMATODATAATUALIZACAO) + " %Hmmss",
+ null
+ );
+ }
+
+ var professor = this.ProcurarProfessorPorNumeroCurriculo(curriculumVitae.NumeroCurriculo);
- professor = this.ProcurarProfessorPorNumeroCurriculo(curriculumVitae.NumeroCurriculo);
+ if (professor != null && professor.DataUltimaAtualizacaoCurriculo >= curriculumVitae.DataUltimaAtualizacao)
+ {
+ Logger.Info(String.Format(
+ "Currículo {0} do Professor {1} já esta na última versão.",
+ curriculumVitae.NumeroCurriculo,
+ curriculumVitae.NomeProfessor
+ ));
+ return true;
+ }
+
+ ProcessarCache(cvXml);
if (professor != null)
{
@@ -202,9 +218,6 @@ public bool ProcessCurriculumVitaeXML(CurriculoVitaeXml cvXml, CurriculoEntry cu
professor.NumeroCurriculo = curriculumVitae.NumeroCurriculo;
professor.LinkParaCurriculo = String.Format("http://lattes.cnpq.br/{0}", professor.NumeroCurriculo);
- if (curriculumVitae.DataUltimaAtualizacao == null)
- curriculumVitae.DataUltimaAtualizacao = DateTime.ParseExact(String.Format("{0} {1}", cvXml.DATAATUALIZACAO, cvXml.HORAATUALIZACAO), Utils.ParseDateFormat(cvXml.FORMATODATAATUALIZACAO) + " %Hmmss", null);
-
professor.DataUltimaAtualizacaoCurriculo = (DateTime)curriculumVitae.DataUltimaAtualizacao;
professor.DataUltimaPublicacaoCurriculo = new DateTime(1900, 1, 1); // data qualquer no passado
@@ -236,7 +249,10 @@ public bool ProcessCurriculumVitaeXML(CurriculoVitaeXml cvXml, CurriculoEntry cu
ProcessarAtuacoesProfissionaisEProjetos(professor, cvXml);
if (criarProfessor)
+ {
LattesDatabase.Professor.Add(professor);
+ }
+
LattesDatabase.SaveChanges(); // salva registros para gerar chaves sequencias
CriarBaseDeConsulta(professor);
@@ -244,37 +260,29 @@ public bool ProcessCurriculumVitaeXML(CurriculoVitaeXml cvXml, CurriculoEntry cu
return true;
}
- catch (Exception ex)
+ catch (DbEntityValidationException ex)
{
lock (logLocker)
{
- Logger.Error(String.Format("Erros para o Professor {0} - {1}",
- curriculumVitae.NumeroCurriculo, cvXml.DADOSGERAIS.NOMECOMPLETO));
- Logger.Error(ex.Message);
-
- if (LattesDatabase.GetValidationErrors() != null)
+ Logger.Error($"Erros de Validação para o Professor {curriculumVitae.NumeroCurriculo} - {cvXml.DADOSGERAIS.NOMECOMPLETO}: {ex.Message}");
+ foreach (var err in ex.EntityValidationErrors)
{
- Logger.Error("Erros de Validação:");
- foreach (DbEntityValidationResult e in LattesDatabase.GetValidationErrors())
- {
- foreach (DbValidationError err in e.ValidationErrors)
- {
- Logger.Error(" * " + err.ErrorMessage);
- }
- }
+ Logger.Error($" * {string.Join("\r\n", err.ValidationErrors.Select(v => v.PropertyName + "-" + v.ErrorMessage).ToArray())}");
}
-
- Logger.Error(ex.StackTrace);
- if (ex.InnerException != null)
+ return false;
+ }
+ }
+ catch (Exception ex)
+ {
+ lock (logLocker)
+ {
+ Logger.Error($"Erros para o Professor {curriculumVitae.NumeroCurriculo} - {cvXml.DADOSGERAIS.NOMECOMPLETO}");
+ Logger.Error($"Exceção: {ex.Message}\n{ex.StackTrace}");
+ int sequencia = 1;
+ while (ex.InnerException != null)
{
- Logger.Error("Excessão Interna:");
- int sequencia = 1;
- while (ex.InnerException != null)
- {
- Logger.Error(String.Format("Excessão Interna [{0}]: {1}", sequencia++, ex.InnerException.Message));
- Logger.Error(ex.StackTrace);
- ex = ex.InnerException;
- }
+ ex = ex.InnerException;
+ Logger.Error($"Exceção Interna [{sequencia++}]: {ex.Message}\n{ex.StackTrace}");
}
return false;
@@ -285,19 +293,12 @@ public bool ProcessCurriculumVitaeXML(CurriculoVitaeXml cvXml, CurriculoEntry cu
{
lock (logLocker)
{
- Logger.Error(String.Format("Erros para o Currículo {0}:", curriculumVitae));
- Logger.Error(ex.Message);
- Logger.Error(ex.StackTrace);
- if (ex.InnerException != null)
+ Logger.Error($"Erros para o Currículo {curriculumVitae}: {ex.Message}\n{ex.StackTrace}");
+ int sequencia = 1;
+ while (ex.InnerException != null)
{
- Logger.Error("Excessão Interna:");
- int sequencia = 1;
- while (ex.InnerException != null)
- {
- Logger.Error(String.Format("Excessão Interna [{0}]: {1}", sequencia++, ex.InnerException.Message));
- Logger.Error(ex.StackTrace);
- ex = ex.InnerException;
- }
+ ex = ex.InnerException;
+ Logger.Error($"Exceção Interna [{sequencia++}]: {ex.Message}\n{ex.StackTrace}");
}
}
}
@@ -331,11 +332,11 @@ private void RegistraCacheProducaoProjeto(Projeto projeto, CacheProducao cp)
{
ProjetoId = projeto.ProjetoId
});
-
+
}
-
+
cpp = cacheProducoesProjetos[projeto.ProjetoId];
-
+
if (!cpp.Producoes.Contains(cp))
cpp.Producoes.Add(cp);
}
@@ -778,7 +779,7 @@ private void ProcessarBancasJulgadoras(Professor professor, CurriculoVitaeXml cv
ExtrairAreasConhecimento(profTitular.AREASDOCONHECIMENTO),
ExtrairPalavrasChave(profTitular.PALAVRASCHAVE, profTitular.SETORESDEATIVIDADE));
professor.BancaJulgadora.Add(banca);
-
+
RegistraCacheProducao(profTitular.SEQUENCIAPRODUCAO, "BJ", banca.NaturezaBancaJulgadora,
banca.AreaConhecimento.ToList(),
banca.PalavraChave.ToList(),
@@ -1012,7 +1013,7 @@ private BancaJulgadora GetBancaJulgadora(string tipo, string titulo, string ano)
banca = LattesDatabase.BancaJulgadora.Create();
banca.TipoBancaJulgadora = tipo;
- banca.TituloBancaJulgadora = titulo;
+ banca.TituloBancaJulgadora = Utils.SetMaxLength(titulo, 350);
banca.AnoBancaJulgadora = anoBanca;
LattesDatabase.BancaJulgadora.Add(banca);
@@ -1384,7 +1385,7 @@ private BancaDeTrabalho GetBancaDeTrabalho(string tipo, string nome, string titu
banca.TipoBancaDeTrabalho = tipo;
banca.NomeDoCandidatoBancaDeTrabalho = nome;
- banca.TituloBancaDeTrabalho = titulo;
+ banca.TituloBancaDeTrabalho = Utils.SetMaxLength(titulo, 350);
banca.AnoBancaDeTrabalho = anoBanca;
LattesDatabase.BancaDeTrabalho.Add(banca);
@@ -1417,7 +1418,8 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
professor.NumeroCurriculo, professor.NomeProfessor));
}
}
- else {
+ else
+ {
orien = LattesDatabase.OrientacaoSupervisao.Create();
orien.SequenciaOrientacaoSupervicao = sequencia++;
@@ -1444,7 +1446,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
mestrado.DETALHAMENTODEORIENTACOESCONCLUIDASPARAMESTRADO.NOMEDOCURSO,
_NIVEL_FAT_MESTRADO);
- orien.TituloOrientacaoSupervicao = mestrado.DADOSBASICOSDEORIENTACOESCONCLUIDASPARAMESTRADO.TITULO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(mestrado.DADOSBASICOSDEORIENTACOESCONCLUIDASPARAMESTRADO.TITULO, 350);
orien.TituloEmInglesOrientacaoSupervicao = mestrado.DADOSBASICOSDEORIENTACOESCONCLUIDASPARAMESTRADO.TITULOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(mestrado.DADOSBASICOSDEORIENTACOESCONCLUIDASPARAMESTRADO.ANO);
@@ -1500,7 +1502,8 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
professor.NumeroCurriculo, professor.NomeProfessor));
}
}
- else {
+ else
+ {
orien = LattesDatabase.OrientacaoSupervisao.Create();
orien.SequenciaOrientacaoSupervicao = sequencia++;
@@ -1517,7 +1520,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
dout.DETALHAMENTODEORIENTACOESCONCLUIDASPARADOUTORADO.NOMEDOCURSO,
_NIVEL_FAT_DOUTORADO);
- orien.TituloOrientacaoSupervicao = dout.DADOSBASICOSDEORIENTACOESCONCLUIDASPARADOUTORADO.TITULO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(dout.DADOSBASICOSDEORIENTACOESCONCLUIDASPARADOUTORADO.TITULO, 350);
orien.TituloEmInglesOrientacaoSupervicao = dout.DADOSBASICOSDEORIENTACOESCONCLUIDASPARADOUTORADO.TITULOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(dout.DADOSBASICOSDEORIENTACOESCONCLUIDASPARADOUTORADO.ANO);
@@ -1591,7 +1594,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
dout.DETALHAMENTODEORIENTACOESCONCLUIDASPARAPOSDOUTORADO.NOMEDOCURSO,
_NIVEL_FAT_POS_DOUTORADO);
- orien.TituloOrientacaoSupervicao = dout.DADOSBASICOSDEORIENTACOESCONCLUIDASPARAPOSDOUTORADO.TITULO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(dout.DADOSBASICOSDEORIENTACOESCONCLUIDASPARAPOSDOUTORADO.TITULO, 350);
orien.TituloEmInglesOrientacaoSupervicao = dout.DADOSBASICOSDEORIENTACOESCONCLUIDASPARAPOSDOUTORADO.TITULOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(dout.DADOSBASICOSDEORIENTACOESCONCLUIDASPARAPOSDOUTORADO.ANO);
@@ -1647,7 +1650,8 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
professor.NumeroCurriculo, professor.NomeProfessor));
}
}
- else {
+ else
+ {
orien = LattesDatabase.OrientacaoSupervisao.Create();
orien.SequenciaOrientacaoSupervicao = sequencia++;
@@ -1669,7 +1673,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
outras.DETALHAMENTODEOUTRASORIENTACOESCONCLUIDAS.NOMEDOCURSO,
_NIVEL_FAT_OUTROS);
- orien.TituloOrientacaoSupervicao = outras.DADOSBASICOSDEOUTRASORIENTACOESCONCLUIDAS.TITULO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(outras.DADOSBASICOSDEOUTRASORIENTACOESCONCLUIDAS.TITULO, 350);
orien.TituloEmInglesOrientacaoSupervicao = outras.DADOSBASICOSDEOUTRASORIENTACOESCONCLUIDAS.TITULOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(outras.DADOSBASICOSDEOUTRASORIENTACOESCONCLUIDAS.ANO);
@@ -1732,7 +1736,8 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
professor.NumeroCurriculo, professor.NomeProfessor));
}
}
- else {
+ else
+ {
orien = LattesDatabase.OrientacaoSupervisao.Create();
orien.SequenciaOrientacaoSupervicao = sequencia++;
@@ -1759,7 +1764,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
mestrado.DETALHAMENTODAORIENTACAOEMANDAMENTODEMESTRADO.NOMECURSO,
_NIVEL_FAT_MESTRADO);
- orien.TituloOrientacaoSupervicao = mestrado.DADOSBASICOSDAORIENTACAOEMANDAMENTODEMESTRADO.TITULODOTRABALHO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(mestrado.DADOSBASICOSDAORIENTACAOEMANDAMENTODEMESTRADO.TITULODOTRABALHO, 350);
orien.TituloEmInglesOrientacaoSupervicao = mestrado.DADOSBASICOSDAORIENTACAOEMANDAMENTODEMESTRADO.TITULODOTRABALHOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(mestrado.DADOSBASICOSDAORIENTACAOEMANDAMENTODEMESTRADO.ANO);
@@ -1815,7 +1820,8 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
professor.NumeroCurriculo, professor.NomeProfessor));
}
}
- else {
+ else
+ {
orien = LattesDatabase.OrientacaoSupervisao.Create();
orien.SequenciaOrientacaoSupervicao = sequencia++;
@@ -1832,7 +1838,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
dout.DETALHAMENTODAORIENTACAOEMANDAMENTODEDOUTORADO.NOMECURSO,
_NIVEL_FAT_DOUTORADO);
- orien.TituloOrientacaoSupervicao = dout.DADOSBASICOSDAORIENTACAOEMANDAMENTODEDOUTORADO.TITULODOTRABALHO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(dout.DADOSBASICOSDAORIENTACAOEMANDAMENTODEDOUTORADO.TITULODOTRABALHO, 350);
orien.TituloEmInglesOrientacaoSupervicao = dout.DADOSBASICOSDAORIENTACAOEMANDAMENTODEDOUTORADO.TITULODOTRABALHOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(dout.DADOSBASICOSDAORIENTACAOEMANDAMENTODEDOUTORADO.ANO);
@@ -1906,7 +1912,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
dout.DETALHAMENTODAORIENTACAOEMANDAMENTODEPOSDOUTORADO.NOMECURSO,
_NIVEL_FAT_POS_DOUTORADO);
- orien.TituloOrientacaoSupervicao = dout.DADOSBASICOSDAORIENTACAOEMANDAMENTODEPOSDOUTORADO.TITULODOTRABALHO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(dout.DADOSBASICOSDAORIENTACAOEMANDAMENTODEPOSDOUTORADO.TITULODOTRABALHO, 350);
orien.TituloEmInglesOrientacaoSupervicao = dout.DADOSBASICOSDAORIENTACAOEMANDAMENTODEPOSDOUTORADO.TITULODOTRABALHOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(dout.DADOSBASICOSDAORIENTACAOEMANDAMENTODEPOSDOUTORADO.ANO);
@@ -1980,7 +1986,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
espec.DETALHAMENTODAORIENTACAOEMANDAMENTODEAPERFEICOAMENTOESPECIALIZACAO.NOMECURSO,
_NIVEL_FAT_ESPECIALIZACAO);
- orien.TituloOrientacaoSupervicao = espec.DADOSBASICOSDAORIENTACAOEMANDAMENTODEAPERFEICOAMENTOESPECIALIZACAO.TITULODOTRABALHO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(espec.DADOSBASICOSDAORIENTACAOEMANDAMENTODEAPERFEICOAMENTOESPECIALIZACAO.TITULODOTRABALHO, 350);
orien.TituloEmInglesOrientacaoSupervicao = espec.DADOSBASICOSDAORIENTACAOEMANDAMENTODEAPERFEICOAMENTOESPECIALIZACAO.TITULODOTRABALHOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(espec.DADOSBASICOSDAORIENTACAOEMANDAMENTODEAPERFEICOAMENTOESPECIALIZACAO.ANO);
@@ -2057,7 +2063,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
detalhes.NOMECURSO,
_NIVEL_FAT_GRADUACAO);
- orien.TituloOrientacaoSupervicao = dados.TITULODOTRABALHO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(dados.TITULODOTRABALHO, 350);
orien.TituloEmInglesOrientacaoSupervicao = dados.TITULODOTRABALHOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(dados.ANO);
@@ -2116,7 +2122,8 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
professor.NumeroCurriculo, professor.NomeProfessor));
}
}
- else {
+ else
+ {
orien = LattesDatabase.OrientacaoSupervisao.Create();
orien.SequenciaOrientacaoSupervicao = sequencia++;
@@ -2133,7 +2140,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
detalhes.NOMECURSO,
"Iniciação Científica");
- orien.TituloOrientacaoSupervicao = dados.TITULODOTRABALHO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(dados.TITULODOTRABALHO, 350);
orien.TituloEmInglesOrientacaoSupervicao = dados.TITULODOTRABALHOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(dados.ANO);
@@ -2210,7 +2217,7 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
detalhes.NOMECURSO,
_NIVEL_FAT_OUTROS);
- orien.TituloOrientacaoSupervicao = dados.TITULODOTRABALHO;
+ orien.TituloOrientacaoSupervicao = Utils.SetMaxLength(dados.TITULODOTRABALHO, 350);
orien.TituloEmInglesOrientacaoSupervicao = dados.TITULODOTRABALHOINGLES;
orien.AnoOrientacaoSupervicao = (int)Utils.ParseIntegerOrNull(dados.ANO);
@@ -2253,6 +2260,12 @@ private void ProcessarOrientacoesESupervisoes(Professor professor, CurriculoVita
}
}
}
+
+ foreach (var o in professor.OrientacaoSupervisao)
+ {
+ o.InformacoesAdicionaisEmInglesOrientacaoSupervicao = Utils.SetMaxLength(o.InformacoesAdicionaisEmInglesOrientacaoSupervicao, 2000);
+ o.InformacoesAdicionaisOrientacaoSupervicao = Utils.SetMaxLength(o.InformacoesAdicionaisOrientacaoSupervicao, 2000);
+ }
}
private string TraduzirNaturezaOrientacao(string natureza)
@@ -3062,7 +3075,7 @@ private Evento GetEvento(InstituicaoEmpresa instituicao, string ano, string nome
evento.InstituicaoEmpresa = instituicao;
evento.AnoEvento = anoEvento;
- evento.NomeEvento = nomeEvento;
+ evento.NomeEvento = Utils.SetMaxLength(nomeEvento, 300);
evento.CidadeEvento = cidade;
evento.PaisEvento = pais;
evento.NaturezaEvento = natureza;
@@ -3096,7 +3109,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var trabalhoEvento in pbXml.TRABALHOSEMEVENTOS)
{
- pb = GetProducaoBibliografica(_TP_PB_TRABALHO_EVENTOS,
+ pb = GetProducaoBibliografica(professor, _TP_PB_TRABALHO_EVENTOS,
trabalhoEvento.DADOSBASICOSDOTRABALHO.TITULODOTRABALHO,
trabalhoEvento.DADOSBASICOSDOTRABALHO.ANODOTRABALHO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3129,7 +3142,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var artigoPublicado in pbXml.ARTIGOSPUBLICADOS)
{
- pb = GetProducaoBibliografica(_TP_PB_ARTIGO_PUBLICADO,
+ pb = GetProducaoBibliografica(professor, _TP_PB_ARTIGO_PUBLICADO,
artigoPublicado.DADOSBASICOSDOARTIGO.TITULODOARTIGO,
artigoPublicado.DADOSBASICOSDOARTIGO.ANODOARTIGO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3162,7 +3175,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var artigoAceitoPub in pbXml.ARTIGOSACEITOSPARAPUBLICACAO)
{
- pb = GetProducaoBibliografica(_TP_PB_ARTIGO_ACEITO_PUBLICACAO,
+ pb = GetProducaoBibliografica(professor, _TP_PB_ARTIGO_ACEITO_PUBLICACAO,
artigoAceitoPub.DADOSBASICOSDOARTIGO.TITULODOARTIGO,
artigoAceitoPub.DADOSBASICOSDOARTIGO.ANODOARTIGO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3197,7 +3210,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var livro in pbXml.LIVROSECAPITULOS.LIVROSPUBLICADOSOUORGANIZADOS)
{
- pb = GetProducaoBibliografica(_TP_PB_LIVRO_PUBLICADO_ORGANIZADO,
+ pb = GetProducaoBibliografica(professor, _TP_PB_LIVRO_PUBLICADO_ORGANIZADO,
livro.DADOSBASICOSDOLIVRO.TITULODOLIVRO,
livro.DADOSBASICOSDOLIVRO.ANO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3230,7 +3243,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var capitulo in pbXml.LIVROSECAPITULOS.CAPITULOSDELIVROSPUBLICADOS)
{
- pb = GetProducaoBibliografica(_TP_PB_CAPTIULO_PUBLICADO_ORGANIZADO,
+ pb = GetProducaoBibliografica(professor, _TP_PB_CAPTIULO_PUBLICADO_ORGANIZADO,
capitulo.DADOSBASICOSDOCAPITULO.TITULODOCAPITULODOLIVRO,
capitulo.DADOSBASICOSDOCAPITULO.ANO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3270,7 +3283,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var outra in demais.OUTRAPRODUCAOBIBLIOGRAFICA)
{
- pb = GetProducaoBibliografica(_TP_PB_OUTRA,
+ pb = GetProducaoBibliografica(professor, _TP_PB_OUTRA,
outra.DADOSBASICOSDEOUTRAPRODUCAO.TITULO,
outra.DADOSBASICOSDEOUTRAPRODUCAO.ANO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3315,7 +3328,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var partitura in demais.PARTITURAMUSICAL)
{
- pb = GetProducaoBibliografica(_TP_PB_PARTITURA_MUSICAL,
+ pb = GetProducaoBibliografica(professor, _TP_PB_PARTITURA_MUSICAL,
partitura.DADOSBASICOSDAPARTITURA.TITULO,
partitura.DADOSBASICOSDAPARTITURA.ANO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3348,7 +3361,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var preposfacio in demais.PREFACIOPOSFACIO)
{
- pb = GetProducaoBibliografica(_TP_PB_PREFACIO_POSFACIO,
+ pb = GetProducaoBibliografica(professor, _TP_PB_PREFACIO_POSFACIO,
preposfacio.DADOSBASICOSDOPREFACIOPOSFACIO.TITULO,
preposfacio.DADOSBASICOSDOPREFACIOPOSFACIO.ANO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3381,7 +3394,7 @@ private void ProcessarProducoesBibliograficas(Professor professor, CurriculoVita
{
foreach (var traducao in demais.TRADUCAO)
{
- pb = GetProducaoBibliografica(_TP_PB_TRADUCAO,
+ pb = GetProducaoBibliografica(professor, _TP_PB_TRADUCAO,
traducao.DADOSBASICOSDATRADUCAO.TITULO,
traducao.DADOSBASICOSDATRADUCAO.ANO);
if (pb.AnoProducaoBibliografica > professor.DataUltimaPublicacaoCurriculo.Year)
@@ -3424,11 +3437,17 @@ private void ComplementarProducaoBibliografica(ProducaoBibliografica producaoBib
if (informacoesAdicionais != null)
{
- if (producaoBibliografica.InformacoesAdicionaisProducaoBibliografica == null || producaoBibliografica.InformacoesAdicionaisProducaoBibliografica == "")
- producaoBibliografica.InformacoesAdicionaisProducaoBibliografica = informacoesAdicionais.DESCRICAOINFORMACOESADICIONAIS;
+ if (producaoBibliografica.InformacoesAdicionaisProducaoBibliografica == null ||
+ producaoBibliografica.InformacoesAdicionaisProducaoBibliografica.Trim().Length > 0)
+ {
+ producaoBibliografica.InformacoesAdicionaisProducaoBibliografica = Utils.SetMaxLength(informacoesAdicionais.DESCRICAOINFORMACOESADICIONAIS, 200);
+ }
- if (producaoBibliografica.InformacoesAdicionaisEmInglesProducaoBibliografica == null || producaoBibliografica.InformacoesAdicionaisEmInglesProducaoBibliografica == "")
+ if (producaoBibliografica.InformacoesAdicionaisEmInglesProducaoBibliografica == null ||
+ producaoBibliografica.InformacoesAdicionaisEmInglesProducaoBibliografica.Trim().Length > 0)
+ {
producaoBibliografica.InformacoesAdicionaisEmInglesProducaoBibliografica = informacoesAdicionais.DESCRICAOINFORMACOESADICIONAISINGLES;
+ }
}
if (!producaoBibliografica.DivulgacaoCeTProducaoBibliografica)
@@ -3444,7 +3463,9 @@ private void ComplementarProducaoBibliografica(ProducaoBibliografica producaoBib
producaoBibliografica.HomePageProducaoBibliografica = Utils.SetMaxLength(homePage, 300);
if (producaoBibliografica.DOIProducaoBibliografica == null || producaoBibliografica.DOIProducaoBibliografica == "")
- producaoBibliografica.DOIProducaoBibliografica = doi;
+ {
+ producaoBibliografica.DOIProducaoBibliografica = Utils.SetMaxLength(doi, 55);
+ }
if (producaoBibliografica.ISBNProducaoBibliografica == null || producaoBibliografica.ISBNProducaoBibliografica == "")
{
@@ -3572,7 +3593,7 @@ private void ComplementarProducaoBibliografica(ProducaoBibliografica producaoBib
}
}
- if (producaoBibliografica.PeriodicoQualis == null ||
+ if (producaoBibliografica.PeriodicoQualis == null ||
producaoBibliografica.PeriodicoQualis.TituloPeriodicoQualis == _NAO_INFORMADO)
producaoBibliografica.PeriodicoQualis = GetQualis(isnbIssn, nomePeriodico);
@@ -3627,9 +3648,24 @@ private JCR GetJCR(string issn, string nomePeriodico)
}
}
- private ProducaoBibliografica GetProducaoBibliografica(string tipo, string titulo, string ano)
+ private ProducaoBibliografica GetProducaoBibliografica(Professor professor, string tipo, string titulo, string ano)
{
- int anoTrabalho = int.Parse(ano);
+ int anoTrabalho = 1900;
+ try
+ {
+ anoTrabalho = int.Parse(ano);
+ }
+ catch (Exception exception)
+ {
+ Logger.Error(String.Format(
+ "A Publicação \"{0}\" informado no currículo {1} do Professor {2} possui ano de publicação inválido ({3}), favor revisar o mesmo. Mensagem de erro: {4}",
+ titulo,
+ professor.NumeroCurriculo,
+ professor.NomeProfessor,
+ ano,
+ exception.Message
+ ));
+ }
lock (saveLocker)
{
@@ -3644,7 +3680,7 @@ private ProducaoBibliografica GetProducaoBibliografica(string tipo, string titul
producaoBibliografica = LattesDatabase.ProducaoBibliografica.Create();
producaoBibliografica.TipoProducaoBibliografica = tipo;
- producaoBibliografica.TituloProducaoBibliografica = titulo;
+ producaoBibliografica.TituloProducaoBibliografica = Utils.SetMaxLength(titulo, 350);
producaoBibliografica.TituloEmInglesProducaoBibliografica = "";
producaoBibliografica.AnoProducaoBibliografica = anoTrabalho;
producaoBibliografica.NaturezaProducaoBibliografica = "";
@@ -3699,7 +3735,7 @@ private void ProcessarProducoesTecnicasEPatentes(Professor professor, CurriculoV
professor.ProducaoTecnica.Add(producaoTecnica);
ProcessarPatentes(producaoTecnica, cultivar.DETALHAMENTODACULTIVAR.REGISTROOUPATENTE);
- RegistraCacheProducao(cultivar.SEQUENCIAPRODUCAO, "PT", _TP_PT_CULTIVAR_REGISTRADA,
+ RegistraCacheProducao(cultivar.SEQUENCIAPRODUCAO, "PT", _TP_PT_CULTIVAR_REGISTRADA,
producaoTecnica.AreaConhecimento.ToList(),
producaoTecnica.PalavraChave.ToList(),
producaoTecnica);
@@ -4342,10 +4378,10 @@ private void ComplementarProducaoTecnica(ProducaoTecnica producaoTecnica, string
if (informacoesAdicionais != null)
{
if (producaoTecnica.InformacoesAdicionaisProducaoTecnica == null || producaoTecnica.InformacoesAdicionaisProducaoTecnica == "")
- producaoTecnica.InformacoesAdicionaisProducaoTecnica = informacoesAdicionais.DESCRICAOINFORMACOESADICIONAIS;
+ producaoTecnica.InformacoesAdicionaisProducaoTecnica = Utils.SetMaxLength(informacoesAdicionais.DESCRICAOINFORMACOESADICIONAIS, 2000);
if (producaoTecnica.InformacoesAdicionaisEmInglesProducaoTecnica == null || producaoTecnica.InformacoesAdicionaisEmInglesProducaoTecnica == "")
- producaoTecnica.InformacoesAdicionaisEmInglesProducaoTecnica = informacoesAdicionais.DESCRICAOINFORMACOESADICIONAISINGLES;
+ producaoTecnica.InformacoesAdicionaisEmInglesProducaoTecnica = Utils.SetMaxLength(informacoesAdicionais.DESCRICAOINFORMACOESADICIONAISINGLES, 2000);
}
if (producaoTecnica.PotencialInovacaoProducaoTecnica == null)
@@ -4635,7 +4671,7 @@ private ProducaoTecnica GetProducaoTecnica(string tipoProducaoTecnica, string ti
pt = LattesDatabase.ProducaoTecnica.Create();
pt.TipoProducaoTecnica = tipoProducaoTecnica;
- pt.TituloProducaoTecnica = titulo;
+ pt.TituloProducaoTecnica = Utils.SetMaxLength(titulo, 350);
pt.TituloEmInglesProducaoTecnica = "";
pt.AnoProducaoTecnica = anoProducao;
@@ -4654,7 +4690,7 @@ private void ProcessarPatentes(ProducaoTecnica producaoTecnica, REGISTROOUPATENT
if (registrosXml != null)
{
producaoTecnica.PatentiadoOuRegistradoProducaoTecnica = true;
-
+
PatenteRegistro patente = null;
string tipoPatente;
foreach (var regPat in registrosXml)
@@ -4779,19 +4815,21 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
if (part == null)
{
- // adiciona v partipação do professor em questão
part = LattesDatabase.ParticipacaoEmProjeto.Create();
professor.ParticipacaoEmProjeto.Add(part);
part.Projeto = projeto;
}
- // TODO voltar aqui
-
- foreach (var partXml in pdp.EQUIPEDOPROJETO)
+ if (pdp.EQUIPEDOPROJETO != null)
{
- if (professor.NomeProfessor == partXml.NOMECOMPLETO
- || professor.NumeroCurriculo.Trim() == partXml.NROIDCNPQ.Trim())
- part.ResponsavelParticipacaoEmProjeto = TraduzirFlags(partXml.FLAGRESPONSAVEL.ToString());
+ foreach (var partXml in pdp.EQUIPEDOPROJETO)
+ {
+ if (professor.NomeProfessor == partXml.NOMECOMPLETO ||
+ (partXml.NROIDCNPQ != null && professor.NumeroCurriculo.Trim() == partXml.NROIDCNPQ.Trim()))
+ {
+ part.ResponsavelParticipacaoEmProjeto = TraduzirFlags(partXml.FLAGRESPONSAVEL.ToString());
+ }
+ }
}
if (pdp.FINANCIADORESDOPROJETO != null)
@@ -4826,7 +4864,7 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
}
}
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Projetos: {0}", projetos);
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Projetos: {0}", projetos), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -4855,7 +4893,7 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
else
ativProf.DataTerminoAtividadeProfissional = Utils.ParseMonthAndYear("12", ccc.ANOFIM);
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Especificação: {0}", ccc.ESPECIFICACAO);
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Especificação: {0}", ccc.ESPECIFICACAO), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -4884,7 +4922,7 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
else
ativProf.DataTerminoAtividadeProfissional = Utils.ParseMonthAndYear("12", outra.ANOFIM);
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Atividade Realizada: {0}", outra.ATIVIDADEREALIZADA);
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Atividade Realizada: {0}", outra.ATIVIDADEREALIZADA), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -4914,10 +4952,15 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
ativProf.DataTerminoAtividadeProfissional = Utils.ParseMonthAndYear("12", tm.ANOFIM);
treinamentos = "";
- foreach (TREINAMENTO d in tm.TREINAMENTO)
- treinamentos += d.Value + ", ";
+ if (tm.TREINAMENTO != null)
+ {
+ foreach (TREINAMENTO d in tm.TREINAMENTO)
+ {
+ treinamentos += d.Value + ", ";
+ }
+ }
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Treinamentos Ministrados: {0}", treinamentos);
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Treinamentos Ministrados: {0}", treinamentos), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -4946,7 +4989,7 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
else
ativProf.DataTerminoAtividadeProfissional = Utils.ParseMonthAndYear("12", eu.ANOFIM);
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Atividade Realizada: {0}", eu.ATIVIDADEDEEXTENSAOREALIZADA);
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Atividade Realizada: {0}", eu.ATIVIDADEDEEXTENSAOREALIZADA), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -4975,7 +5018,7 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
else
ativProf.DataTerminoAtividadeProfissional = Utils.ParseMonthAndYear("12", se.ANOFIM);
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Serviço Realizado: {0}", se.SERVICOREALIZADO);
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Serviço Realizado: {0}", se.SERVICOREALIZADO), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -5004,7 +5047,7 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
else
ativProf.DataTerminoAtividadeProfissional = Utils.ParseMonthAndYear("12", estagio.ANOFIM);
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Estágio Realizado: {0}", estagio.ESTAGIOREALIZADO);
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Estágio Realizado: {0}", estagio.ESTAGIOREALIZADO), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -5033,13 +5076,18 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
ativProf.DataTerminoAtividadeProfissional = Utils.ParseMonthAndYear("12", ensino.ANOFIM);
disciplinas = "";
- foreach (DISCIPLINA d in ensino.DISCIPLINA)
- disciplinas += d.Value + ", ";
+ if (ensino.DISCIPLINA != null)
+ {
+ foreach (DISCIPLINA d in ensino.DISCIPLINA)
+ {
+ disciplinas += d.Value + ", ";
+ }
+ }
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Curso Ministrado: {0} - {1}; Disciplinas Ministradas: {2}",
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Curso Ministrado: {0} - {1}; Disciplinas Ministradas: {2}",
ensino.CODIGOCURSO,
ensino.NOMECURSO,
- disciplinas);
+ disciplinas), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -5099,9 +5147,9 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
else
ativProf.DataTerminoAtividadeProfissional = Utils.ParseMonthAndYear("12", dea.ANOFIM);
- ativProf.InformacoesAdicionaisAtividadeProfissional = String.Format("Cargo Ou Função: {0}",
+ ativProf.InformacoesAdicionaisAtividadeProfissional = Utils.SetMaxLength(String.Format("Cargo Ou Função: {0}",
TraduzirCargoOuFuncao(dea.FORMATOCARGOOUFUNCAO.ToString(),
- dea.CARGOOUFUNCAO));
+ dea.CARGOOUFUNCAO)), 2000);
professor.AtividadeProfissional.Add(ativProf);
}
@@ -5154,7 +5202,7 @@ private void ProcessarAtuacoesProfissionaisEProjetos(Professor professor, Curric
else
vinculo.TipoVinculoVinculoAtuacaoProfissional = TraduzirTipoVinculo(v.TIPODEVINCULO.ToString());
- vinculo.DescricaoVinculoAtuacaoProfissional = v.OUTRASINFORMACOES;
+ vinculo.DescricaoVinculoAtuacaoProfissional = Utils.SetMaxLength(v.OUTRASINFORMACOES, 2000);
professor.VinculoAtuacaoProfissional.Add(vinculo);
}
@@ -5205,7 +5253,7 @@ private void ComplementarProjeto(Projeto projeto, decimal? anoTermino, string si
projeto.NomeEmInglesProjeto = nomeIngles;
if (projeto.InformacoesAdicionaisProjeto == null || projeto.InformacoesAdicionaisProjeto == "")
- projeto.InformacoesAdicionaisProjeto = descricao;
+ projeto.InformacoesAdicionaisProjeto = Utils.SetMaxLength(descricao, 4000);
if (projeto.InformacoesAdicionaisEmInglesProjeto == null || projeto.InformacoesAdicionaisEmInglesProjeto == "")
projeto.InformacoesAdicionaisEmInglesProjeto = descricaoIngles;
@@ -6343,8 +6391,8 @@ private void ProcessarPremiosETitulos(Professor professor, CurriculoVitaeXml cvX
//premioTitulo.ProfessorId = professor.ProfessorId;
premioTitulo.SequenciaPremioOuTitulo = sequencia++;
premioTitulo.EntidadePromotoraPremioOuTitulo = premio.NOMEDAENTIDADEPROMOTORA;
- premioTitulo.NomePremioOuTitulo = premio.NOMEDOPREMIOOUTITULO;
- premioTitulo.NomePremioOuTituloEmIngles = premio.NOMEDOPREMIOOUTITULOINGLES;
+ premioTitulo.NomePremioOuTitulo = Utils.SetMaxLength(premio.NOMEDOPREMIOOUTITULO, 250);
+ premioTitulo.NomePremioOuTituloEmIngles = Utils.SetMaxLength(premio.NOMEDOPREMIOOUTITULOINGLES, 250);
premioTitulo.AnoPremioOuTitulo = (int)Utils.ParseIntegerOrNull(premio.ANODAPREMIACAO);
professor.PremioOuTitulo.Add(premioTitulo);
//LattesDatabase.PremioOuTitulo.Add(premioTitulo);
@@ -6371,22 +6419,29 @@ private void ProcessarDadosGerais(Professor professor, CurriculoVitaeXml cvXml)
private void ProcessarIdiomas(Professor professor, CurriculoVitaeXml cvXml)
{
if (cvXml.DADOSGERAIS.IDIOMAS == null)
+ {
return;
+ }
- IdiomasProfessor idiomasProfessor = null;
foreach (IDIOMA idiomaXml in cvXml.DADOSGERAIS.IDIOMAS)
{
- idiomasProfessor = LattesDatabase.IdiomasProfessor.Create();
- idiomasProfessor.Idioma = GetIdioma(idiomaXml.DESCRICAODOIDIOMA);
- idiomasProfessor.Professor = professor;
-
- idiomasProfessor.NomeIdioma = idiomasProfessor.Idioma.NomeIdioma;
- idiomasProfessor.ProeficienciaCompreensaoProfessor = TranduzirProeficiencia(idiomaXml.PROFICIENCIADECOMPREENSAO.ToString());
- idiomasProfessor.ProeficienciaEscritaProfessor = TranduzirProeficiencia(idiomaXml.PROFICIENCIADEESCRITA.ToString());
- idiomasProfessor.ProeficienciaLeituraProfessor = TranduzirProeficiencia(idiomaXml.PROFICIENCIADELEITURA.ToString());
- idiomasProfessor.ProeficienciaFalaProfessor = TranduzirProeficiencia(idiomaXml.PROFICIENCIADEFALA.ToString());
-
- professor.IdiomasProfessor.Add(idiomasProfessor);
+ var idioma = GetIdioma(idiomaXml.DESCRICAODOIDIOMA);
+ if (professor.IdiomasProfessor.Any(ip => ip.Idioma == idioma))
+ {
+ continue;
+ }
+ professor.IdiomasProfessor.Add(
+ new IdiomasProfessor
+ {
+ Idioma = idioma,
+ Professor = professor,
+ NomeIdioma = idioma.NomeIdioma,
+ ProeficienciaCompreensaoProfessor = TranduzirProeficiencia(idiomaXml.PROFICIENCIADECOMPREENSAO.ToString()),
+ ProeficienciaEscritaProfessor = TranduzirProeficiencia(idiomaXml.PROFICIENCIADEESCRITA.ToString()),
+ ProeficienciaLeituraProfessor = TranduzirProeficiencia(idiomaXml.PROFICIENCIADELEITURA.ToString()),
+ ProeficienciaFalaProfessor = TranduzirProeficiencia(idiomaXml.PROFICIENCIADEFALA.ToString()),
+ }
+ );
}
}
@@ -7021,7 +7076,7 @@ private void RemoverDadosProfessor(Professor professor)
enderecoP.ProfessorProfissional.Remove(professor);
if (enderecoP.ProfessorResidencial.Count == 0
&& enderecoP.ProfessorProfissional.Count == 0)
- LattesDatabase.Endereco.Remove(enderecoP); // eu não estiver relacionado v nenhum professor, então elimina
+ LattesDatabase.Endereco.Remove(enderecoP); // se não estiver relacionado com nenhum professor, então elimina
}
var enderecoR = professor.EnderecoResidencial;
@@ -7030,7 +7085,7 @@ private void RemoverDadosProfessor(Professor professor)
enderecoR.ProfessorResidencial.Remove(professor);
if (enderecoR.ProfessorResidencial.Count == 0
&& enderecoR.ProfessorProfissional.Count == 0)
- LattesDatabase.Endereco.Remove(enderecoR); // eu não estiver relacionado v nenhum professor, então elimina
+ LattesDatabase.Endereco.Remove(enderecoR); // se não estiver relacionado com nenhum professor, então elimina
}
var formacoes = professor.FormacaoAcademicaTitulacao.ToArray();
@@ -7216,17 +7271,24 @@ public void ProcessarCache(CurriculoVitaeXml cvXml)
cacheCursos.Clear();
- foreach (var ic in cvXml.DADOSCOMPLEMENTARES.INFORMACOESADICIONAISCURSOS)
+ if (cvXml.DADOSCOMPLEMENTARES.INFORMACOESADICIONAISCURSOS != null)
{
- if (!cacheCursos.ContainsKey(ic.CODIGOCURSO))
- {
- cc = new CacheCurso();
- cc.codigo = ic.CODIGOCURSO;
- cc.area = GetAreaConhecimento(ic.NOMEGRANDEAREADOCONHECIMENTO.ToString(),
- ic.NOMEDAAREADOCONHECIMENTO,
- ic.NOMEDASUBAREADOCONHECIMENTO,
- ic.NOMEDAESPECIALIDADE);
- cacheCursos.Add(cc.codigo, cc);
+ foreach (var ic in cvXml.DADOSCOMPLEMENTARES.INFORMACOESADICIONAISCURSOS)
+ {
+ if (!cacheCursos.ContainsKey(ic.CODIGOCURSO))
+ {
+ cc = new CacheCurso
+ {
+ codigo = ic.CODIGOCURSO,
+ area = GetAreaConhecimento(
+ ic.NOMEGRANDEAREADOCONHECIMENTO.ToString(),
+ ic.NOMEDAAREADOCONHECIMENTO,
+ ic.NOMEDASUBAREADOCONHECIMENTO,
+ ic.NOMEDAESPECIALIDADE
+ )
+ };
+ cacheCursos.Add(cc.codigo, cc);
+ }
}
}
}
diff --git a/LattesExtractor/Entities/CSV/JCRCSV.cs b/LattesExtractor/Entities/CSV/JCRCSV.cs
index d756f8e..02f38d8 100644
--- a/LattesExtractor/Entities/CSV/JCRCSV.cs
+++ b/LattesExtractor/Entities/CSV/JCRCSV.cs
@@ -5,7 +5,7 @@ namespace LattesExtractor.Entities.CSV
{
class JCRCSV
{
-
+#pragma warning disable CS0649
[CsvColumn(FieldIndex = 1, Name = "Rank")]
public String Rank;
[CsvColumn(FieldIndex = 2, Name = "Full Journal Title")]
@@ -42,6 +42,6 @@ class JCRCSV
public String AverageJournalImpactFactorPercentile;
[CsvColumn(FieldIndex = 18, Name = "Normalized Eigenfactor")]
public String NormalizedEigenfactor;
-
+#pragma warning restore CS0649
}
}
diff --git a/LattesExtractor/Entities/Xml/LMPLCurriculo.cs b/LattesExtractor/Entities/Xml/LMPLCurriculo.cs
index b27cff2..c2a7fda 100644
--- a/LattesExtractor/Entities/Xml/LMPLCurriculo.cs
+++ b/LattesExtractor/Entities/Xml/LMPLCurriculo.cs
@@ -5912,9 +5912,12 @@ public enum VINCULOSFLAGDEDICACAOEXCLUSIVA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -5928,6 +5931,9 @@ public enum VINCULOSFLAGVINCULOEMPREGATICIO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -6514,6 +6520,9 @@ public enum LINHADEPESQUISAFLAGLINHADEPESQUISAATIVA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -8574,6 +8583,9 @@ public enum INTEGRANTESDOPROJETOFLAGRESPONSAVEL {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -8846,6 +8858,9 @@ public enum PROJETODEPESQUISAFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -9304,6 +9319,9 @@ public enum DADOSGERAISPERMISSAODEDIVULGACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -9748,6 +9766,9 @@ public enum DADOSBASICOSDOTRABALHOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -9761,6 +9782,9 @@ public enum DADOSBASICOSDOTRABALHOFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -10456,6 +10480,9 @@ public enum DADOSBASICOSDOARTIGOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -10469,6 +10496,9 @@ public enum DADOSBASICOSDOARTIGOFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -11025,6 +11055,9 @@ public enum DADOSBASICOSDOLIVROFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -11038,6 +11071,9 @@ public enum DADOSBASICOSDOLIVROFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -11462,6 +11498,9 @@ public enum DADOSBASICOSDOCAPITULOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -11475,6 +11514,9 @@ public enum DADOSBASICOSDOCAPITULOFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -11967,6 +12009,9 @@ public enum DADOSBASICOSDOTEXTOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -11980,6 +12025,9 @@ public enum DADOSBASICOSDOTEXTOFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -12494,6 +12542,9 @@ public enum DADOSBASICOSDEOUTRAPRODUCAOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -12899,6 +12950,9 @@ public enum DADOSBASICOSDAPARTITURAFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -13348,6 +13402,9 @@ public enum DADOSBASICOSDOPREFACIOPOSFACIOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -13815,6 +13872,9 @@ public enum DADOSBASICOSDATRADUCAOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -14457,6 +14517,9 @@ public enum DADOSBASICOSDACULTIVARFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -14470,6 +14533,9 @@ public enum DADOSBASICOSDACULTIVARFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -15150,6 +15216,9 @@ public enum DADOSBASICOSDOSOFTWAREFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -15163,6 +15232,9 @@ public enum DADOSBASICOSDOSOFTWAREFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -15176,6 +15248,9 @@ public enum DADOSBASICOSDOSOFTWAREFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -15582,6 +15657,9 @@ public enum DADOSBASICOSDAPATENTEFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -15595,6 +15673,9 @@ public enum DADOSBASICOSDAPATENTEFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -16006,6 +16087,9 @@ public enum DADOSBASICOSDODESENHOINDUSTRIALFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -16019,6 +16103,9 @@ public enum DADOSBASICOSDODESENHOINDUSTRIALFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -16303,6 +16390,9 @@ public enum DADOSBASICOSDAMARCAFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -16316,6 +16406,9 @@ public enum DADOSBASICOSDAMARCAFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -16600,6 +16693,9 @@ public enum DADOSBASICOSDATOPOGRAFIADECIRCUITOINTEGRADOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -16613,6 +16709,9 @@ public enum DADOSBASICOSDATOPOGRAFIADECIRCUITOINTEGRADOFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -17073,6 +17172,9 @@ public enum DADOSBASICOSDOPRODUTOTECNOLOGICOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -17086,6 +17188,9 @@ public enum DADOSBASICOSDOPRODUTOTECNOLOGICOFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -17538,6 +17643,9 @@ public enum DADOSBASICOSDOPROCESSOSOUTECNICASFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -17551,6 +17659,9 @@ public enum DADOSBASICOSDOPROCESSOSOUTECNICASFLAGPOTENCIALINOVACAO {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -17996,6 +18107,9 @@ public enum DADOSBASICOSDOTRABALHOTECNICOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -18565,6 +18679,9 @@ public enum DADOSBASICOSDAAPRESENTACAODETRABALHOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -18578,6 +18695,9 @@ public enum DADOSBASICOSDAAPRESENTACAODETRABALHOFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -18999,6 +19119,9 @@ public enum DADOSBASICOSDECARTAMAPAOUSIMILARFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -19445,6 +19568,9 @@ public enum DADOSBASICOSDECURSOSCURTADURACAOMINISTRADOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -19458,6 +19584,9 @@ public enum DADOSBASICOSDECURSOSCURTADURACAOMINISTRADOFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -19927,6 +20056,9 @@ public enum DADOSBASICOSDOMATERIALDIDATICOOUINSTRUCIONALFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -19940,6 +20072,9 @@ public enum DADOSBASICOSDOMATERIALDIDATICOOUINSTRUCIONALFLAGDIVULGACAOCIENTIFICA
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -20328,6 +20463,9 @@ public enum DADOSBASICOSDEEDITORACAOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -20714,6 +20852,9 @@ public enum DADOSBASICOSDEMANUTENCAODEOBRAARTISTICAFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -21118,6 +21259,9 @@ public enum DADOSBASICOSDAMAQUETEFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -21522,15 +21666,18 @@ public enum DADOSBASICOSDAORGANIZACAODEEVENTOTIPO {
///
FEIRA,
-
+
///
OLIMPÍADA,
-
+
///
OUTRO,
///
NAO_INFORMADO,
+
+ ///
+ OLIMPIADA = OLIMPÍADA,
}
///
@@ -21600,6 +21747,9 @@ public enum DADOSBASICOSDAORGANIZACAODEEVENTOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -21613,6 +21763,9 @@ public enum DADOSBASICOSDAORGANIZACAODEEVENTOFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -22028,6 +22181,9 @@ public enum DADOSBASICOSDOPROGRAMADERADIOOUTVFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -22062,6 +22218,8 @@ public enum DADOSBASICOSDOPROGRAMADERADIOOUTVMEIODEDIVULGACAO {
///
NAO_INFORMADO,
+
+ nao_informado = NAO_INFORMADO,
}
///
@@ -22075,6 +22233,9 @@ public enum DADOSBASICOSDOPROGRAMADERADIOOUTVFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -22475,6 +22636,9 @@ public enum DADOSBASICOSDORELATORIODEPESQUISAFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -22843,6 +23007,9 @@ public enum DADOSBASICOSDAMIDIASOCIALWEBSITEBLOGFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -22856,6 +23023,9 @@ public enum DADOSBASICOSDAMIDIASOCIALWEBSITEBLOGFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -23228,6 +23398,9 @@ public enum DADOSBASICOSDEOUTRAPRODUCAOTECNICAFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -23241,6 +23414,9 @@ public enum DADOSBASICOSDEOUTRAPRODUCAOTECNICAFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -23864,6 +24040,9 @@ public enum DADOSBASICOSDAAPRESENTACAODEOBRAARTISTICAFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -24407,6 +24586,9 @@ public enum DADOSBASICOSDAAPRESENTACAOEMRADIOOUTVFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -24420,6 +24602,9 @@ public enum DADOSBASICOSDAAPRESENTACAOEMRADIOOUTVFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -24829,6 +25014,9 @@ public enum DADOSBASICOSDOARRANJOMUSICALFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -25247,6 +25435,9 @@ public enum DADOSBASICOSDACOMPOSICAOMUSICALFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -25652,6 +25843,9 @@ public enum DADOSBASICOSDOCURSODECURTADURACAOFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -26109,6 +26303,9 @@ public enum DADOSBASICOSDAOBRADEARTESVISUAISFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -26595,6 +26792,9 @@ public enum DADOSBASICOSDEOUTRAPRODUCAOARTISTICACULTURALFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -26608,6 +26808,9 @@ public enum DADOSBASICOSDEOUTRAPRODUCAOARTISTICACULTURALFLAGDIVULGACAOCIENTIFICA
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -27016,6 +27219,9 @@ public enum DADOSBASICOSDESONOPLASTIAFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -27375,6 +27581,9 @@ public enum DADOSBASICOSDEARTESCENICASFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -27422,6 +27631,9 @@ public enum DADOSBASICOSDEARTESCENICASFLAGDIVULGACAOCIENTIFICA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -27990,6 +28202,9 @@ public enum DADOSBASICOSDEARTESVISUAISFLAGRELEVANCIA {
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -28034,9 +28249,12 @@ public enum DADOSBASICOSDEARTESVISUAISFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -28482,9 +28700,12 @@ public enum DADOSBASICOSDAMUSICAFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -28495,9 +28716,12 @@ public enum DADOSBASICOSDAMUSICAFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -29076,9 +29300,12 @@ public enum DADOSBASICOSDEORIENTACOESCONCLUIDASPARAMESTRADOFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -29540,9 +29767,12 @@ public enum DADOSBASICOSDEORIENTACOESCONCLUIDASPARADOUTORADOFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -30004,9 +30234,12 @@ public enum DADOSBASICOSDEORIENTACOESCONCLUIDASPARAPOSDOUTORADOFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -30501,9 +30734,12 @@ public enum DADOSBASICOSDEOUTRASORIENTACOESCONCLUIDASFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -31014,9 +31250,12 @@ public enum DADOSBASICOSDEDEMAISTRABALHOSFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -36344,9 +36583,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMCONGRESSOFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -36357,9 +36599,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMCONGRESSOFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -36869,9 +37114,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMFEIRAFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -36882,9 +37130,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMFEIRAFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -37319,9 +37570,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMSEMINARIOFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -37332,9 +37586,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMSEMINARIOFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -37769,9 +38026,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMSIMPOSIOFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -37782,9 +38042,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMSIMPOSIOFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -38219,9 +38482,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMOFICINAFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -38232,9 +38498,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMOFICINAFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -38669,9 +38938,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMENCONTROFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -38682,9 +38954,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMENCONTROFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -39119,9 +39394,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMEXPOSICAOFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -39132,9 +39410,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMEXPOSICAOFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -39569,9 +39850,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMOLIMPIADAFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -39582,9 +39866,12 @@ public enum DADOSBASICOSDAPARTICIPACAOEMOLIMPIADAFLAGDIVULGACAOCIENTIFICA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -40019,9 +40306,12 @@ public enum DADOSBASICOSDEOUTRASPARTICIPACOESEMEVENTOSCONGRESSOSFLAGRELEVANCIA {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -40032,9 +40322,12 @@ public enum DADOSBASICOSDEOUTRASPARTICIPACOESEMEVENTOSCONGRESSOSFLAGDIVULGACAOCI
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -43153,9 +43446,12 @@ public enum INFORMACAOADICIONALINSTITUICAOFLAGAGENCIAFOMENTO {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
@@ -43166,9 +43462,12 @@ public enum INFORMACAOADICIONALINSTITUICAOFLAGINSTITUICAODEENSINO {
///
SIM,
-
+
///
NAO,
+
+ sim = SIM,
+ nao = NAO,
}
///
diff --git a/LattesExtractor/LattesExtractor.csproj b/LattesExtractor/LattesExtractor.csproj
index 69f26e6..436f542 100644
--- a/LattesExtractor/LattesExtractor.csproj
+++ b/LattesExtractor/LattesExtractor.csproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -9,7 +9,7 @@
Properties
LattesExtractor
LattesExtractor
- v4.5
+ v4.6.1
512
false
true
@@ -28,6 +28,7 @@
false
true
true
+
AnyCPU
@@ -108,7 +109,9 @@
-
+
+
+
@@ -230,7 +233,8 @@
LattesDatabase.tt
-
+
+
@@ -242,7 +246,7 @@
-
+
@@ -264,6 +268,10 @@
+
+ PreserveNewest
+
+
PreserveNewest
@@ -312,8 +320,54 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
+ Designer
diff --git a/LattesExtractor/LattesExtractor.log4net b/LattesExtractor/LattesExtractor.log4net
index b8d8c39..c1d37f7 100644
--- a/LattesExtractor/LattesExtractor.log4net
+++ b/LattesExtractor/LattesExtractor.log4net
@@ -1,27 +1,25 @@
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LattesExtractor/LattesModule.cs b/LattesExtractor/LattesModule.cs
index 89ccac9..249093e 100644
--- a/LattesExtractor/LattesModule.cs
+++ b/LattesExtractor/LattesModule.cs
@@ -4,6 +4,9 @@
using log4net;
using LattesExtractor.Entities;
using System.IO;
+using LattesExtractor.Collections;
+using System.Threading;
+using LattesExtractor.Entities.Database;
namespace LattesExtractor
{
@@ -15,8 +18,11 @@ class LattesModule
private static readonly object locker = new object();
- private Stack _curriculumVitaesForProcess = new Stack();
- private Stack _curriculumVitaeNumbersToDownload = new Stack();
+ private Channel _cvForDownload = new Channel();
+ private Channel _cvForProcess = new Channel();
+
+ public Channel CurriculumVitaeForDownload { get { return this._cvForDownload; } }
+ public Channel CurriculumVitaeForProcess { get { return this._cvForProcess; } }
private String _tempDir = "";
private String _qualisFile = "";
@@ -24,13 +30,19 @@ class LattesModule
private string _lattesCurriculumValueQuery = null;
private string _lattesCurriculumValueConnection = null;
private string _importFolder = null;
+ private string _csvCurriculumValueNumberList = null;
+ private List _doneEventsGetCurriculumVitae = new List();
+ private List _doneEventsListCurriculumVitae = new List();
+ private List _doneEventsProcessCurriculumVitae = new List();
private static LattesModule _instance;
public static LattesModule GetInstance()
{
if (_instance == null)
+ {
_instance = new LattesModule();
+ }
return _instance;
}
@@ -57,6 +69,8 @@ public string ImportFolder
}
public bool IgnorePendingLastExecution { get; set; }
+ public bool UseNewCNPqRestService { get; set; }
+ public bool ShowProgressBar { get; internal set; }
public String TempDirectory
{
@@ -69,6 +83,20 @@ public String TempDirectory
}
}
+ public string CSVCurriculumVitaeNumberList { get { return _csvCurriculumValueNumberList; }
+ set
+ {
+ this._csvCurriculumValueNumberList = value;
+
+ if (this._csvCurriculumValueNumberList != null)
+ {
+ this._csvCurriculumValueNumberList = this._csvCurriculumValueNumberList
+ .Replace('\\', Path.DirectorySeparatorChar)
+ .Replace('/', Path.DirectorySeparatorChar);
+ }
+ }
+ }
+
public String QualisFileName
{
get { return this._qualisFile; }
@@ -94,41 +122,131 @@ public string LattesCurriculumVitaeODBCConnection
public CurriculoLattesWebService.WSCurriculoClient WSCurriculoClient { get { return this.wscc; } }
+ private void QueueThreadListCurriculumVitae(Action workItem)
+ {
+ var doneEvent = new ManualResetEvent(false);
+ ThreadPool.QueueUserWorkItem((object threadContext) => workItem(doneEvent));
+ _doneEventsListCurriculumVitae.Add(doneEvent);
+ }
+
+ private void QueueThreadGetCurriculumVitae(Action workItem)
+ {
+ var doneEvent = new ManualResetEvent(false);
+ ThreadPool.QueueUserWorkItem((object threadContext) => workItem(doneEvent));
+ _doneEventsGetCurriculumVitae.Add(doneEvent);
+ }
+
+ private void QueueThreadProcessCurriculumVitae(Action workItem)
+ {
+ var doneEvent = new ManualResetEvent(false);
+ ThreadPool.QueueUserWorkItem((object threadContext) => workItem(doneEvent));
+ _doneEventsProcessCurriculumVitae.Add(doneEvent);
+ }
+
private void LoadCurriculums()
{
- if (this.IgnorePendingLastExecution == false)
+ if (IgnorePendingLastExecution == false)
{
- LoadFromTempDirectory.LoadCurriculums(this);
- if (this.HasNextCurriculumVitaeForProcess)
+ var loadFromTempDirectory = new LoadFromTempDirectory(this, TempDirectory, CurriculumVitaeForProcess);
+ if (loadFromTempDirectory.HasPendingResumes())
{
+ Logger.Info(String.Format("Foram encontrados XMLs pendentes na pasta '{0}' !'", TempDirectory));
+ QueueThreadGetCurriculumVitae(loadFromTempDirectory.LoadCurriculums);
return;
}
}
- if (this.ImportFolder != null)
+ if (ImportFolder != null)
{
- Logger.Info(String.Format("Lendo Currículos do diretório '{0}'...", this.ImportFolder));
- ImportCurriculumVitaeFromFolderController.LoadCurriculums(this, this.ImportFolder);
+ Logger.Info(String.Format("Lendo Currículos do diretório '{0}'...", ImportFolder));
+ var importFromFolder = new ImportCurriculumVitaeFromFolderController(
+ this,
+ ImportFolder,
+ CurriculumVitaeForProcess
+ );
+ QueueThreadGetCurriculumVitae(importFromFolder.LoadCurriculums);
return;
}
Logger.Info("Iniciando Carga dos Números de Currículo da Instituição...");
- LoadCurriculumVitaeNumberController.LoadCurriculumVitaeNumbers(this);
+ if (CSVCurriculumVitaeNumberList != null)
+ {
+ var csvListController = new LoadCurriculumVitaeNumberFromCSVController(
+ this,
+ CSVCurriculumVitaeNumberList,
+ CurriculumVitaeForDownload
+ );
+ QueueThreadListCurriculumVitae(csvListController.LoadCurriculumVitaeNumbers);
+ }
+
+ if (CSVCurriculumVitaeNumberList == null)
+ {
+ var oleDbController = new LoadCurriculumVitaeNumberFromOleDbController(
+ this,
+ LattesCurriculumVitaeODBCConnection,
+ LattesCurriculumVitaeQuery,
+ CurriculumVitaeForDownload
+ );
+ QueueThreadListCurriculumVitae(oleDbController.LoadCurriculumVitaeNumbers);
+ }
- Logger.Info("Iniciando Download dos Currículos Atualizados...");
- DownloadCurriculumVitaeController.DownloadUpdatedCurriculums(this);
+ if (UseNewCNPqRestService)
+ {
+ Logger.Info("Iniciando Download dos Currículos Atualizados (REST Service)...");
+ var downloadRestService = new DownloadFromRestServiceCurriculumVitaeController(
+ this,
+ new LattesDatabase(),
+ CurriculumVitaeForDownload,
+ CurriculumVitaeForProcess
+ );
+ QueueThreadGetCurriculumVitae(downloadRestService.DownloadUpdatedCurriculums);
+ return;
+ }
+
+ Logger.Info("Iniciando Download dos Currículos Atualizados (WebService)...");
+ var downloadWebService = new DownloadFromWebServiceCurriculumVitaeController(
+ this,
+ new Service.DownloadCurriculumVitaeWebService(
+ new LattesDatabase(),
+ WSCurriculoClient
+ ),
+ CurriculumVitaeForDownload,
+ CurriculumVitaeForProcess
+ );
+ QueueThreadGetCurriculumVitae(downloadWebService.DownloadUpdatedCurriculums);
}
public void Extract()
{
try
{
+ if (UseNewCNPqRestService)
+ {
+ Logger.Error("A opção de utilizar o serviço \"buscacv\" do CNPq esta temporáriamente indisponível até se tornar estável");
+ }
+
Logger.Info("Começando Processamento...");
+ var processor = new CurriculumVitaeProcessorController(this, CurriculumVitaeForProcess);
+ QueueThreadProcessCurriculumVitae(processor.ProcessCurriculumVitaes);
+
LoadCurriculums();
Logger.Info("Iniciando Processamento dos Currículos...");
- CurriculumVitaeProcessorController.ProcessCurriculumVitaes(this);
+
+ if (_doneEventsListCurriculumVitae.Count > 0)
+ {
+ WaitHandle.WaitAll(_doneEventsListCurriculumVitae.ToArray());
+ Logger.Info("Todos os Currículos Foram Listados...");
+ }
+ CurriculumVitaeForDownload.Close();
+
+ WaitHandle.WaitAll(_doneEventsGetCurriculumVitae.ToArray());
+ Logger.Info("Todos os Currículos Foram Adicionados para Processamento...");
+ CurriculumVitaeForProcess.Close();
+
+ WaitHandle.WaitAll(_doneEventsProcessCurriculumVitae.ToArray());
+ Logger.Info("Todos os Currículos Foram Processados...");
}
catch (Exception ex)
{
@@ -140,19 +258,14 @@ public void Extract()
private void ShowException(Exception ex)
{
- Logger.Error("Erros durante a execução:");
- Logger.Error(ex.Message);
-
- Logger.Error(ex.StackTrace);
+ Logger.Error(String.Format("Erros durante a execução: {0}\n{2}", ex.Message, ex.StackTrace));
if (ex.InnerException != null)
{
- Logger.Error("Excessão Interna:");
int sequencia = 1;
while (ex.InnerException != null)
{
- Logger.Error(String.Format("Excessão Interna [{0}]: {1}", sequencia++, ex.InnerException.Message));
- Logger.Error(ex.StackTrace);
ex = ex.InnerException;
+ Logger.Error(String.Format("Excessão Interna [{0}]: {1}\n{2}", sequencia++, ex.Message, ex.StackTrace));
}
}
}
@@ -175,76 +288,5 @@ public string GetCurriculumVitaeFileName(string curriculumVitaeNumber)
{
return String.Format("{0}{1}{2}.xml", this.TempDirectory, Path.DirectorySeparatorChar, curriculumVitaeNumber);
}
-
- ///
- /// Adiciona um curriculo para curriculumVitaeUnserializer verificado para download
- ///
- ///
- public void AddCurriculumVitaeNumberToDownload(CurriculoEntry curriculumVitaeNumber)
- {
- _curriculumVitaeNumbersToDownload.Push(curriculumVitaeNumber);
- }
-
- ///
- /// Retorna eu ainda existem curriculos para download
- ///
- public bool HasNextCurriculumVitaeNumberToDownload
- {
- get
- {
- return _curriculumVitaeNumbersToDownload.Count > 0;
- }
- }
-
- ///
- /// Remove e retorna o ultimo registro da pilha de curriculos pendente para download
- ///
- ///
- public CurriculoEntry GetNextCurriculumVitaeNumberToDownload()
- {
- lock (locker)
- {
- if (_curriculumVitaeNumbersToDownload.Count > 0)
- return _curriculumVitaeNumbersToDownload.Pop();
- }
-
- return null;
- }
-
- ///
- /// Adiciona um curriculo para curriculumVitaeUnserializer processado
- ///
- ///
- public void AddCurriculumVitaeForProcess(CurriculoEntry curriculumVitaeNumber)
- {
- _curriculumVitaesForProcess.Push(curriculumVitaeNumber);
- }
-
- ///
- /// Retorna eu ainda existem curriculos para processar
- ///
- public bool HasNextCurriculumVitaeForProcess
- {
- get
- {
- return _curriculumVitaesForProcess.Count > 0;
- }
- }
-
- ///
- /// Remove e retorna o ultimo registro da pilha de curriculos pendente para processamento
- ///
- ///
- public CurriculoEntry GetNextCurriculumVitaeForProcess()
- {
- lock (locker)
- {
- if (_curriculumVitaesForProcess.Count > 0)
- return _curriculumVitaesForProcess.Pop();
- }
-
- return null;
- }
}
-
}
diff --git a/LattesExtractor/Program.cs b/LattesExtractor/Program.cs
index 0969741..5781aba 100644
--- a/LattesExtractor/Program.cs
+++ b/LattesExtractor/Program.cs
@@ -13,11 +13,16 @@ static void Main(string[] args)
XmlConfigurator.Configure(new System.IO.FileInfo("LattesExtractor.log4net"));
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
- LattesModule lm = LattesModule.GetInstance();
+ var lm = LattesModule.GetInstance();
lm.TempDirectory = config.AppSettings.Settings["TempDir"].Value;
- lm.LattesCurriculumVitaeODBCConnection = config.AppSettings.Settings["LattesCurriculumVitaeODBCConnection"].Value;
- lm.LattesCurriculumVitaeQuery = config.AppSettings.Settings["LattesCurriculumVitaeQuery"].Value;
+
+ if (config.AppSettings.Settings["LattesCurriculumVitaeODBCConnection"] != null &&
+ config.AppSettings.Settings["LattesCurriculumVitaeQuery"] != null)
+ {
+ lm.LattesCurriculumVitaeODBCConnection = config.AppSettings.Settings["LattesCurriculumVitaeODBCConnection"].Value;
+ lm.LattesCurriculumVitaeQuery = config.AppSettings.Settings["LattesCurriculumVitaeQuery"].Value;
+ }
if (config.AppSettings.Settings["IgnorePedingLastExecution"] != null)
{
@@ -29,23 +34,36 @@ static void Main(string[] args)
lm.ImportFolder = config.AppSettings.Settings["ImportFolder"].Value;
}
+ if (config.AppSettings.Settings["UseNewCNPqRestService"] != null)
+ {
+ lm.UseNewCNPqRestService = config.AppSettings.Settings["UseNewCNPqRestService"].Value.Equals("true") ||
+ config.AppSettings.Settings["UseNewCNPqRestService"].Value.Equals("1");
+ }
+
+ if (config.AppSettings.Settings["CSVCurriculumValueNumberList"] != null)
+ {
+ lm.CSVCurriculumVitaeNumberList = config.AppSettings.Settings["CSVCurriculumValueNumberList"].Value;
+ }
+
var options = new Options();
if (CommandLine.Parser.Default.ParseArguments(args, options))
{
if (options.InputQualisFile != null && options.InputQualisFile != "")
{
- // Values are available here
if (options.Verbose)
+ {
Console.WriteLine("Arquivo Qualis: {0}", options.InputQualisFile);
+ }
lm.UpdateQualisDataBase(options.InputQualisFile);
return;
}
if (options.InputJCRFile != null && options.InputJCRFile != "")
{
- // Values are available here
if (options.Verbose)
+ {
Console.WriteLine("Arquivo JCR Impact Factor: {0}", options.InputJCRFile);
+ }
lm.UpdateJCRImpactFactorDataBase(options.InputJCRFile);
return;
}
@@ -60,9 +78,18 @@ static void Main(string[] args)
lm.ImportFolder = options.FromFolder;
}
+ if (options.UseNewRestService)
+ {
+ lm.UseNewCNPqRestService = options.UseNewRestService;
+ }
+
+ if (options.CSVCurriculumVitaeNumberList != null)
+ {
+ lm.CSVCurriculumVitaeNumberList = options.CSVCurriculumVitaeNumberList;
+ }
+
lm.Extract();
}
-
}
public static void AddValue(string key, string value)
@@ -74,6 +101,12 @@ public static void AddValue(string key, string value)
class Options
{
+ [Option('n', "usenewrestservice", DefaultValue = false, HelpText = "Será utilizado o serviço REST do CNPq no lugar do WebService")]
+ public bool UseNewRestService { get; set; }
+
+ [Option('c', "cvcsvlist", Required = false, HelpText = "Arquivo CSV para importar a lista de currículos para download")]
+ public string CSVCurriculumVitaeNumberList { get; set; }
+
[Option('f', "fromfolder", Required = false, HelpText = "Directório contendo os arquivos XML (caso seja informado serão considerados apenas os curriculos já existentes na pasta, não será feita busca no Lattes)")]
public string FromFolder { get; set; }
diff --git a/LattesExtractor/Service/DownloadCurriculumVitaeService.cs b/LattesExtractor/Service/DownloadCurriculumVitaeWebService.cs
similarity index 84%
rename from LattesExtractor/Service/DownloadCurriculumVitaeService.cs
rename to LattesExtractor/Service/DownloadCurriculumVitaeWebService.cs
index 13a359e..b3ab412 100644
--- a/LattesExtractor/Service/DownloadCurriculumVitaeService.cs
+++ b/LattesExtractor/Service/DownloadCurriculumVitaeWebService.cs
@@ -1,99 +1,99 @@
-using ICSharpCode.SharpZipLib.Core;
-using ICSharpCode.SharpZipLib.Zip;
-using LattesExtractor.CurriculoLattesWebService;
-using LattesExtractor.Entities;
-using LattesExtractor.Entities.Database;
-using log4net;
-using System;
-using System.IO;
-using System.Linq;
-
-namespace LattesExtractor.Service
-{
- class DownloadCurriculumVitaeService
- {
- protected LattesDatabase db;
- protected WSCurriculoClient ws;
-
- private static readonly ILog Logger = LogManager.GetLogger(typeof(DownloadCurriculumVitaeService).Name);
-
- public DownloadCurriculumVitaeService(LattesDatabase db, WSCurriculoClient ws)
- {
- this.db = db;
- this.ws = ws;
- }
-
- public MemoryStream GetCurriculumVitaeIfUpdated(CurriculoEntry curriculumVitae)
- {
- Nullable dataAtualizacaoLattes = null;
- Nullable dataAtualizacaoSistema;
- string dataAtualizacaoString;
-
- if (curriculumVitae.NumeroCurriculo == null || curriculumVitae.NumeroCurriculo == "")
- {
- Logger.Info(String.Format("Buscando Número do Currículo do Professor {0}", curriculumVitae.NomeProfessor));
- curriculumVitae.NumeroCurriculo = ws.getIdentificadorCNPq(curriculumVitae.CPF, curriculumVitae.NomeProfessor, curriculumVitae.DataNascimento);
-
- if (curriculumVitae.NumeroCurriculo == null || curriculumVitae.NumeroCurriculo == "" || curriculumVitae.NumeroCurriculo.Contains("ERRO"))
- return null;
-
- Logger.Info(String.Format("Número do Currículo do Professor {0} encontrado: {1}", curriculumVitae.NomeProfessor, curriculumVitae.NumeroCurriculo));
- }
-
- // verificar se a data de atualizacao do CV é maior que a do sistema
-
- dataAtualizacaoSistema = this.GetDataAtualizacaoProfessor(curriculumVitae.NumeroCurriculo);
-
- if (dataAtualizacaoSistema != null)
- {
- dataAtualizacaoString = ws.getDataAtualizacaoCV(curriculumVitae.NumeroCurriculo);
-
- if (dataAtualizacaoString == "")
- dataAtualizacaoLattes = DateTime.Today;
- else
- dataAtualizacaoLattes = DateTime.ParseExact(dataAtualizacaoString, "dd/MM/yyyy %H:mm:ss", null);
-
- if (dataAtualizacaoSistema >= dataAtualizacaoLattes)
- return null; // curriculo não precisa curriculumVitaeUnserializer atualizado
- }
-
- if (dataAtualizacaoLattes != null)
- curriculumVitae.DataUltimaAtualizacao = (DateTime)dataAtualizacaoLattes;
-
- byte[] zip = ws.getCurriculoCompactado(curriculumVitae.NumeroCurriculo);
-
- if (zip == null || zip.Length == 0)
- {
- Logger.Error(String.Format("Aconteceu um erro ao tentar buscar o currículo de Número {0}, favor verificar o mesmo", curriculumVitae.NumeroCurriculo));
- return null;
- }
-
- return ProcessarRetornoCurriculo(zip);
- }
-
- private MemoryStream ProcessarRetornoCurriculo(byte[] curriculo)
- {
- ZipInputStream zis;
- MemoryStream xml;
-
- zis = new ZipInputStream(new MemoryStream(curriculo));
- zis.GetNextEntry();
- xml = new MemoryStream();
-
- StreamUtils.Copy(zis, xml, new byte[4096]);
- xml.Seek(0, SeekOrigin.Begin);
-
- return xml;
- }
-
- private Nullable GetDataAtualizacaoProfessor(string numeroCurriculo)
- {
- var p = db.Professor.FirstOrDefault(prof => prof.NumeroCurriculo == numeroCurriculo);
-
- if (p == null)
- return null;
- else
- return p.DataUltimaAtualizacaoCurriculo;
- }
- }
-}
+using ICSharpCode.SharpZipLib.Core;
+using ICSharpCode.SharpZipLib.Zip;
+using LattesExtractor.CurriculoLattesWebService;
+using LattesExtractor.Entities;
+using LattesExtractor.Entities.Database;
+using log4net;
+using System;
+using System.IO;
+using System.Linq;
+
+namespace LattesExtractor.Service
+{
+ class DownloadCurriculumVitaeWebService
+ {
+// protected LattesDatabase db;
+ protected WSCurriculoClient ws;
+
+ private static readonly ILog Logger = LogManager.GetLogger(typeof(DownloadCurriculumVitaeWebService).Name);
+
+ public DownloadCurriculumVitaeWebService(LattesDatabase db, WSCurriculoClient ws)
+ {
+ //this.db = db;
+ this.ws = ws;
+ }
+
+ public MemoryStream GetCurriculumVitaeIfUpdated(CurriculoEntry curriculumVitae)
+ {
+ Nullable dataAtualizacaoLattes = null;
+ Nullable dataAtualizacaoSistema;
+ string dataAtualizacaoString;
+
+ if (curriculumVitae.NumeroCurriculo == null || curriculumVitae.NumeroCurriculo == "")
+ {
+ Logger.Info(String.Format("Buscando Número do Currículo do Professor {0}", curriculumVitae.NomeProfessor));
+ curriculumVitae.NumeroCurriculo = ws.getIdentificadorCNPq(curriculumVitae.CPF, curriculumVitae.NomeProfessor, curriculumVitae.DataNascimento);
+
+ if (curriculumVitae.NumeroCurriculo == null || curriculumVitae.NumeroCurriculo == "" || curriculumVitae.NumeroCurriculo.Contains("ERRO"))
+ return null;
+
+ Logger.Info(String.Format("Número do Currículo do Professor {0} encontrado: {1}", curriculumVitae.NomeProfessor, curriculumVitae.NumeroCurriculo));
+ }
+
+ // verificar se a data de atualizacao do CV é maior que a do sistema
+
+ dataAtualizacaoSistema = this.GetDataAtualizacaoProfessor(curriculumVitae.NumeroCurriculo);
+
+ if (dataAtualizacaoSistema != null)
+ {
+ dataAtualizacaoString = ws.getDataAtualizacaoCV(curriculumVitae.NumeroCurriculo);
+
+ if (dataAtualizacaoString == "")
+ dataAtualizacaoLattes = DateTime.Today;
+ else
+ dataAtualizacaoLattes = DateTime.ParseExact(dataAtualizacaoString, "dd/MM/yyyy %H:mm:ss", null);
+
+ if (dataAtualizacaoSistema >= dataAtualizacaoLattes)
+ return null; // curriculo não precisa curriculumVitaeUnserializer atualizado
+ }
+
+ if (dataAtualizacaoLattes != null)
+ curriculumVitae.DataUltimaAtualizacao = (DateTime)dataAtualizacaoLattes;
+
+ byte[] zip = ws.getCurriculoCompactado(curriculumVitae.NumeroCurriculo);
+
+ if (zip == null || zip.Length == 0)
+ {
+ Logger.Error(String.Format("Aconteceu um erro ao tentar buscar o currículo de Número {0}, favor verificar o mesmo", curriculumVitae.NumeroCurriculo));
+ return null;
+ }
+
+ return ProcessarRetornoCurriculo(zip);
+ }
+
+ private MemoryStream ProcessarRetornoCurriculo(byte[] curriculo)
+ {
+ var zis = new ZipInputStream(new MemoryStream(curriculo));
+ zis.GetNextEntry();
+ var xml = new MemoryStream();
+
+ StreamUtils.Copy(zis, xml, new byte[4096]);
+ xml.Seek(0, SeekOrigin.Begin);
+
+ return xml;
+ }
+
+ private Nullable GetDataAtualizacaoProfessor(string numeroCurriculo)
+ {
+ var db = new LattesDatabase();
+ var p = db.Professor.FirstOrDefault(prof => prof.NumeroCurriculo == numeroCurriculo);
+
+ if (p == null)
+ {
+ return null;
+ }
+
+ return p.DataUltimaAtualizacaoCurriculo;
+ }
+ }
+}
diff --git a/LattesExtractor/resources/csv_list_sample.csv b/LattesExtractor/resources/csv_list_sample.csv
new file mode 100644
index 0000000..730362c
--- /dev/null
+++ b/LattesExtractor/resources/csv_list_sample.csv
@@ -0,0 +1,1158 @@
+NumeroCurriculo;NomeProfessor;DataNascimento;CPF;
+8114061487322311;Vanessa Naomi Yuassa Colella;;;
+8794993741473111;Matheus da Luz Rodrigues;;;
+7948736335298361;Romilda Rosa Ueno;;;
+0531233032312369;Lucio Vasconcelos dos Santos;;;
+8761402399386541;Roseneide Campos Deglmann;;;
+5436528326023047;Daniella Cristina Baier Silva;;;
+6250585878017282;Mayza Alves Moreira;;;
+8435878887743314;Graziela de Souza Constante;;;
+6937932711005890;Edson Sydney de Campos;;;
+4940510671670350;Katia Maria Maia Cubas;;;
+8182708851993456;Patricia Almeida Velho;;;
+9594137612870657;Nelma Baldin;;;
+5984138138332842;Abílio Lenzi;;;
+4714575226491221;Ana Paula Marotto Homrich;;;
+1476232184772435;Sônia Maria Kohler Dias;;;
+1663917730062027;Custodio da Cunha Alves;;;
+9327226398953026;Michele Cristina Formolo Garcia;;;
+1161531998808981;José Kempner;;;
+9905034089406384;Tatiana da Cunha Gomes Leitzke;;;
+2357593155622016;Telma Acacia Pacheco Hausen;;;
+8874458183418144;Alessandra Cristina Mello dos Passos;;;
+2397402390693133;Marilene de Fátima Pereira Gerent;;;
+3223784469661704;Carlos Eduardo Pinarel Arruda;;;
+4534554406627748;Cynthia Hering Rinnert;;;
+6719185308619208;Silmara Salete de Barros Silva Mastroeni;;;
+5884364500815625;Tales Vicenzi;;;
+9243011808746393;Januaria Ramos Pereira;;;
+7262707317246301;Milena Vanessa Pscheidt;;;
+2499759093108820;Karoline Kuss;;;
+6902974973116567;Juliana Orzechowski;;;
+4399537854451560;Wilmar Anderle;;;
+2994907563510318;Larissa Angeoleti;;;
+4773626778385575;Gustavo Antunes;;;
+5001609154782288;Natália Baggio Andrade;;;
+4081249175504262;Simone Barbosa;;;
+6582082379008628;Renato Becker;;;
+4752015277402055;Ronaldo Bitencourt;;;
+6027243627552531;Eliezer Bittencourt;;;
+0339161757531274;Flaviany Boeing;;;
+5604759288315935;Daniela Bolz Arruda;;;
+0736244777048157;Angelica Botini;;;
+2070548030834767;Romeu Brammer;;;
+9858175640573572;Vivia Buzzi;;;
+0470751175253559;Givanilson Caboclo;;;
+0477650886188828;Débora Capanema;;;
+2382953892422076;Silvana Cardoso;;;
+0201745013789494;Julia Carelli;;;
+0800605208904246;Enori Carelli;;;
+6119073951223872;Jean Carlo Bona;;;
+1055101479000632;Aline Casas;;;
+2214857526607443;Luzmar Carlos Cascaes;;;
+8884207188142977;Wagner Cavalheiro;;;
+4706370372298073;Elisandra Cavalheiro;;;
+6489891493884698;Regina Back Cavassin;;;
+8058655586020510;Marina Cipriani;;;
+0061600996931763;Lucinda Clarita Boehm;;;
+9861854779845395;Ana Claudia Cardoso;;;
+5072328211419360;Ronald Alan Cochak;;;
+8692364903636843;Maria Clara Colin;;;
+7457160516048927;Dina Carazzai Condeixa;;;
+1026427371354344;Janaina Constantino;;;
+0522124109620857;Isaias Cordeiro;;;
+5270314700165979;Emanuele Cordeiro;;;
+5047794360682483;Iara Andrade Costa;;;
+8645041265539020;Thiago cristhian carlet costa;;;
+0653124621152767;Thamara Cristina Brehm;;;
+1687812299101821;Maria Cristina Alves;;;
+0566811776369991;Renato Cristofolini;;;
+4088002805076378;Fernanda Cruzzeta;;;
+1705062446824638;Stéfani da Cruz;;;
+3025035909258412;César Adriano da Cruz;;;
+8506390780991618;Grasiela Dagnoni;;;
+2841386140856138;Cindy Dalfovo;;;
+0171325444294141;Karin Dalila Bilk;;;
+7915654759700524;Fernanda Dalonso;;;
+0302371819656760;Eloyse Caroline Davet;;;
+2002701724476455;Amilton Cézar de Aguiar;;;
+4803249171257883;Susimara Braga de Almeida;;;
+3023577521092170;Rita de Cassia Alves;;;
+2483534367251728;maicon de Almeida;;;
+3434205069336518;Conrado Borges de Barros;;;
+3088157658982307;Annelise de Albuquerque Adão;;;
+5633653372816495;Majory de Aquino;;;
+2857885381745689;Daiane Aparecida Devegili;;;
+4246105504168572;Aruana do Amaral;;;
+9457388879123110;Itamar Domingues;;;
+3774191120132685;Jerson Dutra;;;
+1357921637914404;Maria Eduarda Berri;;;
+4409739900746576;Marlom Erlei Dambros;;;
+7821027489562885;Martinho Exterkoetter;;;
+9012954294802155;Marcio Fanes;;;
+1232380602451993;Meryellen Felicio;;;
+9290332003936845;Diego Fernandes dias;;;
+5094445455260021;Gustavo de Almeida Chagas Fernandes;;;
+3209963891752123;Giseli Fernandes;;;
+0038603536292104;Bianca Catini Fernandes;;;
+5390795920948093;Jéssica Augustini Ferreira;;;
+4071767880863014;Marina Fernanda Ferreira;;;
+5682796259270082;Vanessa Ferretti;;;
+5179182781771844;Priscila Ferst;;;
+7803420695238997;Eriberto Fleischmann;;;
+7329667416992162;Jani Floriano;;;
+0702255630532273;Maria das Dores França;;;
+4029413181518678;Marco Aurélio Francisco;;;
+5042875350944851;Dúnia Anjos de Freitas;;;
+2265265607718577;Carlos Eduardo Friedrich;;;
+9978506529580238;Kathia Fritsch;;;
+1384193113504223;Edelos Frühstück;;;
+5801356604456009;Fabiano Furlan;;;
+4241946151846544;Wilson Furtado;;;
+4483876307404110;Katja Elizabeth Fuxreiter;;;
+4572277442291864;Francine Gabriela Brammer Battisti;;;
+1475489443613492;Eliani Galdino;;;
+6657646182233122;Vanilda Barbosa Galli;;;
+2452351280111485;Marilia Cepeda Garcia;;;
+0151464438100603;Bruna Cepeda Garcia;;;
+5130038612487402;Tatiane Cristina Gheno;;;
+7179248368040582;Diucleia Giese;;;
+5040403442300500;Lucimar Gislene Gesser;;;
+3075834658620571;Jéssica Fernanda Gomes;;;
+6538806933244920;Andreia Cristina Gonzaga Florencio;;;
+4002526778408979;Eleide Abril Gordon Findlay;;;
+3632496960005669;Fabiano Grecco de Carvalho;;;
+3072340033751868;Bruna Gregório;;;
+7077720109519166;Naiara Grimes Carneiro;;;
+9690109625722271;Jade Grosskopf;;;
+1025151280928167;Valdirene Gruber;;;
+2897281180119894;Luiz Cláudio Gubert;;;
+6505071905071640;Andréia Gutberlet;;;
+0414853757854742;Cláudia Hack Gumz Correia;;;
+3409602707766579;Racham Hamedt;;;
+0019591620467208;Fernando Hanig Ferreira;;;
+3852292544421441;Marcelo Hans Alexandre;;;
+7706484358492070;Franco Haritsch;;;
+6461953877514639;Guilherme Harnoud Evaristo;;;
+2919769105792496;Thamiris Fagundes Henschel;;;
+9479320233061999;Cecilia Hess;;;
+4338414238426644;Annelise Colin Holz;;;
+1008741930844102;Taciane Holzapfel;;;
+5403123343309116;Jucilei Geraldo Hubner;;;
+1476371111195692;Josiane Iargas;;;
+5999609833804726;Nalu Iglesias;;;
+8364210257697453;Afonso Imhof;;;
+2511618212899777;Lucas Inácio;;;
+0051626479888624;Maria Isabel Battisti Archer;;;
+8014568312811510;Gabriel Horn Iwaya;;;
+5464656655666680;Maria Elisa Horn Iwaya;;;
+1068439716902505;José Carlos Iwaya;;;
+7176921153371957;Felipe João Dutra;;;
+9925295376509612;Victor Hugo Antonio Joaquim;;;
+6190774946904640;Ana Julia Correa;;;
+5184478976473504;Daniel Juliano Casas;;;
+2263098045564473;Fernando Antonio Julio;;;
+0366905697615564;Silleno José Dias Júnior;;;
+8355499954192153;Acir Alves Coelho Junior;;;
+5254055690630598;Elisangela Helena Kasprowicz Corrêa;;;
+2974939556140833;Arly Klein Junior;;;
+4586865791088100;Kaue Klimesch Canuto;;;
+9734949735151867;Jóice Elisa Klug;;;
+9141147919792745;Karine Kohl;;;
+3713084934870227;Werner Kohls;;;
+7474979611906943;Francieli Korquievicz;;;
+6848121755559392;Maria Eduarda Kostecki;;;
+2938927039368728;Patricia Kricheldorf Hermes de Araújo;;;
+9688692175364688;Ricardo Kurowsky;;;
+1650616872583457;Natalia Laís Duarte Bueno;;;
+3649045557660042;Taís Aparecida Lani;;;
+9003179252347963;Thaisa Lehner Kulevicz;;;
+4176858440081178;Viviane Claudete Lima;;;
+7484080498362207;Suzana Lima Cabral Gazola;;;
+5051539005352368;Jaqueline Lima Chaves;;;
+8137498574700140;Elizabeth de Lima;;;
+2138322570282546;Marília Bonelli Lima;;;
+1836949723073639;Felipe Borborema Cunha Lima;;;
+0792824534778037;Mara Gomes Lobo Fontan;;;
+5699410335125355;Nicole Longano Boeing;;;
+6996582387368237;Eduardo Geremias Lopes;;;
+5403943365131874;Marileide de Fatima Luckmann;;;
+9244209407211384;Edson Luis Ferreira;;;
+7203931498515674;Nicole Luise Koerber;;;
+1735676072758222;Ricardo Luiz Carneiro;;;
+9224434754164496;Ingrid Lohmann da Luz;;;
+5363390894021573;Meiriéle Cristina Machado;;;
+8258593234533297;Lilian Machado;;;
+2095197008392540;Gustavo Maciel Gouvea;;;
+2958644152471312;Luciano Madeira;;;
+2891543957833706;Leticia Maia;;;
+2584536817018576;Jessica Malgarin;;;
+3047585334148724;Fernando Mallon;;;
+4854424139558330;Ionara Manoela Corrêa;;;
+3448895952780479;Suelen Maria Beeck da Cunha;;;
+1739303796332877;Rosa Maria Inigo;;;
+8152768251379891;Walter Maria Junior;;;
+3045107188354858;Vitória Maria Krüger;;;
+9489788136684726;Celia Maria Condeixa de França Lopes;;;
+9003892284480568;Wagner Mariano Jardim;;;
+5412701375617980;Dalva Marques;;;
+2816338792211616;Ellen Martini;;;
+0029430730259495;Nilza Martins Marcheze;;;
+5692633354060309;Rafael Martins Ladeia;;;
+5890340291477038;Rayla Martins Gonçalves;;;
+7542096390655296;Joice Gonçalves Martins;;;
+7443657825122839;Maicon Felippe Martins;;;
+5112671646704936;Adalberto Matias Beppler;;;
+5792954630820141;Heitor Grochoski Matias;;;
+8274768440608116;Larissa Antunes Mauricio;;;
+7025193214497990;Gilberto Mazzetti Júnior;;;
+1844493420550157;Gean Cardoso de Medeiros;;;
+9844563310605499;Rosalvo Medeiros;;;
+4528587259287080;Charles David Mendlovicz Mauller;;;
+9858421631661835;Eloi Menestrina;;;
+5646338717441955;Daniela Mensor Berndt;;;
+2070619263066154;João Micoski da Luz;;;
+7631388925832924;Marcelo Henrique Migues;;;
+0965807853835333;Heloisa Minatti;;;
+8450401779587155;Claudia Mariane Adão Monteiro;;;
+8106682499832806;Roberto Montes Filho;;;
+0972086757342394;Luciano Moraes Coelho;;;
+0458400706789408;Ivone Jacy Moreira;;;
+1429691535956375;Elviani Basso Moura;;;
+2693631471240206;Alissan Balsanelli Mucciolo;;;
+3253193795326316;Ricardo Fabiano Muller;;;
+7840927278555881;Jorge Massahiro Nakassa;;;
+7204312641545394;Isabel Narloch Cardoso;;;
+8181386689062141;Melissa Goncalves do Nascimento;;;
+0399652440092742;Joara Lúcia do Nascimento Deschamps;;;
+4956668411862785;Gabriella Natallia Corrêa Kerber;;;
+5745083929019378;Gabriela Duarte Neves;;;
+1531719960924807;Mirian Morales Nogueira Gonçalves;;;
+4017551424293724;Marcio Jose de Novaes;;;
+5916226419615919;Kátia Oliari da Motta;;;
+8868632470957588;Paula Fernanda Bomfim Oliveira Cogorni;;;
+5159715433082485;Larissa Cano de Oliveira;;;
+8845223966884984;José Henrique Koneski de Oliveira;;;
+5976184380843750;Jucimara Bordinhao de Oliveira;;;
+2584489944205091;Marcia Gomes de Oliveira;;;
+2035868237263977;Lucas Irineu Medeiros de Oliveira;;;
+0122167117415538;Débora Karina de Oliveira;;;
+7370548053680558;Cauê Felipe de Oliveira;;;
+6396547796078531;Jéssica Duarte de Oliveira;;;
+0033318106061022;Marcia de Oliveira Melo;;;
+9196221733099300;Jocéli de Oliveira;;;
+1005662551597228;Adilson Gomes de Oliveira;;;
+7322897650605215;Willian Oliveira de Lima;;;
+6735681923649289;Catarina Kortmann Osik;;;
+0038109708315478;Camilla Ostrowski;;;
+1594781617740305;Vilmar Antonio Otto;;;
+7459235000348512;Maria Aparecida Pacheco;;;
+3878775566985866;Katiani Pacheco Martins;;;
+1611057396260171;Fabiana Deprá Pacher;;;
+3695386141797812;Edson Paiva;;;
+1398058806027720;Felipe Golin Palharini;;;
+1980166048151549;Giannini Pasiznick Apati;;;
+8533920852408696;Bruno Passos da Costa;;;
+7290414323930546;Thayna Patachini Maia;;;
+1908699220060859;Ana Paula de Oliveira Castro;;;
+1428058371773343;Ana Paula Minikovsky;;;
+9375198817752916;Ana Paula Eichinger;;;
+5558838871006305;Ana Paula de Oliveira;;;
+9939967261436435;Ana Paula Kurek;;;
+8441614052712195;Aleysson Olimpio Paza;;;
+4358124471698909;Gelta Madalena Jonck Pedroso;;;
+0414617375560771;Mábili Pereira;;;
+9283501562547810;Juliana Pereira;;;
+9030378150049540;Irma Haensch Pereira;;;
+1160180271321368;Gabriela Gama Pereira Martins;;;
+6025461603326552;Philipe Macedo Pereira;;;
+2003609133172878;Emanuelle Corrêa Peres;;;
+4412029396591687;Jéssica Laís Périco;;;
+0610790724953034;Marly Krüger de Pesce;;;
+3324793832895842;Josiane Patricia Petry;;;
+1991627527164406;Débora Cristina Peyerl;;;
+3437021509158901;Pamela Pfundner;;;
+9912655837163535;Heidi Pfutzenreuter Carstens;;;
+9979118281122015;Flávia Mayana Picasky;;;
+9982430216853110;Rogerio Pieritz;;;
+4839940148059251;Luciano Henrique Pinto;;;
+3324978329595195;Aila Anne Pinto Farias;;;
+6130462043943171;William Marcelo Borges Piva;;;
+4102036333617351;Fabrícia Pokrywiecki;;;
+0978424653519344;Alessandra Madeira Ortiz Pozza;;;
+3695860369495533;Fernanda Pozza da Costa;;;
+2386984930741893;Sharline Giovanelle do Prado;;;
+0500919614974339;Sirlene Aparecida Matos Martins Prestini;;;
+8416774057855182;Danielle Pykocz;;;
+7514981876513498;Viviane Helena Raimundo;;;
+9947758330945717;Arthur Ramiro Cruz de Lima;;;
+1895349367126396;Ubiratan Ramos do Nascimento;;;
+5722678343659614;Bruna Aparecida Ramos;;;
+1013434660235587;João Alceu Ramos Beltrão;;;
+6710893712673813;Marina Ramos Pezzini;;;
+9530300381825155;Tiago Ramos de Andrade Araújo;;;
+6501012736220986;Paula Raylene Nolasco Moreno Fernandes;;;
+1276294153646927;Kamila Fernandes Rebello;;;
+3714995982777804;Sheila Cristina Reeck;;;
+8980645853885898;Marta Regina Heinzelmann;;;
+8791459611365038;Carla Regina Corrêa Raabe;;;
+4916331621172099;Scheila Regina Lino;;;
+8129193096369912;Ana Letícia Reinert;;;
+8546307923760138;Guilherme Carvalho dos Reis Lima;;;
+8276103121962077;Sonia Regina Reis Pegoretti;;;
+5153040129820161;Carlos Ernesto dos Reis Lima;;;
+7630900815404533;Ana Caroline Remor Corrêa;;;
+3996575894722943;Aline Resendes Fernandes;;;
+1340489203898300;Josiane Costa Riani;;;
+6042356980628627;Letícia Ribas Diefenthaeler Bohn;;;
+7985836100367832;Eveline Ribas Kasper Fernandes;;;
+9483175683322168;Marina de Almeida Ribeiro;;;
+4330210499963328;Anna Lecticia Ribeiro Pinto;;;
+0546563341328860;Sarah Fernanda de Carvalho Ribeiro;;;
+5104052608361236;Luciana Ricardo Alberti;;;
+7691919899335207;Marina Ricci;;;
+8808163671316662;João Rafael Righetto Bicudo;;;
+8033463295679940;Alena Rizi Marmo;;;
+7620535045288740;Fagner Roberto Gomes;;;
+1441103485283705;Paulo Roberto Queiroz;;;
+2899865345281893;Marcio Roberto Neneve;;;
+9326510594255048;Fábio Krug Rocha;;;
+9496545703990365;Thaís Cristina da Rocha;;;
+0920279639319813;César Rodolfo de Oliveira Rios;;;
+7486690625013124;Luiz Henrique Rodrigues;;;
+3136073342388179;Valter Pereira Rodrigues;;;
+0681075206059557;Jose Carlos Rodrigues;;;
+1004078866793636;Rafaela Rodrigues;;;
+9456025856716835;Gladys Daniela Rogge Renner;;;
+5800043924320035;Daiane Marisa Rohveder;;;
+1187727281534950;Lara Gianina Rojas Alvarez;;;
+3675307566174909;Sabrina Roque Funk;;;
+5037770996184297;Anne Rosa Duarte;;;
+2556797818613581;Icracir Rosa;;;
+8628945055771191;Daniele Rueckl;;;
+0431005568669832;Matheus Henrique Ruela Mews;;;
+8770252073529041;Leonardo Afonso Ruthes;;;
+7847844081799703;Jamil Salim Amin;;;
+9167207754651855;Clóvis Samuel Duarte;;;
+2394915410207874;Guillermo Muelas Sangiao;;;
+7788798552420628;Ana Luiza Gonzaga Sanson;;;
+0510523346473533;Andressa Karine Golinski dos Santos;;;
+4179060305298769;Julio Cesar dos Santos;;;
+2298480009372129;ALEX Barbosa dos Santos;;;
+0173346384988370;Joelias dos Santos;;;
+1472630841072876;Fernanda dos Santos;;;
+4485634019390910;Juliana dos Santos;;;
+0757076956978862;Carolina Hagemann dos Santos;;;
+8076385224198979;Camila Meirelles Sartori;;;
+2268468299210061;Fabricio Scaini;;;
+6357582702873283;Aline Scheller;;;
+7249437536186513;Artur Alfredo Schemmer;;;
+3261456148310325;Juliana Schenfert Pedack;;;
+1622598665949602;Francisco Eduardo Schiessl;;;
+5265929705707468;Carolina Schimidt Mendes de Melo;;;
+0846803933734035;Daiane Schlata;;;
+1709473177104351;Cleusa Maria Schneider;;;
+8831801408722383;Andréa Lima dos Santos Schneider;;;
+4754316067772623;Edson Scholze;;;
+0637754277734264;Sidney Schossland;;;
+0000340069768344;Celso Alfredo Schramm;;;
+7172482781690871;Ana Júlia Schreiber Pires;;;
+1249410597196545;Adriane Schroeder Lins Leiroza;;;
+9113492254357034;Gabriel da Rosa Schroeder;;;
+9228190180837101;Ana Carolina Schultze Mendes Ribeiro;;;
+9093966732958466;Jacqueline Schumann;;;
+9659507520701927;Victor Rolf Seifert Neto;;;
+9456742357782274;Gilson Sêmer Guimarães;;;
+7256298529379721;Giovana Senna da Rosa Rossi;;;
+9742815404025106;Ana Paula Serpa;;;
+9444978915212876;Soleni dos Santos Kuhn Sette;;;
+9370102334826963;Giseli Crisitina Sevegnani;;;
+9064252166525212;Alan Luíz Severino;;;
+7125302214245299;Facundo Lopez Sierra;;;
+1333435546514483;Renato Augusto Sigoli Risi;;;
+6485128674390933;Maíta Medeiros e Silva;;;
+4026791513244147;Denise Abatti Kasper Silva;;;
+5103565871978885;Fernanda da Silva Lemes;;;
+9572071826640676;Raphael Schmitz da Silva;;;
+2006045277255416;Rosemary Harger da Silva Petry;;;
+8587060965546685;Wellington Silva Baldo;;;
+3793220930957081;Mayara Gomes da Silva Costa;;;
+7009613474890598;Daiane da Silva;;;
+7492767949341064;Caroline Corrêa da Silva;;;
+5628558143791439;Fabiane da Silva Döge;;;
+2440490623291318;Érico Gomes da Silva;;;
+1211535904223893;Bruna Silva de Oliveira;;;
+2261166089172281;Regimare Silva Pinto;;;
+3283287437820780;Ana Luisa Silva Rodrigues;;;
+8607421148120222;Jéssica Cristina da Silva;;;
+1419800462039126;Jonata Rodrigo Cavassola da Silva;;;
+6760387766139852;Rosilda da Silva;;;
+5897648450745152;Rosangela Silveira Coelho Cremonini;;;
+3891594920923068;Rosilene Aparecida da Silveira;;;
+1079807482792280;Anele Louise Silveira de Almeida;;;
+4344894129167633;Andriele Silveira;;;
+9407658660673465;Aline Silveira;;;
+9060698334966366;Carmen Silvia Harger;;;
+4198203821156242;Diego Sima dos Santos;;;
+3150955886878135;Silvia Simão de Matos;;;
+9419235364228709;Reinaldo Simao;;;
+4663610190013516;Silvio Simão de Matos;;;
+5039205036155145;Mariele Simm;;;
+6987019595705407;Cid Siqueira Filho;;;
+9785129346831363;Maria Inês Siqueira Araujo;;;
+8982985481336316;Emanuelly Smiguel;;;
+9738185225553285;Eduardo de Sampaio Soares;;;
+1575464506715183;Luana Soares Schulter;;;
+5629401969547461;Janaina Silveira Soares Madeira;;;
+0211733427584771;Luciana Soares;;;
+8016240495607149;Julia Carolina Soares;;;
+3302644287896961;Fernanda Soares Rios;;;
+0480130304547672;Jairo Luiz Socoowski de Anello;;;
+3216347659981169;Paulo Alexandre Soubhia;;;
+5794660151470083;Monique de Sousa;;;
+3743557618656529;Aline Mara Bogo de Souza;;;
+2088563332077000;Thaís Caroline de Souza;;;
+4043463429291313;Márcia de Souza Pedroso Agustini;;;
+9414317927757903;Valdecir Manoel de Souza Filho;;;
+2463124818901287;Naiana de Souza Leonardo;;;
+3780431171127683;Felipe Grünfeld Starling Jardim;;;
+0988397423950067;Valéria Fernanda Serpa Steinke;;;
+4133595162144334;Nívea de Freitas Figueiredo Stiegler;;;
+5751773176850985;Demis Miguel Stiller;;;
+3462733522347168;Julianna Tabalipa;;;
+9513001732618831;Paula Arruda Tacla;;;
+0033541472327069;Andréa Maristela Bauer Tamanine;;;
+9335381593744523;Wagner Antonio Tavares;;;
+7069418366518299;Raphael Alexandre Tavares;;;
+9401221716170100;Carmen Diamantina Teixeira Heyder;;;
+0732139250988805;Magali Terezinha Cury Cecato;;;
+1824906264641425;Roseli Terezinha Cunhago Bravo;;;
+8275552185031778;Shiara Thais Hardt Rodrigues;;;
+8056251594102594;Cassia Thamara Menezes Fernandes;;;
+8812954888378528;Denise Baumer de S Thiago;;;
+4829180970147938;Guilherme Thomaz dos Santos;;;
+0190688593978085;Suelize Thomaz Heerdt;;;
+1165746476984132;Marcelo Thomé Schein;;;
+7506004303386937;Humberto Thormann Bez Batti;;;
+7927151614701269;Ely Mara de Ávila Tireck;;;
+1674835354899019;Emanoele Cristine Denke Todorovski;;;
+3023421426284102;Camila Tomasi;;;
+5512421105335746;Hélio Tomaz de Aquino Júnior;;;
+4008542401626828;Cleber Torquato Flôr;;;
+8513471411168767;Beatriz Maria de Oliveira Torrens;;;
+5702983414215696;Lucia Torri;;;
+2416887672961317;Francine Tschoeke Liebl;;;
+4957604389264236;Cláudio Rudolfo Tureck;;;
+7311660848879583;Emanoelle Garcia Ramos Tussolini;;;
+2670828482268322;Janete Uhelski;;;
+1240746030775954;Carlos Felipe Urquizar Rojas;;;
+3758240493772256;Rafael Eduardo Valdez;;;
+2562458976480941;Juliana Bento Vargas;;;
+8559439696267010;Jean Michel Correa Venturi;;;
+4751432863739196;Paulo Victor Santos Machado;;;
+2419593315319182;Carolina Elisa Froldi Vieira;;;
+4415471694058015;Pedro Balieiro de Almeida Vieira;;;
+0340982234849844;Vanessa Vieira;;;
+1930876710511117;Francine Emanuela Vieira;;;
+2628038746809544;Julio Cesar Vieira;;;
+3985556742671686;Maria Patricia Lima Vieira;;;
+9376739856207549;Luana Gabriela Dalla Rosa Vieira;;;
+7174091316005011;Aline Vience Michels;;;
+9905480044554711;Valeska Ilienko Villela Souto;;;
+4926528078414217;João Vinicius de Almeida Braga;;;
+1848049243718661;Fernanda Virgílio Poli;;;
+3324650336386620;Aline Andreia Marques Volkweis;;;
+6126335000756985;Celso Voos Vieira;;;
+7890861279221497;Theodoro Marcel Wagner;;;
+8395935338818052;Thierry Waltrich Augusto;;;
+2395183414696386;Jessica Weiler;;;
+2758250375220341;Rodrigo Barbano Weingrill;;;
+4938549106461015;Werner Artur Jorge Weinzierl;;;
+1216870565647615;Silvana Cristina Miguel Weiss;;;
+6676848003376109;Sueli Maria Weiss Rank;;;
+4394441482785261;Cristiane Aparecida Kachimareck Wenningkamp;;;
+4105811173006605;Daniela Westrupp;;;
+8928773870791974;Denis William Pereira;;;
+1399605318133204;Edson Wilson Torrens;;;
+3167974698822303;Roy Ristow Wippel Schulenburg;;;
+7467770250000708;Marcelo Witt;;;
+2447973145253963;Gabrielle da Silva Wittitz;;;
+6204435137682342;Simone Woehl Fendrich;;;
+0429712072576314;Larissa Carolina Wolf;;;
+2519943425986542;Ana Carolina Vavassori de Freitas Wonspeher;;;
+4985711925606672;Berenice Rocha Zabbot Garcia;;;
+6025378827337144;Guilherme Zaffari;;;
+0617288981275080;Airton Nagel Zanghelini;;;
+6654140311725395;Nicole Cibele Zaniz;;;
+5360126271948095;Lourival Zendron;;;
+7479054874209927;Margaret Paula Von Zeska;;;
+4461503403538729;Melissa Zétola;;;
+1855842606771019;Stéfani Regina Zibetti Teixeira;;;
+1230775672733414;Patricia Zigoski Uchoa;;;
+4708379403721472;Charles Zimmermann;;;
+4300215776831139;Natacha Zimmermann dos Santos;;;
+6254612643223329;Rafaela Cavinato Bulla;;;
+7302687552345588;Flávia Dacoregio;;;
+7181056965617404;Claiton Emilio do Amaral;;;
+1590219557342852;Fabrício Faitarone Brasilino;;;
+9933121092663286;Alan Gabriel Adamczevski;;;
+7278047889450944;Janaína Gonçalves Hasselmann;;;
+4158431052286991;Ademir José Demétrio;;;
+6049205608780816;Raul Landmann;;;
+7785277879478893;Gabriela Lemos Corrêa;;;
+6309669041945598;Luciano Lorenzi;;;
+2224467533025511;Rossana Cavassini de Mattos;;;
+3624455796429279;Eliziane Meurer Boing;;;
+3624213530615421;Daniele de Oliveira;;;
+9161924250633685;Liandra Pereira;;;
+0844629340947385;Karla Pfeiffer;;;
+5925770020667792;Pedro Carlos Pinheiro;;;
+0313114890310260;Jonathan Prateat;;;
+0749540436522735;Victor Rafael Laurenciano Aguiar;;;
+1315236222488586;Paulo André Ribeiro;;;
+5393971311548425;Rita de Cássia Rothbarth Lorenzi;;;
+9662336307172117;Ingo Rusch Alandt;;;
+9677276832381344;Anna Luiza Moraes de Sa Cavalcanti;;;
+1324858024250796;Marciane Cleuri Pereira Santos;;;
+3595321224657639;Gilson João dos Santos;;;
+0919945924209827;Monize Gabriela dos Santos;;;
+4975379134361091;Nadia Regina Guimaraes Schilling;;;
+7892396871216735;Soraya Juliane da Silva;;;
+9652429155976938;Walter Silvestre Coan;;;
+1195899497025368;Natólio de Souza;;;
+6608341158478036;Richard Elias Teijeiro;;;
+5834240375172764;Jurema Tomelin;;;
+7328003880445086;Jullyffer Vierheller Vieira;;;
+4373590948617053;Priscila de Lima Watanabe;;;
+3691515302166257;Luiz Paulo de Lemos Wiese;;;
+1002816189058375;Jamile Rosa Rampinelli;;;
+7659532787193617;Célia Ceschin da Silva Pereira;;;
+0648210256715816;Cristiane Aparecida da Silva Pilz;;;
+2956393456014597;Maria Dalva de Souza Schroeder;;;
+3714345296494049;Maristela Adamovski;;;
+2645144595345410;Marcelo Alves;;;
+5782788158666232;Edson Augustin;;;
+1850760728477921;Patricia Burgardt;;;
+8480133055782565;Valdemar Cardozo;;;
+0755094116339164;Leonardo Calixto Colin Cecyn;;;
+2436280861405649;Rodrigo Fernando Ferreira;;;
+4561512711079120;Miguel Angel Almada Figari;;;
+0736077627723566;Osny do Amaral Filho;;;
+5157137509603721;Juliana Floriano;;;
+1829385829899375;Marcos Fabio Fuck;;;
+1381629429855122;Catia Cirlene Felipi Ganske;;;
+8313004619546734;Camila Haag;;;
+5845879717800209;Gilberto Hornburg;;;
+7454965489684546;Ivan Carlos Cicarello Junior;;;
+0373518097057669;Adelaide Graeser Kassulke;;;
+2148322519981698;Leticia Cassiano Kataniwa;;;
+4163892637857494;Dieli Fernandes de Lima;;;
+1534892789650908;Pamela de Liz;;;
+7963874704639014;Dulcimar Lopes Carvalho;;;
+8622356499912891;Vera Lucia Ferrari Fernandes;;;
+6901544078023636;Aliciene Fusca Machado Cordeiro;;;
+8682554292409576;Rosana Mara Koerner;;;
+2069225239620394;Antonio Mario Koschinski;;;
+1432892234231198;Elenir Carmen Morgenstern;;;
+2410902090669075;André Lourenço Nogueira;;;
+9898821550859197;Carla Odete Hofmann Fuckner;;;
+5519105633209313;Marcos Fernando Odorczyk;;;
+6872533770967415;Tiago Gomes de Oliveira;;;
+1777573369659605;Wilson de Oliveira Neto;;;
+1135113838511937;Bianca Goulart de Oliveira Maia;;;
+9231624057786024;Decio Luiz Otero Junior;;;
+2426069744496195;Pedro Henrique Garcia Parreira;;;
+5075385290771564;Regiane Piontkewicz;;;
+8283311474448852;Flávio de Borba Prá;;;
+1065708190780811;Jefferson Alexandre Provezi;;;
+1277542151224005;Giovani Rafael da Costa;;;
+4237056025862505;Sonia Regina Pereira;;;
+3460079515057150;Sonia Maria Ribeiro;;;
+8218390567326297;José Roberto de Oliveira;;;
+2275379038493563;Manolo Rodriguez Del Olmo;;;
+7643351173600701;José João Rossetto;;;
+9107715221927474;Lucas dos Santos Abreu;;;
+6249682637880430;Aloysio dos Santos Bahiense Junior;;;
+4552147140719662;Glaucio Scheibel;;;
+2824038943228546;Scheila Siebeneicher;;;
+2906746110034724;Luiz Fernando Harger da Silva;;;
+0101641861878568;Jorge Silva do Amaral;;;
+8430410761756130;Chaiene Mercedes da Silva Minella;;;
+3711058177126863;Marcelo de Souza Rafael;;;
+5077500549191193;Allyson Thiago da Cruz;;;
+2664915900306298;Claudio Antonio Treml Junior;;;
+3182185444692357;Bárbara Uber Piloni;;;
+6717054868329266;Roberto Carlos Valicheski;;;
+0671603415238093;Rubens Vaz Feijó Junior;;;
+5401945859116505;João Carlos Vela;;;
+1976388474475342;Marcus Vinicius Carvalheiro;;;
+0547260258720532;Emanoela Volles de Souza;;;
+8258158294644705;Daniel Westrupp;;;
+7677392704996372;Gabriela da Rosa Witeck;;;
+2160257568519498;Millena da Silva Montagnoli;;;
+2119648069785134;Flavio de Alcântara Camejo;;;
+8293738094597079;Simone Lesnhak;;;
+5808307632260277;Fernando de Lima;;;
+2246033946401352;Júlia Margarida Hein;;;
+3900767764507054;Maria da Graça Albino de Oliveira;;;
+1107520888934994;Beatriz Regina Branco;;;
+4889248695226160;Lisiane Peron Schmoeller Nau;;;
+1113193918269253;Degival Sebastião da Silva;;;
+9154408673919736;Júlio César Vieira;;;
+3398775298041853;Édina Elisangela Zellmer Fietz Treml;;;
+0722703740446552;Angela Emília Finardi;;;
+6142560268606354;Regina Maria Miranda Gern;;;
+1324007691248715;Yoná da Silva Dalonso;;;
+9875566531829538;Marcia Luciane Lange Silveira;;;
+8844601043336327;Marlene Feuser Westrupp;;;
+8358410394755408;Therezinha Maria Novais de Oliveira;;;
+4854560321402163;Flávio Belli;;;
+4908433476169499;João de Azevedo;;;
+3887739779164782;Mariléia Gastaldi Machado Lopes;;;
+9629209126190387;Jean Marcelo Dias;;;
+6744262111545811;Bellini Meurer;;;
+9502099199983726;Ana Carolina Moura Cardoso;;;
+0683698939572582;Nelson Nogueira Amorim Filho;;;
+5245498021013059;Viviane Gaspar Ribas El Marghani;;;
+9133714076153309;Eduardo Silva;;;
+5913664770428787;Paulo Stefânio Schmoeckel;;;
+6302849296493151;Luciana Altmann Tenório;;;
+2707676882754005;Adriane Shibata Santos;;;
+8014975082797133;Jane Mery Richter Voigt;;;
+1297705300533128;Franciane Agostini;;;
+1301672032848610;Márcio Alves;;;
+3962305390627595;Leanderson André;;;
+4184626330401622;Vasco Antônio Amorim Alcântara;;;
+6568941732645446;Rejane Baggenstoss;;;
+4382325973297639;Bruna Besen;;;
+5456160532466894;Ivan Bosnic;;;
+7053238809840034;Thiago Camargo;;;
+0412640113552174;Rosangela Canônica;;;
+2978061791541390;Eloisa Capeletto;;;
+9374778624470541;Daniel Araujo Carneiro;;;
+5268614679569453;Giulia Caroline Bisinela;;;
+2864325593462290;Erich Cerchiari;;;
+5045697135640232;Fernando Cesar Sossai;;;
+5724159384881366;Giliandra Christy Brancaleone Casagrande;;;
+3834597953313689;Alexandre Cidral;;;
+7763198591305688;Susana Claudino Barbosa;;;
+9184536738435172;Mauricio Colin Barbosa Cordeiro;;;
+5641868862968588;Sara Cristiane Barauna;;;
+0817266655290841;Simone de Kácia Wendt;;;
+5893436152677321;Giselli Berezoski Demarchi;;;
+3325508859474937;Liane Amaral Dias;;;
+1964395625950783;Ciro Dóros Alexandre Cardoso;;;
+0551405914242963;Ana Cristina Exterkoetter;;;
+8312521170510130;Leslie Ecker Ferreira;;;
+5797544996113077;Camila Fiamoncini;;;
+8913234526550881;Jean Carlo Figueredo;;;
+6711163385855601;Diogo Fillus;;;
+5094299374275556;Matheus Artioli Firmino;;;
+1938191708537101;Volmir Fontana;;;
+0441192976439779;Arselle de Andrade da Fontoura;;;
+9838230794686526;José Antonio Franzoni;;;
+9136909619975006;Eduardo Frankowiak Friedrich;;;
+7550043557809930;Fabiana Germano;;;
+4829143155781259;Victor Bambinetti Gonçalves;;;
+8087978551551119;Luis Carlos Grossl;;;
+2174463911483610;Loacir Gschwendtner;;;
+1313328318402117;Duane de Fátima Guesser;;;
+8523788929076321;Donat-Peter Häder;;;
+6885329325151156;Claudio Henrique do Amaral;;;
+0239622705256270;Ana Carla Jacintho;;;
+9776382930580173;Carlos José Fedalto;;;
+5561125433318438;Cristiano Jungklaus;;;
+2164371539053197;Carlos Alfredo Alves Junior;;;
+1286218662536842;Mauri Jorge de Freitas Junior;;;
+8358618581829653;Luiz Martins Junior;;;
+1741378546475888;Roberto Gomes Junqueira;;;
+8858331015840813;Luciana Ferreira Karsten;;;
+7206624035088188;Adriane Cristiana Kasprowicz;;;
+7648361312778968;Jaidette Farias Klug;;;
+3951435289831902;Peter Alexandre Kneubuehler;;;
+4829128721591821;Vanessa Cristine Kobs;;;
+2367346630419376;Suely Keiko Kohara;;;
+4345535342310329;André Kühl;;;
+8399008042298796;José Dionicio Kunze;;;
+8525020148537145;Jéssica Gomes Laccort;;;
+9001798665217438;Nadja de Carvalho Lamas;;;
+7500009914394124;Mariana Falcão Leal Brotero Duprat;;;
+6053017062073303;Denise Lemke Carletto;;;
+8487329261431899;Stephani Fontinelli Leonardi;;;
+6537046612812670;Raquel Francine Liermann Garcia;;;
+6175617046631362;Marilaine Bittencourt de Freitas Lima;;;
+0066120366941468;Mikeller Freire de Lima;;;
+0513576501854385;Bruna Klopass Locks de Godoi;;;
+8639640097199960;Bárbara Klopass Locks de Godoi;;;
+9292882610348633;Karina Camargo Boaretto Lopes;;;
+9488999355247765;Adriana Falcão Loth;;;
+4817036703152821;José Lucas Johanson;;;
+1561133712525875;Augusto Luciano Ginjo;;;
+0623074958564315;André Luis da Cunha;;;
+2257192938574699;Andre Luiz Dias Giraldi;;;
+4948947108419442;Ofelia Gomes Machado;;;
+7460430091613884;Daniel Machado;;;
+0565208476115187;Patricia Esther Fendrich Magri;;;
+2218807284131298;Karin Maiara Cruzzeta;;;
+7839106588406173;Paulo Marcondes Bousfield;;;
+2002861791351076;Vitor Marilone Cidral da Costa do Amaral;;;
+7721723190739400;Muriel Marine Delmonego;;;
+5566707930378266;Cremilda Martins Füerst;;;
+7910272344800609;Nicole de Medeiros Barcelos;;;
+3127806406920020;Claudia Gastaldi de Melo Machado Lopes Corrêa;;;
+6692458618057676;Claudio Melquiades Medeiros;;;
+5118869619690827;Beatriz Merino Chapaval;;;
+4763595835508116;Marcelo Juliano Merkle;;;
+0879402556933559;Taise Milena Gonçalves;;;
+2014400258166539;Diego Alves de Miranda;;;
+7964614421267935;Waldemar Moreno Junior;;;
+3044916405577526;Solange Correia Lima Mota;;;
+9428883985380368;Milena Muller;;;
+4094568125400930;Elzira Maria Bagatin Munhoz;;;
+2651530135573855;Taise Muraro;;;
+1179004537911392;Geisa do Nascimento Hendel;;;
+7048422418107956;Carolina Neotti;;;
+5696630946614731;Pedro Elias Neto;;;
+9327973085215317;Carlos Augusto Cardim de Oliveira;;;
+3003750843397345;Sérgio de Oliveira Netto;;;
+4488442640639028;Juliana Goudinho de Oliveira;;;
+4195651451132137;Vanessa de Oliveira Collere;;;
+5320541073234405;Adriana Medeiros Oliveira;;;
+6366191332513605;Keila Bomfim Oliveira Alves;;;
+5659433017367302;Cristina Ortiga Ferreira;;;
+4858735266204455;Silvia Paes Leme da Motta;;;
+6135881133620979;Marcio Andre Paloschi;;;
+1018749969791913;Rosane Patricia Fernandes;;;
+9440693745518977;Karina Munhoz de Paula Alves Coelho;;;
+0121412642426384;Ana Paula Belli Andruchechen;;;
+7903135782826085;Denise Paulus de Campos Franzoni;;;
+6322331882596628;Rita de Cássia Pereira Marques;;;
+9312454593133679;Dulce Helena Deodato de Freitas Peres;;;
+4165782977546968;Fernanda Perito de Aguiar;;;
+9505206389957567;Alessandra Pfuetzenreuter de Castro;;;
+3313191720985042;Luciano Piccini Nöthen;;;
+3339626113670192;Dulcelina da Luz Pinheiro Frasseto;;;
+0052315299523059;Iberê Pires Condeixa;;;
+9645428273507444;Rafaela Cristina Carletto Piva;;;
+5836016845913667;Marcus Messala Krusche Portella;;;
+9559865196366705;Jonas Daniel Pôrto;;;
+5295905634843669;Tarcisio Possamai;;;
+5797751260519552;Maria Olivia Pozzolo Pedro;;;
+4232166382422146;Luciana Prazeres Mazur;;;
+0658533856125944;Endi Pricila Alves;;;
+6458169104486976;Fernando Pereira Pruner;;;
+4147956280684295;Everton Rafael Breitenbach;;;
+1520107084521257;Isair Raffaeli;;;
+7923182791871609;Maria Gabriela Ramos Ferreira;;;
+6750167735370683;Fábia Ramos da Cruz Clemente;;;
+5986256884379305;Mário César de Ramos;;;
+4336326776023198;Lisiane Cribari Rangel Cyrino;;;
+7294326796717967;Hercilia Aparecida Garcia Reberti;;;
+7010480535904039;Ágata Regiane Quissini;;;
+6653098601255910;Paula Regina Mendes Grünberg;;;
+3964678621600161;Marcia Regina Mendes Nunes;;;
+9778756265792408;Patricia Regina Holtz;;;
+3707282661987679;Carolina Reichert;;;
+9527109994404995;Felipe Ibiapina dos Reis;;;
+3476500080516359;Nicolle Ribas Diefenthaeler;;;
+3338493974875520;Nielson Ribeiro Modro;;;
+4165881298570185;Thays Ribeiro Freitas;;;
+9456696085767204;Ana Paula Ribeiro Bonilauri Ferreira;;;
+7464608785552528;Kesly Mary Ribeiro Andrades;;;
+0480691639189383;Terezinha Barbosa Rocha;;;
+1722623265028026;Vânia Meneghini da Rocha;;;
+1312795975074949;Ismael Rodrigues Conde;;;
+4048290009151522;Luis Fernando da Rosa;;;
+0662324145319402;Neilor Rückl;;;
+5817104757949432;Roberto do Amaral Sales;;;
+6538238787279764;Mariano Ceferino Llano Sánchez;;;
+1415682653099744;Naum Alves de Santana;;;
+4988507019104479;Adriana Moraes dos Santos;;;
+4639219908152382;Anna Lethicia dos Santos;;;
+6262532263849954;Simone Sasso;;;
+2579882932686175;Arnoldo Schmidt Neto;;;
+8403746683541735;Raissa Iana Leite Jardim Schöne;;;
+5667975317484796;Séfora Cristina Schubert;;;
+3878879274804041;Ricardo Pedro Inácio Schubert;;;
+9827505249310535;Graciele Schug Gonçalves;;;
+6426532445243477;Mônica Schüler Menslin;;;
+9953918850899339;Marco Aurélio Schulz;;;
+3790507669221373;Mariana Datria Schulze;;;
+5473050724549825;Graciane de Oliveira Schulze;;;
+9366110552581745;Maria Luiza Schwarz;;;
+8437266640318462;Ezequiel Sebastião Cypriano da Luz;;;
+3787447361829087;Silvia Sell Duarte Pillotto;;;
+4777570069435929;Mário Sérgio Ghannagé Barbosa;;;
+4306157832100862;Kátia Regina Sgrott Sauer Machado;;;
+7507207297331351;Helton Eckermann da Silva;;;
+6006418374309630;Karen Daniela Martins da Silva;;;
+7957248308510229;Elcio Ribeiro da Silva;;;
+0625402011446533;Vander Lima Silva de Góis;;;
+8167372090150621;Ivanilda Maria e Silva Bastos;;;
+4248556790642624;Silvania Cláudia da Silva Luz;;;
+2742578218267155;Ketlyn Cristina da Silva Alves;;;
+6168604998016361;Maryahn Koehler Silva;;;
+6828620734821957;Sidnei da Silva Dornelles;;;
+5366367463392065;Isis da Silva Ramos Guedes;;;
+0990228867056228;Fábio de Oliveira Silva;;;
+5323304867325409;Goretti Silveira Rodrigues;;;
+8931109578458385;Maria Simone Pan;;;
+7162127701997106;Volnei Avilson Soethe;;;
+1292577540269519;Magda Helena Soratto Heitich Ferrazza;;;
+5311649599869520;Maikon de Sousa Michels;;;
+7538313107873833;Herminia Maria Sousa da Ponte;;;
+9958226369659395;Sirlei de Souza;;;
+2851151773131771;Mauro de Souza Leite Pinho;;;
+7910455047642091;Rafaela Spezzia Capuani;;;
+2066346652729822;Carlos Antonio Stabel Daudt;;;
+9413719213496991;Sérgio Paulo Stahn;;;
+3986608558988645;Eliana Stamm;;;
+3306201421192646;Giancarlo Steffani;;;
+9938266967315497;Eoda Maria Bissacotti Steglich;;;
+0493327637754226;Valdirene Stiegler Simão;;;
+9042865942469938;Renata Falck Storch Böhm;;;
+7262542972813587;Vivian Ellen Tácito Gouvêa;;;
+0206354508242755;Lúcia Tavares de Borba Reis;;;
+2559628076550325;Murilo Teixeira Carvalho;;;
+6444034936475405;Sonia Terezinha Serpa de Oliveira;;;
+1233058941829764;Leda Tessari Castello Pereira;;;
+1552084220578964;Matheus de Lucas Theis Poerner;;;
+2189923115998836;Sônia Maria Menin Belous Theiss;;;
+3491303662695270;Roberta Colvara Torres Medeiros;;;
+0369825016833264;Gerson Treml;;;
+2094174918756373;Julcimara Trentini;;;
+8060718528136825;Diego Utlik;;;
+3978832974890799;Giuseppe Valduga Cruz;;;
+5895469020531294;Celso Ricardo Salazar Valentim;;;
+7799110824015732;Vanessa Alves Valentini;;;
+4284395503884270;Cleomir Vaz;;;
+8474749007222189;katia Monica Verdim Eggert;;;
+9855816785799702;Valeria Cristina Rufo Vetorazzi;;;
+1071046835899315;Leonardo Vieira da Costa Pereira;;;
+3135720260656248;José Carlos Chaves Vieira;;;
+5081925095325732;Denise Vizzotto;;;
+5672831135198098;Priscila Warsch;;;
+5748515993114934;Sandra Helena Westrupp Medeiros;;;
+7781193948760635;Vania Wiese;;;
+6062565871349297;Carla Wille Kielwagen;;;
+1882966941273060;Bruna Elisa Winter;;;
+3404064413700608;Marcondes Witt;;;
+3178911059728993;Marilene Wittitz;;;
+7991086827527243;José Francisco Peligrino Xavier;;;
+8177062204331196;Gislaine Moreira Xavier;;;
+8465753920731545;Arnilo Zanella;;;
+9554273058614959;Thiago Zschornack;;;
+9608391843793204;Luciano Soares;;;
+0252373303799652;Mirian Regina Pereira Ribeiro;;;
+7614343721773157;Henrique Budal Arins;;;
+2296186687103469;Bruna Deon;;;
+6669864266136618;Rita de Cássia Fraga da Costa;;;
+5765728791389269;Daniela Delwing de Lima;;;
+9631116211593976;Inez Maria de Fatima Robert;;;
+9815721279098341;Luiz Melo Romao;;;
+4797118172765966;Helena Schiessl Cardoso;;;
+6103374625904004;Jean Carl Silva;;;
+4485682284547065;Kirian Luiz Tertuliano Fontana;;;
+1416602286777450;Maria Cristina Seara Veltrini;;;
+7550694314835121;Marcia Viviane Grossl Neneve Cordeiro;;;
+6676185799573764;Jordelina Beatriz Anacleto Voos;;;
+3078809942559186;Carlos Alberto Amorim;;;
+2777690546688276;José Alaor Bernardes;;;
+5256829121167650;Evandro Bittencourt;;;
+3577896075209961;Clarice Buss;;;
+3464633627539117;Luiz Carlos D`Aquino;;;
+4647569783371880;Ademir da Cunha;;;
+3969497712050167;Altair Carlos da Cruz;;;
+2232721903261268;Mônica de Abreu Azevedo;;;
+0907445019291980;Isadora Burmeister Dickie;;;
+4159170595207269;Mauri Federizzi;;;
+9068116874515896;Carlos Alberto Franzoi;;;
+9623275479703228;Brian Hagemann;;;
+9182471791999822;Rodrigo Hau França;;;
+6702619286407910;Andréia Heiderscheidt Fuck;;;
+3063356384790601;Elisabeth Lasala Cidral;;;
+3433453361612569;Marcelo Leandro de Borba;;;
+9476523373878998;Marcelo Lemos Ineu;;;
+1553539390883930;Carlos Alberto Lessa;;;
+0766604333051457;Iana Gomes de Lima;;;
+0030664194676741;Aline Barbosa Lima;;;
+4146942272584323;Neide De Lima Lourenço;;;
+0044918993981609;Carmem Luiza Lucht Gascho;;;
+5361372258920267;Jorge Marinho de Araújo Filho;;;
+0082266318819268;Carlito Moreira Filho;;;
+6926861164705412;Anemarie Dalchau Müller;;;
+8472389345926466;Dênio Murilo de Aguiar;;;
+1651866036859860;Rosana Musumeci Martins;;;
+9973017690514496;Luis Felipe do Nascimento Moraes;;;
+4088290382149596;João Barba Neto;;;
+4014884067145109;Rafael José Nogueira;;;
+5712785174078330;Maria Aparecida Nunes Fontana;;;
+5088034122587586;Diogo Henrique Otero;;;
+6339286426994289;Helena Maria Antunes Paiano;;;
+0118188785130551;Mariluci Paiva;;;
+8226830877712124;Rodrigo Paludo de Oliveira;;;
+3015425273231228;Paulo Cesar Pandolfo;;;
+9163969259291328;Juliano Prim;;;
+2851600934558358;Juliana Regina Crestani;;;
+4237275448771625;Constanza Marín de los Ríos Odebrecht;;;
+6690854035233129;Celise Roesler Kobs;;;
+5382718638516300;Alexandre Rosa;;;
+9269952853655491;Yara Rúbia de Mello;;;
+5312527396481208;Antonio Ciro Sandes de Oliveira;;;
+5059768447240168;Karina Santos de Menezes;;;
+4003483550220381;Claudia Dums Schmidt;;;
+1042420803334240;Sarah Francine Schreiner;;;
+8598435659318408;Luiz Carlos da Silva;;;
+1902007329284384;Genivaldo da Silva;;;
+6895276623361701;Milena dos Santos Silveira;;;
+3521512227620262;Giuliano Stefanello Bublitz;;;
+6465578436827096;Claudia Valéria Lopes Gabardo;;;
+2880751243984719;José Isaías Venera;;;
+1768233591553165;Vlademir Vilanova Moreira;;;
+2224453219210364;Cristiano Waihrich Leal;;;
+6751742364341397;Pedro Weingrill;;;
+8883299878503657;Sérgio Alberto Wolf;;;
+8848538880693176;Maria de Lourdes Bello Zimath;;;
+8813616332452541;Mariluci Neis Carelli;;;
+2183415412491463;João Eduardo Chagas Sobral;;;
+4772894552694699;Harry Kleinubing Junior;;;
+5410201062168341;Roberta Barros Meira;;;
+9775388185891959;Helbert do Nascimento Lima;;;
+3342144453075971;Luana de Carvalho Silva;;;
+9284760144557329;Denise Monique Dubet da Silva Mouga;;;
+1553649569354649;Elisabeth Wisbeck;;;
+7275692418800900;Dione da Rocha Bandeira;;;
+3417772625844686;Jarco Wladimir Sordo Imbassahy de Mello;;;
+4129602885622616;Eliane Böhr;;;
+1535180642407486;Daniel Collares;;;
+2972427544052906;Marcos Antonio dos Anjos;;;
+1018406192582854;Luis Carlos Ferreira;;;
+0182723185533196;Anderson Gaedke;;;
+6288185004134369;Ernesto Augusto Garbe;;;
+9585303979421661;Nestor Castilho Gomes;;;
+2909913218233817;Clóvis Hoepfner;;;
+5731178350532354;Ricardo Corrêa Fernandes Junior;;;
+2737156159731225;Alvaro Koenig;;;
+0194329905879138;Beatriz Kohn de Cristo;;;
+6869717367520313;Fernanda Brandão Lapa;;;
+3578723712725128;Érika Louise Bastos Calazans;;;
+4762380375441815;Carla Maria Melleiro Gimenez;;;
+5200021069241947;Alexandre José Mendes;;;
+6527802678126549;Amanda Bertolo Merki;;;
+8442937417821295;Paula Miyuki Aoki Bissolotti;;;
+1923631800929452;Débora Duarte Monney;;;
+7814868565460295;Carla Heloísa Cabral Moro;;;
+9248412733292132;Iramar Baptistella do Nascimento;;;
+2670837398105621;Carlos Henrique Nowatzki;;;
+9135200418009901;Patrícia de Oliveira Areas;;;
+3817581341142503;Daniel de Oliveira;;;
+9437064053969618;Ricardo Alexandre de Méllo Oliveira;;;
+6942623104649778;Eloah Maria Oliveira Acauan;;;
+2791364536132482;Juraci Paulo Brancaleone;;;
+0709829554136959;Artur Braga Pfeifer;;;
+1693719242123118;Álvaro Piazzetta Pinto;;;
+9301106873731290;Fabíola Possamai;;;
+3761772701413162;Luciano Raiter;;;
+3951976064010469;Eliane Maria Nunes Ramin;;;
+1112294235468600;Fabiana Ramos da Cruz Cardozo;;;
+3442332896591557;Luiz Arthur Rangel Cyrino;;;
+9212716558220512;Ademir Garcia Reberti;;;
+8572863361380512;Cristimari Regina de Oliveira Loos;;;
+5122755465084756;Guilherme Rodrigues;;;
+2449700372573131;Nara Caetano Rodrigues;;;
+3735202659256764;Pedro Romão Mickucz;;;
+2214282434041858;Luiz Gustavo Assad Rupp;;;
+3097431681386058;Julio Cesar de Sá;;;
+4368752756403602;Adriane Garcia Salik;;;
+3158722868169008;Murilo Pilatti Santos;;;
+3964447989590755;Adriano Maurício Santos;;;
+6545121219962177;Patrícia Luciani Sarli;;;
+0270438913802980;Cristiano Berezoski Schattschneider;;;
+8952634264945014;Rafael Scheunemann;;;
+0340839999459538;Marco Antonio Schueda;;;
+7833438803741919;Fabiano Luis Schwingel;;;
+3533720475597297;Genivaldo da Silva;;;
+9505037022802193;Bruna da Silva Ferreira;;;
+9324082856442197;Cleber Fabiano da Silva;;;
+6168081861074190;Juliana Kunz Silveira;;;
+8433189527366346;José Carlos Simões Florençano;;;
+2880387898162020;Jonatas Sosnoski;;;
+0476346215704227;Ágada Hilda Steffen dos Santos;;;
+4689296432125391;Marli Teresinha Everling;;;
+9258366912387751;Carin Albino Luçolli Tonchuk;;;
+6275029787034613;Celio Luiz Valcanaia;;;
+9068855252190064;Sarah Cristina Vignoto;;;
+4490276992047393;Antonio Vinicius Soares;;;
+2524865886401407;Elton Voltolini;;;
+8951676309772729;Paulo Roberto Wille;;;
+2439906790511394;Dalisbor Marcelo Weber Silva;;;
+3595608664294533;Carla Werlang Coelho;;;
+0990441135937573;Edward Werner Schubert;;;
+9777909537678981;Nilza Cristina de Valor Gonçalves Wilhelmsen;;;
+4521129133282711;Magali Xavier de Sousa;;;
+3708913544092539;Fabiola Fatima Keiko Yamada Pretto;;;
+6031699858623619;Sofia Cieslak Zimath;;;
+2084165128177938;Ivy Zortéa da Silva Parise;;;
+0641905597849821;Paulo Henrique Condeixa de França;;;
+7704635803035232;Lucia Jamli Abel;;;
+7044205666688774;Emerson Luiz Gumboski;;;
+3509475317545112;Mário Afonso Filho e Maluf;;;
+5574002164226642;Taiza Mara Rauen Moraes;;;
+4595600888334320;Gilmar Sidnei Erzinger;;;
+2051914293044086;Antonio Bedin;;;
+2534046524559651;Mariane Bonatti;;;
+0652299617795868;Rosânia Campos;;;
+4327451424936604;Maéle Cardoso Avila;;;
+7048701872322243;Ilanil Coelho;;;
+4857149112150161;Fatima Cristina Bonassa Bucker;;;
+3047634604312416;Tarcisio Crocomo;;;
+5387362633837752;Christine Böhm da Costa;;;
+1441223439317345;Adelino Denk;;;
+0104818848520223;Rosane Bonessi Dias;;;
+5868848442103948;Lúcia Fátima de Castro Ávila;;;
+9139404482035101;Selma Cristina Franco;;;
+6348615294762269;Sandra Paschoal Leite de Camargo Guedes;;;
+4323476442404137;Paulo Ivo Koehntopp;;;
+4037198247964789;Andrei Koerbel;;;
+8465265267794966;Fabio Kricheldorf;;;
+3713405392870473;Carlos José de Lima;;;
+3975783869160318;Fernando Luiz Andrade Bahiense;;;
+1716874607640720;Dayane Clock Luiz;;;
+0182864973438566;Norberto Luiz Cabral;;;
+5383021569120720;Eliane Maria Martins;;;
+4331049455936651;Rafael Mendonça;;;
+1345657466507306;Cristiano Grimm Menegazzo;;;
+2277739595794172;Luiz Carlos Machado Miguel;;;
+2228801103428191;Dennis Minoru Fujita;;;
+3974884529366222;Pedro Jorge Cortes Morales;;;
+8202427453806898;Michele Müller Fialkowski;;;
+4021343457320156;Rubens Nazareno Garcia;;;
+6653171812871008;Mario Neneve;;;
+9289127002070058;Arlene Leite Nunes;;;
+5571348329716379;Francisco Cesar Pabis;;;
+4709634208744408;Bruna Paninson;;;
+8965196417149303;Luza Maria Panis;;;
+2216229327756985;José Paulo Figueiredo Meyer;;;
+1968967929695842;Augusto Radünz do Amaral;;;
+5357414882217607;Elisabeth Grubba Richter;;;
+9444541080911853;Claudia Cavalcante Rocha Campos;;;
+2561067762294542;Ligia da Rosa;;;
+8041551261651027;Luciane Ruschel Nascimento Garcez;;;
+2337903561269419;Julio Amaro de Sa Koneski;;;
+3656401868921645;Willian Barbosa Sales;;;
+5436519412936440;Kátia Cristina Salvi de Abreu;;;
+0087948623798364;Jorge André Santos da Costa;;;
+2617148429371122;Elsa Catarina Santos Rosiski;;;
+2478238351047042;Elaine Cristina Borges Scalabrini;;;
+1883298799522830;Noeli Sellin;;;
+5767977983573445;Carlos José Serapiao;;;
+2875398244210188;Eliezer da Silva;;;
+3117556800645090;Pedro Ivo Gualberto Malschitzky Alves da Silva;;;
+3158983410620334;Ricardo Alexandre da Silva;;;
+6481536154516928;Lucas Matos Silveira;;;
+9578677627431709;Maria Lucia de Amorim Soares;;;
+4323431174678300;Ester de Almeida Souza;;;
+3904371379826026;Ozair Souza;;;
+1500765932541992;Jair Spezzia;;;
+0143270174062850;Anna Stegh Camati;;;
+2264022139132841;Gustavo Daniel Tavares Bastos Gama;;;
+0811997032753623;Ricardo de Vargas Kilca;;;
+6517403183807478;João Vicente Pandolfo Panitz;;;
+7089890791632018;Daniele Alves Vila Nova;;;
+8194175245194945;Raquel Wanzuita;;;
+6235320752411562;Frederico Wellington Jorge;;;
+3912404085099114;Artur Ricardo Wendhausen;;;
+6149458374616691;Glauco Adrieno Westphal;;;
+1616915166013370;Euler Renato Westphal;;;
+3147888043289344;Ana Carolina Wolff Mota;;;
+3065157934248126;Sandro Luiz Zalewski Porto;;;
+1569304282993452;Clóvis Francisco Zucco;;;
+8447530344683575;Karin Esemann de Quadros;;;
+2074056592250919;Raquel da Rocha Pereira;;;
+4979244543748756;Maurício Roberto da Silva;;;
+2713109621898643;Hugo Moreira Soares;;;
+0184704687335066;Alexandre Venson Grose;;;
+3254736616560965;Maria Simone Vione Schwengber;;;
+6316502339816708;Marta Jussara Cremer;;;
+9349272647053308;João Carlos Ferreira de Melo Júnior;;;
+2501718043949962;Maria Urânia Alves;;;
+8403832284853107;Raquel Alvarenga Sena Venera;;;
+6136084692276376;Flares Baratto Filho;;;
+0832413079467673;Sandra Aparecida Furlan;;;
+5180720562318244;Omar Amin Ghanem Filho;;;
+4153727775263193;Allan Henrique Gomes;;;
+8223592156939686;Adriana Antunes Lopes;;;
+1779615059502476;Sidnei Machado;;;
+6477764500671312;Marco Fabio Mastroeni;;;
+1555802144100996;Luiz Cézar Medeiros;;;
+8788197899545402;Rodrigo Jesus de Medeiros;;;
+6151553640723914;Luiz Henrique Melo;;;
+3737029542729376;Leandro Gornicki Nunes;;;
+9321225768028391;Luciane Pinho de Almeida;;;
+6472682642970566;Vilma Antelo Ramos;;;
+3785349617238396;Katia Regina Alves Nunes;;;
+8903823344613309;Paulo Roberto Jannig;;;
+5886792744030746;Guilherme Roman Borges;;;
+1818776248131360;Anderson Ricardo Roman Gonçalves;;;
+1020161490400792;Rafael de March Ronsoni;;;
+9669620468072403;Helga Loos-Sant'Ana;;;
+2998860386267165;Andre Scalco;;;
+3069349652397880;Mauren da Silva Salin;;;
+8632667129208091;Valdir Steglich;;;
+0296323090480305;Raquel Bissacotti Steglich;;;
+3508317688319972;Salete Teresinha dos Santos Anderle;;;
+1207033274592511;Ana Paula Testa Pezzin;;;
+1485870326035574;Carlos Antonio Moura de Toledo;;;
+3074835055057374;Carlos Alberto Tomelin;;;
+7531274356261925;Tiago Neves Veras;;;
+1755140611499739;Roberta Lourenço Ziolli;;;
+4943251213278074;Mario Junqueira Nóbrega;;;
+5231050870358254;Flávio Anthero Nunes Vianna dos Santos;;;
+6814718346247542;Virginia Grace Barros;;;
+8055365157436215;Emerson José Corazza;;;
+2476531795082160;Renato Jose de Oliveira;;;
+1287217077795706;Manoel Pereira Pinto Filho;;;
+7852151945196465;Daisy Aparecida do Nascimento Rebelatto;;;
+1951710128353552;Adriana Rosa Carvalho;;;
+6515586356402204;Susana Regina de Mello Schlemper;;;
+9941147937425443;José William Vavruk;;;
+7221553133870083;Elizabete Tamanini;;;
+5501079054072232;Elisabete Maria Zanin;;;
+4147899091047166;Sergio Campos;;;
+3303953207972586;Dalila Alves Corrêa;;;
+3535329694708958;Oscar Dalfovo;;;
+7840872163805759;Maria Gabriela Haye Biazevic;;;
+2861685938046060;Maria Ângela de Barros Correia Menezes;;;
+8427731174220329;Cesar Aparecido Nunes;;;
+5132027829423745;Nádia Régia Maffi Neckel;;;
+9713805856848987;Sandra Rivera Fidel;;;
+7906557324178938;Juliane Maria Guerreiro Tanomaru;;;
+8463651002688096;Napoleão Verardi Galegale;;;
+7277026286860571;Elvira Barros Viveiros da Silva;;;
+5856322350857612;Maria Judith Sucupira da Costa Lins;;;
+8824980885829386;Marco Antonio Zachia Ayub;;;
+9800086018747958;Dione Mari Morita;;;
+6206149279062112;Hazim Ali Al-Qureshi;;;
+2791098416503955;Maria da Piedade Resende da Costa;;;
+6474240798904132;Uwe Horst Schulz;;;
+9578030996500849;Ruth Meri Lucinda da Silva;;;
+1506907414606148;Aída Cristina do Nascimento Silva;;;
+9710846032672593;Fatima Regina Mena Barreto Silva;;;
+9330989884789830;Claudia Regina Cavaglieri;;;
+8185048034258055;Ademir Donizeti Caldeira;;;
+7467282330694047;Francisco Carlos Duarte;;;
+5382444630321221;Mauro Guimarães;;;
+1540345567927880;Anderson Guzzi;;;
+1754614469917208;Luiz Roberto Santos Moraes;;;
+0962895520743039;Ada Cristina Machado Silveira;;;
+7219345131875772;Vânia Helena Techio;;;
+9323158689549288;Cristina Tristão de Andrade;;;
+7580351882204247;Antonio Augusto Ulson de Souza;;;
+4851066236718168;Rita Scheel-Ybert;;;
+5720921133186299;Regina Helena Pires de Brito;;;
+7861179238186694;Marco Aurelio Ribeiro de Mello;;;
+1540245792957136;Edson Luiz Riccio;;;
+0128404227626176;Maria Virginia Petry;;;
+8310937495075551;Eduardo Fernandes Bondan;;;
+8674398558384129;Dachamir Hotza;;;
+3483667901818921;Leandro dos Santos Coelho;;;
diff --git a/LattesExtractor/resources/sample/0373518097057669.xml b/LattesExtractor/resources/sample/0373518097057669.xml
new file mode 100644
index 0000000..7d28e3d
--- /dev/null
+++ b/LattesExtractor/resources/sample/0373518097057669.xml
@@ -0,0 +1 @@
+PsicologiaPsicologiaComportamento Humano nas OrganizaçõesSeminários AvançadosPsicologiaPsicologia
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/1005662551597228.xml b/LattesExtractor/resources/sample/1005662551597228.xml
new file mode 100644
index 0000000..bc5d20e
--- /dev/null
+++ b/LattesExtractor/resources/sample/1005662551597228.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/1249410597196545.xml b/LattesExtractor/resources/sample/1249410597196545.xml
new file mode 100644
index 0000000..cf0b226
--- /dev/null
+++ b/LattesExtractor/resources/sample/1249410597196545.xml
@@ -0,0 +1 @@
+História ContemporâneaHistória Antiga IHistória Antiga IIHistória contemporânea IHistória contemporânea IIHistória do Brasil IHistória do Brasil II
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/1441223439317345.xml b/LattesExtractor/resources/sample/1441223439317345.xml
new file mode 100644
index 0000000..d82faf2
--- /dev/null
+++ b/LattesExtractor/resources/sample/1441223439317345.xml
@@ -0,0 +1 @@
+Microeconomia para EmpreendedoresTeoria EconomicaConsultoria EconômicaAnálise Conjuntural para EmpreendedoresPlanejamento EstratégicoAdministração de Materiais e ProduçãoCustosPlanejamento EstratégicoAdministração da ProduçãoAdministração FinanceiraAdministração de Pequenos NegóciosDescarte, Organização, Limpeza, Higiene e DisciplinaRelaçoes Humanas no TrabalhoCustos e Formação do Preço de Venda na Pequena EmpresaQualidade e Produtividade para Micro e Pequena EmpresaQualidade TotalSupervisão/Formação de Novos Supervisores14610089810001461008981000PTNS
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/2707676882754005.xml b/LattesExtractor/resources/sample/2707676882754005.xml
new file mode 100644
index 0000000..879c121
--- /dev/null
+++ b/LattesExtractor/resources/sample/2707676882754005.xml
@@ -0,0 +1 @@
+Estágio Curricular SupervisionadoGestão do DesignGestão do DesignProjeto de Produto 2Projeto de Produto 3Biônica (Regime Especial)ErgonomiaDesenho TécnicoMetodologia do ProjetoMetodologia do ProjetoProjeto de MobiliárioProjeto de ProdutoProjeto de Produto 2Projeto de Produto 2Projeto de Produto 2Projeto de Produto 3Projeto de Produto 5Projeto de Produto 5Desenvolvimento de Produto 1Design de Produto no Contexto UrbanoEstágio (Regime Especial)15031012000001503101200000drishibata@gmail.comPTSS
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/4158431052286991.xml b/LattesExtractor/resources/sample/4158431052286991.xml
new file mode 100644
index 0000000..f4d9ae1
--- /dev/null
+++ b/LattesExtractor/resources/sample/4158431052286991.xml
@@ -0,0 +1 @@
+Administração da ProduçãoGerencia de ProduçãoEconomia IndustrialAdministração da ProduçãoEstratégia EmpresarialEstratégia EmpresarialPensamento Econômico ContemporâneoTransporte e SeguroTeoria Geral da AdministraçãoGestão da QualidadeTeorias de AdministraçãoPlanejamento de NegóciosEconomia da Tecnologia da InformaçãoContabilidade SocialComunicação EmpresarialAdministração da ProduçãoCustosOrientação de EstágioGestão da QualidadeTransporte e SeguroAdministração da ProduçãoAdministração da ProduçãoPlanejamento de NegóciosPensamento Econômico ContemporâneoTeoria EconômicaEconomiaTeoria EconômicaNegociações InternacionaisEconomia12261788340001226178834000ajdema@zaz.com.brPTSS
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/4647569783371880.xml b/LattesExtractor/resources/sample/4647569783371880.xml
new file mode 100644
index 0000000..e9c28e2
--- /dev/null
+++ b/LattesExtractor/resources/sample/4647569783371880.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/4988507019104479.xml b/LattesExtractor/resources/sample/4988507019104479.xml
new file mode 100644
index 0000000..83eb4d9
--- /dev/null
+++ b/LattesExtractor/resources/sample/4988507019104479.xml
@@ -0,0 +1 @@
+12675797020001267579702000PTN
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/5112671646704936.xml b/LattesExtractor/resources/sample/5112671646704936.xml
new file mode 100644
index 0000000..2412279
--- /dev/null
+++ b/LattesExtractor/resources/sample/5112671646704936.xml
@@ -0,0 +1 @@
+Cálculo Diferencial e Integral I e II e Pesquisa OperacionalMetodologia do Ensino de Matemática e EstatísticaMatemática I e Pesquisa OperacionalEconomia(matemática financeira), Matemática e Didática da Matemática
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/5984138138332842.xml b/LattesExtractor/resources/sample/5984138138332842.xml
new file mode 100644
index 0000000..bcc8fd5
--- /dev/null
+++ b/LattesExtractor/resources/sample/5984138138332842.xml
@@ -0,0 +1 @@
+FísicaBiofísicaBiofísicaEstatística AplicadaFísicaFísica Experimental IBiofísicaFísicaFísica
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/8355499954192153.xml b/LattesExtractor/resources/sample/8355499954192153.xml
new file mode 100644
index 0000000..7f83838
--- /dev/null
+++ b/LattesExtractor/resources/sample/8355499954192153.xml
@@ -0,0 +1 @@
+12867123690001286712369000PTSS
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/8646874340523442.xml b/LattesExtractor/resources/sample/8646874340523442.xml
new file mode 100644
index 0000000..c1afcd0
--- /dev/null
+++ b/LattesExtractor/resources/sample/8646874340523442.xml
@@ -0,0 +1 @@
+Planejamento EstratégicoFundamentos da AdmninistraçãoOrientação de Trabalho de Conclusão de CursoADMINISTRAÇÃO DE RECURSOS HUMANOSADMINISTRAÇÃO PÚBLICAPLANEJAMENTO ESTRATÉGICOORIENTAÇÃO DE TRABALHO DE CONCLUSÃO DE CURSOSANÁLISE DE PROJETOS14567672590001456767259000PTNN
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/9212716558220512.xml b/LattesExtractor/resources/sample/9212716558220512.xml
new file mode 100644
index 0000000..5353fba
--- /dev/null
+++ b/LattesExtractor/resources/sample/9212716558220512.xml
@@ -0,0 +1 @@
+Ginecologia e Obstetríciaginecologia e obstetricia
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/9652429155976938.xml b/LattesExtractor/resources/sample/9652429155976938.xml
new file mode 100644
index 0000000..05136c9
--- /dev/null
+++ b/LattesExtractor/resources/sample/9652429155976938.xml
@@ -0,0 +1 @@
+15027996670001502799667000walter.coan@gmail.comPTNN
\ No newline at end of file
diff --git a/LattesExtractor/resources/sample/9815721279098341.xml b/LattesExtractor/resources/sample/9815721279098341.xml
new file mode 100644
index 0000000..89eee26
--- /dev/null
+++ b/LattesExtractor/resources/sample/9815721279098341.xml
@@ -0,0 +1 @@
+Redes de ComputadoresSistemas OperacionaisProgramação de Computadores para a EngenhariaRedes de ComputadoresSistemas OperacionaisProgramação de Computadores para a EngenhariaProjeto e Trabalho de Conclusão de Curso
\ No newline at end of file