{"id":9343,"date":"2023-05-22T12:52:54","date_gmt":"2023-05-22T11:52:54","guid":{"rendered":"https:\/\/bestatterportal.ch\/?page_id=9343"},"modified":"2023-09-20T09:11:30","modified_gmt":"2023-09-20T08:11:30","slug":"swiss-funeral-quality-seal-quality-and-trust","status":"publish","type":"page","link":"https:\/\/bestatter.ch\/en\/swiss-funeral-quality-seal-quality-and-trust\/","title":{"rendered":"SAFS \u2013 Quality seal Swiss association of funeral services"},"content":{"rendered":"<div class=\"section  dot-bg hero\">\n      <div class=\"container-xl\">\n        <div class=\"row row-cols-1 row-cols-md-2 align-items-center\">\n          <div class=\"col\">\n            <div class=\"get-child-height\">\n              <img decoding=\"async\" class=\"img-oversized smaller\" src=\"https:\/\/bestatter.ch\/wp-content\/uploads\/2022\/04\/vater-kind.avif\" alt=\"\">\n            <\/div>\n          <\/div>\n          <div class=\"col ps-lg-3 ps-xxl-5 text\">\n            <p class=\"newp\">\n                    Dear godfather            <\/p>\n            <h2 class=\" newh1\">\n            What you showed me will stay with me for a lifetime.            <\/h2>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div> <style>\n\t.subh {\n\t\tcolor: #212529 ;\n\n\t}\n\t.newh {\n\t\tcolor: #2f5d63 ;\n\t}\n<\/style>\n  <div class=\"section bg-brand-light fleck fleck3\">\n    <div class=\"container-xl\">\n      <div class=\"row\">\n        <div class=\"col-12\">\n         \t<p class=\"mb-0 fs-5 subh\"> Do you have any questions? <\/p>\n      \t\t<h3 class=\"newh\"> Are you asking a personal question? <\/h3>\n\t\t\t<style>\n\t.search-bar-searchsection-defualt {\n\t\tborder: 4px solid #2F5D63 !important;\n\t\tborder-radius: 15px !important;\n\t}\n\n\t.search-bar-searchsection-defualt form .input-group input[type=\"search\"] {\n\t\tborder: none;\n\t\tmargin: 0;\n\t\tpadding-right: 0;\n\t}\n\n\t.search-bar-searchsection-defualt form .input-group input[type=\"search\"]:focus,\n\t.search-bar-searchsection-defualt form .input-group input[type=\"search\"]:active {\n\t\tborder: none;\n\t\tbox-shadow: none;\n\t\toutline: none;\n\t}\n\n\t.search-bar-searchsection-defualt form .input-group button[type=\"submit\"] {\n\t\tbackground: #fff;\n\t\tborder: none;\n\t\tbackground-color: #fff;\n\t\tpadding: 0.75rem 1rem;\n\t}\n\n\t.search-bar-searchsection-defualt form .input-group button[type=\"submit\"] img {\n\t\theight: 2em;\n\t\twidth: 2em;\n\t}\n\n\t.search-bar-searchsection-defualt .autocomplete-box {\n\t\tposition: absolute;\n\t\tmargin-top: 10px;\n\t\twidth: 100%;\n\t\toverflow-y: auto;\n\t\tdisplay: none;\n\t\tz-index: 1000;\n\t\tborder: 4px solid #2F5D63;\n\t\tborder-radius: 0px 0px 20px 20px;\n\t\tbackground-color: #ffffff;\n\t}\n\n\t.search-bar-searchsection-defualt .autocomplete-box.active {\n\t\tdisplay: block;\n\t}\n\n\t.search-bar-searchsection-defualt .autocomplete-box ul {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tlist-style: none;\n\t}\n\n\t.search-bar-searchsection-defualt .autocomplete-box li {\n\t\tpadding: 5px 15px;\n\t\tcursor: pointer;\n\t\tline-height: 1.4;\n\t\tfont-size: 1rem;\n\t\tcolor: #212121;\n\t\tfont-weight: 400;\n\t}\n\n\t.search-bar-searchsection-defualt .autocomplete-box li:hover {\n\t\tbackground: #f0f0f0;\n\t}\n<\/style>\n\n<div class=\"search-container mb-5\">\n\t<div class=\"search-bar-searchsection-defualt position-relative\">\n\t\t<form id=\"defualt-search-form\" class=\"defualt-search-form\">\n\t\t\t<div class=\"input-group\">\n\t\t\t\t<input type=\"search\"\n\t\t\t\t\t   id=\"defualt-search-input\"\n\t\t\t\t\t   class=\"form-control\"\n\t\t\t\t\t   placeholder=\"Search by location or topic...\"\n\t\t\t\t\t   autocomplete=\"off\">\n\t\t\t\t<button type=\"submit\" class=\"btn btn-primary\">\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/bestatter.ch\/wp-content\/themes\/bestatter-ch\/bestatterfile\/assets\/searchglass.png\" alt=\"Search Icon\" class=\"Icon-image\">\n\t\t\t\t<\/button>\n\t\t\t<\/div>\n\t\t\t<div class=\"autocomplete-box\"><\/div>\n\t\t<\/form>\n\t<\/div>\n<\/div>\n\n<script>\n\tjQuery(document).ready(function ($) {\n\t\t\/\/ === CONFIG \/ PHP \u2192 JS ===\n\t\tconst BESTATTER_AUTOCOMPLETE_ENDPOINT = \"https:\/\/bestatter.ch\/en\/wp-json\/bestatter\/v1\/autocomplete\";\n\t\tconst IS_SEARCH_ONLY                  = false;\n\t\tconst RESULT_BASE_URL                 = \"https:\/\/bestatter.ch\/en\/result\/\";\n\n\t\t\/\/ Icon paths\n\t\tconst SEARCH_ICON_SRC  = \"https:\/\/bestatter.ch\/wp-content\/themes\/bestatter-ch\/bestatterfile\/assets\/searchglass.png\";\n\t\tconst SPINNER_ICON_SRC = \"https:\/\/bestatter.ch\/wp-content\/themes\/bestatter-ch\/bestatterfile\/assets\/spinner.svg\";\n\n\t\t\/\/ This instance's section key (e.g. \"footer\", \"header\")\n\t\tconst SECTION_KEY = \"defualt\";\n\t\tconst lang = \"en\";\n\t\tconst FIXED_SUGGESTIONS = {\n\t\t\tde: [\n\t\t\t\t\"Was kostet eine Bestattungsvorsorge?\",\n\t\t\t\t\"Was tun im Todesfall?\",\n\t\t\t],\n\t\t\ten: [\n\t\t\t\t\"What does a funeral pre-arrangement cost?\",\n\t\t\t\t\"What to do in case of death?\",\n\t\t\t],\n\t\t\tfr: [\n\t\t\t\t\"Combien coute une prevoyance funeraire ?\",\n\t\t\t\t\"Que faire en cas de deces ?\",\n\t\t\t],\n\t\t\tit: [\n\t\t\t\t\"Quanto costa una previdenza funeraria?\",\n\t\t\t\t\"Cosa fare in caso di decesso?\",\n\t\t\t],\n\t\t};\n\n\t\t\/\/ Dynamic selectors based on section\n\t\tconst formSelector        = \"#\" + SECTION_KEY + \"-search-form\";\n\t\tconst inputSelector       = \"#\" + SECTION_KEY + \"-search-input\";\n\t\tconst boxSelector         = formSelector + \" .autocomplete-box\";\n\t\tconst buttonImgSelector   = formSelector + ' button[type=\"submit\"] img';\n\n\t\t\/\/ === Autocomplete state for this instance ===\n\t\tlet autocompleteTimer           = null;\n\t\tlet autocompleteController      = null;\n\t\tlet autocompleteCache           = {};\n\t\tlet autocompleteLastRequestId   = 0;\n\t\tlet autocompleteLastHandledId   = 0;\n\t\tlet currentLoadingRequestId     = 0; \/\/ tracks which request controls the spinner\n\n\t\t\/\/ === Helpers ===\n\t\tfunction redirectToResult(queryText) {\n\t\t\tconst q = queryText.trim();\n\t\t\tif (!q) return;\n\t\t\tconst url = RESULT_BASE_URL + '?query=' + encodeURIComponent(q) + '&page=1';\n\t\t\twindow.location.href = url;\n\t\t}\n\n\t\tfunction setButtonLoading(isLoading, requestId) {\n\t\t\t\/\/ If we're tying spinner to a specific request, ensure only that request can turn it off\n\t\t\tif (typeof requestId !== \"undefined\" && !isLoading && requestId !== currentLoadingRequestId) {\n\t\t\t\t\/\/ Not the latest request, don't change spinner\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst img = document.querySelector(buttonImgSelector);\n\t\t\tif (!img) return;\n\n\t\t\tif (isLoading) {\n\t\t\t\timg.src = SPINNER_ICON_SRC;\n\t\t\t} else {\n\t\t\t\timg.src = SEARCH_ICON_SRC;\n\t\t\t}\n\t\t}\n\n\t\tfunction selectSuggestion(text) {\n\t\t\tconst input = document.querySelector(inputSelector);\n\t\t\tconst box   = document.querySelector(boxSelector);\n\t\t\tif (!input || !box) return;\n\n\t\t\tinput.value = text;\n\t\t\tbox.innerHTML = \"\";\n\t\t\tbox.classList.remove(\"active\");\n\n\t\t\tredirectToResult(text);\n\t\t}\n\n\t\t\/\/ --- Autocomplete rendering ---\n\t\tfunction renderAutocomplete(box, titles) {\n\t\t\tif (!titles || !titles.length) {\n\t\t\t\tbox.innerHTML = \"\";\n\t\t\t\tbox.classList.remove(\"active\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet html = \"<ul>\";\n\t\t\ttitles.forEach((title) => {\n\t\t\t\thtml += '<li class=\"autocomplete-item\" data-value=\"' + title + '\">' + title + '<\/li>';\n\t\t\t});\n\t\t\thtml += \"<\/ul>\";\n\n\t\t\tbox.innerHTML = html;\n\t\t\tbox.classList.add(\"active\");\n\n\t\t\tbox.querySelectorAll(\".autocomplete-item\").forEach((li) => {\n\t\t\t\tli.addEventListener(\"click\", function () {\n\t\t\t\t\tconst val = this.getAttribute(\"data-value\");\n\t\t\t\t\tselectSuggestion(val);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tfunction showFixedSuggestionsIfEmpty() {\n\t\t\tif (!FIXED_SUGGESTIONS || typeof FIXED_SUGGESTIONS !== \"object\" || Object.keys(FIXED_SUGGESTIONS).length === 0) return;\n\n\t\t\tconst input = document.querySelector(inputSelector);\n\t\t\tconst box   = document.querySelector(boxSelector);\n\t\t\tif (!input || !box) return;\n\n\t\t\tconst q = input.value.trim();\n\t\t\tif (q !== \"\") return;\n\n\t\t\t\/\/ No spinner for fixed suggestions\n\t\t\trenderAutocomplete(box, FIXED_SUGGESTIONS[lang]);\n\t\t}\n\n\t\t\/\/ --- Autocomplete main ---\n\t\tfunction runAutocomplete(searchText) {\n\t\t\tconst input = document.querySelector(inputSelector);\n\t\t\tconst box   = document.querySelector(boxSelector);\n\t\t\tif (!input || !box) return;\n\n\t\t\tconst q = searchText.trim();\n\t\t\tif (!q) {\n\t\t\t\tbox.innerHTML = \"\";\n\t\t\t\tbox.classList.remove(\"active\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t\/\/ 1) From cache (no loading state)\n\t\t\tif (autocompleteCache[q]) {\n\t\t\t\trenderAutocomplete(box, autocompleteCache[q]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t\/\/ 2) Cancel previous request\n\t\t\tif (autocompleteController) {\n\t\t\t\tautocompleteController.abort();\n\t\t\t}\n\n\t\t\tconst controller = new AbortController();\n\t\t\tautocompleteController = controller;\n\n\t\t\tconst requestId = ++autocompleteLastRequestId;\n\t\t\tcurrentLoadingRequestId = requestId;\n\t\t\tsetButtonLoading(true, requestId);\n\n\t\t\taxios.get(BESTATTER_AUTOCOMPLETE_ENDPOINT, {\n\t\t\t\tparams: { q, limit: 10 },\n\t\t\t\tsignal: controller.signal,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\/\/ Ignore outdated responses\n\t\t\t\tif (requestId < autocompleteLastHandledId) {\n\t\t\t\t\tsetButtonLoading(false, requestId);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tautocompleteLastHandledId = requestId;\n\n\t\t\t\tlet titles = [];\n\t\t\t\tif (response.data.titles) {\n\t\t\t\t\ttitles = response.data.titles;\n\t\t\t\t}\n\n\t\t\t\tautocompleteCache[q] = titles;\n\t\t\t\trenderAutocomplete(box, titles);\n\t\t\t\tsetButtonLoading(false, requestId);\n\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\/\/ Even if aborted, if this was the current loading request, stop spinner\n\t\t\t\tsetButtonLoading(false, requestId);\n\t\t\t\tif (\n\t\t\t\t\t(controller.signal && controller.signal.aborted) ||\n\t\t\t\t\terror.name === \"CanceledError\" ||\n\t\t\t\t\terror.code === \"ERR_CANCELED\"\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconsole.error(\"Autocomplete error:\", error);\n\t\t\t});\n\t\t}\n\n\t\tfunction attachSearchHandlers() {\n\t\t\tconst form  = document.querySelector(formSelector);\n\t\t\tconst input = document.querySelector(inputSelector);\n\t\t\tconst box   = document.querySelector(boxSelector);\n\t\t\tif (!form || !input || !box) return;\n\n\t\t\tform.addEventListener('submit', function (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst q = input.value.trim();\n\t\t\t\tif (q !== '') {\n\t\t\t\t\tredirectToResult(q);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinput.addEventListener('focus', function () {\n\t\t\t\tshowFixedSuggestionsIfEmpty();\n\t\t\t});\n\n\t\t\tinput.addEventListener('keydown', function (e) {\n\t\t\t\tif (e.key === 'Enter') {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tconst q = input.value.trim();\n\t\t\t\t\tif (q !== '') {\n\t\t\t\t\t\tredirectToResult(q);\n\t\t\t\t\t}\n\t\t\t\t\tbox.innerHTML = \"\";\n\t\t\t\t\tbox.classList.remove(\"active\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"keyup\", function () {\n\t\t\t\tconst q = this.value.trim();\n\t\t\t\tif (q === \"\") {\n\t\t\t\t\tclearTimeout(autocompleteTimer);\n\t\t\t\t\tshowFixedSuggestionsIfEmpty();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\/\/ Debounce API calls\n\t\t\t\tclearTimeout(autocompleteTimer);\n\t\t\t\tconst currentValue = q;\n\t\t\t\tautocompleteTimer = setTimeout(() => {\n\t\t\t\t\trunAutocomplete(currentValue);\n\t\t\t\t}, 150);\n\t\t\t});\n\t\t}\n\n\t\tattachSearchHandlers();\n\n\t\t\/\/ Close autocomplete when clicking outside\n\t\tdocument.addEventListener(\"click\", function (e) {\n\t\t\tconst input = document.querySelector(inputSelector);\n\t\t\tconst box   = document.querySelector(boxSelector);\n\n\t\t\tif (!box || !input) return;\n\n\t\t\tif (!box.contains(e.target) && e.target !== input) {\n\t\t\t\tbox.innerHTML = \"\";\n\t\t\t\tbox.classList.remove(\"active\");\n\t\t\t}\n\t\t});\n\t});\n<\/script>\n          \t<p class=\"newp\"> The portal bestatter.ch answers all your questions about funerals and funeral provisions. <\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n \n\n<div class=\"section img-text\">\n        <div class=\"container-xl\">\n          <div class=\"row row-cols-1 row-cols-lg-2 align-items-center img-left\">\n            <div class=\"col\"> <!-- Insert content from wp -->\n            \n                             <h1>\n                SAFS \u2013 Quality seal Swiss association of funeral services               <\/h1>\n                             <p>\n               <p>The quality seal is a label that makes a statement about the scope of funeral services offered and endorses the qualitative requirements. <\/p>\n<p> Funeral services in Switzerland can register for certification. The Swiss association of funeral services (SAFS) checks the criteria and then grants the seal of approval. Recertification takes place every five years.<\/p>\n<p> <strong>There are mandatory and optional criteria:<\/strong>  <\/p>\n<ul>\n<li>The business owner or two employees have the title of funeral director (with federal certificate of competence)<\/li>\n<li>The funeral service has been in operation for at least three years<\/li>\n<li>The funeral service has its place of business at the location indicated in the commercial register (workshop, office or premises \/ no letterbox company)<\/li>\n<li>The funeral services are provided 24 hours a day, 365 days a year The company offers its staff professional absence and holiday cover.<\/li>\n<li>Membership of SAFS<\/li>\n<li>At least one employee has completed further education in a field related to the profession: pacemaker removal, SAFS further training at CURML\/SHIFT, thanatology, funeral orator, etc.<\/li>\n<li>At least one employee speaks an additional national language (the national languages are: German, French, Italian, Romansh)<\/li>\n<li>At least one employee speaks a language other than the national languages<\/li>\n<li>A funeral car is available (the vehicle is used for no other purpose)<\/li>\n<li>The company has urns and\/or coffins on display<\/li>\n<li>The company provides a meeting room<\/li>\n<li>The company also has other profession-specific rooms available: entombing room, cold room, pathology room, room for paying last respects, etc.<\/li>\n<li>The company has an informative website (own website or website on www.bestatter.ch)<\/li>\n<li>The company provides services for relatives in addition to the basics: printed matter, official formalities, funeral orations, thanatology, etc.<\/li>\n<li>The company has a contract with a municipality or an authority that qualifies it to practice the profession: undertaker\u2019s contract, etc.<\/li>\n<\/ul>\n<p> <strong>The \u201cSwiss Funeral Quality Seal\u201d may be withdrawn<\/strong> <br \/> Grounds for withdrawal:  <\/p>\n<ul>\n<li>When one or more mandatory criteria are no longer permanently fulfilled<\/li>\n<li>When fewer than four of the optional criteria are no longer permanently fulfilled<\/li>\n<li>Exclusion from the SAFS<\/li>\n<li>Breach of the SAFS rules and conventions<\/li>\n<li>Accumulation of mediation cases<\/li>\n<li>Damage to good reputation, e.g. due to court cases, bankruptcies, etc.<\/li>\n<\/ul>\n<p> <a href= \"mailto:guetesiegel@bestatter.ch\">guetesiegel@bestatter.ch<\/a><\/p>\n              <\/p>\n            <\/div>\n            <div class=\"col\">\n              <div class=\"get-child-height\">\n                     <img decoding=\"async\"    src=\"https:\/\/bestatter.ch\/wp-content\/uploads\/2023\/05\/SVB-Guetesiegel-Logo-mit-Schweizer-Kreuz-D.avif\" alt=\"Schweiz. Verband der Bestattungsdienste The logo for gutteisel bestattung schweiz.\" class=\"img-oversized\"\/>\n                 \n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n         <style type=\"text\/css\">\n       .h1{\n            color:  !important;\n            font-size: px !important;\n            }\n        \n        \n    <\/style>\n      <\/div>\n \n   ","protected":false},"excerpt":{"rendered":"<p>Dear godfather What you showed me will stay with me for a lifetime.<\/p>\n","protected":false},"author":6,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"ep_latitude":0,"ep_longitude":0,"ep_address":"","ep_exclude_from_search":false,"_vp_format_video_url":"","_vp_image_focal_point":[],"footnotes":""},"class_list":["post-9343","page","type-page","status-publish","hentry"],"acf":{"font":"","background_shape":"type3"},"_links":{"self":[{"href":"https:\/\/bestatter.ch\/en\/wp-json\/wp\/v2\/pages\/9343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bestatter.ch\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bestatter.ch\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bestatter.ch\/en\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/bestatter.ch\/en\/wp-json\/wp\/v2\/comments?post=9343"}],"version-history":[{"count":0,"href":"https:\/\/bestatter.ch\/en\/wp-json\/wp\/v2\/pages\/9343\/revisions"}],"wp:attachment":[{"href":"https:\/\/bestatter.ch\/en\/wp-json\/wp\/v2\/media?parent=9343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}