
Portal das Sócias ganha nova funcionalidade
A Unimed CNU acaba de implementar uma nova funcionalidade no Portal das Sócias, reforçando seu compromisso com a transparência, a intercooperação e o fortalecimento da relação com as cooperativas associadas, e atendendo também às melhores práticas de mercado e de Governança .
Com a novidade, cada Unimed poderá consultar diretamente no Portal suas informações financeiras, com dados a partir de dezembro de 2024, e acompanhar a evolução mensal do relacionamento com a Unimed CNU. Além disso, é possível gerar o Demonstrativo Financeiro em formato PDF, facilitando o fechamento contábil das cooperativas.
O Portal das Sócias
Lançado em setembro/2025, reúne documentos, atas, agendas, notícias e indicadores relevantes sobre o desempenho da CNU, além de possibilitar contatos e esclarecimento de dúvidas. O acesso é exclusivo para presidentes e limitado a um login por sócia, garantindo a segurança e a confidencialidade das informações.
The following has evaluated to null or missing:
==> journalArticle.getDisplayDate [in template "53466405417913#7352900#7367229" at line 71, column 34]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign articleDate = journalArticle... [in template "53466405417913#7352900#7367229" at line 71, column 11]
----
1<style>
2 #socias-posts-relacionados-wrapper {
3 box-shadow: 0px 2px 4px 0px rgba(39, 40, 51, 0.12);
4 border-radius: 16px;
5 padding: 25px;
6 border: solid 1px rgba(107, 108, 126, 0.2);
7 background-color: rgba(255, 255, 255, 1);
8 display: flex;
9 flex-direction: column;
10 gap: 32px;
11 }
12
13 #socias-posts-relacionados-wrapper .socias-card-post-relacionados {
14 display: flex;
15 flex-direction: column;
16 gap: 16px;
17 }
18
19 #socias-posts-relacionados-wrapper .principal-title {
20 font-family: 'Unimed Sans';
21 color: #141419;
22 font-size: 1.25rem;
23 line-height: 1.75rem;
24 font-weight: 700;
25 margin: 0px;
26 }
27
28 #socias-posts-relacionados-wrapper .socias-post-relacionado-link {
29 font-size: 1rem;
30 line-height: 1.375rem;
31 font-weight: 700;
32 color: #141419;
33 font-family: 'Unimed Sans';
34 }
35
36 #socias-posts-relacionados-wrapper .socias-post-relacionado-link:hover {
37 text-decoration: underline;
38 }
39
40 #socias-posts-relacionados-wrapper .socias-date {
41 font-size: 1rem;
42 line-height: 1.375rem;
43 font-weight: 400;
44 color: #6B6C7E;
45 }
46
47 @media (max-width: 800px) {
48 #socias-posts-relacionados-wrapper {
49 margin: 32px 16px;
50 }
51 }
52</style>
53<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
54<#assign GroupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
55<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
56
57<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
58<#assign HtmlUtil = staticUtil["com.liferay.portal.kernel.util.HtmlUtil"] />
59
60<div id="socias-posts-relacionados-wrapper">
61 <h3 class="principal-title">Posts relacionados</h3>
62
63 <div>
64 <#if entries?has_content>
65 <div class="socias-card-post-relacionados">
66 <#list entries as entry>
67 <#assign assetEntry = AssetEntryLocalService.getEntry(entry.getClassName(), entry.getClassPK()) />
68 <#assign assetRenderer = assetEntry.getAssetRenderer() />
69 <#assign journalArticle = assetRenderer.getAssetObject() />
70 <#assign assetCategories = assetEntry.getCategories() />
71 <#assign articleDate = journalArticle.getDisplayDate()?string("dd'/'MM'/'yyyy") />
72
73 <#-- Reading time (words per minute = 200) -->
74 <#assign rawContent = journalArticle.getContent()?if_exists!"" />
75 <#assign textContent = HtmlUtil.stripHtml(rawContent) />
76 <#assign textContent = HtmlUtil.unescape(textContent) />
77 <#assign textContent = textContent?replace("\\$\\{[^}]+\\}", "", "r") />
78 <#assign textContent = textContent?replace("\\]\\]>", "", "r") />
79 <#assign textContent = textContent?replace(" ", " ", "r") />
80 <#assign textContent = textContent?replace("\n", " ", "r") />
81 <#assign textContent = textContent?replace("\r", " ", "r") />
82 <#assign textContent = textContent?replace("\t", " ", "r") />
83 <#assign textContent = textContent?replace("\\s+", " ", "r")?trim />
84 <#assign words = (textContent?length > 0)?then(textContent?split(" ")?size, 0) />
85 <#assign wpm = 200 />
86 <#assign minutes = (words / wpm)?ceiling />
87 <#if minutes < 1><#assign minutes = 1 /></#if>
88 <#assign assetCategories = assetEntry.getCategories() />
89 <#assign articleDate = journalArticle.getCreateDate()?string("dd'/'MM'/'yyyy") />
90
91 <#-- Monta link já com o categoryId -->
92 <#if assetCategories?has_content>
93 <#assign firstCategory = assetCategories[0] />
94 <#assign articleURL = entry.getViewURL() + "&category=" + firstCategory.getCategoryId() />
95 <#else>
96 <#assign articleURL = entry.getViewURL() />
97 </#if>
98
99 <a href="${articleURL}" class="text-decoration-none">
100 <div class="d-flex mb-1">
101 <div class="mr-2">
102 <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
103 <path d="M8.75016 1.16663H3.50016C3.19074 1.16663 2.894 1.28954 2.6752 1.50833C2.45641 1.72713 2.3335 2.02387 2.3335 2.33329V11.6666C2.3335 11.976 2.45641 12.2728 2.6752 12.4916C2.894 12.7104 3.19074 12.8333 3.50016 12.8333H10.5002C10.8096 12.8333 11.1063 12.7104 11.3251 12.4916C11.5439 12.2728 11.6668 11.976 11.6668 11.6666V4.08329L8.75016 1.16663Z" stroke="#00995C" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
104 <path d="M8.1665 1.16663V3.49996C8.1665 3.80938 8.28942 4.10612 8.50821 4.32492C8.72701 4.54371 9.02375 4.66663 9.33317 4.66663H11.6665" stroke="#00995C" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
105 <path d="M5.83317 5.25H4.6665" stroke="#00995C" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
106 <path d="M9.33317 7.58337H4.6665" stroke="#00995C" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
107 <path d="M9.33317 9.91663H4.6665" stroke="#00995C" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
108 </svg>
109 </div>
110
111 <div>
112 <p class="socias-post-relacionado-link mb-2">
113 ${entry.getHighlightedTitle()}
114 </p>
115
116 <span class="socias-date" >${minutes} min</span>
117
118 <#if entry.isCreationDateVisible()>
119 <span class="socias-date">
120 • ${articleDate}
121 </span>
122 </#if>
123 </div>
124 </div>
125 </a>
126 </#list>
127 </div>
128 </#if>
129 </div>
130</div>
