VIVISOL Intensivservice vor Ort

Nähe schafft Vertrauen.


Unsere regionalen Teams in Bayern, Bremen, Nordrhein-Westfalen und Niedersachsen sind für Sie da, um eine schnelle und persönliche Versorgung zu gewährleisten. Finden Sie hier Ihren direkten Ansprechpartner.

Anhang

Position

4

Standort
Datum
Tätigkeitsfeld
8
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> assetVocabularyLocalService.fetchGroupVocabulary(themeDisplay.getScopeGroupId(), vocabularyName)  [in template "37204#37246#42066452" at line 68, column 55]

----
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 vocabulary = assetVocabularyL...  [in template "37204#37246#42066452" at line 68, column 33]
----
1<#assign resourcePrimaryKey = .vars["reserved-article-resource-prim-key"].data /> 
2<#assign idArticle = .vars["reserved-article-id"].data /> 
3 
4<#-- assetEntry--> 
5<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
6<#assign assetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService") /> 
7<#assign assetCategoryLocalService  = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
8<#assign assetVocabularyLocalService= serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
9<#assign assetEntry = assetEntryLocalService.fetchEntry("com.liferay.journal.model.JournalArticle", resourcePrimaryKey?number) /> 
10<#if !assetEntry?has_content> 
11    <#stop "Error: Asset Entry with resourcePrimaryKey = ${resourcePrimaryKey} not found. Template execution stopped." /> 
12</#if> 
13 
14<#-- JournalArticle--> 
15<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
16<#assign journalArticle = journalArticleLocalService.fetchLatestArticle(resourcePrimaryKey?number) /> 
17<#if !journalArticle?has_content> 
18    <#stop "Error: Journal Article with resourcePrimaryKey = ${resourcePrimaryKey} not found. Template execution stopped." /> 
19</#if> 
20 
21<div class="thematic-area-page-content mt-5"> 
22    <div class="page-intro"> 
23 
24        <!-- Publish Date --> 
25        <#if assetEntry.getPublishDate()?has_content> 
26            <div class="subtitle-div gap-3"> 
27                <h4 class="subtitle plain-text mb-0"> ${dateUtil.getDate(assetEntry.getPublishDate(), "d MMMM yyyy", locale, timeZone)?upper_case}</h4> 
28            </div> 
29        </#if> 
30 
31        <!-- Title --> 
32        <h1 class="title">${journalArticle.getTitle(themeDisplay.getLocale())}</h1> 
33 
34        <!-- Subtitle --> 
35        <div class="subtitle-div flex-wrap"> 
36            <h4 class="subtitle plain-text col-md-6 p-0">${languageUtil.get(locale, 'authors')}: ${authors.getData()}</h4> 
37            <#assign dateObj = dateUtil.parseDate("yyyy-MM-dd", publishDateCustom.getData(), locale) /> 
38            <h4 class="subtitle plain-text col-md-6 col-12 p-0">${languageUtil.get(locale, 'document-language')}:  ${documentLanguage.getData()!""}</h4> 
39            <h4 class="subtitle plain-text col-md-6 col-12 p-0">${languageUtil.get(locale, 'publish-date')}:  ${dateUtil.getDate(dateObj, "d MMMM yyyy", locale, timeZone)}</h4> 
40            <h4 class="subtitle plain-text col-md-6 col-12 p-0">${languageUtil.get(locale, 'citation')}: ${(citation.getData())!""}</h4> 
41            <h4 class="subtitle plain-text col-md-6 col-12 p-0">DOI: ${(doi.getData())!""}</h4> 
42            <h4 class="subtitle plain-text col-md-6 col-12 p-0">${languageUtil.get(locale, 'keywords-vivilibrary')}: ${(keywords.getData())!""}</h4> 
43        </div> 
44 
45        <#assign distributionLevelChoice = distributionLevel.getData()!""/> 
46        <div class="distribution-level mt-3 ${distributionLevelChoice}"> 
47            <b>${languageUtil.get(locale, distributionLevelChoice)}</b> 
48        </div> 
49 
50        <!-- Main Image --> 
51        <#assign mainImageUrl = ""/> 
52        <#assign mainImageCss = ""/> 
53        <#if uploadDocument.document.getData()?has_content> 
54            <#assign mainImageUrl = uploadDocument.document.getData() + "&previewFileIndex=1"> 
55            <#assign mainImageCss = "main-image-crop"/> 
56        <#elseif journalArticle.getArticleImageURL(themeDisplay)?has_content> 
57            <#assign mainImageUrl = journalArticle.getArticleImageURL(themeDisplay)> 
58        </#if> 
59        <#if mainImageUrl?has_content> 
60            <div class="main-image-div"> 
61                <img class="main-image ${(mainImageCss)!""}" src="${mainImageUrl}" alt="scientific article"> 
62            </div> 
63        </#if> 
64 
65        <#-- Categories --> 
66        <#assign vocabularyName = "Therapy" /> 
67        <#assign vocabularyId = 0 /> 
68				<#assign vocabulary = assetVocabularyLocalService.fetchGroupVocabulary(themeDisplay.getScopeGroupId(), vocabularyName)/> 
69				<#if vocabulary??> 
70            <#assign vocabularyId = vocabulary.getVocabularyId()/> 
71        </#if> 
72 
73        <#assign cats = [] /> 
74        <#if assetEntry.getCategories()?has_content> 
75            <#list assetEntry.getCategories() as c> 
76                <#if c.getVocabularyId() == vocabularyId> 
77                    <#assign cats = cats + [c] /> 
78                </#if> 
79            </#list> 
80        </#if> 
81 
82        <#assign tags = [] /> 
83        <#if assetTagLocalService.getAssetEntryAssetTags(assetEntry.getEntryId())?has_content> 
84            <#assign tags =  assetTagLocalService.getAssetEntryAssetTags(assetEntry.getEntryId())> 
85        </#if> 
86 
87        <#if tags?has_content || cats?has_content> 
88            <div class="tags-container flex-wrap"> 
89                <#if cats?has_content> 
90                    <#list cats as cat> 
91                        <span class="tag tag-style">${languageUtil.get(locale, "account-treatment-"+cat.getTitle(themeDisplay.getLocale()))}</span> 
92                    </#list> 
93                </#if> 
94                <#if tags?has_content> 
95                    <#list tags as tag> 
96                        <span class="tag tag-style">${tag.getName()}</span> 
97                    </#list> 
98                </#if> 
99            </div> 
100        </#if> 
101    </div> 
102 
103    <!-- Wavy divider --> 
104    <div class="wavy-divider"> 
105        <svg viewBox="0 0 1440 60" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none"> 
106            <path d="M0,20 Q360,60 720,20 T1440,20 V60 H0 Z" fill="#fff"/> 
107        </svg> 
108    </div> 
109 
110    <!-- 1. One column section --> 
111    <#if shortAbstract.oneColumnSectionTitle.getData()?has_content && shortAbstract.oneColumnText.getData()?has_content> 
112        <div class="sections-block"> 
113            <h4 class="section-title reading-time-parameter">${shortAbstract.oneColumnSectionTitle.getData()}</h4> 
114            <div class="one-column-text p-0"> 
115                <div class="plain-text reading-time-parameter">${shortAbstract.oneColumnText.getData()}</div> 
116            </div> 
117        </div> 
118    </#if> 
119 
120    <!-- 3. Two columns section --> 
121    <#if abstract.title.getData()?has_content && 
122    abstract.text.getData()?has_content> 
123        <div class="sections-block"> 
124            <h4 class="section-title reading-time-parameter">${abstract.title.getData()}</h4> 
125            <div class="col-md-12 p-0"> 
126                <div class="plain-text reading-time-parameter multi-column-text">${abstract.text.getData()}</div> 
127            </div> 
128        </div> 
129    </#if> 
130 
131    <!-- 5. Embedded document section --> 
132    <#if uploadDocument.docSectionTitle.getData()?has_content && uploadDocument.document.getData()?has_content && uploadDocument.document.getData()?has_content> 
133        <#assign totalPages = webContentUtil.getDocumentPreviewPageCount(themeDisplay, uploadDocument.document.getData()) /> 
134        <div class="sections-block"> 
135            <h4 class="section-title reading-time-parameter">${uploadDocument.docSectionTitle.getData()}</h4> 
136            <div class="doc-container"> 
137                <div class="col-md-12 p-0"> 
138                    <div class="doc-embed d-flex flex-column align-items-center"> 
139                        <button class="pdf-open-doc" data-pdf-url="${uploadDocument.document.getData()}"> 
140                            ${languageUtil.get(locale, "open-document")} 
141                        </button> 
142                        <div class="pdf-pages-container"> 
143                            <#list 1..totalPages as page> 
144                                <img 
145                                        src="${uploadDocument.document.getData()}&previewFileIndex=${page}" 
146                                        class="pdf-page" 
147                                        data-page="${page}" 
148                                /> 
149                            </#list> 
150                        </div> 
151                        <div class="doc-index"> 
152                            <div class="pdf-pagination"> 
153                                <button class="pdf-nav prev subtitle">&lt;</button> 
154                                <div class="pdf-nav-index-div"></div> 
155                                <button class="pdf-nav next subtitle">&gt;</button> 
156                            </div> 
157                        </div> 
158                    </div> 
159                </div> 
160            </div> 
161        </div> 
162    </#if> 
163 
164    <#assign linkTagIsNotEmpty = false> 
165    <#list references.getSiblings() as field> 
166        <#if field.getData()?? && field.linkTitle.getData()?trim != "" && field.linkUrl.getData()?trim != ""> 
167            <#assign linkTagIsNotEmpty = true> 
168            <#break> 
169        </#if> 
170    </#list> 
171 
172    <!-- 6. Link section --> 
173    <#if linkTagIsNotEmpty> 
174        <div class="sections-block" style="border-bottom-right-radius:12px;border-bottom-left-radius:12px;"> 
175            <h4 class="section-title reading-time">${languageUtil.get(locale, "references")}</h4> 
176            <div class="d-flex flex-column"> 
177                <#list references.getSiblings() as link> 
178                    <#if link.linkTitle.getData()?has_content && link.linkUrl.getData()?has_content> 
179                        <div class="link-card mb-4"> 
180                            <div class="link-info"> 
181                                <div class="link-title reading-time-parameter"><b>${link.linkTitle.getData()}</b></div> 
182                                <#if link.linkDesc.getData()?has_content> 
183                                    <div class="link-description reading-time-parameter">${link.linkDesc.getData()}</div> 
184                                </#if> 
185                            </div> 
186                            <a href="${(link.linkUrl.getData())!'javascript:void(0);'}" class="download-btn" 
187                               title="Scarica" onclick="openLinkInNewTab(event, this)"> 
188                                <i class="icom-vivimedical-link-icon"> 
189                                </i> 
190                            </a> 
191                        </div> 
192                    </#if> 
193                </#list> 
194            </div> 
195        </div> 
196    </#if> 
197 
198</div> 
199 
200<script src="https://cdn.jsdelivr.net/npm/hammerjs@2.0.8/hammer.min.js"></script> 
201 
202<script> 
203    function initializeOpenDocButton() { 
204        const openDocBtn = document.querySelector('.pdf-open-doc'); 
205        if (openDocBtn) { 
206            openDocBtn.addEventListener('click', () => { 
207                const pdfUrl = openDocBtn.getAttribute('data-pdf-url'); 
208                if (!pdfUrl) { 
209                    alert('PDF not available'); 
210                    return; 
211
212                const newTab = window.open(pdfUrl, '_blank'); 
213                if (!newTab) { 
214                    alert('Unable to open the PDF. Please check your browser settings for pop-ups.'); 
215
216            }); 
217
218
219 
220    function pdfPagination() { 
221        const pages = document.querySelectorAll('.pdf-page'); 
222        const prevBtn = document.querySelector('.pdf-nav.prev'); 
223        const nextBtn = document.querySelector('.pdf-nav.next'); 
224        const pageNumbersContainer = document.querySelector('.pdf-nav-index-div'); 
225 
226        // pdf-pagination struct: 1....lastPage 
227        const totalPages = pages.length; 
228        const firstPage = 1; 
229        const lastPage = totalPages; 
230        let currentPage = firstPage; 
231        let indexStyleClass = 'subtitle'; 
232 
233        function addStyle(elem, styleClass) { 
234            elem.classList.add(styleClass); 
235
236 
237        function addPageButton(pageNumber) { 
238            const btn = document.createElement('button'); 
239            btn.className = 'pdf-page-num'; 
240            btn.textContent = pageNumber; 
241            addStyle(btn, indexStyleClass); 
242            pageNumbersContainer.appendChild(btn); 
243
244 
245        function addEllipsis() { 
246            const span = document.createElement('span'); 
247            span.className = 'pdf-page-num ellipsis'; 
248            span.textContent = '...'; 
249            addStyle(span, indexStyleClass); 
250            pageNumbersContainer.appendChild(span); 
251
252 
253        // invalid currentPage sets value to default (firstPage) 
254        function validateCurrentPage(currentPage, defaultValue) { 
255            if (typeof currentPage !== 'number' || isNaN(currentPage) || 
256                currentPage < firstPage || currentPage > lastPage) { 
257                return defaultValue; 
258
259            return currentPage; 
260
261 
262        function renderPageNumbers(currentPage) { 
263            pageNumbersContainer.innerHTML = ''; 
264            currentPage = validateCurrentPage(currentPage, firstPage); 
265            console.log("totalPages  " + totalPages); 
266            if (totalPages >= 1 && totalPages <= 4) { 
267                for (let i = firstPage; i < firstPage + totalPages; i++) { 
268                    addPageButton(i); 
269
270
271            else if (currentPage == firstPage || currentPage == firstPage + 1) { 
272                addPageButton(firstPage); 
273                addPageButton(firstPage + 1); 
274                addPageButton(firstPage + 2); 
275                addEllipsis(); 
276                addPageButton(lastPage); 
277            } else if (currentPage == lastPage - 1 || currentPage == lastPage) { 
278                addPageButton(firstPage); 
279                addEllipsis(); 
280                addPageButton(lastPage - 2); 
281                addPageButton(lastPage - 1); 
282                addPageButton(lastPage); 
283            } else { 
284                addPageButton(firstPage); 
285                addEllipsis(); 
286                addPageButton(currentPage); 
287                addEllipsis(); 
288                addPageButton(lastPage); 
289
290
291 
292        function setActivePage(currentPage) { 
293            if (validateCurrentPage(currentPage, firstPage)) { 
294                const buttons = document.querySelectorAll('.pdf-page-num'); 
295                buttons.forEach(btn => btn.classList.remove('active')); 
296                buttons.forEach(btn => { 
297                    if (parseInt(btn.textContent, 10) === currentPage) { 
298                        btn.classList.add('active'); 
299
300                }); 
301
302
303 
304        function showPage(page) { 
305            currentPage = page; 
306            // hides all images 
307            document.querySelectorAll('.pdf-page').forEach(img => img.style.display = 'none'); 
308            // display currentPage image 
309            const currentPageElement = document.querySelector('.pdf-page[data-page="' + page + '"]'); 
310            if (currentPageElement) { 
311                currentPageElement.style.display = 'block'; 
312
313            prevBtn.disabled = currentPage === firstPage; 
314            nextBtn.disabled = currentPage === lastPage; 
315            renderPageNumbers(currentPage); 
316            setActivePage(currentPage); 
317
318 
319        // prev btn listener 
320        prevBtn.addEventListener('click', function () { 
321            if (currentPage > firstPage) showPage(currentPage - 1); 
322        }); 
323 
324        // next btn listener 
325        nextBtn.addEventListener('click', function () { 
326            if (currentPage < lastPage) showPage(currentPage + 1); 
327        }); 
328 
329        // index btn listener 
330        pageNumbersContainer.addEventListener('click', function (e) { 
331            if (e.target.classList.contains('pdf-page-num') && !e.target.classList.contains('ellipsis')) { 
332                const pageNumber = parseInt(e.target.textContent, 10); 
333                if (!isNaN(pageNumber)) { 
334                    showPage(pageNumber); 
335
336
337        }); 
338 
339        //Hammer.js 
340        function initializeHammer() { 
341            const container = document.querySelector('.pdf-pages-container'); 
342 
343            if (!container || typeof Hammer === 'undefined') { 
344                console.warn('Container not found or Hammer.js not loaded'); 
345                return; 
346
347 
348            const hammer = new Hammer(container); 
349 
350            hammer.get('swipe').set({ direction: Hammer.DIRECTION_HORIZONTAL }); 
351 
352            hammer.on('swipeleft', () => { 
353                if (currentPage < totalPages) { 
354                    showPage(currentPage + 1); 
355
356            }); 
357 
358            hammer.on('swiperight', () => { 
359                if (currentPage > 1) { 
360                    showPage(currentPage - 1); 
361
362            }); 
363
364 
365        // Initialize Hammer 
366        initializeHammer(); 
367 
368 
369        showPage(firstPage); 
370
371 
372    function openLinkInNewTab(event, el) { 
373        event.preventDefault(); 
374        event.stopPropagation(); 
375 
376        const href = el.getAttribute('href'); 
377 
378        if (!href || href.trim() === '' || href === 'javascript:void(0);') { 
379            alert('Link non disponibile'); 
380            return; 
381
382        try { 
383            new URL(href, window.location.href); 
384        } catch (e) { 
385            alert('URL non valido'); 
386            return; 
387
388 
389        const newTab = window.open(href, '_blank'); 
390 
391        if (!newTab || newTab.closed || typeof newTab.closed === 'undefined') { 
392            alert('Unable to open the link. Please check your browser settings to allow pop-ups.'); 
393
394
395 
396 
397    function init() { 
398        pdfPagination(); 
399        initializeOpenDocButton(); 
400
401    if (document.readyState === "loading") { 
402        document.addEventListener('DOMContentLoaded', init); 
403        document.addEventListener('DOMContentLoaded', function(){ 
404            let readingTime = calculateReadingTime(); 
405            $('#readingTime').text(readingTime); 
406        }); 
407    } else { 
408        init(); 
409        let readingTime = calculateReadingTime(); 
410        $('#readingTime').text(readingTime); 
411
412 
413    function calculateReadingTime(){ 
414        let wordCount = 0; 
415        const wordsPerMinute = 200; 
416        $('.reading-time-parameter').each(function(index, elem){ 
417            let text = $(elem).text(); 
418            wordCount += text.trim().split(/\s+/).length; 
419        }); 
420        if(wordCount > 0){ 
421            return Math.ceil(wordCount / wordsPerMinute); 
422        }else{ 
423            return 0; 
424
425
426 
427</script> 
428 
429<style> 
430    .main-image-crop{ 
431        height: 300px; 
432        object-position:top center; 
433        @media(max-width: 576px){ 
434            height: 60px; 
435
436
437    .multi-column-text{ 
438        column-count: 2; 
439        column-gap: 2rem; 
440
441    .distribution-level{ 
442        text-transform: uppercase; 
443        &:before{ 
444            content: ""; 
445            display: inline-block; 
446            width: 20px; 
447            height: 20px; 
448            margin-right: 6px; 
449            border: 5px solid; 
450            border-radius: 50%; 
451            background: transparent; 
452            vertical-align: sub; 
453
454        &.disclosable{ 
455            &.before{ 
456                border-color: #23863F; 
457
458            color: #23863F; 
459
460        &.limited-disclosure{ 
461            &.before{ 
462                border-color: #F7B32B; 
463
464            color: #F7B32B; 
465
466        &.internal-use-only{ 
467            &.before{ 
468                border-color: #D24445; 
469
470            color: #D24445; 
471
472
473    .icom-vivimedical-link-icon:before{ 
474        color: #8ed300; 
475
476    .thematic-area-page-content{ 
477        .download-btn:hover{ 
478            text-decoration: none; 
479
480
481 
482    .plain-text{ 
483        p{ 
484            line-height: 1.5; 
485
486
487</style> 
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> assetVocabularyLocalService.fetchGroupVocabulary(themeDisplay.getScopeGroupId(), vocabularyName)  [in template "37204#37246#42066452" at line 68, column 55]

----
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 vocabulary = assetVocabularyL...  [in template "37204#37246#42066452" at line 68, column 33]
----
1<#assign resourcePrimaryKey = .vars["reserved-article-resource-prim-key"].data /> 
2<#assign idArticle = .vars["reserved-article-id"].data /> 
3 
4<#-- assetEntry--> 
5<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
6<#assign assetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService") /> 
7<#assign assetCategoryLocalService  = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
8<#assign assetVocabularyLocalService= serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
9<#assign assetEntry = assetEntryLocalService.fetchEntry("com.liferay.journal.model.JournalArticle", resourcePrimaryKey?number) /> 
10<#if !assetEntry?has_content> 
11    <#stop "Error: Asset Entry with resourcePrimaryKey = ${resourcePrimaryKey} not found. Template execution stopped." /> 
12</#if> 
13 
14<#-- JournalArticle--> 
15<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
16<#assign journalArticle = journalArticleLocalService.fetchLatestArticle(resourcePrimaryKey?number) /> 
17<#if !journalArticle?has_content> 
18    <#stop "Error: Journal Article with resourcePrimaryKey = ${resourcePrimaryKey} not found. Template execution stopped." /> 
19</#if> 
20 
21<div class="thematic-area-page-content mt-5"> 
22    <div class="page-intro"> 
23 
24        <!-- Publish Date --> 
25        <#if assetEntry.getPublishDate()?has_content> 
26            <div class="subtitle-div gap-3"> 
27                <h4 class="subtitle plain-text mb-0"> ${dateUtil.getDate(assetEntry.getPublishDate(), "d MMMM yyyy", locale, timeZone)?upper_case}</h4> 
28            </div> 
29        </#if> 
30 
31        <!-- Title --> 
32        <h1 class="title">${journalArticle.getTitle(themeDisplay.getLocale())}</h1> 
33 
34        <!-- Subtitle --> 
35        <div class="subtitle-div flex-wrap"> 
36            <h4 class="subtitle plain-text col-md-6 p-0">${languageUtil.get(locale, 'authors')}: ${authors.getData()}</h4> 
37            <#assign dateObj = dateUtil.parseDate("yyyy-MM-dd", publishDateCustom.getData(), locale) /> 
38            <h4 class="subtitle plain-text col-md-6 col-12 p-0">${languageUtil.get(locale, 'document-language')}:  ${documentLanguage.getData()!""}</h4> 
39            <h4 class="subtitle plain-text col-md-6 col-12 p-0">${languageUtil.get(locale, 'publish-date')}:  ${dateUtil.getDate(dateObj, "d MMMM yyyy", locale, timeZone)}</h4> 
40            <h4 class="subtitle plain-text col-md-6 col-12 p-0">${languageUtil.get(locale, 'citation')}: ${(citation.getData())!""}</h4> 
41            <h4 class="subtitle plain-text col-md-6 col-12 p-0">DOI: ${(doi.getData())!""}</h4> 
42            <h4 class="subtitle plain-text col-md-6 col-12 p-0">${languageUtil.get(locale, 'keywords-vivilibrary')}: ${(keywords.getData())!""}</h4> 
43        </div> 
44 
45        <#assign distributionLevelChoice = distributionLevel.getData()!""/> 
46        <div class="distribution-level mt-3 ${distributionLevelChoice}"> 
47            <b>${languageUtil.get(locale, distributionLevelChoice)}</b> 
48        </div> 
49 
50        <!-- Main Image --> 
51        <#assign mainImageUrl = ""/> 
52        <#assign mainImageCss = ""/> 
53        <#if uploadDocument.document.getData()?has_content> 
54            <#assign mainImageUrl = uploadDocument.document.getData() + "&previewFileIndex=1"> 
55            <#assign mainImageCss = "main-image-crop"/> 
56        <#elseif journalArticle.getArticleImageURL(themeDisplay)?has_content> 
57            <#assign mainImageUrl = journalArticle.getArticleImageURL(themeDisplay)> 
58        </#if> 
59        <#if mainImageUrl?has_content> 
60            <div class="main-image-div"> 
61                <img class="main-image ${(mainImageCss)!""}" src="${mainImageUrl}" alt="scientific article"> 
62            </div> 
63        </#if> 
64 
65        <#-- Categories --> 
66        <#assign vocabularyName = "Therapy" /> 
67        <#assign vocabularyId = 0 /> 
68				<#assign vocabulary = assetVocabularyLocalService.fetchGroupVocabulary(themeDisplay.getScopeGroupId(), vocabularyName)/> 
69				<#if vocabulary??> 
70            <#assign vocabularyId = vocabulary.getVocabularyId()/> 
71        </#if> 
72 
73        <#assign cats = [] /> 
74        <#if assetEntry.getCategories()?has_content> 
75            <#list assetEntry.getCategories() as c> 
76                <#if c.getVocabularyId() == vocabularyId> 
77                    <#assign cats = cats + [c] /> 
78                </#if> 
79            </#list> 
80        </#if> 
81 
82        <#assign tags = [] /> 
83        <#if assetTagLocalService.getAssetEntryAssetTags(assetEntry.getEntryId())?has_content> 
84            <#assign tags =  assetTagLocalService.getAssetEntryAssetTags(assetEntry.getEntryId())> 
85        </#if> 
86 
87        <#if tags?has_content || cats?has_content> 
88            <div class="tags-container flex-wrap"> 
89                <#if cats?has_content> 
90                    <#list cats as cat> 
91                        <span class="tag tag-style">${languageUtil.get(locale, "account-treatment-"+cat.getTitle(themeDisplay.getLocale()))}</span> 
92                    </#list> 
93                </#if> 
94                <#if tags?has_content> 
95                    <#list tags as tag> 
96                        <span class="tag tag-style">${tag.getName()}</span> 
97                    </#list> 
98                </#if> 
99            </div> 
100        </#if> 
101    </div> 
102 
103    <!-- Wavy divider --> 
104    <div class="wavy-divider"> 
105        <svg viewBox="0 0 1440 60" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none"> 
106            <path d="M0,20 Q360,60 720,20 T1440,20 V60 H0 Z" fill="#fff"/> 
107        </svg> 
108    </div> 
109 
110    <!-- 1. One column section --> 
111    <#if shortAbstract.oneColumnSectionTitle.getData()?has_content && shortAbstract.oneColumnText.getData()?has_content> 
112        <div class="sections-block"> 
113            <h4 class="section-title reading-time-parameter">${shortAbstract.oneColumnSectionTitle.getData()}</h4> 
114            <div class="one-column-text p-0"> 
115                <div class="plain-text reading-time-parameter">${shortAbstract.oneColumnText.getData()}</div> 
116            </div> 
117        </div> 
118    </#if> 
119 
120    <!-- 3. Two columns section --> 
121    <#if abstract.title.getData()?has_content && 
122    abstract.text.getData()?has_content> 
123        <div class="sections-block"> 
124            <h4 class="section-title reading-time-parameter">${abstract.title.getData()}</h4> 
125            <div class="col-md-12 p-0"> 
126                <div class="plain-text reading-time-parameter multi-column-text">${abstract.text.getData()}</div> 
127            </div> 
128        </div> 
129    </#if> 
130 
131    <!-- 5. Embedded document section --> 
132    <#if uploadDocument.docSectionTitle.getData()?has_content && uploadDocument.document.getData()?has_content && uploadDocument.document.getData()?has_content> 
133        <#assign totalPages = webContentUtil.getDocumentPreviewPageCount(themeDisplay, uploadDocument.document.getData()) /> 
134        <div class="sections-block"> 
135            <h4 class="section-title reading-time-parameter">${uploadDocument.docSectionTitle.getData()}</h4> 
136            <div class="doc-container"> 
137                <div class="col-md-12 p-0"> 
138                    <div class="doc-embed d-flex flex-column align-items-center"> 
139                        <button class="pdf-open-doc" data-pdf-url="${uploadDocument.document.getData()}"> 
140                            ${languageUtil.get(locale, "open-document")} 
141                        </button> 
142                        <div class="pdf-pages-container"> 
143                            <#list 1..totalPages as page> 
144                                <img 
145                                        src="${uploadDocument.document.getData()}&previewFileIndex=${page}" 
146                                        class="pdf-page" 
147                                        data-page="${page}" 
148                                /> 
149                            </#list> 
150                        </div> 
151                        <div class="doc-index"> 
152                            <div class="pdf-pagination"> 
153                                <button class="pdf-nav prev subtitle">&lt;</button> 
154                                <div class="pdf-nav-index-div"></div> 
155                                <button class="pdf-nav next subtitle">&gt;</button> 
156                            </div> 
157                        </div> 
158                    </div> 
159                </div> 
160            </div> 
161        </div> 
162    </#if> 
163 
164    <#assign linkTagIsNotEmpty = false> 
165    <#list references.getSiblings() as field> 
166        <#if field.getData()?? && field.linkTitle.getData()?trim != "" && field.linkUrl.getData()?trim != ""> 
167            <#assign linkTagIsNotEmpty = true> 
168            <#break> 
169        </#if> 
170    </#list> 
171 
172    <!-- 6. Link section --> 
173    <#if linkTagIsNotEmpty> 
174        <div class="sections-block" style="border-bottom-right-radius:12px;border-bottom-left-radius:12px;"> 
175            <h4 class="section-title reading-time">${languageUtil.get(locale, "references")}</h4> 
176            <div class="d-flex flex-column"> 
177                <#list references.getSiblings() as link> 
178                    <#if link.linkTitle.getData()?has_content && link.linkUrl.getData()?has_content> 
179                        <div class="link-card mb-4"> 
180                            <div class="link-info"> 
181                                <div class="link-title reading-time-parameter"><b>${link.linkTitle.getData()}</b></div> 
182                                <#if link.linkDesc.getData()?has_content> 
183                                    <div class="link-description reading-time-parameter">${link.linkDesc.getData()}</div> 
184                                </#if> 
185                            </div> 
186                            <a href="${(link.linkUrl.getData())!'javascript:void(0);'}" class="download-btn" 
187                               title="Scarica" onclick="openLinkInNewTab(event, this)"> 
188                                <i class="icom-vivimedical-link-icon"> 
189                                </i> 
190                            </a> 
191                        </div> 
192                    </#if> 
193                </#list> 
194            </div> 
195        </div> 
196    </#if> 
197 
198</div> 
199 
200<script src="https://cdn.jsdelivr.net/npm/hammerjs@2.0.8/hammer.min.js"></script> 
201 
202<script> 
203    function initializeOpenDocButton() { 
204        const openDocBtn = document.querySelector('.pdf-open-doc'); 
205        if (openDocBtn) { 
206            openDocBtn.addEventListener('click', () => { 
207                const pdfUrl = openDocBtn.getAttribute('data-pdf-url'); 
208                if (!pdfUrl) { 
209                    alert('PDF not available'); 
210                    return; 
211
212                const newTab = window.open(pdfUrl, '_blank'); 
213                if (!newTab) { 
214                    alert('Unable to open the PDF. Please check your browser settings for pop-ups.'); 
215
216            }); 
217
218
219 
220    function pdfPagination() { 
221        const pages = document.querySelectorAll('.pdf-page'); 
222        const prevBtn = document.querySelector('.pdf-nav.prev'); 
223        const nextBtn = document.querySelector('.pdf-nav.next'); 
224        const pageNumbersContainer = document.querySelector('.pdf-nav-index-div'); 
225 
226        // pdf-pagination struct: 1....lastPage 
227        const totalPages = pages.length; 
228        const firstPage = 1; 
229        const lastPage = totalPages; 
230        let currentPage = firstPage; 
231        let indexStyleClass = 'subtitle'; 
232 
233        function addStyle(elem, styleClass) { 
234            elem.classList.add(styleClass); 
235
236 
237        function addPageButton(pageNumber) { 
238            const btn = document.createElement('button'); 
239            btn.className = 'pdf-page-num'; 
240            btn.textContent = pageNumber; 
241            addStyle(btn, indexStyleClass); 
242            pageNumbersContainer.appendChild(btn); 
243
244 
245        function addEllipsis() { 
246            const span = document.createElement('span'); 
247            span.className = 'pdf-page-num ellipsis'; 
248            span.textContent = '...'; 
249            addStyle(span, indexStyleClass); 
250            pageNumbersContainer.appendChild(span); 
251
252 
253        // invalid currentPage sets value to default (firstPage) 
254        function validateCurrentPage(currentPage, defaultValue) { 
255            if (typeof currentPage !== 'number' || isNaN(currentPage) || 
256                currentPage < firstPage || currentPage > lastPage) { 
257                return defaultValue; 
258
259            return currentPage; 
260
261 
262        function renderPageNumbers(currentPage) { 
263            pageNumbersContainer.innerHTML = ''; 
264            currentPage = validateCurrentPage(currentPage, firstPage); 
265            console.log("totalPages  " + totalPages); 
266            if (totalPages >= 1 && totalPages <= 4) { 
267                for (let i = firstPage; i < firstPage + totalPages; i++) { 
268                    addPageButton(i); 
269
270
271            else if (currentPage == firstPage || currentPage == firstPage + 1) { 
272                addPageButton(firstPage); 
273                addPageButton(firstPage + 1); 
274                addPageButton(firstPage + 2); 
275                addEllipsis(); 
276                addPageButton(lastPage); 
277            } else if (currentPage == lastPage - 1 || currentPage == lastPage) { 
278                addPageButton(firstPage); 
279                addEllipsis(); 
280                addPageButton(lastPage - 2); 
281                addPageButton(lastPage - 1); 
282                addPageButton(lastPage); 
283            } else { 
284                addPageButton(firstPage); 
285                addEllipsis(); 
286                addPageButton(currentPage); 
287                addEllipsis(); 
288                addPageButton(lastPage); 
289
290
291 
292        function setActivePage(currentPage) { 
293            if (validateCurrentPage(currentPage, firstPage)) { 
294                const buttons = document.querySelectorAll('.pdf-page-num'); 
295                buttons.forEach(btn => btn.classList.remove('active')); 
296                buttons.forEach(btn => { 
297                    if (parseInt(btn.textContent, 10) === currentPage) { 
298                        btn.classList.add('active'); 
299
300                }); 
301
302
303 
304        function showPage(page) { 
305            currentPage = page; 
306            // hides all images 
307            document.querySelectorAll('.pdf-page').forEach(img => img.style.display = 'none'); 
308            // display currentPage image 
309            const currentPageElement = document.querySelector('.pdf-page[data-page="' + page + '"]'); 
310            if (currentPageElement) { 
311                currentPageElement.style.display = 'block'; 
312
313            prevBtn.disabled = currentPage === firstPage; 
314            nextBtn.disabled = currentPage === lastPage; 
315            renderPageNumbers(currentPage); 
316            setActivePage(currentPage); 
317
318 
319        // prev btn listener 
320        prevBtn.addEventListener('click', function () { 
321            if (currentPage > firstPage) showPage(currentPage - 1); 
322        }); 
323 
324        // next btn listener 
325        nextBtn.addEventListener('click', function () { 
326            if (currentPage < lastPage) showPage(currentPage + 1); 
327        }); 
328 
329        // index btn listener 
330        pageNumbersContainer.addEventListener('click', function (e) { 
331            if (e.target.classList.contains('pdf-page-num') && !e.target.classList.contains('ellipsis')) { 
332                const pageNumber = parseInt(e.target.textContent, 10); 
333                if (!isNaN(pageNumber)) { 
334                    showPage(pageNumber); 
335
336
337        }); 
338 
339        //Hammer.js 
340        function initializeHammer() { 
341            const container = document.querySelector('.pdf-pages-container'); 
342 
343            if (!container || typeof Hammer === 'undefined') { 
344                console.warn('Container not found or Hammer.js not loaded'); 
345                return; 
346
347 
348            const hammer = new Hammer(container); 
349 
350            hammer.get('swipe').set({ direction: Hammer.DIRECTION_HORIZONTAL }); 
351 
352            hammer.on('swipeleft', () => { 
353                if (currentPage < totalPages) { 
354                    showPage(currentPage + 1); 
355
356            }); 
357 
358            hammer.on('swiperight', () => { 
359                if (currentPage > 1) { 
360                    showPage(currentPage - 1); 
361
362            }); 
363
364 
365        // Initialize Hammer 
366        initializeHammer(); 
367 
368 
369        showPage(firstPage); 
370
371 
372    function openLinkInNewTab(event, el) { 
373        event.preventDefault(); 
374        event.stopPropagation(); 
375 
376        const href = el.getAttribute('href'); 
377 
378        if (!href || href.trim() === '' || href === 'javascript:void(0);') { 
379            alert('Link non disponibile'); 
380            return; 
381
382        try { 
383            new URL(href, window.location.href); 
384        } catch (e) { 
385            alert('URL non valido'); 
386            return; 
387
388 
389        const newTab = window.open(href, '_blank'); 
390 
391        if (!newTab || newTab.closed || typeof newTab.closed === 'undefined') { 
392            alert('Unable to open the link. Please check your browser settings to allow pop-ups.'); 
393
394
395 
396 
397    function init() { 
398        pdfPagination(); 
399        initializeOpenDocButton(); 
400
401    if (document.readyState === "loading") { 
402        document.addEventListener('DOMContentLoaded', init); 
403        document.addEventListener('DOMContentLoaded', function(){ 
404            let readingTime = calculateReadingTime(); 
405            $('#readingTime').text(readingTime); 
406        }); 
407    } else { 
408        init(); 
409        let readingTime = calculateReadingTime(); 
410        $('#readingTime').text(readingTime); 
411
412 
413    function calculateReadingTime(){ 
414        let wordCount = 0; 
415        const wordsPerMinute = 200; 
416        $('.reading-time-parameter').each(function(index, elem){ 
417            let text = $(elem).text(); 
418            wordCount += text.trim().split(/\s+/).length; 
419        }); 
420        if(wordCount > 0){ 
421            return Math.ceil(wordCount / wordsPerMinute); 
422        }else{ 
423            return 0; 
424
425
426 
427</script> 
428 
429<style> 
430    .main-image-crop{ 
431        height: 300px; 
432        object-position:top center; 
433        @media(max-width: 576px){ 
434            height: 60px; 
435
436
437    .multi-column-text{ 
438        column-count: 2; 
439        column-gap: 2rem; 
440
441    .distribution-level{ 
442        text-transform: uppercase; 
443        &:before{ 
444            content: ""; 
445            display: inline-block; 
446            width: 20px; 
447            height: 20px; 
448            margin-right: 6px; 
449            border: 5px solid; 
450            border-radius: 50%; 
451            background: transparent; 
452            vertical-align: sub; 
453
454        &.disclosable{ 
455            &.before{ 
456                border-color: #23863F; 
457
458            color: #23863F; 
459
460        &.limited-disclosure{ 
461            &.before{ 
462                border-color: #F7B32B; 
463
464            color: #F7B32B; 
465
466        &.internal-use-only{ 
467            &.before{ 
468                border-color: #D24445; 
469
470            color: #D24445; 
471
472
473    .icom-vivimedical-link-icon:before{ 
474        color: #8ed300; 
475
476    .thematic-area-page-content{ 
477        .download-btn:hover{ 
478            text-decoration: none; 
479
480
481 
482    .plain-text{ 
483        p{ 
484            line-height: 1.5; 
485
486
487</style> 

19 JANUARY 2026

Training the Trainers: Expanding Learning Class Expertise Across Europe

Lesezeit: Min.

Author: sara bresciani

image not found

Training the Trainers: Expanding Learning Class Expertise Across Europe

In December, Burago turned into a learning lab for excellence with the “Train the Trainer – Entrain the Trainers Program: Ventilación Pulmonar” Learning Class, welcoming top Spanish healthcare professionals specialized in mechanical ventilation and sleep medicine. A dynamic mix of advanced theory, immersive hands-on training with the respiratory simulator, real-life clinical case building, and dedicated networking moments created a truly impactful learning experience, scientifically led by Prof. Gregoretti. This milestone initiative now empowers the Iberian organization to independently deliver Learning Classes in Spain, accelerating prescriber expertise in ventilation and sleep therapy—colleagues interested in launching similar programs can reach out to Corporate Marketing.  

Gallery

An wen kann ich mich bei Schlafstörungen wenden?

Ihr erster Ansprechpartner ist Ihr Hausarzt. Dieser wird Sie, wenn er aufgrund Ihrer Beschwerden ein Schlafapnoe- Syndrom oder eine andere sogenannte schlafbezogene Atemstörung vermutet, zu einem Spezialisten überweisen. Spezialisten sind alle niedergelassenen Ärzte mit der Zusatzbezeichnung „Schlafmedizin“ sowie die meisten HNO Ärzte.

Betrifft mich diese Sicherheitsmitteilung? Welche Philips-Geräte sind betroffen?

Prinzipiell haben wir nur Kunden angeschrieben, die von uns mit einem betroffenen Gerät der Firma Philips Respironics beliefert wurden. Ob Ihr Gerät betroffen ist, sehen Sie anhand der Ihnen mitgeschickten Sicherheitsmitteilung der Firma Philips Respironics.

Die drei Formen der Schlafapnoe

1. Obstruktive Schlafapnoe
Durch die Abnahme des Muskeltonus im Schlaf entspannt sich die Muskulatur des weichen Gaumens. Es kollabieren die weichen, oberen Atemwege, es kommt zu einer Obstruktion (Verschluss). Die Folge der Obstruktion ist ein Abfall der Sauerstoffsättigung im Blut. Durch die Mangelversorgung entsteht eine Weckreaktion (Arousal) des Körpers. Meistens wird der Schlafende nicht wach, aber die Weckreaktion beeinflusst die Schlafstruktur negativ.

2. Zentrale Schlafapnoe
Bei der zentralen Schlafapnoe sind die Atemwege frei, aber die für die Atmung relevanten Muskelgruppen sind inaktiv. Der Atemantrieb aus dem Gehirn fehlt. Auch hier ist die Folge ein Abfall der Sauerstoffsättigung im Blut. Die Weckreaktion des Körpers beeinflusst auch hier die Schlafstruktur negativ.

3. Gemischte Schlafapnoe
Einige Patienten leiden an der gemischten Schlafapnoe. Diese Form beginnt meistens als zentrale Apnoe und geht später in die obstruktive Form über.

Gerätepflege

Überprüfen Sie regelmäßig den Luftfilter Ihres Therapiegerätes. In Abhängigkeit von Zeit und Umgebungsluft wird der Filter immer undurchlässiger. Es kann dadurch zu einem verminderten Druck im Gerät kommen. Entfernen sie bei Bedarf grobe Staubpartikel und Tauschen sie den Filter bei Bedarf. Empfehlungen finden Sie in der Gebrauchsanweisung Ihres Gerätes

Ist die Versorgungssicherheit durch andere Geräte bei Neuversorgungen abgesichert?

Aufgrund der Produkt-und Ressourcenknappheit wird es zeitweise zu Versorgungsengpässen kommen. Bitte seien Sie versichert, dass wir als Ihr Leistungserbringer sowie die Hersteller alles daran setzen, im Rahmen ihrer Möglichkeiten die Versorgungssicherheit aufrecht zu halten.

Kann der Filter durch die Feuchtigkeit verstopfen, wenn ich den Filter zwischen Befeuchter und Patientenschlauch montiere?

Da ein feuchter Filter den Atemgasstrom behindert, ist der Einsatz von Filtern nur unter bestimmten Einsatzbedingungen/Gerätekonfigurationen möglich. Der Filter darf nicht am Ausgang des Atemgasbefeuchters angebracht werden. Ein Filter kann (wenn dieses möglich ist) nur zwischen dem Geräteausgang für das Atemgas und dem Befeuchter eingesetzt werden. Bitte sprechen Sie mit Ihre Ärztin/Ihrem Arzt in Ihrem Beatmungszentrum bzw. Schlaflabor, ob ein Filtereinsatz in Ihrem Fall möglich ist. Wenn Schlafapnoe-Atemtherapiegeräte mit einem Filter eingesetzt werden sollen, darf der Befeuchter nicht verwendet werden, d.h. es darf sich kein Wasser in dem Atemgasbefeuchter befinden.

Leide ich an einer Schlafstörung?

Fragen Sie Ihre Partnerin / Ihren Partner, ob Sie nachts laut und unregelmäßig Schnarchen und ob Sie Atemaussetzer haben, die manchmal von einem heftigen Schnarchen beendet werden. Fragen Sie, ob sie / er Sie schon einmal angestoßen und wachgerüttelt hat, weil Sie für längere Zeit nicht geatmet haben. Ob Sie an einem gewöhnlichen Schnarchen oder einem gefährlichen Schlafapnoe-Syndrom leiden, kann aber nur ein Fachmann feststellen.

Maskenwechsel

Masken nutzen sich ab, wenn Sie regelmäßig genutzt werden. Ihre Maske ist der sensibelste Teil der Therapie, Sie haben täglich damit direkten Kontakt. Deshalb sollten Sie die Maske tauschen, wenn sie verschlissen ist.

Anzeichen für eine verschlissene Maske sind ausgeleierte Bänder, das Material ist nicht mehr elastisch, die Maske dichtet zunehmend schlechter ab, das Maskenkissen fühlt sich auch nach dem Reinigen noch fettig an.

Weitere Informationen darüber, wie oft eine Maske und ihre Bestandteile ausgewechselt werden müssen, finden Sie im Abschnitt Auswechseln des Therapie-Equipments.

Pflege des Atemluftbefeuchters

Betreiben Sie Ihren Atemluftbefeuchter nur mit destillierten Wasser. Kalkhaltiges Wasser kann zu Beschädigungen des Befeuchter führen.

Reinigen Sie Ihren Befeuchter nach Gebrauch mit warmen Wasser und lassen Sie den Befeuchter an einem sonnengeschützten Ort trocknen.

Reinigung und Pflege der Maske

Jedes Tragen der Maske hinterlässt Spuren! Fette, die von Ihrer Haut abgesondert werden, lagern sich an der Maske ab. Das kann die die Abdichtung der Maske beeinträchtigen. Deshalb soll die Maske nach jedem Tragen gereinigt werden.

Am besten wird die Maske jeden Morgen nach Gebrauch mit Seife und Wasser gereinigt. Scharfe Reinigungsmittel können die Maske beschädigen und Rückstände können Ihre Haut angreifen. Im Anschluss lassen Sie die Maske am besten an der Luft Trocknen. Vermeiden Sie direkte Sonneneinstrahlung, die UV-Strahlung schädigt das weiche Silikon.

Detaillierte Anweisungen zur Reinigung und Pflege Ihrer Maske finden Sie in der Gebrauchsanweisung.

Sitzt meine Maske richtig?

Ein guter Maskensitz ist wichtig für eine erfolgreiche Therapie. Wenn Sie Ihre Therapie beginnen, hängt die Akzeptanz oft an der richtigen Maske und einer guten Anpassung. Die Maske wird als Fremdkörper wahrgenommen, umso wichtiger ist ein bequemer Sitz.

Die Auswahl der richtigen Maske ist auch ein wichtiger Faktor. Dafür gibt es verschiedene Maskentypen. Fullface-, Nasen-, Nasenpolstermaske – die Auswahl muss für jeden Patienten individuell gemacht werden.

Die Maskenanpassung wird fachmännisch von Ihrem Schlafmediziner oder einen unserer Mitarbeiter vorgenommen. Wir schulen unsere Mitarbeiter regelmäßig um Ihnen einen bestmöglichen Service bieten zu können.

So erkennen Sie ob Ihre Maske gut passt

Die Atemwege müssen gut abgedichtet sein! – Ist dies nicht der Fall, geht ein Teil des Therapiedruckes verloren. Weiterhin kann eine Leckage an Wangenoberseite oder Nasenrücken zu Augenreizungen führen. Der austretende Luftstrom trocknet das Auge. Auch erzeugt eine Leckage deutliche Geräusche. Eine gut angepasste Maske hält in jeder Schlafposition und darf nicht verrutschen.

Die Maske darf nicht zu eng sitzen! – Gut abgedichtet bedeutet nicht zu eng am Gesicht! Das Tragegefühl der Maske muss bequem sein. Zu enge Masken erzeugen Druckstellen und Rötungen die mitunter schmerzhaft sind.

Ein ungestörter Luftstrom! – Fließt die Luft nicht ungehindert durch die Maske, erzeugt dies Strömungsgeräusche die lauter als das Therapiegerät sind. In einer zu kleinen Maske hat die Luft nicht ausreichend Platz. Das Ergebnis sind Luftverwirbelungen die Geräusche erzeugen.

Was kann ich selbst machen, wenn ich das Gefühl habe mit meiner Maske stimmt etwas nicht Prüfen Sie, ob die Maske korrekt zusammengebaut ist – Leckage, Geräusch Prüfen ob die Kopfbänderung richtig eingestellt ist aufrechtzuerhalten. Beheizbare Atemluftbefeuchter können Mundatmung und Nasenverstopfungen, die beide zu Leckagen beitragen, beträchtlich reduzieren.

Ziehen Sie das Kopfband nicht zu fest an! Das ist unangenehm bis schmerzhaft und führt zu Druckstellen. Sollte die Maske auch bei normalen, festen Sitz nicht abdichten, haben Sie möglicherweise die falsche Maskengröße.

Was ist ein Schlafapnoe-Syndrom?

Mit Apnoe wird eine Atempause bezeichnet. Wer während des Schlafs, häufig verbunden mit starkem Schnarchen, mehr als 10 Atempausen pro Stunde von mehr als 10 Sekunden Dauer (pro Atempause) zeigt, kann unter der Schlafapnoe leiden.

Was ist ein Schlaflabor?

Im Schlaflabor wird der Schlaf des Patienten mittels der Polysomnographie untersucht. Während der Nacht werden verschiedene Vitalfunktionen, wie z.B. Hirnströme, Augenbewegungen, Atmung, Muskelspannung und Sauerstoffsättigung, aufgezeichnet. Die Ergebnisse werden durch einen Schlafmediziner ausgewertet. Zeigt sich in dieser Untersuchung ein auffälliger Befund, wird eine detaillierte Diagnose erstellt und häufig eine Therapie mittels eines CPAP-Gerätes mit Atemmaske eingeleitet. Es wird ausgetestet, mit welchem Druck die Atemaussetzer auf ein Minimum reduziert werden können.

Was sind Schlafstörungen?

Schlafstörungen treten oft nur vorübergehend auf und sind damit nicht als Störung anzusehen. Anders ist es, wenn sie sich über Wochen oder Monate hinziehen und zu Müdigkeit, Leistungs- und Konzentrationsminderung oder anderen körperlichen Beschwerden führen. Häufigste Ursache von Tagesmüdigkeit und Tagesschläfrigkeit ist aber das Schlafapnoe- Syndrom (SAS). 1-4% der Bevölkerung leiden daran.  Die am häufigsten betroffene Bevölkerungsgruppe sind Männer zwischen 40 und 60 Jahren.

Was sind die Sympotme der Schlafapnoe?

Das Hauptproblem der Betroffenen ist ihre Tagesmüdigkeit sowie die, durch die Müdigkeit ausgelöste, Einschlafneigung

Was tun, wenn die Maske laut ist?

Eine laute Maske kann ein Zeichen für eine undichte Maske sein.

Prüfen Sie den Maskensitz und ob die Maske gereinigt und korrekt zusammengebaut ist. Sollten dann weiterhin Probleme bestehen, kontaktieren {Link Kontakt} Sie uns, wir helfen Ihnen dann weiter.

Welche Therapie bietet sich an?

Die CPAP-Therapie wird seit Jahren erfolgreich zur Behandlung von Atemstillständen während des Schlafs eingesetzt. Bei der CPAP-Therapie (Continuous Positive Airway Pressure) werden die Atemwege durch leichten Überdruck offen gehalten und die Atemstillstände verhindert. Eine CPAP-Therapie ist in den weitaus meisten Fällen eine Dauertherapie, die Atemstillstände zwar signifikant reduziert, aber nicht heilt. Gerät und Maske zählen daher – wie zum Beispiel Brillen –zu den so genannten Hilfsmitteln. Das CPAP-Gerät und die Maske müssen in jeder Nacht benutzt und getragen werden. Ein willkürliches, eigenmächtiges Beenden der Therapie, z. B. aus Bequemlichkeit, bringt die behandelten Symptome und Beeinträchtigungen meistens sofort oder innerhalb kurzer Zeit zurück.

Wie entsteht ein Schlafapnoe-Syndrom?

Bei einigen Menschen ist die Erschlaffung der Schlundmuskulatur so ausgeprägt, dass ein vollständiger Verschluss mit Blockierung der oberen Luftwege auftritt. Obwohl die Atemmuskulatur weiter Atemanstrengungen unternimmt, ist die Atmung und damit die Sauerstoffzufuhr, unterbrochen. Der Sauerstoffgehalt des Blutes sinkt. Körpereigene Stresshormone bewirken daraufhin, dass eine Aufwachreaktion stattfindet und die Atmung sich wieder normalisiert. Auf diese Weise wird der normale Schlafablauf gestört, insbesondere ist der wichtige Tiefschlaf verringert.

14 NOVEMBER 2025

Diabete: da pandemia silenziosa a nuova frontiera dell'assistenza domiciliare

Lesezeit: Min.

Author: Federico Migliore

image not found

Entro il 2045, 1 italiano su 10 svilupperà il diabete

La mission di VIVISOL è portare cure di alta qualità direttamente a casa dei pazienti, migliorandone la vita quotidiana. Due importanti articoli de Il Sole 24 Ore ci confermano che siamo nel posto giusto al momento giusto, di fronte a una delle sfide sanitarie più urgenti del nostro tempo: il diabete.

I dati sono chiari: il diabete è una vera e propria "pandemia silenziosa".

  • In Italia, colpisce il 9% della popolazione tra i 50 e i 69 anni.

  • Non è più solo una patologia legata all'età: è in forte crescita anche tra i giovani, sia per il Tipo 1 che per il Tipo 2.

  • Il problema maggiore? Spesso viene diagnosticato in ritardo, portando a costi sociali e sanitari elevatissimi a causa delle complicanze.

Questo scenario significa una cosa per noi: la domanda di assistenza cronica, specializzata e domiciliare è destinata a crescere esponenzialmente.

Contemporaneamente a questa emergenza, stiamo assistendo a una rivoluzione terapeutica. Come riporta Il Sole 24 Ore, l'introduzione della nuova insulina a somministrazione settimanale (come l'insulina icodec) sta già cambiando la vita di oltre un milione di italiani.

Per un paziente, passare da 365 iniezioni all'anno a sole 52 non è un dettaglio. Significa:

  • meno stress e meno dolore

  • maggiore libertà e migliore qualità della vita (per loro e per i caregiver)

  • soprattutto, una migliore aderenza alla terapia, che è la chiave per prevenire le complicanze

Qui entriamo in gioco noi. Questa innovazione non elimina il bisogno di assistenza, ma lo trasforma. Sposta il focus dalla gestione quotidiana dell'iniezione alla gestione complessiva della patologia nel lungo termine.

Per VIVISOL, questa è un'opportunità strategica. Non siamo solo fornitori di servizi, ma partner attivi nella gestione dei piani terapeutici.

Il nostro lavoro diventa ancora più cruciale per aiutare migliaia di pazienti a gestire la loro cronicità nel modo più efficace e meno invasivo possibile.

Links

Discover latest findings in Oxygentherapy

A study shows how an Long Term Oxygen Thearpy LTOT could lead to a better outcome for COPD outpatients

ITOP Velletri

Vivitop - ITOP Velletri

Viale dei Volsci, 71, 00049 Velletri RM

Fax: velletri@itopassociate.it

Customer Care: +39 06 96 40 865

30 JUNE 2025

Moodboard of our congress booths

Lesezeit: Min.

Author: Daniele Pirovano

image not found

Moodboard of our congress booths

The VIVISOL booth is more than just an exhibit space! Every detail is designed to offer visitors a journey that reflects who we are: reliable, human, creative and sustainable.

At the front, we have a large welcoming ARCH: symbolic and eye-catching, it represents the line between two worlds.                                                         
The outer represents the Company, is a welcome to visitors, that’s why is design to express hospitality, using the institutional colours of the brand identity.

  • Structures made from wood and pressed cardboard
  • Fully reusable for different events
  • We use stabilized and real plants as natural and long-lasting decoration
  • Our booth is “Zero Waste”, every piece is designed to be stored, adapted, and reused

A spoiler for you!

24 SEPTEMBER 2025

Report ESPEN Congress 2025_ENG

Lesezeit: Min.

Author: Federico Migliore

image not found

Discover the ESPEN Congress report

The 2025 ESPEN Congress was a great success: we hope to have many of you next year in Berlin!

Discover the report