{"id":358,"date":"2024-04-04T11:48:20","date_gmt":"2024-04-04T09:48:20","guid":{"rendered":"https:\/\/new.veterinargruppen.se\/?page_id=358"},"modified":"2025-02-07T14:22:16","modified_gmt":"2025-02-07T13:22:16","slug":"gdprinfo-till-djurgare","status":"publish","type":"page","link":"https:\/\/veterinargruppen.stagingidentitet.se\/?page_id=358","title":{"rendered":"GDPR- Info till djur\u00e4gare"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"358\" class=\"elementor elementor-358\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fc9b3b1 e-flex e-con-boxed e-con e-parent\" data-id=\"fc9b3b1\" data-element_type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-12fb186 elementor-widget elementor-widget-html\" data-id=\"12fb186\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div id=\"vet-calculator-root\"><\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    setTimeout(function() {\n        if (typeof React === 'undefined' || typeof ReactDOM === 'undefined') {\n            document.getElementById('vet-calculator-root').innerHTML = \n                'Kunde inte ladda komponenten. V\u00e4nligen ladda om sidan.';\n            return;\n        }\n\n        const { useState } = React;\n\n        const services = [\n          {\n            id: 'veterinar-remiss',\n            name: 'Veterin\u00e4runders\u00f6kning via remiss',\n            description: 'Veterin\u00e4runders\u00f6kning efter remiss.',\n            price: 850,\n            priceType: 'fixed',\n            notes: 'Kostnad f\u00f6r vidare behandling och provtagning tillkommer.'\n          },\n          {\n            id: 'kloklipp',\n            name: 'Kloklipp',\n            description: 'Kloklippning hos sk\u00f6terska.',\n            priceType: 'contact',\n            notes: 'Ring f\u00f6r bokning.',\n            contactInfo: {\n              phone: '0406630630'\n            }\n          },\n          {\n            id: 'vaccination-skoterska',\n            name: 'Vaccination till sk\u00f6terska',\n            description: 'Ej vid f\u00f6rsta bes\u00f6k eller rabiesvaccination. Max tv\u00e5 djur per 15 min.',\n            priceRange: { min: 380, max: 722 },\n            priceType: 'range',\n            notes: 'Specialvacciner (Trilyme, Canileish, Herpesvaccin) kostar mer.'\n          },\n          {\n            id: 'blodprov-skoterska',\n            name: 'Blodprov till sk\u00f6terska',\n            description: 'Endast \u00e5terbes\u00f6k efter rekommendation fr\u00e5n veterin\u00e4r.',\n            priceType: 'variable',\n            notes: 'Pris beror p\u00e5 provtyp.'\n          },\n          {\n            id: 'stygntagning',\n            name: 'Stygntagning till sk\u00f6terska',\n            description: 'Stygntagning efter operation.',\n            priceType: 'contact',\n            notes: 'Benoperationer kr\u00e4ver veterin\u00e4r \u2013 ring f\u00f6r bokning.',\n            contactInfo: {\n              phone: '0406630630'\n            }\n          },\n          {\n            id: 'hd-ad-rontgen',\n            name: 'HD\/AD-r\u00f6ntgen',\n            description: 'F\u00f6r Svenska Kennelklubben eller Svenska Jakthundklubben.',\n            priceType: 'options',\n            options: [\n              { name: '1 led', price: 1959 },\n              { name: '2 leder', price: 2352 }\n            ],\n            notes: 'F\u00f6rbest\u00e4ll r\u00f6ntgen hos SKK innan bes\u00f6k.',\n            links: {\n              skk: 'https:\/\/www.skk.se\/uppfodning\/halsa\/leder\/bestall-rontgenavlasning\/'\n            }\n          },\n          {\n            id: 'avmaskning-resa',\n            name: 'Avmaskning inf\u00f6r resa',\n            description: 'Avmaskning f\u00f6r resa till Norge eller Finland.',\n            price: 293,\n            priceType: 'fixed',\n            notes: 'Pass och chipm\u00e4rkning kr\u00e4vs.'\n          },\n          {\n            id: 'injektioner',\n            name: 'Cytopoint-\/Artuvetrin-\/Librelainjektioner',\n            description: 'Uppf\u00f6ljande injektioner hos sk\u00f6terska.',\n            priceType: 'contact',\n            notes: 'Endast f\u00f6r djur med ordination fr\u00e5n kliniken.',\n            contactInfo: {\n              phone: '0406630630'\n            }\n          },\n          {\n            id: 'tandkoll',\n            name: 'Tandkoll till veterin\u00e4r',\n            description: 'Kontroll av t\u00e4nder inf\u00f6r eventuell \u00e5tg\u00e4rd.',\n            price: 520,\n            priceType: 'fixed',\n            notes: 'Blodprov och behandlingar tillkommer.'\n          },\n          {\n            id: 'veterinar-oron',\n            name: 'Veterin\u00e4runders\u00f6kning - \u00f6ron',\n            description: 'F\u00f6rsta bes\u00f6k \u2013 \u00f6ronunders\u00f6kning.',\n            price: 850,\n            priceType: 'fixed',\n            notes: 'Provtagning och behandling tillkommer.'\n          },\n          {\n            id: 'draktighet-ultraljud',\n            name: 'Dr\u00e4ktighetsunders\u00f6kning - ultraljud',\n            description: 'Ultraljud fr\u00e5n dag 28.',\n            price: 880,\n            priceType: 'fixed',\n            notes: ''\n          },\n          {\n            id: 'draktighet-rontgen',\n            name: 'Dr\u00e4ktighetsunders\u00f6kning - r\u00f6ntgen',\n            description: 'R\u00f6ntgen efter ca 45-50 dagars dr\u00e4ktighet.',\n            price: 880,\n            priceType: 'fixed',\n            notes: ''\n          },\n          {\n            id: 'veterinar-senior',\n            name: 'Veterin\u00e4runders\u00f6kning - seniorkoll',\n            description: 'H\u00e4lsokontroll f\u00f6r \u00e4ldre djur.',\n            price: 850,\n            priceType: 'fixed',\n            notes: 'Provtagningar tillkommer.'\n          },\n          {\n            id: 'veterinar-knuta',\n            name: 'Veterin\u00e4runders\u00f6kning - knuta',\n            description: 'Unders\u00f6kning av knuta.',\n            price: 850,\n            priceType: 'fixed',\n            notes: 'Provtagning tillkommer.'\n          },\n          {\n            id: 'kastration-hane',\n            name: 'Kastration - hane',\n            description: 'Kastration av hanhund eller hankatt.',\n            priceType: 'animal',\n            prices: {\n              cat: 1000,\n              dog: { min: 3700, max: 4200 }\n            },\n            notes: 'Priset f\u00f6r hund beror p\u00e5 vikt. Kryptorkid-kastration har andra priser.'\n          },\n          {\n            id: 'kastration-tik',\n            name: 'Kastration - tik\/hona',\n            description: 'Kastration av tik eller honkatt.',\n            priceType: 'animal',\n            prices: {\n              cat: 1700,\n              dog: { min: 6200, max: 8500 }\n            },\n            notes: 'Priset f\u00f6r hund beror p\u00e5 vikt. Dr\u00e4ktighet eller livmoderf\u00f6r\u00e4ndringar kan ge extra kostnad.'\n          },\n          {\n            id: 'ogonlysning',\n            name: '\u00d6gonlysning till veterin\u00e4r',\n            description: 'Veterin\u00e4runders\u00f6kning f\u00f6r \u00f6gonproblem.',\n            price: 1000,\n            priceType: 'fixed',\n            notes: 'Ring vid akuta besv\u00e4r.',\n            contactInfo: {\n              phone: '0406630630'\n            }\n          },\n          {\n            id: 'vaccination-veterinar',\n            name: 'Vaccination till veterin\u00e4r',\n            description: 'Vaccination inkl. hj\u00e4rtkontroll. Max tv\u00e5 djur per 15 min.',\n            priceRange: { min: 380, max: 722 },\n            priceType: 'range',\n            notes: 'Rabiesvaccination kr\u00e4ver pass.'\n          },\n          {\n            id: 'veterinar-sjukt',\n            name: 'Veterin\u00e4runders\u00f6kning - sjukt djur',\n            description: 'Utredning av sjukdom (kl\u00e5da, kr\u00e4kning, diarr\u00e9, h\u00e4lta m.m.).',\n            price: 850,\n            priceType: 'fixed',\n            notes: 'Provtagning och behandling tillkommer.'\n          }\n        ];\n\n        const ServiceCalculator = () => {\n            const [selectedService, setSelectedService] = useState('');\n            const [selectedOption, setSelectedOption] = useState('');\n            const [selectedAnimal, setSelectedAnimal] = useState('');\n\n            const service = services.find(s => s.id === selectedService);\n\n            const formatPhoneNumber = (phone) => {\n                return `${phone.slice(0,3)} ${phone.slice(3,6)} ${phone.slice(6)}`;\n            };\n\n            const renderPriceInfo = () => {\n                if (!service) return null;\n\n                switch (service.priceType) {\n                    case 'fixed':\n                        return React.createElement('div', { className: 'price' }, \n                            `Pris: ${service.price} kr`);\n                    case 'range':\n                        return React.createElement('div', { className: 'price' }, \n                            `Pris: ${service.priceRange.min}-${service.priceRange.max} kr`);\n                    case 'options':\n                        return React.createElement('div', null, [\n                            React.createElement('label', { key: 'label' }, 'V\u00e4lj alternativ:'),\n                            React.createElement('select', {\n                                key: 'select',\n                                value: selectedOption,\n                                onChange: (e) => setSelectedOption(e.target.value)\n                            }, [\n                                React.createElement('option', { key: 'default', value: '' }, 'V\u00e4lj...'),\n                                ...service.options.map(opt => \n                                    React.createElement('option', { \n                                        key: opt.name, \n                                        value: opt.name \n                                    }, `${opt.name} - ${opt.price} kr`)\n                                )\n                            ]),\n                            selectedOption && React.createElement('div', { \n                                key: 'price',\n                                className: 'price' \n                            }, `Pris: ${service.options.find(opt => \n                                opt.name === selectedOption)?.price} kr`)\n                        ]);\n                    case 'animal':\n                        return React.createElement('div', null, [\n                            React.createElement('label', { key: 'label' }, 'V\u00e4lj djurtyp:'),\n                            React.createElement('select', {\n                                key: 'select',\n                                value: selectedAnimal,\n                                onChange: (e) => setSelectedAnimal(e.target.value)\n                            }, [\n                                React.createElement('option', { key: 'default', value: '' }, 'V\u00e4lj...'),\n                                React.createElement('option', { key: 'cat', value: 'cat' }, 'Katt'),\n                                React.createElement('option', { key: 'dog', value: 'dog' }, 'Hund')\n                            ]),\n                            selectedAnimal && React.createElement('div', { \n                                key: 'price',\n                                className: 'price' \n                            }, `Pris: ${\n                                selectedAnimal === 'cat' \n                                    ? `${service.prices.cat} kr`\n                                    : `${service.prices.dog.min}-${service.prices.dog.max} kr`\n                            }`)\n                        ]);\n                    default:\n                        return React.createElement('div', { className: 'price' }, \n                            'Kontakta kliniken f\u00f6r pris');\n                }\n            };\n\n            const renderNotes = () => {\n                if (!service?.notes) return null;\n                let notes = service.notes;\n                \n                if (service.contactInfo?.phone) {\n                    notes = notes.replace(\n                        \/ring f\u00f6r bokning\/i,\n                        `ring <a href=\"tel:${service.contactInfo.phone}\" style=\"color: #0066cc;\">\n                            ${formatPhoneNumber(service.contactInfo.phone)}\n                        <\/a> f\u00f6r bokning`\n                    );\n                }\n                \n                if (service.links?.skk) {\n                    notes = notes.replace(\n                        'SKK',\n                        `<a href=\"${service.links.skk}\" target=\"_blank\" rel=\"noopener noreferrer\" \n                            style=\"color: #0066cc;\">SKK<\/a>`\n                    );\n                }\n                \n                return React.createElement('div', {\n                    className: 'notes',\n                    dangerouslySetInnerHTML: { __html: notes }\n                });\n            };\n\n            return React.createElement('div', { className: 'vet-calculator' }, [\n                React.createElement('h2', { key: 'title' }, \n                    'Priskalkylator f\u00f6r veterin\u00e4rtj\u00e4nster'),\n                React.createElement('label', { key: 'label' }, 'V\u00e4lj tj\u00e4nst:'),\n                React.createElement('select', {\n                    key: 'select',\n                    value: selectedService,\n                    onChange: (e) => {\n                        setSelectedService(e.target.value);\n                        setSelectedOption('');\n                        setSelectedAnimal('');\n                    }\n                }, [\n                    React.createElement('option', { key: 'default', value: '' }, \n                        'V\u00e4lj tj\u00e4nst...'),\n                    ...services.map(service => \n                        React.createElement('option', {\n                            key: service.id,\n                            value: service.id\n                        }, service.name)\n                    )\n                ]),\n                service && [\n                    React.createElement('div', { \n                        key: 'description',\n                        className: 'description' \n                    }, service.description),\n                    renderPriceInfo(),\n                    renderNotes()\n                ]\n            ]);\n        };\n\n        ReactDOM.render(\n            React.createElement(ServiceCalculator),\n            document.getElementById('vet-calculator-root')\n        );\n    }, 1000);\n});\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29fef32 elementor-widget elementor-widget-heading\" data-id=\"29fef32\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">2018 tr\u00e4dde GDPR (General Data Protection Regulation) i kraft och ers\u00e4tter PUL (personuppgiftslagen). Med anledning av detta vill vi ber\u00e4tta hur vi hanterar dina personuppgifter.<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee97b1b elementor-widget elementor-widget-text-editor\" data-id=\"ee97b1b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Veterin\u00e4rgruppen i Tygelsj\u00f6 hanterar dina personuppgifter i enlighet med dataskyddsf\u00f6rordningen GDPR (General Data Protection Regulation) och svensk lagstiftning.<\/p><p>Enligt journalf\u00f6ringslagen 2009:302 (SVF 2016:148) ska samtliga bes\u00f6k journalf\u00f6ras och sparas i minst 5 \u00e5r efter senaste bes\u00f6k, men journalerna sparas vanligtvis hela djurets liv f\u00f6r att uppr\u00e4tth\u00e5lla god djurh\u00e4lsov\u00e5rd och kundv\u00e5rd.<\/p><p>Vid registrering i v\u00e5rt journalsystem s\u00e5 ger du automatiskt samtycke till att vi lagrar dina personuppgifter.<br \/>Om du \u00f6nskar att vi direktreglerar vid ett bes\u00f6k eller om ett f\u00f6rs\u00e4kringsbolag ber om en journalkopia f\u00f6r att kunna hantera ditt f\u00f6rs\u00e4krings\u00e4rende s\u00e5 f\u00f6ljer personuppgifterna med. Likas\u00e5 vid f\u00f6rmedling av journalkopia vid remiss eller bes\u00f6k hos annan veterin\u00e4r.<\/p><p>Vi anv\u00e4nder \u00e4ven personuppgifterna f\u00f6r djurv\u00e5rdskonton, receptf\u00f6rskrivning, vid analyser som sker p\u00e5 externa laboratorier samt f\u00f6r att skicka ut kallelser f\u00f6r bl.a. vaccinationer och tandbehandlingar. Vi l\u00e4mnar inte ut dina personuppgifter till annan tredje part<\/p><p>Du kan n\u00e4r som helst beg\u00e4ra utdrag om vilka uppgifter vi har om dig. Du har \u00e4ven r\u00e4tt att beg\u00e4ra att vi r\u00e4ttar felaktiga uppgifter. Dessutom har du efter att tiden f\u00f6r lagring enligt journallagrings- och bokf\u00f6ringslagen l\u00f6pt ut r\u00e4tt att f\u00e5 personuppgifterna raderade.<\/p><p>Om du har fr\u00e5gor eller synpunkter p\u00e5 hur vi hanterar personuppgifter kontakta oss g\u00e4rna p\u00e5 <a href=\"tel:0406630630\">040-6630630<\/a> eller skicka ett mail till <a href=\"mailto:skoterska@veterinargruppen.stagingidentitet.se\">skoterska@veterinargruppen.stagingidentitet.se<\/a><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-95a9a17 e-flex e-con-boxed e-con e-parent\" data-id=\"95a9a17\" data-element_type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7413264 elementor-widget elementor-widget-html\" data-id=\"7413264\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\timport React, { useState } from 'react';\nimport { Card, CardHeader, CardTitle, CardContent } from '@\/components\/ui\/card';\nimport { Phone } from 'lucide-react';\n\nconst services = [\n  {\n    id: 'veterinar-remiss',\n    name: 'Veterin\u00e4runders\u00f6kning via remiss',\n    description: 'Veterin\u00e4runders\u00f6kning efter remiss.',\n    price: 850,\n    priceType: 'fixed',\n    notes: 'Kostnad f\u00f6r vidare behandling och provtagning tillkommer.'\n  },\n  {\n    id: 'kloklipp',\n    name: 'Kloklipp',\n    description: 'Kloklippning hos sk\u00f6terska.',\n    priceType: 'contact',\n    notes: 'Ring f\u00f6r bokning.',\n    contactInfo: {\n      phone: '0406630630'\n    }\n  },\n  {\n    id: 'vaccination-skoterska',\n    name: 'Vaccination till sk\u00f6terska',\n    description: 'Ej vid f\u00f6rsta bes\u00f6k eller rabiesvaccination. Max tv\u00e5 djur per 15 min.',\n    priceRange: { min: 380, max: 722 },\n    priceType: 'range',\n    notes: 'Specialvacciner (Trilyme, Canileish, Herpesvaccin) kostar mer.'\n  },\n  {\n    id: 'blodprov-skoterska',\n    name: 'Blodprov till sk\u00f6terska',\n    description: 'Endast \u00e5terbes\u00f6k efter rekommendation fr\u00e5n veterin\u00e4r.',\n    priceType: 'variable',\n    notes: 'Pris beror p\u00e5 provtyp.'\n  },\n  {\n    id: 'stygntagning',\n    name: 'Stygntagning till sk\u00f6terska',\n    description: 'Stygntagning efter operation.',\n    priceType: 'contact',\n    notes: 'Benoperationer kr\u00e4ver veterin\u00e4r \u2013 ring f\u00f6r bokning.',\n    contactInfo: {\n      phone: '0406630630'\n    }\n  },\n  {\n    id: 'hd-ad-rontgen',\n    name: 'HD\/AD-r\u00f6ntgen',\n    description: 'F\u00f6r Svenska Kennelklubben eller Svenska Jakthundklubben.',\n    priceType: 'options',\n    options: [\n      { name: '1 led', price: 1959 },\n      { name: '2 leder', price: 2352 }\n    ],\n    notes: 'F\u00f6rbest\u00e4ll r\u00f6ntgen hos SKK innan bes\u00f6k.',\n    links: {\n      skk: 'https:\/\/www.skk.se\/uppfodning\/halsa\/leder\/bestall-rontgenavlasning\/'\n    }\n  },\n  {\n    id: 'avmaskning-resa',\n    name: 'Avmaskning inf\u00f6r resa',\n    description: 'Avmaskning f\u00f6r resa till Norge eller Finland.',\n    price: 293,\n    priceType: 'fixed',\n    notes: 'Pass och chipm\u00e4rkning kr\u00e4vs.'\n  },\n  {\n    id: 'injektioner',\n    name: 'Cytopoint-\/Artuvetrin-\/Librelainjektioner',\n    description: 'Uppf\u00f6ljande injektioner hos sk\u00f6terska.',\n    priceType: 'contact',\n    notes: 'Endast f\u00f6r djur med ordination fr\u00e5n kliniken.',\n    contactInfo: {\n      phone: '0406630630'\n    }\n  },\n  {\n    id: 'tandkoll',\n    name: 'Tandkoll till veterin\u00e4r',\n    description: 'Kontroll av t\u00e4nder inf\u00f6r eventuell \u00e5tg\u00e4rd.',\n    price: 520,\n    priceType: 'fixed',\n    notes: 'Blodprov och behandlingar tillkommer.'\n  },\n  {\n    id: 'veterinar-oron',\n    name: 'Veterin\u00e4runders\u00f6kning - \u00f6ron',\n    description: 'F\u00f6rsta bes\u00f6k \u2013 \u00f6ronunders\u00f6kning.',\n    price: 850,\n    priceType: 'fixed',\n    notes: 'Provtagning och behandling tillkommer.'\n  },\n  {\n    id: 'draktighet-ultraljud',\n    name: 'Dr\u00e4ktighetsunders\u00f6kning - ultraljud',\n    description: 'Ultraljud fr\u00e5n dag 28.',\n    price: 880,\n    priceType: 'fixed',\n    notes: ''\n  },\n  {\n    id: 'draktighet-rontgen',\n    name: 'Dr\u00e4ktighetsunders\u00f6kning - r\u00f6ntgen',\n    description: 'R\u00f6ntgen efter ca 45-50 dagars dr\u00e4ktighet.',\n    price: 880,\n    priceType: 'fixed',\n    notes: ''\n  },\n  {\n    id: 'veterinar-senior',\n    name: 'Veterin\u00e4runders\u00f6kning - seniorkoll',\n    description: 'H\u00e4lsokontroll f\u00f6r \u00e4ldre djur.',\n    price: 850,\n    priceType: 'fixed',\n    notes: 'Provtagningar tillkommer.'\n  },\n  {\n    id: 'veterinar-knuta',\n    name: 'Veterin\u00e4runders\u00f6kning - knuta',\n    description: 'Unders\u00f6kning av knuta.',\n    price: 850,\n    priceType: 'fixed',\n    notes: 'Provtagning tillkommer.'\n  },\n  {\n    id: 'kastration-hane',\n    name: 'Kastration - hane',\n    description: 'Kastration av hanhund eller hankatt.',\n    priceType: 'animal',\n    prices: {\n      cat: 1000,\n      dog: { min: 3700, max: 4200 }\n    },\n    notes: 'Priset f\u00f6r hund beror p\u00e5 vikt. Kryptorkid-kastration har andra priser.'\n  },\n  {\n    id: 'kastration-tik',\n    name: 'Kastration - tik\/hona',\n    description: 'Kastration av tik eller honkatt.',\n    priceType: 'animal',\n    prices: {\n      cat: 1700,\n      dog: { min: 6200, max: 8500 }\n    },\n    notes: 'Priset f\u00f6r hund beror p\u00e5 vikt. Dr\u00e4ktighet eller livmoderf\u00f6r\u00e4ndringar kan ge extra kostnad.'\n  },\n  {\n    id: 'ogonlysning',\n    name: '\u00d6gonlysning till veterin\u00e4r',\n    description: 'Veterin\u00e4runders\u00f6kning f\u00f6r \u00f6gonproblem.',\n    price: 1000,\n    priceType: 'fixed',\n    notes: 'Ring vid akuta besv\u00e4r.',\n    contactInfo: {\n      phone: '0406630630'\n    }\n  },\n  {\n    id: 'vaccination-veterinar',\n    name: 'Vaccination till veterin\u00e4r',\n    description: 'Vaccination inkl. hj\u00e4rtkontroll. Max tv\u00e5 djur per 15 min.',\n    priceRange: { min: 380, max: 722 },\n    priceType: 'range',\n    notes: 'Rabiesvaccination kr\u00e4ver pass.'\n  },\n  {\n    id: 'veterinar-sjukt',\n    name: 'Veterin\u00e4runders\u00f6kning - sjukt djur',\n    description: 'Utredning av sjukdom (kl\u00e5da, kr\u00e4kning, diarr\u00e9, h\u00e4lta m.m.).',\n    price: 850,\n    priceType: 'fixed',\n    notes: 'Provtagning och behandling tillkommer.'\n  }\n];\n\nconst ServiceCalculator = () => {\n  const [selectedService, setSelectedService] = useState('');\n  const [selectedOption, setSelectedOption] = useState('');\n  const [selectedAnimal, setSelectedAnimal] = useState('');\n\n  const service = services.find(s => s.id === selectedService);\n\n  const formatPhoneNumber = (phone) => {\n    return `${phone.slice(0,3)} ${phone.slice(3,6)} ${phone.slice(6)}`;\n  };\n\n  const renderPriceInput = () => {\n    if (!service) return null;\n\n    switch (service.priceType) {\n      case 'fixed':\n        return (\n          <div className=\"text-lg font-semibold mt-4\">\n            Pris: {service.price} kr\n          <\/div>\n        );\n      case 'range':\n        return (\n          <div className=\"text-lg font-semibold mt-4\">\n            Pris: {service.priceRange.min}-{service.priceRange.max} kr\n          <\/div>\n        );\n      case 'variable':\n        return (\n          <div className=\"text-lg font-semibold mt-4\">\n            Pris: Varierande\n          <\/div>\n        );\n      case 'contact':\n        return (\n          <div className=\"text-lg font-semibold mt-4\">\n            Pris: Kontakta kliniken\n          <\/div>\n        );\n      case 'options':\n        return (\n          <div className=\"mt-4\">\n            <label className=\"block mb-2\">V\u00e4lj alternativ:<\/label>\n            <select \n              className=\"w-full p-2 border rounded\"\n              value={selectedOption}\n              onChange={(e) => setSelectedOption(e.target.value)}\n            >\n              <option value=\"\">V\u00e4lj...<\/option>\n              {service.options.map(option => (\n                <option key={option.name} value={option.name}>\n                  {option.name} - {option.price} kr\n                <\/option>\n              ))}\n            <\/select>\n            {selectedOption && (\n              <div className=\"text-lg font-semibold mt-2\">\n                Pris: {service.options.find(opt => opt.name === selectedOption)?.price} kr\n              <\/div>\n            )}\n          <\/div>\n        );\n      case 'animal':\n        return (\n          <div className=\"mt-4\">\n            <label className=\"block mb-2\">V\u00e4lj djurtyp:<\/label>\n            <select \n              className=\"w-full p-2 border rounded\"\n              value={selectedAnimal}\n              onChange={(e) => setSelectedAnimal(e.target.value)}\n            >\n              <option value=\"\">V\u00e4lj...<\/option>\n              <option value=\"cat\">Katt<\/option>\n              <option value=\"dog\">Hund<\/option>\n            <\/select>\n            {selectedAnimal && (\n              <div className=\"text-lg font-semibold mt-2\">\n                Pris: {\n                  selectedAnimal === 'cat' \n                    ? `${service.prices.cat} kr`\n                    : `${service.prices.dog.min}-${service.prices.dog.max} kr`\n                }\n              <\/div>\n            )}\n          <\/div>\n        );\n      default:\n        return null;\n    }\n  };\n\n  const renderNotes = (service) => {\n    if (!service.notes) return null;\n    \n    let notes = service.notes;\n    \n    if (service.contactInfo?.phone) {\n      notes = notes.replace(\n        \/ring f\u00f6r bokning\/i, \n        `ring <a href=\"tel:${service.contactInfo.phone}\" class=\"text-blue-600 hover:text-blue-800 inline-flex items-center\">\n          ${formatPhoneNumber(service.contactInfo.phone)}\n          <Phone className=\"ml-1 h-4 w-4\" \/>\n        <\/a> f\u00f6r bokning`\n      );\n    }\n    \n    if (service.links?.skk) {\n      notes = notes.replace(\n        'SKK',\n        `<a href=\"${service.links.skk}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-blue-600 hover:text-blue-800\">SKK<\/a>`\n      );\n    }\n\n    return (\n      <div className=\"mt-4 p-4 bg-gray-50 rounded\">\n        <h3 className=\"font-semibold\">\u00d6vrig information:<\/h3>\n        <p dangerouslySetInnerHTML={{ __html: notes }}><\/p>\n      <\/div>\n    );\n  };\n\n  return (\n    <Card className=\"w-full max-w-2xl mx-auto\">\n      <CardHeader>\n        <CardTitle>Priskalkylator f\u00f6r veterin\u00e4rtj\u00e4nster<\/CardTitle>\n      <\/CardHeader>\n      <CardContent>\n        <div className=\"space-y-4\">\n          <div>\n            <label className=\"block mb-2\">V\u00e4lj tj\u00e4nst:<\/label>\n            <select \n              className=\"w-full p-2 border rounded\"\n              value={selectedService}\n              onChange={(e) => {\n                setSelectedService(e.target.value);\n                setSelectedOption('');\n                setSelectedAnimal('');\n              }}\n            >\n              <option value=\"\">V\u00e4lj tj\u00e4nst...<\/option>\n              {services.map(service => (\n                <option key={service.id} value={service.id}>\n                  {service.name}\n                <\/option>\n              ))}\n            <\/select>\n          <\/div>\n\n          {service && (\n            <>\n              <div className=\"mt-4\">\n                <h3 className=\"font-semibold\">Beskrivning:<\/h3>\n                <p>{service.description}<\/p>\n              <\/div>\n\n              {renderPriceInput()}\n\n              {renderNotes(service)}\n            <\/>\n          )}\n        <\/div>\n      <\/CardContent>\n    <\/Card>\n  );\n};\n\nexport default ServiceCalculator;\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>2018 tr\u00e4dde GDPR (General Data Protection Regulation) i kraft och ers\u00e4tter PUL (personuppgiftslagen). Med anledning av detta vill vi ber\u00e4tta hur vi hanterar dina personuppgifter. Veterin\u00e4rgruppen i Tygelsj\u00f6 hanterar dina personuppgifter i enlighet med dataskyddsf\u00f6rordningen GDPR (General Data Protection Regulation) och svensk lagstiftning. Enligt journalf\u00f6ringslagen 2009:302 (SVF 2016:148) ska samtliga bes\u00f6k journalf\u00f6ras och sparas i [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-358","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/veterinargruppen.stagingidentitet.se\/index.php?rest_route=\/wp\/v2\/pages\/358","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/veterinargruppen.stagingidentitet.se\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/veterinargruppen.stagingidentitet.se\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/veterinargruppen.stagingidentitet.se\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/veterinargruppen.stagingidentitet.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=358"}],"version-history":[{"count":28,"href":"https:\/\/veterinargruppen.stagingidentitet.se\/index.php?rest_route=\/wp\/v2\/pages\/358\/revisions"}],"predecessor-version":[{"id":1533,"href":"https:\/\/veterinargruppen.stagingidentitet.se\/index.php?rest_route=\/wp\/v2\/pages\/358\/revisions\/1533"}],"wp:attachment":[{"href":"https:\/\/veterinargruppen.stagingidentitet.se\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}