{"id":3711,"date":"2026-07-20T17:54:09","date_gmt":"2026-07-20T20:54:09","guid":{"rendered":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/?p=3711"},"modified":"2026-07-20T18:01:42","modified_gmt":"2026-07-20T21:01:42","slug":"desenvolvimento-de-uma-plataforma-digital-para-o-centro-de-pesquisas-genealogicas-de-nova-palma","status":"publish","type":"post","link":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/2026\/07\/20\/desenvolvimento-de-uma-plataforma-digital-para-o-centro-de-pesquisas-genealogicas-de-nova-palma","title":{"rendered":"Desenvolvimento de uma plataforma digital para o Centro de Pesquisas Geneal\u00f3gicas de Nova Palma"},"content":{"rendered":"\n<p><span style=\"font-weight: 400\">Durante o 1\u00ba semestre de 2026 eu, Isadora, e minha colega, tamb\u00e9m petiana, Luiza, cursamos a disciplina de Projeto de Software I. Sob a orienta\u00e7\u00e3o do professor Joaquim Assun\u00e7\u00e3o, desenvolvemos um sistema para o Centro de Pesquisas Geneal\u00f3gicas (CPG) de Nova Palma cujo objetivo \u00e9 permitir a digitaliza\u00e7\u00e3o dos milhares de registros geneal\u00f3gicos que o CPG mant\u00e9m, e que at\u00e9 ent\u00e3o estavam guardados apenas no manuscrito original. Nesta edi\u00e7\u00e3o da PET Reda\u00e7\u00e3o, relato nossa experi\u00eancia desenvolvendo a plataforma, com foco nas adapta\u00e7\u00f5es e funcionalidades implementadas para atender os requisitos dos estabelecidos pelo CPG e manter o sistema acess\u00edvel e de f\u00e1cil entendimento.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Requisitos iniciais<\/span><\/h2>\n<p><span style=\"font-weight: 400\">O processo de desenvolvimento come\u00e7ou com uma visita ao CPG para coleta dos principais requisitos. Em Nova Palma pudemos visualizar os manuscritos que seriam registrados no sistema, al\u00e9m de conversar com os futuros usu\u00e1rios e entender seus objetivos. Os principais pontos levantados foram:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os registros manuscritos s\u00e3o como \u201ccadastros\u201d de pessoas, e podem conter informa\u00e7\u00f5es de nascimento, batismo, matrim\u00f4nio, e morte, al\u00e9m de rela\u00e7\u00f5es com pais, filhos e c\u00f4njuges.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O CPG tinha, anteriormente, utilizado o software The Master Genealogist para cadastrar esses registros, por\u00e9m foi utilizado por um curto per\u00edodo e n\u00e3o havia verba para renovar a licen\u00e7a. O funcionamento do sistema agradava os usu\u00e1rios, por\u00e9m o programa estava totalmente em ingl\u00eas, dificultando o uso, e teve seu desenvolvimento encerrado em 2014.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os registros manuscritos est\u00e3o divididos em dezenas de livros, e informa\u00e7\u00f5es de uma mesma fam\u00edlia podem estar espalhadas em livros diferentes. Al\u00e9m disso, os membros das fam\u00edlias n\u00e3o est\u00e3o necessariamente registrados em ordem de ascend\u00eancia, podendo aparecer os filhos antes dos pais. Portanto, \u00e9 necess\u00e1rio que o cadastro seja flex\u00edvel quanto \u00e0 ordem de cria\u00e7\u00e3o e vincula\u00e7\u00e3o de pessoas, para que o usu\u00e1rio possa seguir a ordem dos livros e n\u00e3o precise completar uma fam\u00edlia inteira de uma vez.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O formato geral dos registros manuscritos \u00e9 o seguinte:<\/span><\/li>\n<\/ol>\n<ul style=\"list-style-type: circle\">\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Homem, com suas respectivas informa\u00e7\u00f5es, incluindo quem s\u00e3o seus pais e em que livro encontr\u00e1-los<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Esposa, com suas respectivas informa\u00e7\u00f5es, incluindo quem s\u00e3o seus pais e em que livro encontr\u00e1-los<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Filhos, geralmente com menos informa\u00e7\u00f5es, e em que livro encontrar seus registros completos<\/span><\/li>\n<\/ul>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os usu\u00e1rios finais s\u00e3o leigos na \u00e1rea de computa\u00e7\u00e3o, portanto o uso e instala\u00e7\u00e3o deve ser simplificado.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">\u00c9 altamente desej\u00e1vel que haja uma forma de gerar arquivos de backup dos registros j\u00e1 digitalizados, pois a infraestrutura computacional do CPG \u00e9 antiga e h\u00e1 uma preocupa\u00e7\u00e3o com poss\u00edveis perdas de dados.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">A partir dessas informa\u00e7\u00f5es, pudemos delimitar e planejar nosso sistema: uma plataforma digital de cadastro de pessoas e do v\u00ednculo entre elas, com interface clara e acess\u00edvel.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Decis\u00f5es de implementa\u00e7\u00e3o<\/span><\/h2>\n<h3><span style=\"font-weight: 400\">Stack<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Levando em considera\u00e7\u00e3o as necessidades da aplica\u00e7\u00e3o e o nosso pr\u00f3prio conhecimento t\u00e9cnico, decidimos desenvolver um sistema web utilizando <\/span><a href=\"http:\/\/vue.js\"><span style=\"font-weight: 400\">Vue.js<\/span><\/a><span style=\"font-weight: 400\"> [1], um framework para desenvolvimento front end, complementado pelo Nuxt [2], o framework full-stack do Vue; o banco de dados seria o PostgreSQL [3], instalado localmente, e o Drizzle ORM [4] foi utilizado para facilitar a integra\u00e7\u00e3o com o restante da aplica\u00e7\u00e3o. Para abstrair a necessidade de acessar a plataforma por um navegador, decidimos encapsular nosso sistema usando o Electron [5], um framework que usa componentes desenvolvidos para a web para gerar aplica\u00e7\u00f5es desktop.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Dessa forma, garantimos que a aplica\u00e7\u00e3o final seria facilmente acess\u00edvel, sem depender de conex\u00e3o de internet, e que ainda poder\u00edamos utilizar tecnologias com as quais j\u00e1 t\u00ednhamos trabalhado antes, priorizando a qualidade do produto final.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Al\u00e9m dos frameworks relatados acima, utilizamos a biblioteca Family Chart [6] para criar e exibir os v\u00ednculos familiares em formato de \u00e1rvore geneal\u00f3gica, e adaptamos fun\u00e7\u00f5es de busca e armazenamento de grafos [7] para efetivamente vincular nossos registros.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Interfaces<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Inspiradas no software previamente utilizado pelo CPG, The Master Genealogist, decidimos implementar nossas interfaces emulando o que n\u00f3s carinhosamente chamamos de est\u00e9tica Delphi: fundo cinza, \u00e2ngulos retos, bot\u00f5es grandes no topo da tela e visualiza\u00e7\u00f5es em janelas. Nesse quesito preciso destacar minha colega Luiza, que recriou perfeitamente as caracter\u00edsticas est\u00e9ticas dos programas dos anos 90. Al\u00e9m de (na nossa opini\u00e3o) lindo, o sistema ficou f\u00e1cil e intuitivo, com \u00e1reas bem divididas e informa\u00e7\u00f5es claras.<\/span><\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-3715\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image4.png\" alt=\"imagem demonstrando o sistema\" width=\"1920\" height=\"1008\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image4.png 1920w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image4-300x158.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image4-1024x538.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image4-768x403.png 768w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image4-1536x806.png 1536w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<h3><span style=\"font-weight: 400\">Fluxo de cadastro<\/span><\/h3>\n<p><span style=\"font-weight: 400\">O principal problema relatado pelos usu\u00e1rios quanto \u00e0 cria\u00e7\u00e3o de pessoas \u00e9 que, em outros sistemas testados para a mesma finalidade, era necess\u00e1rio j\u00e1 ter os ascendentes de uma pessoa cadastrados para poder vincul\u00e1-los com ela na hora da cria\u00e7\u00e3o, o que obrigaria-os a buscarem em diversos livros at\u00e9 chegar no primeiro membro de uma determinada fam\u00edlia. Por exemplo: para que eu fosse inserida no sistema, meus pais j\u00e1 deveriam estar cadastrados, e, para que meus pais fossem inseridos, os pais deles deveriam estar cadastrados, assim sucessivamente. Isso criava um fluxo muito engessado, que n\u00e3o funcionava bem com a forma como os registros manuscritos foram feitos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Para resolver isso, mantivemos os registros de pessoas totalmente edit\u00e1veis ap\u00f3s sua cria\u00e7\u00e3o, incluindo a parte de v\u00ednculos, e adicionamos uma maneira r\u00e1pida de criar parentes durante o cadastro de um indiv\u00edduo.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Como nossos registros podem ser editados, \u00e9 poss\u00edvel criar uma pessoa sem adicionar nenhum v\u00ednculo e posteriormente, quando seus parentes tamb\u00e9m estiverem cadastrados, vincular as rela\u00e7\u00f5es. Por\u00e9m, isso acaba gerando o retrabalho de abrir todos os registros da fam\u00edlia novamente e alter\u00e1-los. Para mitigar o problema, pelo menos parcialmente, adicionamos uma op\u00e7\u00e3o em que o usu\u00e1rio pode criar um parente usando apenas nome, sobrenome e sexo. Dessa forma, esse parente pode ser editado posteriormente, por\u00e9m n\u00e3o ser\u00e1 necess\u00e1rio voltar no registro original para vincul\u00e1-lo, pois j\u00e1 estar\u00e3o relacionados.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Instala\u00e7\u00e3o e backup de dados<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Uma de nossas preocupa\u00e7\u00f5es quanto ao sistema estava relacionada ao processo de instala\u00e7\u00e3o. Apesar de a plataforma em si estar pronta para uso sem necessidade de configura\u00e7\u00e3o, era necess\u00e1rio ter o PostgreSQL instalado e corretamente configurado, com o banco criado. N\u00f3s poder\u00edamos pessoalmente fazer essa instala\u00e7\u00e3o, por\u00e9m isso criaria uma depend\u00eancia entre os usu\u00e1rios do CPG e n\u00f3s, que estaremos nos formando em poucos semestres, dificultando poss\u00edveis trocas de computadores e reinstala\u00e7\u00e3o do sistema.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Para manter nosso projeto o mais independente poss\u00edvel, geramos um instalador utilizando o Inno Setup [8] que instala, juntamente com a nossa plataforma, o banco de dados e j\u00e1 o deixa configurado. Dessa forma, caso seja necess\u00e1rio, os usu\u00e1rios finais poder\u00e3o facilmente instalar toda a aplica\u00e7\u00e3o sem precisar de nenhum conhecimento t\u00e9cnico.<\/span><\/p>\n<p><span style=\"font-weight: 400\">A parte do backup de dados tamb\u00e9m era uma preocupa\u00e7\u00e3o por depender de acesso ao banco de dados via terminal ou PgAdmin. Para resolver isso, inserimos na aplica\u00e7\u00e3o um bot\u00e3o de \u201cBackup\u201d que faz o download de um arquivo .dump contendo todos os dados salvos no banco e preparamos um execut\u00e1vel que, ap\u00f3s selecionado o arquivo de backup, executa os comandos de restaura\u00e7\u00e3o do banco.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Essas duas solu\u00e7\u00f5es, e a produ\u00e7\u00e3o de um Guia de Usu\u00e1rio completo e explicativo, garantem que os usu\u00e1rios finais tenham autonomia em todo o processo de uso da plataforma.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Resultado final<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Atualmente, nosso Sistema CPG est\u00e1 instalado e sendo utilizado no Centro de Pesquisas Geneal\u00f3gicas de Nova Palma. Durante os testes iniciais os usu\u00e1rios demonstraram satisfa\u00e7\u00e3o quanto \u00e0s funcionalidades implementadas e tiveram facilidade em entender o fluxo da aplica\u00e7\u00e3o. Abaixo, deixo mais imagens de algumas das funcionalidades implementadas, e o c\u00f3digo completo est\u00e1 dispon\u00edvel em <\/span><a href=\"https:\/\/github.com\/fennerspohr\/cpg\"><span style=\"font-weight: 400\">https:\/\/github.com\/fennerspohr\/cpg<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-3714\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image3.png\" alt=\"\" width=\"1265\" height=\"759\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image3.png 1265w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image3-300x180.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image3-1024x614.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image3-768x461.png 768w\" sizes=\"(max-width: 1265px) 100vw, 1265px\" \/> <img decoding=\"async\" class=\"alignnone size-full wp-image-3713\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image2.png\" alt=\"\" width=\"937\" height=\"659\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image2.png 937w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image2-300x211.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image2-768x540.png 768w\" sizes=\"(max-width: 937px) 100vw, 937px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3712\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image1.png\" alt=\"\" width=\"1266\" height=\"764\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image1.png 1266w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image1-300x181.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image1-1024x618.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2026\/07\/image1-768x463.png 768w\" sizes=\"(max-width: 1266px) 100vw, 1266px\" \/><\/p>\n<p style=\"text-align: right\"><strong>Autora: Isadora Fenner Spohr<\/strong><\/p>\n<h2><span style=\"font-weight: 400\">Refer\u00eancias<\/span><\/h2>\n<p><span style=\"font-weight: 400\">[1] &#8211; You, E. (2014). <\/span><i><span style=\"font-weight: 400\">Vue.js<\/span><\/i><span style=\"font-weight: 400\">. Vuejs.Org. https:\/\/vuejs.org\/<\/span><\/p>\n<p><span style=\"font-weight: 400\">[2] &#8211; <\/span><i><span style=\"font-weight: 400\">Nuxt: The Intuitive Web Framework<\/span><\/i><span style=\"font-weight: 400\">. (n.d.). Nuxt. Retrieved July 14, 2026, from https:\/\/nuxt.com\/<\/span><\/p>\n<p><span style=\"font-weight: 400\">[3] &#8211; The PostgreSQL Global Development Group. (2019). <\/span><i><span style=\"font-weight: 400\">PostgreSQL: The world\u2019s most advanced open source database<\/span><\/i><span style=\"font-weight: 400\">. Postgresql.Org. https:\/\/www.postgresql.org\/<\/span><\/p>\n<p><span style=\"font-weight: 400\">[4] &#8211; <\/span><i><span style=\"font-weight: 400\">DrizzleORM &#8211; next gen TypeScript ORM<\/span><\/i><span style=\"font-weight: 400\">. (n.d.). Orm.Drizzle.Team. Retrieved July 14, 2026, from https:\/\/orm.drizzle.team\/<\/span><\/p>\n<p><span style=\"font-weight: 400\">[5] &#8211; <\/span><i><span style=\"font-weight: 400\">Electron | Build cross-platform desktop apps with JavaScript, HTML, and CSS.<\/span><\/i><span style=\"font-weight: 400\"> (n.d.). Www.Electronjs.Org. Retrieved July 14, 2026, from https:\/\/www.electronjs.org\/<\/span><\/p>\n<p><span style=\"font-weight: 400\">[6] &#8211; <\/span><i><span style=\"font-weight: 400\">Family Chart<\/span><\/i><span style=\"font-weight: 400\">. (2026). Github.Io. https:\/\/donatso.github.io\/family-chart-doc\/<\/span><\/p>\n<p><span style=\"font-weight: 400\">[7] &#8211; <\/span><i><span style=\"font-weight: 400\">PostgreSQL Family Tree Application Practices &#8211; Graph Relation Storage and Search<\/span><\/i><span style=\"font-weight: 400\">. (2019). Alibaba Cloud Community. https:\/\/www.alibabacloud.com\/blog\/postgresql-family-tree-application-practices&#8212;graph-relation-storage-and-search_595037<\/span><\/p>\n<p><span style=\"font-weight: 400\">[8] &#8211; <\/span><i><span style=\"font-weight: 400\">Inno Setup<\/span><\/i><span style=\"font-weight: 400\">. (n.d.). Jrsoftware.Org. Retrieved July 14, 2026, from https:\/\/jrsoftware.org\/isinfo.php<\/span><\/p>\n<p>\u00a0<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Durante o 1\u00ba semestre de 2026 eu, Isadora, e minha colega, tamb\u00e9m petiana, Luiza, cursamos a disciplina de Projeto de Software I. Sob a orienta\u00e7\u00e3o do professor Joaquim Assun\u00e7\u00e3o, desenvolvemos um sistema para o Centro de Pesquisas Geneal\u00f3gicas (CPG) de Nova Palma cujo objetivo \u00e9 permitir a digitaliza\u00e7\u00e3o dos milhares de registros geneal\u00f3gicos que o [&hellip;]<\/p>\n","protected":false},"author":8504,"featured_media":3712,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124,148,112],"tags":[149,198],"class_list":["post-3711","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaques","category-ensino","category-redacao","tag-redacao","tag-tech-e-sociedade"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/3711","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/users\/8504"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/comments?post=3711"}],"version-history":[{"count":0,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/3711\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media\/3712"}],"wp:attachment":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media?parent=3711"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/categories?post=3711"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/tags?post=3711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}