<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cybersäkerhet och SecOps &#8211; Node Nordic &#8211; AI Konsult för företag</title>
	<atom:link href="https://nodenordic.se/function/cybersakerhet-och-secops/feed/" rel="self" type="application/rss+xml" />
	<link>https://nodenordic.se</link>
	<description>Vi guidar er från AI-strategi och pilot till färdig implementation och skalning.</description>
	<lastBuildDate>Fri, 23 Jan 2026 02:53:32 +0000</lastBuildDate>
	<language>sv-SE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://nodenordic.se/wp-content/uploads/2025/12/cropped-icon-32x32.png</url>
	<title>Cybersäkerhet och SecOps &#8211; Node Nordic &#8211; AI Konsult för företag</title>
	<link>https://nodenordic.se</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Bygg en riskstrategi för småföretag med AI-prompt</title>
		<link>https://nodenordic.se/prompts/bygg-en-riskstrategi-for-smaforetag-med-ai-prompt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bygg-en-riskstrategi-for-smaforetag-med-ai-prompt</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:53:32 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5001754</guid>

					<description><![CDATA[<p>Störningar bromsar tillväxten. Denna AI-prompt bygger en riskstrategi för småföretag med poängsättning, åtgärder, playbooks och KRI:er.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/bygg-en-riskstrategi-for-smaforetag-med-ai-prompt/">Bygg en riskstrategi för småföretag med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: risk strategy prompt -->
<div class="hook-introduction">

<p>De flesta småföretag ”hanterar inte risk”. De reagerar på den. En leverantör fallerar, en nyckelmedarbetare säger upp sig, en topp i chargebacks slår till eller en cyberincident äter upp en vecka – och plötsligt är din tillväxtplan pausad.</p>



<p>Den här <strong>riskstrategiprompten</strong> är byggd för <strong>operatörer</strong> som försöker skala utan att skapa kaos, <strong>grundare</strong> som har för mycket i huvudet och behöver en plan som går att fatta beslut på, och <strong>konsulter</strong> som måste ta kunder genom praktiska kontroller utan att göra det till en formell revision. Resultatet är en realistisk, heltäckande blueprint för riskhantering med prioriterade risker, sannolikhet × påverkan-poängsättning, åtgärder, avbrottsplaybooks och KRI:er du kan följa upp i en enkel rutin.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Det här får du</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Den skannar risker inom drift, ekonomi, regelefterlevnad/juridik, teknik/cyber, personal, leveranskedja, varumärke/rykte och marknadsdynamik.</li>
          <li>Den använder SWOT- och PESTLE-linser för att synliggöra andrahandsrisker som du kanske inte nämner i en första genomgång.</li>
          <li>Den rankar risker med en sannolikhet × påverkan-modell i stället för att skapa en oprioriterad lista.</li>
          <li>Den föreslår genomförbara kontroller och åtgärder som passar småföretagets begränsningar, som få anställda och begränsad budget.</li>
          <li>Den hanterar saknad kontext genom att ange antaganden, ställa riktade frågor och ändå leverera en ”bästa möjliga” plan.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du ökar intäkterna, men backoffice och leveransprocessen börjar knaka.</li>
          <li>Ni hade en nära ögat-händelse (betalningsbedrägeri, leveransförsening, compliance-varning) och du vill inte att nästa blir värre.</li>
          <li>Du är på väg att teckna ett stort leverantörsavtal, rekrytera kritiska roller eller expandera kanaler och behöver ett tydligt riskavvägning.</li>
          <li>Konkurrenter tvingar fram snabbare beslut, och du behöver skyddsräcken så att hastighet inte skapar onödig exponering.</li>
          <li>Du vill ha en upprepningsbar månads- eller kvartalsrutin för risk i stället för ”vi tar det sen”.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>Ett kategoriserat riskregister med 12–20 risker anpassade till din situation.</li>
           <li>En sannolikhet × påverkan-modell och en rankad topp-5-lista för ”agera nu”.</li>
           <li>Praktiska riskåtgärder, inklusive vem som äger respektive kontroll och hur ”klart” ser ut.</li>
           <li>En avbrottsplaybook för högt prioriterade scenarier (triggers, första 24 timmarna, kommunikation och återställningssteg).</li>
           <li>En uppsättning KRI:er (8–15 indikatorer) med tröskelvärden och föreslagen uppföljningskadens.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: blueprint för riskhantering i småföretag</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[PRODUKTBESKRIVNING]</code></td>
                                <td class="var-desc">
                                    Ge en tydlig och kortfattad beskrivning av den produkt eller tjänst som ditt företag erbjuder, inklusive dess viktigaste funktioner och syfte.                                    <div class="var-example">Till exempel: "En prenumerationsbaserad mjukvaruplattform som automatiserar lönehantering för småföretag och säkerställer efterlevnad av skatteregler."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[PRODUKTBESKRIVNING]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[MALGRUPP]</code></td>
                                <td class="var-desc">
                                    Beskriv den primära målgruppen eller kundsegmentet som ditt företag vänder sig till, inklusive demografi, behov och utmaningar.                                    <div class="var-example">Till exempel: "Ägare till små detaljhandelsföretag i åldern 30–50 år som behöver prisvärda och lättanvända lösningar för lagerhantering."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[MALGRUPP]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BRANSCH]</code></td>
                                <td class="var-desc">
                                    Ange vilken bransch eller sektor ditt företag verkar inom, inklusive relevanta underkategorier.                                    <div class="var-example">Till exempel: "Hotell och turism, specifikt boutiquehotell och semesteruthyrning."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BRANSCH]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[NYCKELVERKSAMHET]</code></td>
                                <td class="var-desc">
                                    Lista de kärnaktiviteter eller processer som är avgörande för din verksamhet.                                    <div class="var-example">Till exempel: "Tillverkning av specialanpassade möbler, hantering av logistik i leveranskedjan och e-handel med direktförsäljning till konsument."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[NYCKELVERKSAMHET]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[HUVUDSAKLIGA_FINANSIELLA_AKTIVITETER]</code></td>
                                <td class="var-desc">
                                    Beskriv företagets viktigaste finansiella aktiviteter, till exempel hur intäkter skapas, hur betalningar hanteras eller hur den ekonomiska planeringen ser ut.                                    <div class="var-example">Till exempel: "Intäkter via prenumerationstjänster, månadsvis fakturering av kunder samt lönehantering för 15 anställda."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[HUVUDSAKLIGA_FINANSIELLA_AKTIVITETER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[MARKNADSMILJO]</code></td>
                                <td class="var-desc">
                                    Sammanfatta de konkurrensmässiga och ekonomiska förutsättningar som ditt företag verkar under, inklusive marknadstrender, kundförväntningar och utmaningar.                                    <div class="var-example">Till exempel: "En mycket konkurrensutsatt marknad med ökande efterfrågan på miljövänliga produkter, men konsumenternas priskänslighet är fortsatt en utmaning."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[MARKNADSMILJO]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[KANDA_RISKER]</code></td>
                                <td class="var-desc">
                                    Lista de risker eller sårbarheter som ni redan känner till, inklusive operativa, finansiella eller regelefterlevnadsrelaterade risker.                                    <div class="var-example">Till exempel: "Beroende av en enda leverantör av råvaror, potentiella cybersäkerhetshot och varierande efterfrågan på grund av säsongsvariationer."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[KANDA_RISKER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[HUVUDMAL]</code></td>
                                <td class="var-desc">
                                    Ange det viktigaste målet eller resultatet du vill uppnå med riskhanteringsplanen.                                    <div class="var-example">Till exempel: "Minimera ekonomiska förluster vid störningar i leveranskedjan samtidigt som efterlevnad av branschregler säkerställs."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[HUVUDMAL]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TILLGANGLIGA_RESURSER]</code></td>
                                <td class="var-desc">
                                    Beskriv vilka resurser ditt företag kan avsätta för riskhantering, till exempel personal, verktyg eller kompetens.                                    <div class="var-example">Till exempel: "Ett team med tre chefer, tillgång till ett enkelt projektledningsverktyg och en reservbudget på 10 000 USD."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[TILLGANGLIGA_RESURSER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TIDSRAM]</code></td>
                                <td class="var-desc">
                                    Ange inom vilken tidsperiod du vill genomföra riskhanteringsplanen.                                    <div class="var-example">Till exempel: "3 månader för att få den initiala planen på plats, med löpande kvartalsvisa uppdateringar."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[TIDSRAM]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BUDGET]</code></td>
                                <td class="var-desc">
                                    Ange den totala budget som finns tillgänglig för att genomföra riskhanteringsplanen.                                    <div class="var-example">Till exempel: "15 000 USD avsatta för riskbedömning, utbildning och mjukvaruverktyg."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BUDGET]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TONALITET]</code></td>
                                <td class="var-desc">
                                    Ange vilken ton eller kommunikationsstil du vill att riskhanteringsplanen ska använda.                                    <div class="var-example">Till exempel: "Professionell och kortfattad, med fokus på konkreta insikter och tydliga nästa steg."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[TONALITET]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[VERSALER_MED_UNDERSCORES]</code></td>
                                <td class="var-desc">
                                    Ange text i versaler separerade med understreck, vanligtvis av tekniska skäl eller för formatering.                                    <div class="var-example">Till exempel: "RISKHANTERINGSPLAN"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[VERSALER_MED_UNDERSCORES]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INPUT</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">OUTPUTSPECIFIKATION</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Skapa en skräddarsydd, heltäckande riskhanteringsplan för ett småföretag som synliggör de största hoten, prioriterar dem efter sannolikhet och allvarlighetsgrad, föreskriver praktiska kontroller och inkluderar både en störnings-/incidentplaybook och en takt för att hålla riskprofilen aktuell – samtidigt som du är realistisk kring företagets mål, kapacitet och branschens förväntningar.

## PERSONA
Agera som en affärsutvecklingsspecialist som regelbundet samarbetar med ledningsgrupper för att växa på ett säkert sätt. Du balanserar kommersiella möjligheter med operativ, finansiell, regelefterlevnads-/compliance- och marknadsrisk, och du kommunicerar i tydligt, beslutsmoget språk.

## BEGRÄNSNINGAR
- Håll rekommendationerna genomförbara i en småföretagsmiljö (begränsat antal medarbetare, budget och tid).
- Adressera risker inom: verksamhet/operationer, ekonomi, compliance/juridik, teknik/cyber, människor/HR, leverantörskedja, rykte och marknads-/konkurrensdynamik.
- Använd både kvalitativt och kvantitativt tänkande där det är möjligt (t.ex. intervall för finansiell exponering + påverkan på rykte/människor).
- Tillhandahåll en metod för prioritering (t.ex. en sannolikhet × påverkan-poängmodell) i stället för en oordnad lista.
- **Hantering av edge cases:** Om några input saknas eller är vaga, ange antaganden tydligt, lista riktade frågor och leverera ändå en “bästa tillgängliga”-plan med rimliga standardantaganden.
- **Vad detta INTE är:** Detta är inte juridisk rådgivning, inte en fullständig revision, inte ett försäkringsbrev och inte en garanti för att förluster kommer att förhindras; det är ett praktiskt ramverk för ledning/styrning för att minska och hantera risk.

## PROCESS
1. **Föranalys (bekräfta förståelse)**
   - Återge kort verksamhetens kontext och hur framgång ser ut.
   - Peka ut oklara/saknade input och vilka antaganden du kommer att använda.

2. **Riskidentifiering**
   - Skanna verksamheten utifrån interna och externa drivkrafter.
   - Använd SWOT- och PESTLE-liknande perspektiv för att säkerställa täckning av dolda eller indirekta (second-order) risker.
   - Dela upp risker i tydliga kategorier (operativa, finansiella, regulatoriska, marknad, etc.) och identifiera sannolika rotorsaker.

3. **Riskvärdering och prioritering**
   - För varje risk, uppskatta sannolikhet och påverkan (finansiell + icke-finansiell).
   - Poängsätt och rangordna risker med en enkel matris (t.ex. 1–5 sannolikhet och 1–5 påverkan) och märk sedan prioritetsnivåer.

4. **Design av kontroller och riskreducering**
   - För de högst prioriterade: föreslå lager av kontroller (förebygg, upptäck, agera).
   - För medel/låg: föreslå lätta skyddsräcken och trösklar som triggar uppföljning.
   - Inkludera alternativ som matchar resursnivåer (t.ex. “minimum viable control” vs “enhanced control”).

5. **Beredskap och playbooks för störningar**
   - Bygg responssteg för de mest kritiska scenarierna (vem gör vad, i vilken ordning).
   - Inkludera vägledning för kommunikation (kunder, leverantörer, anställda, myndigheter om relevant).
   - Definiera återställningsmål och resursbehov.

6. **Implementeringsplan**
   - Tilldela ägarskap, tidslinjer och nödvändig budget/verktyg.
   - Identifiera snabba vinster (0–30 dagar), åtgärder på medellång sikt (30–90 dagar) och långsiktiga investeringar (90–180 dagar), och justera vid behov.

7. **Övervakning, genomgång och uppdatering**
   - Definiera ledande indikatorer/KRI:er och en rutin för att ompröva poäng.
   - Etablera en återkommande granskningscykel och en lista över förändringstriggers (ny leverantör, ny reglering, snabb tillväxt, incident, etc.).
   - Integrera feedback från intressenter och dokumentera versionshantering.

## INPUT
- **Företagsöversikt:** [PRODUKTBESKRIVNING]
- **Primärt användarsegment som betjänas:** [MALGRUPP]
- **Bransch/sektor:** [BRANSCH]
- **Kärnverksamhet (hur arbetet levereras):** [NYCKELVERKSAMHET]
- **Primära finansiella aktiviteter (intäkter, kostnader, kassaflöde, kredit, etc.):** [HUVUDSAKLIGA_FINANSIELLA_AKTIVITETER]
- **Marknadskontext (konkurrens, efterfrågeförskjutningar, regleringar, makrofaktorer):** [MARKNADSMILJO]
- **Kända risker som redan finns på din radar:** [KANDA_RISKER]
- **Affärsmål (tillväxt, lönsamhet, expansion, stabilitet, exit, etc.):** [HUVUDMAL]
- **Tillgängliga resurser för riskhantering (människor, verktyg, budget):** [TILLGANGLIGA_RESURSER]
- **Planeringshorisont:** [TIDSRAM]
- **Budgetintervall (om känt):** [BUDGET]
- **Önskad tonalitet (t.ex. formell, pragmatisk, kortfattad):** [TONALITET]

## OUTPUTSPECIFIKATION
Leverera ett enda strukturerat dokument som innehåller:

1. **{Executive Summary}**
   - {Top Risks Snapshot}
   - {Priority Recommendations}

2. **{Business Profile &amp; Assumptions}**
   - {Context Summary}
   - {Assumptions}
   - {Open Questions}

3. **{Risk Register (Ranked)}** (tabell)
   - Kolumner: {Risk}, {Category}, {Root Cause}, {Likelihood Score}, {Impact Score}, {Overall Rating}, {Financial Exposure}, {Non-Financial Impact}, {Early Warning Indicators}, {Current Controls}, {Recommended Controls}, {Owner}, {Target Date}

4. **{Risk Heat Map Summary}**
   - {High Tier}, {Medium Tier}, {Low Tier} med kort motivering

5. **{Mitigation Plan by Priority Tier}**
   - {High-Priority Control Plan}
   - {Medium-Priority Guardrails}
   - {Low-Priority Monitoring Approach}

6. **{Contingency Playbooks}** (för scenarierna med högst påverkan)
   - För varje: {Scenario}, {Trigger}, {Immediate Actions (0–24h)}, {Stabilization (1–7d)}, {Recovery (2–6w)}, {Comms Plan}, {Resources Needed}, {Decision Owner}

7. **{Implementation Roadmap}**
   - {0–30 Day Actions}
   - {30–90 Day Actions}
   - {90–180 Day Actions}
   - {Dependencies &amp; Budget Notes}

8. **{Monitoring &amp; Review System}**
   - {Key Risk Indicators}
   - {Review Cadence}
   - {Change Triggers}
   - {Update Workflow &amp; Versioning}

## KVALITETSKONTROLLER
Innan du slutför, verifiera:
- Täckning omfattar verksamhet/operationer, ekonomi, compliance/juridik, människor, teknik, leverantörskedja, rykte och marknadskrafter.
- Varje risk i {High Tier} har: en ägare, tidiga varningsindikatorer samt en konkret riskreducerings- och beredskaps-/contingency-komponent.
- Prioriteringen är transparent (poängsättningsmetoden anges och tillämpas konsekvent).
- Rekommendationerna matchar [TILLGANGLIGA_RESURSER] och [BUDGET] (erbjud nivåindelade alternativ om det är begränsat).
- Alla användarinput använder **[VERSALER_MED_UNDERSCORES]** och alla AI-ifyllda placeholders använder endast **{Title Case}**-format.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nSkapa en skr\u00e4ddarsydd, helt\u00e4ckande riskhanteringsplan f\u00f6r ett sm\u00e5f\u00f6retag som synligg\u00f6r de st\u00f6rsta hoten, prioriterar dem efter sannolikhet och allvarlighetsgrad, f\u00f6reskriver praktiska kontroller och inkluderar b\u00e5de en st\u00f6rnings-\/incidentplaybook och en takt f\u00f6r att h\u00e5lla riskprofilen aktuell \u2013 samtidigt som du \u00e4r realistisk kring f\u00f6retagets m\u00e5l, kapacitet och branschens f\u00f6rv\u00e4ntningar.\r\n\r\n## PERSONA\r\nAgera som en aff\u00e4rsutvecklingsspecialist som regelbundet samarbetar med ledningsgrupper f\u00f6r att v\u00e4xa p\u00e5 ett s\u00e4kert s\u00e4tt. Du balanserar kommersiella m\u00f6jligheter med operativ, finansiell, regelefterlevnads-\/compliance- och marknadsrisk, och du kommunicerar i tydligt, beslutsmoget spr\u00e5k.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- H\u00e5ll rekommendationerna genomf\u00f6rbara i en sm\u00e5f\u00f6retagsmilj\u00f6 (begr\u00e4nsat antal medarbetare, budget och tid).\r\n- Adressera risker inom: verksamhet\/operationer, ekonomi, compliance\/juridik, teknik\/cyber, m\u00e4nniskor\/HR, leverant\u00f6rskedja, rykte och marknads-\/konkurrensdynamik.\r\n- Anv\u00e4nd b\u00e5de kvalitativt och kvantitativt t\u00e4nkande d\u00e4r det \u00e4r m\u00f6jligt (t.ex. intervall f\u00f6r finansiell exponering + p\u00e5verkan p\u00e5 rykte\/m\u00e4nniskor).\r\n- Tillhandah\u00e5ll en metod f\u00f6r prioritering (t.ex. en sannolikhet \u00d7 p\u00e5verkan-po\u00e4ngmodell) i st\u00e4llet f\u00f6r en oordnad lista.\r\n- **Hantering av edge cases:** Om n\u00e5gra input saknas eller \u00e4r vaga, ange antaganden tydligt, lista riktade fr\u00e5gor och leverera \u00e4nd\u00e5 en \u201cb\u00e4sta tillg\u00e4ngliga\u201d-plan med rimliga standardantaganden.\r\n- **Vad detta INTE \u00e4r:** Detta \u00e4r inte juridisk r\u00e5dgivning, inte en fullst\u00e4ndig revision, inte ett f\u00f6rs\u00e4kringsbrev och inte en garanti f\u00f6r att f\u00f6rluster kommer att f\u00f6rhindras; det \u00e4r ett praktiskt ramverk f\u00f6r ledning\/styrning f\u00f6r att minska och hantera risk.\r\n\r\n## PROCESS\r\n1. **F\u00f6ranalys (bekr\u00e4fta f\u00f6rst\u00e5else)**\r\n   - \u00c5terge kort verksamhetens kontext och hur framg\u00e5ng ser ut.\r\n   - Peka ut oklara\/saknade input och vilka antaganden du kommer att anv\u00e4nda.\r\n\r\n2. **Riskidentifiering**\r\n   - Skanna verksamheten utifr\u00e5n interna och externa drivkrafter.\r\n   - Anv\u00e4nd SWOT- och PESTLE-liknande perspektiv f\u00f6r att s\u00e4kerst\u00e4lla t\u00e4ckning av dolda eller indirekta (second-order) risker.\r\n   - Dela upp risker i tydliga kategorier (operativa, finansiella, regulatoriska, marknad, etc.) och identifiera sannolika rotorsaker.\r\n\r\n3. **Riskv\u00e4rdering och prioritering**\r\n   - F\u00f6r varje risk, uppskatta sannolikhet och p\u00e5verkan (finansiell + icke-finansiell).\r\n   - Po\u00e4ngs\u00e4tt och rangordna risker med en enkel matris (t.ex. 1\u20135 sannolikhet och 1\u20135 p\u00e5verkan) och m\u00e4rk sedan prioritetsniv\u00e5er.\r\n\r\n4. **Design av kontroller och riskreducering**\r\n   - F\u00f6r de h\u00f6gst prioriterade: f\u00f6resl\u00e5 lager av kontroller (f\u00f6rebygg, uppt\u00e4ck, agera).\r\n   - F\u00f6r medel\/l\u00e5g: f\u00f6resl\u00e5 l\u00e4tta skyddsr\u00e4cken och tr\u00f6sklar som triggar uppf\u00f6ljning.\r\n   - Inkludera alternativ som matchar resursniv\u00e5er (t.ex. \u201cminimum viable control\u201d vs \u201cenhanced control\u201d).\r\n\r\n5. **Beredskap och playbooks f\u00f6r st\u00f6rningar**\r\n   - Bygg responssteg f\u00f6r de mest kritiska scenarierna (vem g\u00f6r vad, i vilken ordning).\r\n   - Inkludera v\u00e4gledning f\u00f6r kommunikation (kunder, leverant\u00f6rer, anst\u00e4llda, myndigheter om relevant).\r\n   - Definiera \u00e5terst\u00e4llningsm\u00e5l och resursbehov.\r\n\r\n6. **Implementeringsplan**\r\n   - Tilldela \u00e4garskap, tidslinjer och n\u00f6dv\u00e4ndig budget\/verktyg.\r\n   - Identifiera snabba vinster (0\u201330 dagar), \u00e5tg\u00e4rder p\u00e5 medell\u00e5ng sikt (30\u201390 dagar) och l\u00e5ngsiktiga investeringar (90\u2013180 dagar), och justera vid behov.\r\n\r\n7. **\u00d6vervakning, genomg\u00e5ng och uppdatering**\r\n   - Definiera ledande indikatorer\/KRI:er och en rutin f\u00f6r att ompr\u00f6va po\u00e4ng.\r\n   - Etablera en \u00e5terkommande granskningscykel och en lista \u00f6ver f\u00f6r\u00e4ndringstriggers (ny leverant\u00f6r, ny reglering, snabb tillv\u00e4xt, incident, etc.).\r\n   - Integrera feedback fr\u00e5n intressenter och dokumentera versionshantering.\r\n\r\n## INPUT\r\n- **F\u00f6retags\u00f6versikt:** [PRODUKTBESKRIVNING]\r\n- **Prim\u00e4rt anv\u00e4ndarsegment som betj\u00e4nas:** [MALGRUPP]\r\n- **Bransch\/sektor:** [BRANSCH]\r\n- **K\u00e4rnverksamhet (hur arbetet levereras):** [NYCKELVERKSAMHET]\r\n- **Prim\u00e4ra finansiella aktiviteter (int\u00e4kter, kostnader, kassafl\u00f6de, kredit, etc.):** [HUVUDSAKLIGA_FINANSIELLA_AKTIVITETER]\r\n- **Marknadskontext (konkurrens, efterfr\u00e5gef\u00f6rskjutningar, regleringar, makrofaktorer):** [MARKNADSMILJO]\r\n- **K\u00e4nda risker som redan finns p\u00e5 din radar:** [KANDA_RISKER]\r\n- **Aff\u00e4rsm\u00e5l (tillv\u00e4xt, l\u00f6nsamhet, expansion, stabilitet, exit, etc.):** [HUVUDMAL]\r\n- **Tillg\u00e4ngliga resurser f\u00f6r riskhantering (m\u00e4nniskor, verktyg, budget):** [TILLGANGLIGA_RESURSER]\r\n- **Planeringshorisont:** [TIDSRAM]\r\n- **Budgetintervall (om k\u00e4nt):** [BUDGET]\r\n- **\u00d6nskad tonalitet (t.ex. formell, pragmatisk, kortfattad):** [TONALITET]\r\n\r\n## OUTPUTSPECIFIKATION\r\nLeverera ett enda strukturerat dokument som inneh\u00e5ller:\r\n\r\n1. **{Executive Summary}**\r\n   - {Top Risks Snapshot}\r\n   - {Priority Recommendations}\r\n\r\n2. **{Business Profile & Assumptions}**\r\n   - {Context Summary}\r\n   - {Assumptions}\r\n   - {Open Questions}\r\n\r\n3. **{Risk Register (Ranked)}** (tabell)\r\n   - Kolumner: {Risk}, {Category}, {Root Cause}, {Likelihood Score}, {Impact Score}, {Overall Rating}, {Financial Exposure}, {Non-Financial Impact}, {Early Warning Indicators}, {Current Controls}, {Recommended Controls}, {Owner}, {Target Date}\r\n\r\n4. **{Risk Heat Map Summary}**\r\n   - {High Tier}, {Medium Tier}, {Low Tier} med kort motivering\r\n\r\n5. **{Mitigation Plan by Priority Tier}**\r\n   - {High-Priority Control Plan}\r\n   - {Medium-Priority Guardrails}\r\n   - {Low-Priority Monitoring Approach}\r\n\r\n6. **{Contingency Playbooks}** (f\u00f6r scenarierna med h\u00f6gst p\u00e5verkan)\r\n   - F\u00f6r varje: {Scenario}, {Trigger}, {Immediate Actions (0\u201324h)}, {Stabilization (1\u20137d)}, {Recovery (2\u20136w)}, {Comms Plan}, {Resources Needed}, {Decision Owner}\r\n\r\n7. **{Implementation Roadmap}**\r\n   - {0\u201330 Day Actions}\r\n   - {30\u201390 Day Actions}\r\n   - {90\u2013180 Day Actions}\r\n   - {Dependencies & Budget Notes}\r\n\r\n8. **{Monitoring & Review System}**\r\n   - {Key Risk Indicators}\r\n   - {Review Cadence}\r\n   - {Change Triggers}\r\n   - {Update Workflow & Versioning}\r\n\r\n## KVALITETSKONTROLLER\r\nInnan du slutf\u00f6r, verifiera:\r\n- T\u00e4ckning omfattar verksamhet\/operationer, ekonomi, compliance\/juridik, m\u00e4nniskor, teknik, leverant\u00f6rskedja, rykte och marknadskrafter.\r\n- Varje risk i {High Tier} har: en \u00e4gare, tidiga varningsindikatorer samt en konkret riskreducerings- och beredskaps-\/contingency-komponent.\r\n- Prioriteringen \u00e4r transparent (po\u00e4ngs\u00e4ttningsmetoden anges och till\u00e4mpas konsekvent).\r\n- Rekommendationerna matchar [TILLGANGLIGA_RESURSER] och [BUDGET] (erbjud niv\u00e5indelade alternativ om det \u00e4r begr\u00e4nsat).\r\n- Alla anv\u00e4ndarinput anv\u00e4nder **[VERSALER_MED_UNDERSCORES]** och alla AI-ifyllda placeholders anv\u00e4nder endast **{Title Case}**-format.";
    const variables = ["[PRODUKTBESKRIVNING]","[MALGRUPP]","[BRANSCH]","[NYCKELVERKSAMHET]","[HUVUDSAKLIGA_FINANSIELLA_AKTIVITETER]","[MARKNADSMILJO]","[KANDA_RISKER]","[HUVUDMAL]","[TILLGANGLIGA_RESURSER]","[TIDSRAM]","[BUDGET]","[TONALITET]","[VERSALER_MED_UNDERSCORES]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat med AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Ge en tydlig affärsbild först.</strong> Lägg till 5–8 rader om vad du säljer, din leveransmodell och dina begränsningar (kassa, personal, verktyg). Till exempel: ”B2C-varumärke på Shopify, team på 3 personer, skickar via 3PL, 70 000 USD/månad, hög returgrad, en annonskanal.” Den kontexten gör poängsättningen betydligt mer trovärdig.</li>


<li><strong>Tvinga fram siffror där de spelar roll.</strong> Även grova intervall förbättrar prioriteringen. Efter första resultatet, fråga: ”Lägg till band för ekonomisk exponering för de 10 största riskerna (t.ex. 1–5 tUSD, 5–25 tUSD, 25–100 tUSD+) och förklara antagandena bakom varje band.”</li>


<li><strong>Kör en ”bara topp-5” för tempo.</strong> Om du har ont om tid, gör en första körning och följ upp med: ”Koka ner detta till de fem mest brådskande riskerna och skriv en 30-dagars åtgärdsplan med ansvariga och veckovisa avstämningar.” Ärligt talat implementerar de flesta team mer när listan är kortare.</li>


<li><strong>Iterera genom att ändra riskaptit.</strong> När du har granskat rankingen, testa: ”Poängsätt om med en konservativ riskaptit (lägre tolerans för compliance- och kassaflödesrisk), och poängsätt sedan om med ett aggressivt tillväxtläge.” Skillnaden visar var ni gör ett strategiskt val, inte bara ”är försiktiga”.</li>


<li><strong>Gör KRI:er till en operativ rytm.</strong> Lämna inte indikatorerna som en lista. Följ upp med: ”Gör om KRI:erna till en dashboardspec på en sida: definition av måttet, datakälla, ansvarig, tröskelvärde och vilken åtgärd som ska tas när tröskeln bryts.” Då kan du lägga in det i ett kalkylark eller BI-verktyg samma dag.</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade promptar</h2>



<p>När du har kartlagt din riskstrategi hjälper de här promptarna dig att kommunicera den tydligt (internt och externt) med en starkare narrativ struktur:</p>



<p>Om du också behöver informera intressenter om ”vad som hände, vad vi lärde oss och vad som ändras nu”, hjälper <a href="https://nodenordic.se/prompts/skriv-en-banbrytande-featureartikel-med-denna-ai-prompt">Skriv en banbrytande featurestory med den här AI-prompten</a> dig att forma en engagerande, lättläst berättelse av röriga anteckningar. Den passar bra när du dokumenterar ett avbrott, en vändning eller en dyrköpt fix på en återkommande operativ risk.</p>



<p>För team som gör djupare interna genomgångar är <a href="https://nodenordic.se/prompts/skriv-ett-langt-nyhetsreportage-med-ai-prompt">Skriv ett långformat nyhetsreportage med den här AI-prompten</a> användbar när du vill ha en strukturerad berättelse som ändå är saklig. Det är en smart uppföljning när din riskplan behöver förankring mellan team och du vill förklara ”varför” bakom nya kontroller.</p>



<p>När en riskhändelse innehåller osäkerhet (bedrägerimönster, leverantörsproblem, policybrott) och du behöver samla fakta innan du agerar, kan <a href="https://nodenordic.se/prompts/skriv-ett-gravande-reportage-med-denna-ai-prompt">Skriv en granskande feature med den här AI-prompten</a> hjälpa dig att skissa på spår att följa och organisera bevis. Det ersätter inte juridik- eller HR-process, men det kan hjälpa dig att tänka klart och undvika luckor i tidslinjen.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/skriv-en-banbrytande-featureartikel-med-denna-ai-prompt">Skriv en banbrytande featurestory med den här AI-prompten</a>: Gör riskhändelser till tydliga berättelser.</li>


<li><a href="https://nodenordic.se/prompts/skriv-ett-langt-nyhetsreportage-med-ai-prompt">Skriv ett långformat nyhetsreportage med den här AI-prompten</a>: Bygg intern rapportering som håller för intressenter.</li>


<li><a href="https://nodenordic.se/prompts/skriv-ett-gravande-reportage-med-denna-ai-prompt">Skriv en granskande feature med den här AI-prompten</a>: Organisera granskning vid osäkra incidenter.</li>


<li><a href="https://nodenordic.se/prompts/skriv-en-gravande-reportageartikel-med-ai-prompt">AI-prompt för att skriva en granskande featureartikel</a>: Skapa ett strukturerat granskningsutkast.</li>


<li><a href="https://nodenordic.se/prompts/skapa-disposition-for-en-roman-med-ai-prompt">Bygg en skiss för en skönlitterär bok med den här AI-prompten</a>: Träna scenariotänk med plotbågar.</li>

</ul>

</div>

<div class="faq-section">

<h2 class="wp-block-heading">Vanliga frågor</h2>


<div class="faq-item">
<span class="question">Vilka roller har störst nytta av den här AI-prompten för riskstrategi?</span>

<p class="answer"><strong>Operativa chefer</strong> använder den för att identifiera sköra steg i leverans, tjänsteleverans och leverantörsberoenden, och sedan göra dem till kontroller som någon faktiskt äger. <strong>Grundare och vd:ar</strong> får en prioriterad bild av risk i stället för en spretig oroslista, vilket gör avvägningar (rekrytera, automatisera, ändra policy) lättare att motivera. <strong>Ekonomiansvariga</strong> har nytta av sannolikhet × påverkan-poängsättningen och exponeringsintervall, särskilt när kassaflödet är pressat och en störning kan få dominoeffekt. <strong>Fractional COO:er och konsulter</strong> använder den för att standardisera riskgenomgångar hos flera kunder utan att låtsas att det är en full revision.</p>

</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för riskstrategi?</span>

<p class="answer"><strong>E-handelsvarumärken</strong> använder den för att stresstesta risk i leveranskedjan, chargebacks, bedrägerier, 3PL-prestanda och ryktesrisk vid leveransförseningar. Den är särskilt användbar när en betald kanal driver största delen av intäkterna och en plattformsförändring snabbt kan slå hårt. <strong>Lokala tjänsteföretag</strong> använder den för personalrisk (uteblivanden, rekryteringsglapp), grunder i regelefterlevnad och operativ kontinuitet när utrustning går sönder eller en nyckeltekniker är borta. <strong>SaaS-bolag</strong> använder den för teknik- och säkerhetsrisk, playbooks för drifttid och incidenthantering samt tydliga KRI:er som misslyckade betalningar eller trösklar för supportköer. <strong>Professionella tjänsteföretag</strong> använder den för att hantera scope creep, kundkoncentration, regulatorisk exponering och leveranskapacitet, samtidigt som man är realistisk kring ett litet teams bandbredd.</p>

</div>

<div class="faq-item">
<span class="question">Varför ger grundläggande AI-promptar för att bygga en riskstrategi för småföretag svaga resultat?</span>

<p class="answer">En typisk prompt som ”Skriv en riskhanteringsplan för mitt småföretag” misslyckas eftersom den: saknar dina faktiska begränsningar (bemanning, kassa, verktyg), inte ger någon prioriteringsmetod som sannolikhet × påverkan-poängsättning, ignorerar andrahandsrisker som syns genom SWOT/PESTLE-skanning, ger generiska råd i stället för kontroller som går att fatta beslut på med ansvariga, och missar avbrottsplaybook/KRI-kadens som håller planen levande efter första veckan. Du får ett långt dokument som känns ansvarsfullt, men som inte förändrar vad någon gör på måndag.</p>

</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här riskstrategiprompten för min specifika situation?</span>

<p class="answer">Ja. Börja med att klistra in ett kort kontextblock innan du kör den: din affärsmodell, teamstorlek, kärnsystem (POS, Shopify, QuickBooks, CRM), viktigaste intäktsdrivare och eventuella nyliga incidenter. Ange sedan din risktolerans (”Vi accepterar marknadsrisk men har noll tolerans för compliance-böter” eller ”Kassaflöde är den viktigaste begränsningen”). En bra uppföljning är: ”Skriv om planen för en 90-dagarshorisont och märk varje åtgärd som Låg/Medel/Hög insats med ett uppskattat kostnadsintervall.” Om du lämnar detaljerna vaga kommer prompten ändå att fortsätta, men du får resultat som bygger tungt på antaganden.</p>

</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här riskstrategiprompten?</span>

<p class="answer">Det största misstaget är att lämna affärskontexten för vag – i stället för ”ett litet detaljhandelsföretag”, prova ”specialiserad livsmedelsbutik på en plats, 1,2 MUSD/år, 12 anställda, hög helgtrafik, två huvudleverantörer”. Ett annat vanligt fel är att ignorera begränsningar; ”gör ett fullständigt ISO-program” är orealistiskt, medan ”två timmar per vecka och 500 USD/månad i verktygsbudget” ger användbara kontroller. Många hoppar också över incidenthistorik, trots att ”vi hade två ransomwareförsök och ett lönefel förra kvartalet” snabbt ändrar prioriteringslistan. Slutligen behandlar team resultatet som ett dokument i stället för en rutin; om du inte tillsätter ansvariga och väljer en uppföljningsrytm för KRI:er, blir det inget som håller.</p>

</div>

<div class="faq-item">
<span class="question">Vem ska INTE använda den här riskstrategiprompten?</span>

<p class="answer">Den här prompten är inte optimal för reglerade företag som kräver formella riskramverk, revisioner eller juridiskt godkännande som del av regelefterlevnaden. Den passar också dåligt om du vill ha en engångsmall och inte har någon avsikt att följa upp KRI:er eller uppdatera registret när verksamheten förändras. Och om du ännu inte har validerat ditt kärnerbjudande kan du få mer värde av att fokusera på product–market fit innan du formaliserar riskkontroller. I de fallen: börja med en lätt checklista och kom tillbaka när du arbetar i upprepningsbara cykler.</p>

</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har störst nytta av den här AI-prompten för riskstrategi?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Operativa chefer använder den för att identifiera sköra steg i leverans, tjänsteleverans och leverantörsberoenden, och sedan göra dem till kontroller som någon faktiskt äger. Grundare och vd:ar får en prioriterad bild av risk i stället för en spretig oroslista, vilket gör avvägningar (rekrytera, automatisera, ändra policy) lättare att motivera. Ekonomiansvariga har nytta av sannolikhet × påverkan-poängsättningen och exponeringsintervall, särskilt när kassaflödet är pressat och en störning kan få dominoeffekt. Fractional COO:er och konsulter använder den för att standardisera riskgenomgångar hos flera kunder utan att låtsas att det är en full revision."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för riskstrategi?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "E-handelsvarumärken använder den för att stresstesta risk i leveranskedjan, chargebacks, bedrägerier, 3PL-prestanda och ryktesrisk vid leveransförseningar. Den är särskilt användbar när en betald kanal driver största delen av intäkterna och en plattformsförändring snabbt kan slå hårt. Lokala tjänsteföretag använder den för personalrisk (uteblivanden, rekryteringsglapp), grunder i regelefterlevnad och operativ kontinuitet när utrustning går sönder eller en nyckeltekniker är borta. SaaS-bolag använder den för teknik- och säkerhetsrisk, playbooks för drifttid och incidenthantering samt tydliga KRI:er som misslyckade betalningar eller trösklar för supportköer. Professionella tjänsteföretag använder den för att hantera scope creep, kundkoncentration, regulatorisk exponering och leveranskapacitet, samtidigt som man är realistisk kring ett litet teams bandbredd."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger grundläggande AI-promptar för att bygga en riskstrategi för småföretag svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som ”Skriv en riskhanteringsplan för mitt småföretag” misslyckas eftersom den: saknar dina faktiska begränsningar (bemanning, kassa, verktyg), inte ger någon prioriteringsmetod som sannolikhet × påverkan-poängsättning, ignorerar andrahandsrisker som syns genom SWOT/PESTLE-skanning, ger generiska råd i stället för kontroller som går att fatta beslut på med ansvariga, och missar avbrottsplaybook/KRI-kadens som håller planen levande efter första veckan. Du får ett långt dokument som känns ansvarsfullt, men som inte förändrar vad någon gör på måndag."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här riskstrategiprompten för min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja. Börja med att klistra in ett kort kontextblock innan du kör den: din affärsmodell, teamstorlek, kärnsystem (POS, Shopify, QuickBooks, CRM), viktigaste intäktsdrivare och eventuella nyliga incidenter. Ange sedan din risktolerans (”Vi accepterar marknadsrisk men har noll tolerans för compliance-böter” eller ”Kassaflöde är den viktigaste begränsningen”). En bra uppföljning är: ”Skriv om planen för en 90-dagarshorisont och märk varje åtgärd som Låg/Medel/Hög insats med ett uppskattat kostnadsintervall.” Om du lämnar detaljerna vaga kommer prompten ändå att fortsätta, men du får resultat som bygger tungt på antaganden."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här riskstrategiprompten?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att lämna affärskontexten för vag – i stället för ”ett litet detaljhandelsföretag”, prova ”specialiserad livsmedelsbutik på en plats, 1,2 MUSD/år, 12 anställda, hög helgtrafik, två huvudleverantörer”. Ett annat vanligt fel är att ignorera begränsningar; ”gör ett fullständigt ISO-program” är orealistiskt, medan ”två timmar per vecka och 500 USD/månad i verktygsbudget” ger användbara kontroller. Många hoppar också över incidenthistorik, trots att ”vi hade två ransomwareförsök och ett lönefel förra kvartalet” snabbt ändrar prioriteringslistan. Slutligen behandlar team resultatet som ett dokument i stället för en rutin; om du inte tillsätter ansvariga och väljer en uppföljningsrytm för KRI:er, blir det inget som håller."
      }
    },
    {
      "@type": "Question",
      "name": "Vem ska INTE använda den här riskstrategiprompten?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten är inte optimal för reglerade företag som kräver formella riskramverk, revisioner eller juridiskt godkännande som del av regelefterlevnaden. Den passar också dåligt om du vill ha en engångsmall och inte har någon avsikt att följa upp KRI:er eller uppdatera registret när verksamheten förändras. Och om du ännu inte har validerat ditt kärnerbjudande kan du få mer värde av att fokusera på product–market fit innan du formaliserar riskkontroller. I de fallen: börja med en lätt checklista och kom tillbaka när du arbetar i upprepningsbara cykler."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">

<p>Risk försvinner inte bara för att du har mycket att göra. Sätt struktur runt den, prioritera det som spelar roll och gå framåt med färre överraskningar. Klistra in prompten i ChatGPT, besvara förtydligande frågor och bygg din första riskplan som är redo för beslut redan idag.</p>

</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/bygg-en-riskstrategi-for-smaforetag-med-ai-prompt/">Bygg en riskstrategi för småföretag med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Skapa en FLSA-forensikrapport för compliance</title>
		<link>https://nodenordic.se/prompts/skapa-en-flsa-forensikrapport-for-compliance/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=skapa-en-flsa-forensikrapport-for-compliance</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:53:02 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5003044</guid>

					<description><![CDATA[<p>Granskning från DOL närmar sig – den här AI-prompten skapar en FLSA-forensikrapport med källhänvisningar, exponeringsintervall och åtgärdssteg.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/skapa-en-flsa-forensikrapport-for-compliance/">Skapa en FLSA-forensikrapport för compliance</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: FLSA compliance forensics report -->

<div class="hook-introduction">

<p>Du kan inte “magkänsla” dig fram till löne- och arbetstidsrisk. Inte med DOL, inte under due diligence och definitivt inte när löneunderlag inte går att stämma av snyggt mellan system. Det vanliga utfallet är förutsägbart: många åsikter, för lite bevisning och en åtgärdsplan som faller så fort någon frågar: ”Baserat på vad?”</p>



<p>Den här <strong>FLSA compliance forensics report</strong> är byggd för <strong>HR-ledare</strong> som vill stresstesta undantag (exemptions) och övertidsexponering inför en styrelseuppdatering, <strong>deal teams</strong> som behöver en regulatorredo riskberättelse inför ett förvärv och <strong>operations executives</strong> som måste förvandla rörig tidrapportering och lönepraxis till en prioriterad åtgärdslista. Resultatet är en dokumentationsdriven forensisk rapport med DOL-triggerrisker, FLSA-hänvisningar, exponeringsintervall och en steg-för-steg-åtgärdsplan kopplad till de underlag du tillhandahåller.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Det här får du</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Återger faktabilden från dina löneunderlag, klassificeringar och policydokument i en bevis-först-sammanfattning av “förförståelse inför analys”.</li>
          <li>Skapar en intake- och antagandelogg som tydliggör saknade tidsperioder, ofullständiga dataset och rimliga slutsatser som rapporten måste luta sig mot.</li>
          <li>Flaggar sannolika triggers för DOL-granskning baserat på observerbara datapunkter (till exempel inkonsekvent hantering av övertid, tunt tidunderlag eller svaga signaler kring undantag).</li>
          <li>Bygger iakttagelser som kopplar varje potentiellt problem till en FLSA-hänvisning och ramar uttryckligen in slutsatser som avvaktande juridisk granskning snarare än “slutgiltig juridisk rådgivning”.</li>
          <li>Prioriterar åtgärder genom att kombinera “sannolikhet för granskning” och uppskattad ekonomisk exponering, så att du får en åtgärdsplan som går att genomföra snabbt.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du går in i diligence och behöver ett försvarbart riskunderlag för löner och arbetstid, inte en generisk compliance-checklista.</li>
          <li>Du har löneexporter och tidunderlag, men ledningen är oense om hur stort problemet är och vad som ska åtgärdas först.</li>
          <li>Ett klagomål, facklig aktivitet eller plötslig personalomsättning har ökat sannolikheten för DOL-granskning, och dokumentationen måste skärpas omedelbart.</li>
          <li>Du misstänker att övertids-/regular-rate-beräkningar blir fel när bonusar, provisioner eller tillägg slår igenom i lönekörningen, och du behöver ett strukturerat sätt att testa detta.</li>
          <li>Ditt team måste fatta åtgärdsbeslut under tidspress, med begränsad tolerans för “best practice” som inte är kopplad till bevisning.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En regulatorredo forensisk rapport med en executive summary och en numrerad sektion med iakttagelser.</li>
           <li>En dokumenterad bevis- och antagandelogg som listar vad som tillhandahållits, vad som saknas och hur glapp påverkar säkerheten i slutsatserna.</li>
           <li>Ett prioriterat riskregister som rangordnar frågor efter sannolikhet för DOL-trigger och uppskattat exponeringsintervall.</li>
           <li>En åtgärdsplan med sekvenserade aktiviteter (nu/nästa/senare) utformad för snabb genomföring före förvärv.</li>
           <li>En hänvisningsbaserad, appendixliknande referensuppsättning som du kan lämna till juridiskt ombud för granskning och förfining.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: byggare för regulatorredo FLSA-forensikrapport</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[LONEREGISTER]</code></td>
                                <td class="var-desc">
                                    Ange detaljerade löneuppgifter, inklusive arbetade timmar, utbetald lön, bonusar, avdrag och andra ersättningsdetaljer för berörda medarbetare.                                    <div class="var-example">Till exempel: "Veckovisa lönerapporter för samtliga icke-undantagna anställda från januari till juni 2023, inklusive tidrapporter, lönespecifikationer och avdragsloggar."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[LONEREGISTER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[KLASSIFICERINGSDATA]</code></td>
                                <td class="var-desc">
                                    Inkludera information om medarbetares klassificering, såsom undantagen vs icke-undantagen status, befattningar samt tillhörande arbetsuppgifter eller lönenivåer.                                    <div class="var-example">Till exempel: "Kalkylblad med befattningar, undantagsstatus, lönenivåer och korta beskrivningar av arbetsuppgifter för all personal per Q2 2023."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[KLASSIFICERINGSDATA]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[POLICYDOKUMENT]</code></td>
                                <td class="var-desc">
                                    Tillhandahåll företagets policys som rör efterlevnad av regler för lön och arbetstid, inklusive tidrapportering, övertid, avdrag och rutiner för dokumentation och arkivering.                                    <div class="var-example">Till exempel: "Avsnitt i personalhandboken om tidsregistrering, processer för godkännande av övertid och policyer för löneavdrag, uppdaterade 2022."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[POLICYDOKUMENT]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[MALGRUPP]</code></td>
                                <td class="var-desc">
                                    Beskriv den avsedda målgruppen för regelefterlevnadsrapporten, inklusive deras roller, viktigaste frågeställningar och beslutsmandat.                                    <div class="var-example">Till exempel: "Företagsledning som förbereder en möjlig företagsförvärv, inklusive CFO och HR-direktör, med fokus på att minska regelefterlevnadsrisker."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[MALGRUPP]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BAKGRUND]</code></td>
                                <td class="var-desc">
                                    Ge bakgrund om företagets situation, inklusive bransch, storlek, tidsplan för förvärv samt eventuella kända brister i regelefterlevnad.                                    <div class="var-example">Till exempel: "Medelstort tillverkningsföretag med 200 anställda som förbereder ett förvärv under Q4 2023, med tidigare farhågor kring övertidsberäkningar."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[BAKGRUND]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TIDSPERIOD]</code></td>
                                <td class="var-desc">
                                    Ange tidsperioden för analysen, inklusive start- och slutdatum för underlaget och granskningen av regelefterlevnad.                                    <div class="var-example">Till exempel: "1 januari 2023 till 30 juni 2023."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[TIDSPERIOD]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[HUVUDMAL]</code></td>
                                <td class="var-desc">
                                    Ange rapportens huvudsakliga mål, med fokus på vad användaren vill uppnå eller få utrett.                                    <div class="var-example">Till exempel: "Identifiera och åtgärda potentiella FLSA-överträdelser för att minska finansiell exponering och säkerställa regelefterlevnad inför ett förvärv."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[HUVUDMAL]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[VERSALER_MED_UNDERSCORES]</code></td>
                                <td class="var-desc">
                                    Ange text i versaler med understreck mellan orden, vanligtvis för variabel- eller kategorinamn.                                    <div class="var-example">Till exempel: "LON_REGELEFTERLEVNADSRAPPORT"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[VERSALER_MED_UNDERSCORES]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INPUTS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">OUTPUTSPECIFIKATION</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">1) Sammanfattning för ledning</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">2) Iakttagelser efter allvarlighetsgrad</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">3) Riskkvantifiering (med tabeller)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">4) Åtgärdsplan (sekvenserad)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">5) Dataförfrågningar &amp; följdfrågor (vid behov)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Ta fram en regulator-redo forensisk rapport om efterlevnad av Fair Labor Standards Act (FLSA) för lön och arbetstid som identifierar sannolika utlösare för utredning från Department of Labor (DOL), uppskattar finansiell exponering och lägger fram en prioriterad åtgärdsplan som snabbt kan genomföras inför ett potentiellt förvärv.

## PERSONA
Agera som ansvarig för forensisk granskning av efterlevnad av lön och arbetstid, med tidigare erfarenhet som DOL-tillsynsutredare (cirka 15 år) med fokus på fall av lönestöld och brister i dokumentation/registrering. Kommunicera i en kärnfull, bevis-först-stil: praktisk, skeptisk och detaljfokuserad. Utgå från att ledningen historiskt har tonat ned problem; du ska vara tydlig, specifik och dokumentationsdriven.

## BEGRÄNSNINGAR
- Basera slutsatser enbart på materialet som tillhandahålls i **[LONEREGISTER]**, **[KLASSIFICERINGSDATA]** och **[POLICYDOKUMENT]**.
- Behandla alla frågor som **potentiella** överträdelser i väntan på juridisk granskning; presentera inte juridisk rådgivning som definitiv.
- Undvik generiska ”best practices”. Varje iakttagelse ska vara kopplad till en observerbar datapunkt och inkludera en FLSA-hänvisning.
- Prioritera sådant som mest sannolikt triggar DOL-granskning och den högsta exponeringen i dollar.
- **Vad detta INTE är**
  - Inte en ersättning för advokatgranskning eller formella juridiska utlåtanden.
  - Inte en utredning av odokumenterade/muntliga arbetssätt utöver vad handlingarna rimligen indikerar.
  - Inte en fullständig skatterevisionsgranskning utanför lön/arbetstid och FLSA-närliggande krav på dokumentbevarande.

## PROCESS
1. **Förförståelse (obligatoriskt):** I 4–7 punkter, återge din förståelse av bolagets situation, materialet som tillhandahållits och vad du kommer att leverera.
2. **Bevisinhämtning &amp; antagandelogg:** Notera vilka dokument/tidsperioder som finns, vad som saknas och vilka antaganden du måste göra.
3. **Testning av FLSA-kontroller (organisera arbetet, inte output):**
   - Bedömning av undantag (exempt): lönebas/nivå + indikatorer i arbetsuppgifter.
   - Ordinarie timlön (regular rate) + övertidsberäkningar (bonusar, provisioner, tillägg, icke-diskretionär ersättning).
   - Integritet i tidrapportering (fullständighet, ändringar, avrundning, signaler på ”time shaving”, indikatorer på arbete utanför klockan).
   - Kontroll av faktisk minimilön (inklusive avdrag/krediter, samt hantering av dricks om det förekommer).
   - Tillräcklighet i dokumentbevarande (löneregister vs underlag/stödjande dokument).
4. **Risktriage:** Sortera iakttagelser i: omedelbara DOL-triggers, återkommande/mönsterproblem och brister i dokumentation/registrering.
5. **Exponeringsmodellering:** Uppskatta retroaktiv lön (back wages), risk för liquidated damages och rimliga intervall för civil money penalties baserat på tillhandahållna data; visa formler och antaganden.
6. **Åtgärdsdesign:** Ge en sekvenserad handlingsplan med steg för ”gör nu / nästa / stabilisera” som syftar till att tillfredsställa tillsynsmyndigheter samtidigt som ytterligare ansvar/expansion av exponering begränsas.
7. **Hantering av edge cases (obligatoriskt):**
   - Om någon input är ofullständig, tvetydig eller motsägelsefull, ställ riktade följdfrågor och ge en ”provisorisk” bedömning baserat på angivna antaganden.
   - Om inga genomförbara beräkningar kan göras, ge en metodik och en checklista för dataförfrågan i stället för att gissa.

## INPUTS
- **Primärt användarsegment:** [MALGRUPP]
- **Bolags- / affärskontext:** [BAKGRUND]
- **Lönedata (register, rapporter, råexporter):** [LONEREGISTER]
- **Arbetsbeskrivningar + undantagsbedömningar:** [KLASSIFICERINGSDATA]
- **Handböcker, tidrapporteringspolicys, rutiner:** [POLICYDOKUMENT]
- **Tidsperiod att prioritera (t.ex. senaste 2–3 åren):** [TIDSPERIOD]
- **Primärt mål (t.ex. pre-DOL-beredskap, upprensning inför förvärv):** [HUVUDMAL]

## OUTPUTSPECIFIKATION
Leverera en strukturerad rapport med tydliga rubriker/underrubriker och använd tabeller för riskpoängsättning och beräkningar. Använd punktlistor för överträdelser och numrerade steg för åtgärder. **Fetmarkera allt som kräver omedelbar åtgärd.** Ange hänvisningar i parentes för varje överträdelse.

### 1) Sammanfattning för ledning
- {Top Critical Findings} (3–7 punkter, **fetmarkera det mest brådskande**)
- {Fastest Risk-Reduction Moves} (vad som kan korrigeras inom ~10–14 dagar)
- {Biggest Exposure Drivers} (vad som skapar störst risk för retroaktiv lön/skadestånd)

### 2) Iakttagelser efter allvarlighetsgrad

#### A. **Kritiska överträdelser (hög sannolikhet för DOL-åtgärd)**
För varje iakttagelse, inkludera:
- {Finding Title}
- {What the Records Show} (specifika bevisreferenser)
- {Why It’s a Problem} (FLSA-hänvisning)
- {Who/Which Roles Impacted}
- {Estimated Exposure} (om beräkningsbart)
- {Immediate Containment Action}

Kritiska kategorier att utvärdera minst:
- Felklassificering: exempt vs non-exempt
- Underbetalning av övertid / fel i regular-rate
- Brister i minimilön
- Saknade, ändrade eller opålitliga tids-/löneregister

#### B. Systemiska / mönsterrelaterade problem (signaler om återkommande fel)
Täck, där det stöds av handlingarna:
- Indikatorer på arbete utanför klockan och signaler om arbete före/efter pass
- Felaktiga avdrag som påverkar regular rate eller minimilön
- Comp time i privat sektor eller felaktiga arbetssätt
- Efterlevnadsproblem kring måltids-/rastavdrag (om policy/underlag visar avdrag eller autoavdrag)

#### C. Brister i dokumentation &amp; registerföring
Adressera luckor såsom:
- Saknade tidkort/ändringar utan revisionsspår
- Policys som motsäger praxis eller saknar bevis på efterlevnad/tillämpning
- Brister i bevarande (löneregister vs stödjande dokumentation)

### 3) Riskkvantifiering (med tabeller)
Tillhandahåll:
- **Tabell: Risk register**
  - Kolumner: {Risk ID}, {Issue}, {Severity}, {Likelihood}, {Employee Groups}, {Time Period}, {Key Evidence}, {Citation}, {Estimated Exposure Range}, {Fix Priority}
- **Tabell: Exponeringssammanfattning**
  - {Back Wages Estimate}, {Liquidated Damages Estimate}, {Potential Penalty Range}, {Assumptions}
- Visa beräkningsnoteringar (komponenter i regular rate, exempelberäkningar per anställd, extrapoleringslogik om den används).

### 4) Åtgärdsplan (sekvenserad)
Ge en numrerad plan uppdelad i:
- **Fas 1 (0–12 dagar):** inneslutning + stoppa-blödningen-åtgärder
- **Fas 2 (nästa 2–5 veckor):** korrigeringar + metod för retroaktiv utbetalning + chefsutbildning
- **Fas 3 (stabilisering):** uppföljning, kadens för egenkontroll, förstärkning av dokumentation

Inkludera:
- {Policy Changes Needed}
- {Timekeeping / Payroll System Config Changes}
- {Employee &amp; Manager Communication Draft Points} (punkter på klarspråk, icke-medgivande ton)
- {Internal Self-Audit Procedure} (urvalsplan, frekvens, ansvariga)

### 5) Dataförfrågningar &amp; följdfrågor (vid behov)
Lista:
- {Missing Artifacts}
- {Clarifying Questions}
- {Exact Reports/Exports Needed} (namnge generiskt, t.ex. ”time edit log”, ”earning codes list”, ”job code history”)

## KVALITETSKONTROLLER
Innan du slutför, verifiera:
1. Varje överträdelse inkluderar minst en konkret indikator baserad på register/handlingar och en FLSA-hänvisning.
2. Rapporten separerar tydligt **kritiska**, **systemiska** och **dokumentations**-relaterade problem.
3. Exponeringsuppskattningar visar antaganden och formler; inga oförklarade siffror.
4. Åtgärdssteg är genomförbara, sekvenserade och kopplade till identifierade risker.
5. Alla användarinputs förekommer endast som **[VERSALER_MED_UNDERSCORES]** och alla AI-ifyllda fält använder **{Title Case}** placeholders.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nTa fram en regulator-redo forensisk rapport om efterlevnad av Fair Labor Standards Act (FLSA) f\u00f6r l\u00f6n och arbetstid som identifierar sannolika utl\u00f6sare f\u00f6r utredning fr\u00e5n Department of Labor (DOL), uppskattar finansiell exponering och l\u00e4gger fram en prioriterad \u00e5tg\u00e4rdsplan som snabbt kan genomf\u00f6ras inf\u00f6r ett potentiellt f\u00f6rv\u00e4rv.\r\n\r\n## PERSONA\r\nAgera som ansvarig f\u00f6r forensisk granskning av efterlevnad av l\u00f6n och arbetstid, med tidigare erfarenhet som DOL-tillsynsutredare (cirka 15 \u00e5r) med fokus p\u00e5 fall av l\u00f6nest\u00f6ld och brister i dokumentation\/registrering. Kommunicera i en k\u00e4rnfull, bevis-f\u00f6rst-stil: praktisk, skeptisk och detaljfokuserad. Utg\u00e5 fr\u00e5n att ledningen historiskt har tonat ned problem; du ska vara tydlig, specifik och dokumentationsdriven.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- Basera slutsatser enbart p\u00e5 materialet som tillhandah\u00e5lls i **[LONEREGISTER]**, **[KLASSIFICERINGSDATA]** och **[POLICYDOKUMENT]**.\r\n- Behandla alla fr\u00e5gor som **potentiella** \u00f6vertr\u00e4delser i v\u00e4ntan p\u00e5 juridisk granskning; presentera inte juridisk r\u00e5dgivning som definitiv.\r\n- Undvik generiska \u201dbest practices\u201d. Varje iakttagelse ska vara kopplad till en observerbar datapunkt och inkludera en FLSA-h\u00e4nvisning.\r\n- Prioritera s\u00e5dant som mest sannolikt triggar DOL-granskning och den h\u00f6gsta exponeringen i dollar.\r\n- **Vad detta INTE \u00e4r**\r\n  - Inte en ers\u00e4ttning f\u00f6r advokatgranskning eller formella juridiska utl\u00e5tanden.\r\n  - Inte en utredning av odokumenterade\/muntliga arbetss\u00e4tt ut\u00f6ver vad handlingarna rimligen indikerar.\r\n  - Inte en fullst\u00e4ndig skatterevisionsgranskning utanf\u00f6r l\u00f6n\/arbetstid och FLSA-n\u00e4rliggande krav p\u00e5 dokumentbevarande.\r\n\r\n## PROCESS\r\n1. **F\u00f6rf\u00f6rst\u00e5else (obligatoriskt):** I 4\u20137 punkter, \u00e5terge din f\u00f6rst\u00e5else av bolagets situation, materialet som tillhandah\u00e5llits och vad du kommer att leverera.\r\n2. **Bevisinh\u00e4mtning & antagandelogg:** Notera vilka dokument\/tidsperioder som finns, vad som saknas och vilka antaganden du m\u00e5ste g\u00f6ra.\r\n3. **Testning av FLSA-kontroller (organisera arbetet, inte output):**\r\n   - Bed\u00f6mning av undantag (exempt): l\u00f6nebas\/niv\u00e5 + indikatorer i arbetsuppgifter.\r\n   - Ordinarie timl\u00f6n (regular rate) + \u00f6vertidsber\u00e4kningar (bonusar, provisioner, till\u00e4gg, icke-diskretion\u00e4r ers\u00e4ttning).\r\n   - Integritet i tidrapportering (fullst\u00e4ndighet, \u00e4ndringar, avrundning, signaler p\u00e5 \u201dtime shaving\u201d, indikatorer p\u00e5 arbete utanf\u00f6r klockan).\r\n   - Kontroll av faktisk minimil\u00f6n (inklusive avdrag\/krediter, samt hantering av dricks om det f\u00f6rekommer).\r\n   - Tillr\u00e4cklighet i dokumentbevarande (l\u00f6neregister vs underlag\/st\u00f6djande dokument).\r\n4. **Risktriage:** Sortera iakttagelser i: omedelbara DOL-triggers, \u00e5terkommande\/m\u00f6nsterproblem och brister i dokumentation\/registrering.\r\n5. **Exponeringsmodellering:** Uppskatta retroaktiv l\u00f6n (back wages), risk f\u00f6r liquidated damages och rimliga intervall f\u00f6r civil money penalties baserat p\u00e5 tillhandah\u00e5llna data; visa formler och antaganden.\r\n6. **\u00c5tg\u00e4rdsdesign:** Ge en sekvenserad handlingsplan med steg f\u00f6r \u201dg\u00f6r nu \/ n\u00e4sta \/ stabilisera\u201d som syftar till att tillfredsst\u00e4lla tillsynsmyndigheter samtidigt som ytterligare ansvar\/expansion av exponering begr\u00e4nsas.\r\n7. **Hantering av edge cases (obligatoriskt):**\r\n   - Om n\u00e5gon input \u00e4r ofullst\u00e4ndig, tvetydig eller mots\u00e4gelsefull, st\u00e4ll riktade f\u00f6ljdfr\u00e5gor och ge en \u201dprovisorisk\u201d bed\u00f6mning baserat p\u00e5 angivna antaganden.\r\n   - Om inga genomf\u00f6rbara ber\u00e4kningar kan g\u00f6ras, ge en metodik och en checklista f\u00f6r dataf\u00f6rfr\u00e5gan i st\u00e4llet f\u00f6r att gissa.\r\n\r\n## INPUTS\r\n- **Prim\u00e4rt anv\u00e4ndarsegment:** [MALGRUPP]\r\n- **Bolags- \/ aff\u00e4rskontext:** [BAKGRUND]\r\n- **L\u00f6nedata (register, rapporter, r\u00e5exporter):** [LONEREGISTER]\r\n- **Arbetsbeskrivningar + undantagsbed\u00f6mningar:** [KLASSIFICERINGSDATA]\r\n- **Handb\u00f6cker, tidrapporteringspolicys, rutiner:** [POLICYDOKUMENT]\r\n- **Tidsperiod att prioritera (t.ex. senaste 2\u20133 \u00e5ren):** [TIDSPERIOD]\r\n- **Prim\u00e4rt m\u00e5l (t.ex. pre-DOL-beredskap, upprensning inf\u00f6r f\u00f6rv\u00e4rv):** [HUVUDMAL]\r\n\r\n## OUTPUTSPECIFIKATION\r\nLeverera en strukturerad rapport med tydliga rubriker\/underrubriker och anv\u00e4nd tabeller f\u00f6r riskpo\u00e4ngs\u00e4ttning och ber\u00e4kningar. Anv\u00e4nd punktlistor f\u00f6r \u00f6vertr\u00e4delser och numrerade steg f\u00f6r \u00e5tg\u00e4rder. **Fetmarkera allt som kr\u00e4ver omedelbar \u00e5tg\u00e4rd.** Ange h\u00e4nvisningar i parentes f\u00f6r varje \u00f6vertr\u00e4delse.\r\n\r\n### 1) Sammanfattning f\u00f6r ledning\r\n- {Top Critical Findings} (3\u20137 punkter, **fetmarkera det mest br\u00e5dskande**)\r\n- {Fastest Risk-Reduction Moves} (vad som kan korrigeras inom ~10\u201314 dagar)\r\n- {Biggest Exposure Drivers} (vad som skapar st\u00f6rst risk f\u00f6r retroaktiv l\u00f6n\/skadest\u00e5nd)\r\n\r\n### 2) Iakttagelser efter allvarlighetsgrad\r\n\r\n#### A. **Kritiska \u00f6vertr\u00e4delser (h\u00f6g sannolikhet f\u00f6r DOL-\u00e5tg\u00e4rd)**\r\nF\u00f6r varje iakttagelse, inkludera:\r\n- {Finding Title}\r\n- {What the Records Show} (specifika bevisreferenser)\r\n- {Why It\u2019s a Problem} (FLSA-h\u00e4nvisning)\r\n- {Who\/Which Roles Impacted}\r\n- {Estimated Exposure} (om ber\u00e4kningsbart)\r\n- {Immediate Containment Action}\r\n\r\nKritiska kategorier att utv\u00e4rdera minst:\r\n- Felklassificering: exempt vs non-exempt\r\n- Underbetalning av \u00f6vertid \/ fel i regular-rate\r\n- Brister i minimil\u00f6n\r\n- Saknade, \u00e4ndrade eller op\u00e5litliga tids-\/l\u00f6neregister\r\n\r\n#### B. Systemiska \/ m\u00f6nsterrelaterade problem (signaler om \u00e5terkommande fel)\r\nT\u00e4ck, d\u00e4r det st\u00f6ds av handlingarna:\r\n- Indikatorer p\u00e5 arbete utanf\u00f6r klockan och signaler om arbete f\u00f6re\/efter pass\r\n- Felaktiga avdrag som p\u00e5verkar regular rate eller minimil\u00f6n\r\n- Comp time i privat sektor eller felaktiga arbetss\u00e4tt\r\n- Efterlevnadsproblem kring m\u00e5ltids-\/rastavdrag (om policy\/underlag visar avdrag eller autoavdrag)\r\n\r\n#### C. Brister i dokumentation & registerf\u00f6ring\r\nAdressera luckor s\u00e5som:\r\n- Saknade tidkort\/\u00e4ndringar utan revisionssp\u00e5r\r\n- Policys som mots\u00e4ger praxis eller saknar bevis p\u00e5 efterlevnad\/till\u00e4mpning\r\n- Brister i bevarande (l\u00f6neregister vs st\u00f6djande dokumentation)\r\n\r\n### 3) Riskkvantifiering (med tabeller)\r\nTillhandah\u00e5ll:\r\n- **Tabell: Risk register**\r\n  - Kolumner: {Risk ID}, {Issue}, {Severity}, {Likelihood}, {Employee Groups}, {Time Period}, {Key Evidence}, {Citation}, {Estimated Exposure Range}, {Fix Priority}\r\n- **Tabell: Exponeringssammanfattning**\r\n  - {Back Wages Estimate}, {Liquidated Damages Estimate}, {Potential Penalty Range}, {Assumptions}\r\n- Visa ber\u00e4kningsnoteringar (komponenter i regular rate, exempelber\u00e4kningar per anst\u00e4lld, extrapoleringslogik om den anv\u00e4nds).\r\n\r\n### 4) \u00c5tg\u00e4rdsplan (sekvenserad)\r\nGe en numrerad plan uppdelad i:\r\n- **Fas 1 (0\u201312 dagar):** inneslutning + stoppa-bl\u00f6dningen-\u00e5tg\u00e4rder\r\n- **Fas 2 (n\u00e4sta 2\u20135 veckor):** korrigeringar + metod f\u00f6r retroaktiv utbetalning + chefsutbildning\r\n- **Fas 3 (stabilisering):** uppf\u00f6ljning, kadens f\u00f6r egenkontroll, f\u00f6rst\u00e4rkning av dokumentation\r\n\r\nInkludera:\r\n- {Policy Changes Needed}\r\n- {Timekeeping \/ Payroll System Config Changes}\r\n- {Employee & Manager Communication Draft Points} (punkter p\u00e5 klarspr\u00e5k, icke-medgivande ton)\r\n- {Internal Self-Audit Procedure} (urvalsplan, frekvens, ansvariga)\r\n\r\n### 5) Dataf\u00f6rfr\u00e5gningar & f\u00f6ljdfr\u00e5gor (vid behov)\r\nLista:\r\n- {Missing Artifacts}\r\n- {Clarifying Questions}\r\n- {Exact Reports\/Exports Needed} (namnge generiskt, t.ex. \u201dtime edit log\u201d, \u201dearning codes list\u201d, \u201djob code history\u201d)\r\n\r\n## KVALITETSKONTROLLER\r\nInnan du slutf\u00f6r, verifiera:\r\n1. Varje \u00f6vertr\u00e4delse inkluderar minst en konkret indikator baserad p\u00e5 register\/handlingar och en FLSA-h\u00e4nvisning.\r\n2. Rapporten separerar tydligt **kritiska**, **systemiska** och **dokumentations**-relaterade problem.\r\n3. Exponeringsuppskattningar visar antaganden och formler; inga of\u00f6rklarade siffror.\r\n4. \u00c5tg\u00e4rdssteg \u00e4r genomf\u00f6rbara, sekvenserade och kopplade till identifierade risker.\r\n5. Alla anv\u00e4ndarinputs f\u00f6rekommer endast som **[VERSALER_MED_UNDERSCORES]** och alla AI-ifyllda f\u00e4lt anv\u00e4nder **{Title Case}** placeholders.";
    const variables = ["[LONEREGISTER]","[KLASSIFICERINGSDATA]","[POLICYDOKUMENT]","[MALGRUPP]","[BAKGRUND]","[TIDSPERIOD]","[HUVUDMAL]","[VERSALER_MED_UNDERSCORES]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat med AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Mata in “rått” först, sedan ett strukturerat urval.</strong> Börja med att lämna dina exporter som de är (även om de är fula), och kör sedan en andra vända med ett snävare datumintervall som “de senaste två kvartalen”. Efter första utdata, fråga: “Kör om iakttagelserna med antagandet att granskningsfönstret endast är 1 jan–30 juni; ta bort allt utanför den perioden.”</li>


<li><strong>Gör dina underlag lätta att hänvisa till.</strong> Prompten är bevisdriven, så namnge dokument och tabeller tydligt (t.ex. “PayrollRegister_Q2.csv”, “TimeclockExport_May.xlsx”, “Handbook_2024.pdf”). En bra följdfråga: “I varje iakttagelse, ange exakt dokumentnamn och relevant rad/fält (om tillgängligt).”</li>


<li><strong>Tvinga fram en avstämningskontroll.</strong> Om du har flera källor (lönesystem, tidrapporteringsverktyg, bonustracker), be modellen leta efter avvikelser. Fråga: “Lägg till ett avsnitt som heter ‘Avstämningstester’ som jämför timmar, övertid och bruttolön mellan tidunderlag och löneregister; lista avvikelser per medarbetargrupp.”</li>


<li><strong>Iterera åtgärdsplanen som ett deal team skulle göra.</strong> Den första planen blir oftast bred. När du har sett den, prova: “Skriv nu om åtgärdsplanen med två spår: (1) aktiviteter vi kan slutföra inom 14 dagar före tillträde, och (2) aktiviteter som kräver systemändringar efter tillträde; behåll tydliga ansvariga och beroenden.”</li>


<li><strong>Använd en kompletterande riskgranskning för att bredda bilden.</strong> Den här prompten är avsiktligt begränsad till vad som finns i de tillhandahållna underlagen, så kombinera den med en strukturerad HR-scan för att fånga närliggande exponeringar. Om du också behöver det, kör <a href="https://nodenordic.se/prompts/skapa-en-hr-riskrevision-i-5-steg-med-ai-prompt">Skapa en HR-riskrevision i 5 steg med AI-prompt</a> först och mata sedan in de viktigaste löne- och arbetstidsartefakterna i den här rapporten för en tajtare, hänvisningsstödd berättelse.</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade prompts</h2>



<p>När din forensiska rapport är utkastad hjälper de här promptarna dig att operationalisera iakttagelser, följa risk och standardisera revisionsarbete mellan team.</p>



<p>Om du också behöver en bredare pre-deal-scan (utöver löner och arbetstid) för att avgöra vad du ska gräva i, ger <a href="https://nodenordic.se/prompts/skapa-en-hr-riskrevision-i-5-steg-med-ai-prompt">Skapa en HR-riskrevision i 5 steg med AI-prompt</a> dig ett snabbt, strukturerat sätt att hitta HR-riskområden och identifiera vilka dokument du ska begära härnäst.</p>



<p>För team som gör löpande uppföljning efter att du har åtgärdat de största punkterna är <a href="https://nodenordic.se/prompts/designa-en-hr-dashboard-for-regelefterlevnadsrisk">Designa en HR-dashboard för regelefterlevnadsrisk</a> ett praktiskt nästa steg. Den hjälper till att omvandla engångsfynd till en stående uppsättning mätetal, ansvariga och granskningskadens.</p>



<p>När du behöver revisionsmässig stringens och repeterbarhet mellan sajter, affärsenheter eller portföljbolag passar <a href="https://nodenordic.se/prompts/skapa-iso-19011-mallar-for-juridisk-revision">Skapa ISO 19011-mallar för juridisk revision</a> bra ihop med den här rapporten genom att standardisera revisionsplanering, bevisinhämtning och uppföljning av korrigerande åtgärder på ett sätt som ledningen känner igen.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/skapa-en-hr-riskrevision-i-5-steg-med-ai-prompt">Skapa en HR-riskrevision i 5 steg med AI-prompt</a>: Snabb scan för att prioritera HR-risker.</li>


<li><a href="https://nodenordic.se/prompts/designa-en-hr-dashboard-for-regelefterlevnadsrisk">Designa en HR-dashboard för regelefterlevnadsrisk</a>: Gör iakttagelser till spårbara mätetal.</li>


<li><a href="https://nodenordic.se/prompts/skapa-iso-19011-mallar-for-juridisk-revision">Skapa ISO 19011-mallar för juridisk revision</a>: Standardiserar revisionsgenomförande och bevisning.</li>


<li><a href="https://nodenordic.se/prompts/skapa-iso-9001-mallar-for-bakgrundskontroller">Skapa ISO 9001-mallar för bakgrundskontroller</a>: Verktygslåda för dokumentation och konsekvens i rekryteringsscreening.</li>


<li><a href="https://nodenordic.se/prompts/ai-prompt-for-revision-av-efterlevnad-av-arbetsratt">AI-prompt för revision av efterlevnad av arbetsrätt</a>: Bredare rapportformat för revision av arbetsstandarder.</li>

</ul>

</div>

<div class="faq-section">

<h2 class="wp-block-heading">Vanliga frågor</h2>


<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för en FLSA-forensikrapport för regelefterlevnad?</span>

<p class="answer"><strong>HR-chefer</strong> använder den för att översätta löneunderlag, klassificeringar och handboksmaterial till en prioriterad uppsättning löne- och arbetstidsrisker som de kan presentera för ledningen utan fluff. <strong>Bolagsjurister eller compliance managers</strong> uppskattar inramningen “potentiell överträdelse i väntan på granskning” med hänvisningar, eftersom den snabbar på juridisk triage i stället för att ersätta den. <strong>Operating partners inom private equity</strong> använder den för att rimlighetskontrollera diligence-berättelser och undvika överraskningar som kan spräcka justeringar av köpeskillingen. <strong>Lönechefer</strong> får nytta när rapporten pekar ut specifika svagheter i beräkningar och dokumentation som snabbt kan testas och rättas.</p>

</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för en FLSA-forensikrapport för regelefterlevnad?</span>

<p class="answer"><strong>Detaljhandel och tjänsteföretag med flera enheter</strong> får värde eftersom variation i tidrapportering, chefsöverstyrningar och blandade arbetsuppgifter kan skapa återkommande DOL-triggers; den här prompten hjälper till att omvandla sådana mönster till dokumenterade iakttagelser kopplade till underlag. <strong>Tillverkning och logistik</strong> använder den för att stresstesta skifttillägg, bonusar och övertidsberäkningar som i det tysta kan öka exponeringen när regular-rate-matematiken blir fel. <strong>Vårdgivare</strong> har ofta nytta där lönepraxis inkluderar blandade timlöner, beredskapsupplägg eller komplex schemaläggning; rapportformatet hjälper till att skilja det som stöds av data från det som kräver uppföljning. <strong>PE-backade plattformsbolag</strong> använder den för att standardisera bedömningen av löne- och arbetstidsrisker över förvärv, särskilt när lönesystem och policyer skiljer sig mellan bolag.</p>

</div>

<div class="faq-item">
<span class="question">Varför ger enkla AI-prompter för att skapa en FLSA-forensikrapport för regelefterlevnad svaga resultat?</span>

<p class="answer">En typisk prompt som “<em>Skriv en FLSA compliance-rapport för mitt företag</em>” misslyckas eftersom den: saknar en intake- och antagandelogg för bevisning, så glapp i underlag döljs i stället för att dokumenteras; ger ingen struktur för att prioritera DOL-triggers jämfört med frågor med svag signal; ignorerar behovet av att koppla varje iakttagelse till en specifik observerbar datapunkt plus en FLSA-hänvisning; producerar generiskt “best practice”-språk i stället för en försvarbar, underlagsbaserad berättelse; och missar tänket kring exponeringsintervall som ledningen behöver för åtgärdsbeslut och deal-dialoger.</p>

</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här prompten för en FLSA-forensikrapport till min specifika situation?</span>

<p class="answer">Ja, men anpassningen sker genom vad du inkluderar i de tillhandahållna underlagen: dina [PAYROLL_RECORDS], [CLASSIFICATION_DATA] och [POLICY_DOCUMENTS]. Om du vill att utdata ska fokusera på en affärsenhet, tillhandahåll dessa utdrag som separata filer eller tydligt märkta avsnitt (till exempel “endast CA-butiker” vs “alla platser”). Du kan också styra analysen genom att lägga in en kort omslagsnot på en sida i dina dokument med granskningsfönster, kända lönekomponenter (bonusar, provisioner, tillägg) och eventuell transaktionstidplan. En användbar följdfråga är: “Skriv om executive summary för en köparens diligence-målgrupp och lägg till en ‘30/60/90-dagars åtgärdsplan’ som matchar dealens tidplan.”</p>

</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här prompten för en FLSA-forensikrapport?</span>

<p class="answer">Det största misstaget är att tillhandahålla [PAYROLL_RECORDS] utan underliggande tidrapporteringsdetaljer; “endast löneregister” är svagt, medan “löneregister plus stämpelklockeexport per medarbetare/dag” ger modellen något testbart. Ett annat vanligt fel är att dumpa [CLASSIFICATION_DATA] som enbart titlar (dåligt) i stället för titlar plus månads-/timstatus, undantagsklassning och de indikatorer för arbetsuppgifter du faktiskt har (bra). Team lämnar också [POLICY_DOCUMENTS] som är föråldrade eller omärkta; “EmployeeHandbook.pdf” är otydligt, men “Handbook_Effective_2024-07-01.pdf” och “OvertimePolicy_2023.pdf” gör hänvisningar renare. Slutligen leder blandade tidsperioder utan angivet granskningsfönster till röriga iakttagelser, så håll perioden tydlig och konsekvent över filerna.</p>

</div>

<div class="faq-item">
<span class="question">Vem bör INTE använda den här prompten för en FLSA-forensikrapport?</span>

<p class="answer">Den här prompten är inte idealisk för team som har lite till inget dokumenterat underlag och vill att modellen ska “fylla i” oskrivna arbetssätt. Den ersätter inte heller juridiskt ombud om du behöver ett formellt juridiskt utlåtande, förhandlingsspråk eller jurisdiktionsspecifik rådgivning utöver vad underlagen stödjer. Om du bara behöver en lätt checklista för intern utbildning kan ett enklare HR-revisionsverktyg vara en bättre start innan du lägger tid på att samla rätt [PAYROLL_RECORDS], [CLASSIFICATION_DATA] och [POLICY_DOCUMENTS].</p>

</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för en FLSA-forensikrapport för regelefterlevnad?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "HR-chefer använder den för att översätta löneunderlag, klassificeringar och handboksmaterial till en prioriterad uppsättning löne- och arbetstidsrisker som de kan presentera för ledningen utan fluff. Bolagsjurister eller compliance managers uppskattar inramningen “potentiell överträdelse i väntan på granskning” med hänvisningar, eftersom den snabbar på juridisk triage i stället för att ersätta den. Operating partners inom private equity använder den för att rimlighetskontrollera diligence-berättelser och undvika överraskningar som kan spräcka justeringar av köpeskillingen. Lönechefer får nytta när rapporten pekar ut specifika svagheter i beräkningar och dokumentation som snabbt kan testas och rättas."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för en FLSA-forensikrapport för regelefterlevnad?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Detaljhandel och tjänsteföretag med flera enheter får värde eftersom variation i tidrapportering, chefsöverstyrningar och blandade arbetsuppgifter kan skapa återkommande DOL-triggers; den här prompten hjälper till att omvandla sådana mönster till dokumenterade iakttagelser kopplade till underlag. Tillverkning och logistik använder den för att stresstesta skifttillägg, bonusar och övertidsberäkningar som i det tysta kan öka exponeringen när regular-rate-matematiken blir fel. Vårdgivare har ofta nytta där lönepraxis inkluderar blandade timlöner, beredskapsupplägg eller komplex schemaläggning; rapportformatet hjälper till att skilja det som stöds av data från det som kräver uppföljning. PE-backade plattformsbolag använder den för att standardisera bedömningen av löne- och arbetstidsrisker över förvärv, särskilt när lönesystem och policyer skiljer sig mellan bolag."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger enkla AI-prompter för att skapa en FLSA-forensikrapport för regelefterlevnad svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som “Skriv en FLSA compliance-rapport för mitt företag” misslyckas eftersom den: saknar en intake- och antagandelogg för bevisning, så glapp i underlag döljs i stället för att dokumenteras; ger ingen struktur för att prioritera DOL-triggers jämfört med frågor med svag signal; ignorerar behovet av att koppla varje iakttagelse till en specifik observerbar datapunkt plus en FLSA-hänvisning; producerar generiskt “best practice”-språk i stället för en försvarbar, underlagsbaserad berättelse; och missar tänket kring exponeringsintervall som ledningen behöver för åtgärdsbeslut och deal-dialoger."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här prompten för en FLSA-forensikrapport till min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja, men anpassningen sker genom vad du inkluderar i de tillhandahållna underlagen: dina [PAYROLL_RECORDS], [CLASSIFICATION_DATA] och [POLICY_DOCUMENTS]. Om du vill att utdata ska fokusera på en affärsenhet, tillhandahåll dessa utdrag som separata filer eller tydligt märkta avsnitt (till exempel “endast CA-butiker” vs “alla platser”). Du kan också styra analysen genom att lägga in en kort omslagsnot på en sida i dina dokument med granskningsfönster, kända lönekomponenter (bonusar, provisioner, tillägg) och eventuell transaktionstidplan. En användbar följdfråga är: “Skriv om executive summary för en köparens diligence-målgrupp och lägg till en ‘30/60/90-dagars åtgärdsplan’ som matchar dealens tidplan.”"
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här prompten för en FLSA-forensikrapport?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att tillhandahålla [PAYROLL_RECORDS] utan underliggande tidrapporteringsdetaljer; “endast löneregister” är svagt, medan “löneregister plus stämpelklockeexport per medarbetare/dag” ger modellen något testbart. Ett annat vanligt fel är att dumpa [CLASSIFICATION_DATA] som enbart titlar (dåligt) i stället för titlar plus månads-/timstatus, undantagsklassning och de indikatorer för arbetsuppgifter du faktiskt har (bra). Team lämnar också [POLICY_DOCUMENTS] som är föråldrade eller omärkta; “EmployeeHandbook.pdf” är otydligt, men “Handbook_Effective_2024-07-01.pdf” och “OvertimePolicy_2023.pdf” gör hänvisningar renare. Slutligen leder blandade tidsperioder utan angivet granskningsfönster till röriga iakttagelser, så håll perioden tydlig och konsekvent över filerna."
      }
    },
    {
      "@type": "Question",
      "name": "Vem bör INTE använda den här prompten för en FLSA-forensikrapport?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten är inte idealisk för team som har lite till inget dokumenterat underlag och vill att modellen ska “fylla i” oskrivna arbetssätt. Den ersätter inte heller juridiskt ombud om du behöver ett formellt juridiskt utlåtande, förhandlingsspråk eller jurisdiktionsspecifik rådgivning utöver vad underlagen stödjer. Om du bara behöver en lätt checklista för intern utbildning kan ett enklare HR-revisionsverktyg vara en bättre start innan du lägger tid på att samla rätt [PAYROLL_RECORDS], [CLASSIFICATION_DATA] och [POLICY_DOCUMENTS]."
      }
    }
    }
  ]
}
</script>
</div>

<div class="closing-section">

<p>DOL-risken blir inte mindre bara för att alla har mycket att göra. Låt dina underlag arbeta åt dig, skapa en forensisk berättelse med hänvisningar och gå in i diligence eller åtgärdsplanering med något som håller. Klistra in prompten i din modell och börja tajta till berättelsen redan i dag.</p>

</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/skapa-en-flsa-forensikrapport-for-compliance/">Skapa en FLSA-forensikrapport för compliance</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Skapa en ISO 30414 HR-compliancegranskning</title>
		<link>https://nodenordic.se/prompts/skapa-en-iso-30414-hr-compliancegranskning/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=skapa-en-iso-30414-hr-compliancegranskning</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:51:54 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5003043</guid>

					<description><![CDATA[<p>HR-kontroller faller vid granskning – den här AI-prompten skapar ISO 30414-revisionspunkter med bevis, poängsättning och åtgärdsplan.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/skapa-en-iso-30414-hr-compliancegranskning/">Skapa en ISO 30414 HR-compliancegranskning</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: ISO 30414 audit prompt -->

<div class="hook-introduction">

<p>De flesta HR-”compliance”-revisioner faller samman så fort någon ber om bevis. Policys finns. Powerpoints ser proffsiga ut. Men beviskedjan saknas, poängsättningen är otydlig och de tvärfunktionella överlämningarna (HRIS till lön, juridik till HR, ekonomi till rapportering) är där det ofta brister utan att någon märker det.</p>



<p>Den här <strong>ISO 30414 audit prompt</strong> är byggd för <strong>chefer inom HR operations</strong> som behöver en revisionsplan som håller för extern granskning, <strong>internrevisorer</strong> som måste testa ”policy genomförd” och inte bara ”policy nedskriven”, samt <strong>chefer inom people analytics</strong> som ansvarar för korrekt rapportering av humankapital enligt ISO 30414. Resultatet är ett regulatorredo kontrollpunktssystem: ISO 30414-kopplade tester, krav på bevisartefakter, viktad poängsättning och en åtgärdstidslinje kopplad till risk och insats.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Vad du får</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Omvandlar ISO 30414-områden för humankapitalrapportering till revisionskontrollpunkter som var och en refererar till relevant ISO 30414-ämne/underämne.</li>
          <li>Definierar ”hur du verifierar” för varje kontrollpunkt med kvantitativa mått (nivåer, kvoter, tröskelvärden) samt kvalitativa tester (intervjuer, stickprov, hantering av avvikelser).</li>
          <li>Specificerar vilka bevis och vilket revisionsspår som krävs för att gå igenom varje test, till exempel HRIS-rapporter, godkännanden, åtkomstloggar, ärenden och mötesanteckningar.</li>
          <li>Kartlägger tvärfunktionella överlämningar där compliance ofta skapar fel, inklusive HRIS, lön, juridik, ekonomi, DEI, IT/säkerhet och operativa chefer.</li>
          <li>Viktar riskområden med hög exponering tyngre och kopplar åtgärdsfönster till både risknivå och implementeringsinsats.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du förbereder dig för extern granskning, regulatorisk förfrågan eller en assurance-liknande revision där ”visa mig bevisen” är standardläge.</li>
          <li>Din HR-rapportering visar inkonsekventa siffror mellan HRIS, ekonomi och people analytics, och ledningen vill ha en försvarbar ”single source of truth”.</li>
          <li>Nyliga incidenter (klagomål, utredningar, farhågor kring lönejämlikhet) har ökat din sanktions- och reputationsrisk, och du behöver snabbt höja kontrollmognaden.</li>
          <li>En sammanslagning, geografisk expansion eller nya krav från företagsråd/juridik skapar nya överlämningar som inte har testats end-to-end.</li>
          <li>Du skalar upp personalstyrkan och behöver en repeterbar intern revisionsrytm som fångar kontrollbrister innan de blir offentliga problem.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En strukturerad revisionsarkitektur med 4 domäner och ISO 30414-kopplade kontrollpunkter under varje domän.</li>
           <li>En verifieringsguide som listar testprocedurer, riktlinjer för stickprov och intervjumål för varje kontrollpunkt.</li>
           <li>Ett bevisregister som namnger specifika artefakter att samla in (rapporter, loggar, godkännanden, ärenden) och var de ska hämtas.</li>
           <li>En viktad poängmodell som prioriterar gap med hög exponering och gör godkänd/icke godkänd försvarbart i skrift.</li>
           <li>En åtgärdsplan med tidsfönster (snabba vinster vs medellånga vs längre åtgärder) kopplade till risk och insats.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: ISO 30414 HR compliance audit builder</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[BESKRIV_NUVARANDE_HR_PROCESSER_OCH_SYSTEM]</code></td>
                                <td class="var-desc">
                                    Ge en översikt över organisationens befintliga HR-processer, verktyg och system, inklusive eventuella programvaror eller plattformar som används för HR-administration, lönehantering och uppföljning av efterlevnad.                                    <div class="var-example">Till exempel: "Organisationen använder Workday som HRIS, ADP för lön och manuella rutiner för uppföljning av efterlevnad. Prestationsbedömningar genomförs halvårsvis och introduktion hanteras genom en kombination av onlineutbildning och utbildning på plats."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[BESKRIV_NUVARANDE_HR_PROCESSER_OCH_SYSTEM]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[ANGE_TOTALT_ANTAL_ANSTALLDA_OCH_GEOGRAFISK_FORDELNING]</code></td>
                                <td class="var-desc">
                                    Ange det totala antalet anställda i organisationen och deras geografiska fördelning mellan länder, regioner eller kontor.                                    <div class="var-example">Till exempel: "Organisationen har 1 200 anställda, varav 800 är baserade i USA, 200 i EU och 200 i APAC. Viktiga kontor finns i New York, London och Singapore."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[ANGE_TOTALT_ANTAL_ANSTALLDA_OCH_GEOGRAFISK_FORDELNING]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[LISTA_TILLAMPLIGA_REGELVERK_OCH_JURISDIKTIONER]</code></td>
                                <td class="var-desc">
                                    Lista de HR-relaterade regelverk, standarder och jurisdiktioner som gäller för organisationen, inklusive specifika arbetsrättsliga regler, dataskyddsbestämmelser och rapporteringskrav.                                    <div class="var-example">Till exempel: "Tillämpliga regelverk inkluderar ISO 30414, GDPR (EU), FLSA (USA) och Singapores Employment Act. Organisationen omfattas även av avtal med företagsråd (Works Council) i Tyskland."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[LISTA_TILLAMPLIGA_REGELVERK_OCH_JURISDIKTIONER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BRANSCH]</code></td>
                                <td class="var-desc">
                                    Ange vilken bransch organisationen verkar inom för att ge kontext till efterlevnadskrav och arbetsstyrkans förutsättningar.                                    <div class="var-example">Till exempel: "Teknik – SaaS (Software as a Service) med fokus på företagslösningar för dataanalys."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BRANSCH]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[HUVUDSAKLIGT_MAL]</code></td>
                                <td class="var-desc">
                                    Ange huvudsyftet med HR-efterlevnadsgranskningen, till exempel regelefterlevnadsförsvar, förbättring av interna processer eller förberedelse inför certifiering.                                    <div class="var-example">Till exempel: "Säkerställa efterlevnad av ISO 30414 och förbereda inför en extern revision för att minska reputations- och finansiella risker."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[HUVUDSAKLIGT_MAL]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TIDSRAM]</code></td>
                                <td class="var-desc">
                                    Ange tidsplanen för att slutföra HR-efterlevnadsgranskningen, inklusive eventuella deadlines eller milstolpar.                                    <div class="var-example">Till exempel: "Granskningen måste vara slutförd inom 90 dagar för att ligga i linje med den kommande genomgången inför ISO-certifiering."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[TIDSRAM]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INDATA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">SPECIFIKATION FÖR OUTPUT</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">1) {Pre-Analysis Summary}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">2) {Audit Framework Overview}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">3) {Audit Checklist By Domain}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">4) {Scoring Matrices}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">5) {Risk &amp; Priority Ranking}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">6) {Remediation Action Plan}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Designa ett regulator-färdigt HR-efterlevnadsgranskningssystem som omvandlar kraven i ISO 30414 Human Capital Reporting till praktiska, verifierbara kontrollpunkter. Leveransen måste hjälpa ett driftteam att bevisa både att ”policy finns” och att ”policy konsekvent efterlevs”, med tydlig poängsättning och en åtgärdsplan som minskar sanktions- och reputationsrisk.

## PERSONA
Agera som en designer av HR-efterlevnadsgranskningar med bakgrund inom assurance på storbyrå och HR-åtgärdsarbete efter incidenter. Du är specialist på att omvandla standarder för humankapitalrapportering till granskningsfärdiga beviskedjor, praktiska testprocedurer och ledningsåtgärdsplaner som tål extern granskning.

## BEGRÄNSNINGAR
- Varje granskningskontrollpunkt måste uttryckligen kopplas till ett ISO 30414-krav (ange relevant ISO 30414-ämne/delämne i varje punkt).
- Föredra ”hur man verifierar” framför ”hur bra ser ut”. Undvik generiska HR-råd som inte går att granska.
- Inkludera både:
  - kvantitativa mått (tal, kvoter, fördelningar, trösklar), och
  - kvalitativa tester (intervjuer, urval/sampling, kontrolldesign, hantering av avvikelser).
- Kräv bevis och audit trails för varje kontrollpunkt (systemrapporter, godkännanden, loggar, ärenden/tickets, mötesprotokoll etc.).
- Synliggör tvärfunktionella överlämningar som ofta bryter efterlevnad (HRIS, lön, juridik, ekonomi, DEI-funktion, drift/ops, fackliga råd/works councils, IT/säkerhet).
- Vikta riskområden med hög exponering tyngre än luckor med låg sanktionsnivå.
- Ange rekommenderade tidsfönster för åtgärder kopplade till risk och insats.

## PROCESS
1. **Föranalys (måste först visa din förståelse):**
   - Sammanfatta organisationskontexten utifrån de angivna indata.
   - Lista antaganden och frågor där indata saknas eller är oklara.
   - Ange granskningens avsedda utfall (försvar mot regulator, mognad i intern kontroll, rapporteringsnoggrannhet).

2. **Bygg granskningsarkitekturen:**
   - Skapa fyra granskningsdomäner:
     - Mångfaldsmått och rapportering
     - Personalomsättningsanalys och retention
     - Ersättningsrättvisa och transparens
     - Spårning av regulatorisk efterlevnad
   - För varje domän: definiera scope-gränser (vad som ingår/inte ingår) och centrala datakällor.

3. **Generera ISO-mappade kontrollpunkter:**
   - För varje kontrollpunkt, inkludera:
     - ISO 30414-mappning
     - Verifieringsmetod(er)
     - Bevis som krävs
     - Varningssignaler / felmoder
     - Tvärfunktionella beroenden
     - Vägledning för statuspoängsättning

4. **Poängsättning + prioritering:**
   - Tillhandahåll en poängmatris som definierar Compliant / Partially Compliant / Non-Compliant med objektiva kriterier.
   - Tillhandahåll en metod för riskprioritering (påverkan × sannolikhet × upptäckbarhet, eller motsvarande) och tillämpa den på domänerna och de största gapen.

5. **Åtgärdsplanering:**
   - Ta fram en handlingsplan med ansvariga, beroenden, tidslinjer och effektbeskrivningar.
   - Sekvensera åtgärder i kort sikt / medellång sikt / längre sikt (anpassat till organisationens storlek och jurisdiktioner).

6. **Hantering av edge cases (när indata är ofullständiga):**
   - Om [BESKRIV_NUVARANDE_HR_PROCESSER_OCH_SYSTEM], [ANGE_TOTALT_ANTAL_ANSTALLDA_OCH_GEOGRAFISK_FORDELNING] eller [LISTA_TILLAMPLIGA_REGELVERK_OCH_JURISDIKTIONER] saknas, generera:
     - en standardiserad baslinje-checklista,
     - en lista över ”begärda indata” för att skräddarsy den,
     - och markera alla antaganden direkt i outputen.

7. **Vad detta INTE är (scope-gränser):**
   - Inte juridisk rådgivning eller en ersättning för juridiskt ombud.
   - Inte en fullständig guide för ISO-certifiering eller en implementeringsmanual.
   - Inte en generisk HR-optimeringsplaybook som saknar koppling till granskningsbarhet.
   - Inte en uttömmande lista över alla regelverk globalt; den är anpassad till angivna jurisdiktioner och ISO 30414-mappning.

## INDATA
- **Nuvarande HR-processer och system:** [BESKRIV_NUVARANDE_HR_PROCESSER_OCH_SYSTEM]  
- **Personalstyrkans storlek och geografisk fördelning:** [ANGE_TOTALT_ANTAL_ANSTALLDA_OCH_GEOGRAFISK_FORDELNING]  
- **Tillämpliga regelverk och jurisdiktioner:** [LISTA_TILLAMPLIGA_REGELVERK_OCH_JURISDIKTIONER]  
- **Bransch (valfritt, för riskviktning):** [BRANSCH]  
- **Primärt mål (valfritt):** [HUVUDSAKLIGT_MAL]  
- **Tidsram för granskningsberedskap (valfritt):** [TIDSRAM]  

## SPECIFIKATION FÖR OUTPUT
Leverera följande avsnitt i ordning, med markdown-rubriker och tabeller:

### 1) {Pre-Analysis Summary}
- {Context Restatement}
- {Assumptions}
- {Open Questions}
- {Audit Outcomes}

### 2) {Audit Framework Overview}
Förklara hur ISO 30414-rapporteringens ämnen översätts till operativa kontroller och revisions-/granskningsbevis. Inkludera:
- {Domain Map}
- {Data Lineage Overview} (system → ägare → rapporter → lagring)
- {Audit Trail Principles} (retention, versionshantering, godkännanden, åtkomstkontroller)

### 3) {Audit Checklist By Domain}
För varje domän, tillhandahåll en hierarkisk checklista med kryssrutor och en statuskolumn:

**Domain: {Domain Name}**  
- {Domain Scope}  
- {Primary Data Sources}  
- {Key Stakeholders}  

Inkludera en tabell för checklistan med kolumner:
- {Checkbox}
- {Audit Item}
- {ISO 30414 Mapping}
- {Verification Steps}
- {Evidence Required}
- {Red Flags}
- {Cross-Functional Dependencies}
- {Compliance Status} (Compliant / Partially Compliant / Non-Compliant)
- {Notes}

### 4) {Scoring Matrices}
Tillhandahåll:
- En tabell som definierar poängsättningskriterier för varje statusnivå (objektiva trösklar och exempel).
- En tabell som visar {Domain Score Summary} och {Overall Readiness Rating}.

### 5) {Risk &amp; Priority Ranking}
Tillhandahåll en prioriteringstabell med:
- {Gap}
- {Domain}
- {Regulatory Exposure}
- {Business Impact}
- {Likelihood}
- {Detectability}
- {Priority Tier}
- {Rationale}

### 6) {Remediation Action Plan}
Numrerade åtgärder med:
- {Action}
- {Owner}
- {Supporting Teams}
- {Dependencies}
- {Effort Level}
- {Expected Impact}
- {Recommended Timeline}
- {Deliverables / Evidence of Completion}

Tidslinjer måste anges som intervall kopplade till brådska (t.ex. ”2–4 veckor”, ”1–2 månader”, ”1–2 kvartal”), inte exakta datum.

## KVALITETSKONTROLLER
Innan du slutför, verifiera:
1. Varje rad i checklistan innehåller en ISO 30414-mappning och minst ett konkret verifieringssteg.
2. Varje kontrollpunkt specificerar bevisartefakter (inte bara ”dokumentation”).
3. Tvärfunktionella beroenden namnges uttryckligen för punkter med överlämningar (HRIS/lön/juridik/ekonomi/IT).
4. Poängsättningskriterier är mätbara och skiljer tydligt mellan delvis efterlevnad och icke-efterlevnad.
5. Åtgärder har ansvariga, beroenden och tidsintervall i linje med risknivå.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nDesigna ett regulator-f\u00e4rdigt HR-efterlevnadsgranskningssystem som omvandlar kraven i ISO 30414 Human Capital Reporting till praktiska, verifierbara kontrollpunkter. Leveransen m\u00e5ste hj\u00e4lpa ett driftteam att bevisa b\u00e5de att \u201dpolicy finns\u201d och att \u201dpolicy konsekvent efterlevs\u201d, med tydlig po\u00e4ngs\u00e4ttning och en \u00e5tg\u00e4rdsplan som minskar sanktions- och reputationsrisk.\r\n\r\n## PERSONA\r\nAgera som en designer av HR-efterlevnadsgranskningar med bakgrund inom assurance p\u00e5 storbyr\u00e5 och HR-\u00e5tg\u00e4rdsarbete efter incidenter. Du \u00e4r specialist p\u00e5 att omvandla standarder f\u00f6r humankapitalrapportering till granskningsf\u00e4rdiga beviskedjor, praktiska testprocedurer och lednings\u00e5tg\u00e4rdsplaner som t\u00e5l extern granskning.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- Varje granskningskontrollpunkt m\u00e5ste uttryckligen kopplas till ett ISO 30414-krav (ange relevant ISO 30414-\u00e4mne\/del\u00e4mne i varje punkt).\r\n- F\u00f6redra \u201dhur man verifierar\u201d framf\u00f6r \u201dhur bra ser ut\u201d. Undvik generiska HR-r\u00e5d som inte g\u00e5r att granska.\r\n- Inkludera b\u00e5de:\r\n  - kvantitativa m\u00e5tt (tal, kvoter, f\u00f6rdelningar, tr\u00f6sklar), och\r\n  - kvalitativa tester (intervjuer, urval\/sampling, kontrolldesign, hantering av avvikelser).\r\n- Kr\u00e4v bevis och audit trails f\u00f6r varje kontrollpunkt (systemrapporter, godk\u00e4nnanden, loggar, \u00e4renden\/tickets, m\u00f6tesprotokoll etc.).\r\n- Synligg\u00f6r tv\u00e4rfunktionella \u00f6verl\u00e4mningar som ofta bryter efterlevnad (HRIS, l\u00f6n, juridik, ekonomi, DEI-funktion, drift\/ops, fackliga r\u00e5d\/works councils, IT\/s\u00e4kerhet).\r\n- Vikta riskomr\u00e5den med h\u00f6g exponering tyngre \u00e4n luckor med l\u00e5g sanktionsniv\u00e5.\r\n- Ange rekommenderade tidsf\u00f6nster f\u00f6r \u00e5tg\u00e4rder kopplade till risk och insats.\r\n\r\n## PROCESS\r\n1. **F\u00f6ranalys (m\u00e5ste f\u00f6rst visa din f\u00f6rst\u00e5else):**\r\n   - Sammanfatta organisationskontexten utifr\u00e5n de angivna indata.\r\n   - Lista antaganden och fr\u00e5gor d\u00e4r indata saknas eller \u00e4r oklara.\r\n   - Ange granskningens avsedda utfall (f\u00f6rsvar mot regulator, mognad i intern kontroll, rapporteringsnoggrannhet).\r\n\r\n2. **Bygg granskningsarkitekturen:**\r\n   - Skapa fyra granskningsdom\u00e4ner:\r\n     - M\u00e5ngfaldsm\u00e5tt och rapportering\r\n     - Personaloms\u00e4ttningsanalys och retention\r\n     - Ers\u00e4ttningsr\u00e4ttvisa och transparens\r\n     - Sp\u00e5rning av regulatorisk efterlevnad\r\n   - F\u00f6r varje dom\u00e4n: definiera scope-gr\u00e4nser (vad som ing\u00e5r\/inte ing\u00e5r) och centrala datak\u00e4llor.\r\n\r\n3. **Generera ISO-mappade kontrollpunkter:**\r\n   - F\u00f6r varje kontrollpunkt, inkludera:\r\n     - ISO 30414-mappning\r\n     - Verifieringsmetod(er)\r\n     - Bevis som kr\u00e4vs\r\n     - Varningssignaler \/ felmoder\r\n     - Tv\u00e4rfunktionella beroenden\r\n     - V\u00e4gledning f\u00f6r statuspo\u00e4ngs\u00e4ttning\r\n\r\n4. **Po\u00e4ngs\u00e4ttning + prioritering:**\r\n   - Tillhandah\u00e5ll en po\u00e4ngmatris som definierar Compliant \/ Partially Compliant \/ Non-Compliant med objektiva kriterier.\r\n   - Tillhandah\u00e5ll en metod f\u00f6r riskprioritering (p\u00e5verkan \u00d7 sannolikhet \u00d7 uppt\u00e4ckbarhet, eller motsvarande) och till\u00e4mpa den p\u00e5 dom\u00e4nerna och de st\u00f6rsta gapen.\r\n\r\n5. **\u00c5tg\u00e4rdsplanering:**\r\n   - Ta fram en handlingsplan med ansvariga, beroenden, tidslinjer och effektbeskrivningar.\r\n   - Sekvensera \u00e5tg\u00e4rder i kort sikt \/ medell\u00e5ng sikt \/ l\u00e4ngre sikt (anpassat till organisationens storlek och jurisdiktioner).\r\n\r\n6. **Hantering av edge cases (n\u00e4r indata \u00e4r ofullst\u00e4ndiga):**\r\n   - Om [BESKRIV_NUVARANDE_HR_PROCESSER_OCH_SYSTEM], [ANGE_TOTALT_ANTAL_ANSTALLDA_OCH_GEOGRAFISK_FORDELNING] eller [LISTA_TILLAMPLIGA_REGELVERK_OCH_JURISDIKTIONER] saknas, generera:\r\n     - en standardiserad baslinje-checklista,\r\n     - en lista \u00f6ver \u201dbeg\u00e4rda indata\u201d f\u00f6r att skr\u00e4ddarsy den,\r\n     - och markera alla antaganden direkt i outputen.\r\n\r\n7. **Vad detta INTE \u00e4r (scope-gr\u00e4nser):**\r\n   - Inte juridisk r\u00e5dgivning eller en ers\u00e4ttning f\u00f6r juridiskt ombud.\r\n   - Inte en fullst\u00e4ndig guide f\u00f6r ISO-certifiering eller en implementeringsmanual.\r\n   - Inte en generisk HR-optimeringsplaybook som saknar koppling till granskningsbarhet.\r\n   - Inte en utt\u00f6mmande lista \u00f6ver alla regelverk globalt; den \u00e4r anpassad till angivna jurisdiktioner och ISO 30414-mappning.\r\n\r\n## INDATA\r\n- **Nuvarande HR-processer och system:** [BESKRIV_NUVARANDE_HR_PROCESSER_OCH_SYSTEM]  \r\n- **Personalstyrkans storlek och geografisk f\u00f6rdelning:** [ANGE_TOTALT_ANTAL_ANSTALLDA_OCH_GEOGRAFISK_FORDELNING]  \r\n- **Till\u00e4mpliga regelverk och jurisdiktioner:** [LISTA_TILLAMPLIGA_REGELVERK_OCH_JURISDIKTIONER]  \r\n- **Bransch (valfritt, f\u00f6r riskviktning):** [BRANSCH]  \r\n- **Prim\u00e4rt m\u00e5l (valfritt):** [HUVUDSAKLIGT_MAL]  \r\n- **Tidsram f\u00f6r granskningsberedskap (valfritt):** [TIDSRAM]  \r\n\r\n## SPECIFIKATION F\u00d6R OUTPUT\r\nLeverera f\u00f6ljande avsnitt i ordning, med markdown-rubriker och tabeller:\r\n\r\n### 1) {Pre-Analysis Summary}\r\n- {Context Restatement}\r\n- {Assumptions}\r\n- {Open Questions}\r\n- {Audit Outcomes}\r\n\r\n### 2) {Audit Framework Overview}\r\nF\u00f6rklara hur ISO 30414-rapporteringens \u00e4mnen \u00f6vers\u00e4tts till operativa kontroller och revisions-\/granskningsbevis. Inkludera:\r\n- {Domain Map}\r\n- {Data Lineage Overview} (system \u2192 \u00e4gare \u2192 rapporter \u2192 lagring)\r\n- {Audit Trail Principles} (retention, versionshantering, godk\u00e4nnanden, \u00e5tkomstkontroller)\r\n\r\n### 3) {Audit Checklist By Domain}\r\nF\u00f6r varje dom\u00e4n, tillhandah\u00e5ll en hierarkisk checklista med kryssrutor och en statuskolumn:\r\n\r\n**Domain: {Domain Name}**  \r\n- {Domain Scope}  \r\n- {Primary Data Sources}  \r\n- {Key Stakeholders}  \r\n\r\nInkludera en tabell f\u00f6r checklistan med kolumner:\r\n- {Checkbox}\r\n- {Audit Item}\r\n- {ISO 30414 Mapping}\r\n- {Verification Steps}\r\n- {Evidence Required}\r\n- {Red Flags}\r\n- {Cross-Functional Dependencies}\r\n- {Compliance Status} (Compliant \/ Partially Compliant \/ Non-Compliant)\r\n- {Notes}\r\n\r\n### 4) {Scoring Matrices}\r\nTillhandah\u00e5ll:\r\n- En tabell som definierar po\u00e4ngs\u00e4ttningskriterier f\u00f6r varje statusniv\u00e5 (objektiva tr\u00f6sklar och exempel).\r\n- En tabell som visar {Domain Score Summary} och {Overall Readiness Rating}.\r\n\r\n### 5) {Risk & Priority Ranking}\r\nTillhandah\u00e5ll en prioriteringstabell med:\r\n- {Gap}\r\n- {Domain}\r\n- {Regulatory Exposure}\r\n- {Business Impact}\r\n- {Likelihood}\r\n- {Detectability}\r\n- {Priority Tier}\r\n- {Rationale}\r\n\r\n### 6) {Remediation Action Plan}\r\nNumrerade \u00e5tg\u00e4rder med:\r\n- {Action}\r\n- {Owner}\r\n- {Supporting Teams}\r\n- {Dependencies}\r\n- {Effort Level}\r\n- {Expected Impact}\r\n- {Recommended Timeline}\r\n- {Deliverables \/ Evidence of Completion}\r\n\r\nTidslinjer m\u00e5ste anges som intervall kopplade till br\u00e5dska (t.ex. \u201d2\u20134 veckor\u201d, \u201d1\u20132 m\u00e5nader\u201d, \u201d1\u20132 kvartal\u201d), inte exakta datum.\r\n\r\n## KVALITETSKONTROLLER\r\nInnan du slutf\u00f6r, verifiera:\r\n1. Varje rad i checklistan inneh\u00e5ller en ISO 30414-mappning och minst ett konkret verifieringssteg.\r\n2. Varje kontrollpunkt specificerar bevisartefakter (inte bara \u201ddokumentation\u201d).\r\n3. Tv\u00e4rfunktionella beroenden namnges uttryckligen f\u00f6r punkter med \u00f6verl\u00e4mningar (HRIS\/l\u00f6n\/juridik\/ekonomi\/IT).\r\n4. Po\u00e4ngs\u00e4ttningskriterier \u00e4r m\u00e4tbara och skiljer tydligt mellan delvis efterlevnad och icke-efterlevnad.\r\n5. \u00c5tg\u00e4rder har ansvariga, beroenden och tidsintervall i linje med riskniv\u00e5.";
    const variables = ["[BESKRIV_NUVARANDE_HR_PROCESSER_OCH_SYSTEM]","[ANGE_TOTALT_ANTAL_ANSTALLDA_OCH_GEOGRAFISK_FORDELNING]","[LISTA_TILLAMPLIGA_REGELVERK_OCH_JURISDIKTIONER]","[BRANSCH]","[HUVUDSAKLIGT_MAL]","[TIDSRAM]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat från AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Börja med att mata in din ”röriga verklighet”, inte din policypärm.</strong> Klistra in hur arbetet faktiskt flödar mellan HRIS, lön, ekonomi och juridik, inklusive kända smärtpunkter. Om du bara ger den officiella processen får du kontrollpunkter som godkänns på papper men faller i praktiken. Testa att lägga till en notering som: ”Lönejusteringar hanteras via godkännanden i e-post, inte via ärenden.”</li>


<li><strong>Be om bevisexempel som era system faktiskt kan ta fram.</strong> Prompten kräver redan revisionsspår, men du kan skärpa den genom att namnge era verktyg (Workday, SAP, ADP, ServiceNow, Jira, Google Drive, SharePoint). Följ upp med: ”För varje bevisartefakt, ange system of record och exakt rapport-/loggnamn att hämta, samt ansvarig.”</li>


<li><strong>Tvinga fram tydliga tröskelvärden och regler för stickprov.</strong> Revisioner stannar när ”granska ett stickprov” lämnas odefinierat. Efter första körningen, be: ”Skriv om varje kontrollpunkt med en regel för minsta stickprovsstorlek (t.ex. 25 poster per kvartal) och en godkänd-tröskel (t.ex. ≥ 95 % fullständighet), inklusive ett steg för avvikelsehantering.”</li>


<li><strong>Iterera poängmodellen utifrån er faktiska riskprofil.</strong> Prompten viktar områden med hög exponering, men du bör anpassa den till er kontext (reglerad bransch, börsbolag, flera länder). Efter första resultatet, testa: ”Gör poängsättningen mer aggressiv för lönejämlikhet och rapportering av personalomsättning, och mer konservativ för upplysningar med låg sanktionsnivå; visa de nya vikterna och motivera dem.”</li>


<li><strong>Gör det till en arbetstakt, inte ett engångsdokument.</strong> Använd kontrollpunktslistan för att skapa en månads-/kvartalskalender för kontroller med ansvariga och förfallodatum, och kör sedan prompten igen för att förfina testprocedurerna när ni lär er mer. En stark uppföljning är: ”Konvertera åtgärdsplanen till en 90-dagars färdplan med veckovisa milstolpar, nödvändiga intressenter och sign-off-punkter.” Det är ärligt talat här prompten betalar tillbaka sig.</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade prompter</h2>



<p>När dina ISO 30414-kontrollpunkter är definierade hjälper dessa relaterade prompter dig att koordinera tvärfunktionellt genomförande och hålla ansvariga personer ansvariga.</p>



<p>Om du också behöver ett strukturerat sätt att synka HR, ekonomi, IT och juridik kring vem som gör vad (och vad varje team får i utbyte), använd <a href="https://nodenordic.se/prompts/skapa-en-partner-playbook-steg-for-steg-med-ai-prompt">Skapa en partner-playbook steg för steg med AI-prompt</a>. Den passar bra när revisionsfynd visar trasiga överlämningar och otydligt ägarskap, eftersom den hjälper till att formalisera samarbetsöverenskommelser och eskaleringsvägar.</p>



<p>För team som driver förändringsutrullning över flera avdelningar efter revisionsfynd är <a href="https://nodenordic.se/prompts/bygg-en-saljroadmap-for-partnerrekommendationer-med-ai-prompt">Bygg en säljroadmap för partnerrekommendationer med AI-prompt</a> förvånansvärt användbar som planeringsformat. Se ”partner” som vilken intern intressentgrupp som helst och använd roadmap-strukturen för att sekvensera kommunikation, enablement och adoptionssteg över åtgärdstidslinjen.</p>



<p>När du behöver buy-in snabbt och vill ha en enkel mekanism som driver deltagande (till exempel att chefer genomför avgångsintervjuer i tid eller att team skickar in bevispaket konsekvent), kan <a href="https://nodenordic.se/prompts/bygg-en-plan-for-en-hanvisningsstrategi-med-ai">Bygg en plan för en hänvisningsstrategi med AI</a> hjälpa dig att utforma incitament och budskap. Den är inte HR-specifik, men strategiupplägget överförs väl till interna program som bygger på beteendeförändring.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/skapa-en-partner-playbook-steg-for-steg-med-ai-prompt">Skapa en partner-playbook steg för steg med AI-prompt</a>: Förtydliga ägarskap, överlämningar och eskalering.</li>


<li><a href="https://nodenordic.se/prompts/bygg-en-saljroadmap-for-partnerrekommendationer-med-ai-prompt">Bygg en säljroadmap för partnerrekommendationer med AI-prompt</a>: Roadmap-struktur för adoptionsutrullning.</li>


<li><a href="https://nodenordic.se/prompts/bygg-en-plan-for-en-hanvisningsstrategi-med-ai">Bygg en plan för en hänvisningsstrategi med AI</a>: Incitament och budskap för deltagande.</li>


<li><a href="https://nodenordic.se/prompts/skapa-en-lanseringsplan-for-ett-varvningsprogram-med-ai">Skapa en lanseringsplan för ett värvningsprogram med ai</a>: Lanseringsplansformat för interna initiativ.</li>


<li><a href="https://nodenordic.se/prompts/bygg-ett-kundvarvningsprogram-med-ai-prompt">Bygg ett kundvärvningsprogram med ai-prompt</a>: Programmekanik som du kan spegla internt.</li>

</div>

<div class="faq-section">

<h2 class="wp-block-heading">Vanliga frågor</h2>


<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för ISO 30414-revision?</span>

<p class="answer"><strong>HR compliance managers</strong> använder den för att översätta ISO 30414-krav till kontrollpunkter med tydliga beviskrav, så att revisionsförberedelser slutar vara gissningslek. <strong>Internrevisorer</strong> förlitar sig på den för att bygga repeterbara testprocedurer (stickprov, intervjuer, avvikelsehantering) som visar att kontroller fungerar konsekvent. <strong>Ansvariga för people analytics</strong> får nytta eftersom prompten tvingar fram metric-definitioner och spårbarhet tillbaka till system of record, vilket höjer rapporteringsnoggrannheten. <strong>HR ops-/HRIS-ansvariga</strong> använder bevislistorna för att ringa in var loggar, godkännanden och arbetsflöden måste finnas i de verktyg teamen redan använder.</p>

</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för ISO 30414-revision?</span>

<p class="answer"><strong>Finansiella tjänster</strong> använder den för att skapa försvarbara beviskedjor och viktad poängsättning där tillsynsmyndigheter förväntar sig starka kontroller och dokumenterad avvikelsehantering. <strong>Hälso- och sjukvård samt life science</strong> använder den när personalrapportering, personalomsättning och ersättningspraxis kan skapa juridisk exponering och reputationsskada, särskilt över flera enheter. <strong>Stora tillverkare i flera länder</strong> får värde eftersom tvärfunktionella överlämningar (anläggningar, lönecykler, företagsråd, lokala juridiska krav) är exakt där compliance brister. <strong>Snabbväxande techbolag</strong> använder den för att snabbt mogna HR-kontroller när personalstyrkan växer och rapporteringsbehoven skiftar från ”interna dashboards” till revisionsredo upplysningar.</p>

</div>

<div class="faq-item">
<span class="question">Varför ger enkla AI-prompter för att bygga en ISO 30414 HR compliance-revision svaga resultat?</span>

<p class="answer">En typisk prompt som ”Skriv en ISO 30414 HR compliance audit checklist” misslyckas eftersom den: saknar tydlig mappning mot ISO 30414-ämne/underämne per kontrollpunkt, ger inga verifieringsprocedurer (stickprov, intervjuer, avvikelsetester), ignorerar beviskrav så att inget går att bevisa, producerar generiska HR-råd enligt ”best practice” i stället för revisionsredo kontrolltester, och missar tvärfunktionella överlämningar där data och godkännanden faktiskt rör sig. Resultatet ser professionellt ut men håller inte för granskning när någon frågar: ”Visa mig loggen, ärendet och godkännandekedjan.” Den här prompten är designad för att förhindra just det misslyckandet.</p>

</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här ISO 30414 audit prompt till min specifika situation?</span>

<p class="answer">Ja, och du bör göra det, eftersom de bästa kontrollpunkterna beror på era system, geografier och riskexponering. Lägg till er kontext innan du kör den: HRIS-/lönesystem, personalstyrka, länder, fack/företagsråd, nyliga incidenter och den rapporteringskadens ni måste hålla. Följ sedan upp med en skärpande prompt som: ”Revidera kontrollpunkterna så att de matchar våra system of record (Workday + ADP), inkludera hänsyn till EU-företagsråd och sätt regler för stickprov vid kvartalsrapportering; behåll ISO 30414-referenserna i varje kontrollpunkt.” Du kan också be den ombalansera vikter mot era områden med högst sanktionsnivå, som lönejämlikhet eller upplysningar om personalomsättning.</p>

</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här ISO 30414 audit prompt prompt?</span>

<p class="answer">Det största misstaget är att inte ge någon organisationskontext alls, vilket tvingar modellen att anta generiska system och generiska arbetsflöden; i stället för ”vi använder ett HRIS”, skriv ”Workday är HRIS, ADP är lön, godkännanden finns i ServiceNow och ekonomi stämmer av personalstyrkan månadsvis.” Ett annat vanligt fel är att acceptera kontrollpunkter som beskriver utfall i stället för tester; tryck på ”hur du verifierar” med stickprovsstorlek och godkänd-trösklar (bra: ”stickprov 25 avslut per kvartal”, dåligt: ”granska avslut”). Team glömmer också att kräva namngivna bevisartefakter, så att inget går att samla in (bra: ”Workday-rapport X + ticket-ID:n för lönejusteringar”, dåligt: ”tillhandahåll dokumentation”). Till sist hoppar många över tvärfunktionella överlämningar; be uttryckligen om överlämningstester mellan HRIS, lön, juridik och ekonomi så att gap synliggörs tidigt.</p>

</div>

<div class="faq-item">
<span class="question">Vem ska INTE använda den här ISO 30414 audit prompt prompt?</span>

<p class="answer">Den här prompten är inte idealisk för engångsprojekt för HR-dokumentation där du bara behöver en lätt checklista och inte kommer att samla in bevis eller genomföra tester. Den är också ett dåligt val om din organisation inte har förbundit sig till ISO 30414-liknande rapportering alls och du fortfarande validerar vad ni ens vill mäta. Och om du behöver juridisk rådgivning kring jurisdiktionsspecifik arbetsrätt ska du använda specialistjurister; det här är ett ramverk för revisionsdesign och verifiering, inte juridisk vägledning. I de fallen: börja med en enklare intern policygranskning och kom tillbaka när ni är redo att operationalisera kontroller.</p>

</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för ISO 30414-revision?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "HR compliance managers använder den för att översätta ISO 30414-krav till kontrollpunkter med tydliga beviskrav, så att revisionsförberedelser slutar vara gissningslek. Internrevisorer förlitar sig på den för att bygga repeterbara testprocedurer (stickprov, intervjuer, avvikelsehantering) som visar att kontroller fungerar konsekvent. Ansvariga för people analytics får nytta eftersom prompten tvingar fram metric-definitioner och spårbarhet tillbaka till system of record, vilket höjer rapporteringsnoggrannheten. HR ops-/HRIS-ansvariga använder bevislistorna för att ringa in var loggar, godkännanden och arbetsflöden måste finnas i de verktyg teamen redan använder."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för ISO 30414-revision?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Finansiella tjänster använder den för att skapa försvarbara beviskedjor och viktad poängsättning där tillsynsmyndigheter förväntar sig starka kontroller och dokumenterad avvikelsehantering. Hälso- och sjukvård samt life science använder den när personalrapportering, personalomsättning och ersättningspraxis kan skapa juridisk exponering och reputationsskada, särskilt över flera enheter. Stora tillverkare i flera länder får värde eftersom tvärfunktionella överlämningar (anläggningar, lönecykler, företagsråd, lokala juridiska krav) är exakt där compliance brister. Snabbväxande techbolag använder den för att snabbt mogna HR-kontroller när personalstyrkan växer och rapporteringsbehoven skiftar från interna dashboards till revisionsredo upplysningar."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger enkla AI-prompter för att bygga en ISO 30414 HR compliance-revision svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som ”Skriv en ISO 30414 HR compliance audit checklist” misslyckas eftersom den: saknar tydlig mappning mot ISO 30414-ämne/underämne per kontrollpunkt, ger inga verifieringsprocedurer (stickprov, intervjuer, avvikelsetester), ignorerar beviskrav så att inget går att bevisa, producerar generiska HR-råd enligt ”best practice” i stället för revisionsredo kontrolltester, och missar tvärfunktionella överlämningar där data och godkännanden faktiskt rör sig. Resultatet ser professionellt ut men håller inte för granskning när någon frågar: ”Visa mig loggen, ärendet och godkännandekedjan.” Den här prompten är designad för att förhindra just det misslyckandet."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här ISO 30414 audit prompt till min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja, och du bör göra det, eftersom de bästa kontrollpunkterna beror på era system, geografier och riskexponering. Lägg till er kontext innan du kör den: HRIS-/lönesystem, personalstyrka, länder, fack/företagsråd, nyliga incidenter och den rapporteringskadens ni måste hålla. Följ sedan upp med en skärpande prompt som: ”Revidera kontrollpunkterna så att de matchar våra system of record (Workday + ADP), inkludera hänsyn till EU-företagsråd och sätt regler för stickprov vid kvartalsrapportering; behåll ISO 30414-referenserna i varje kontrollpunkt.” Du kan också be den ombalansera vikter mot era områden med högst sanktionsnivå, som lönejämlikhet eller upplysningar om personalomsättning."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här ISO 30414 audit prompt prompt?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att inte ge någon organisationskontext alls, vilket tvingar modellen att anta generiska system och generiska arbetsflöden; i stället för ”vi använder ett HRIS”, skriv ”Workday är HRIS, ADP är lön, godkännanden finns i ServiceNow och ekonomi stämmer av personalstyrkan månadsvis.” Ett annat vanligt fel är att acceptera kontrollpunkter som beskriver utfall i stället för tester; tryck på ”hur du verifierar” med stickprovsstorlek och godkänd-trösklar (bra: ”stickprov 25 avslut per kvartal”, dåligt: ”granska avslut”). Team glömmer också att kräva namngivna bevisartefakter, så att inget går att samla in (bra: ”Workday-rapport X + ticket-ID:n för lönejusteringar”, dåligt: ”tillhandahåll dokumentation”). Till sist hoppar många över tvärfunktionella överlämningar; be uttryckligen om överlämningstester mellan HRIS, lön, juridik och ekonomi så att gap synliggörs tidigt."
      }
    },
    {
      "@type": "Question",
      "name": "Vem ska INTE använda den här ISO 30414 audit prompt prompt?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten är inte idealisk för engångsprojekt för HR-dokumentation där du bara behöver en lätt checklista och inte kommer att samla in bevis eller genomföra tester. Den är också ett dåligt val om din organisation inte har förbundit sig till ISO 30414-liknande rapportering alls och du fortfarande validerar vad ni ens vill mäta. Och om du behöver juridisk rådgivning kring jurisdiktionsspecifik arbetsrätt ska du använda specialistjurister; det här är ett ramverk för revisionsdesign och verifiering, inte juridisk vägledning. I de fallen: börja med en enklare intern policygranskning och kom tillbaka när ni är redo att operationalisera kontroller."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">

<p>Revisioner belönar inte goda intentioner. De belönar verifierbara kontroller, strukturerade bevis och tydlig åtgärdssättning. Klistra in den här prompten i ditt AI-verktyg, generera kontrollpunktssystemet och börja stänga gapen med en plan du kan försvara.</p>

</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/skapa-en-iso-30414-hr-compliancegranskning/">Skapa en ISO 30414 HR-compliancegranskning</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bygg en RBAC-plan för företag med AI-prompt</title>
		<link>https://nodenordic.se/prompts/bygg-en-rbac-plan-for-foretag-med-ai-prompt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bygg-en-rbac-plan-for-foretag-med-ai-prompt</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:51:37 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5001442</guid>

					<description><![CDATA[<p>Luckor i åtkomst exponerar data. En vass AI-prompt som designar RBAC för företag med schema, middleware, UI-styrning, tester och revisioner.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/bygg-en-rbac-plan-for-foretag-med-ai-prompt/">Bygg en RBAC-plan för företag med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: enterprise RBAC plan -->

<div class="hook-introduction">

<p>Din app har ”typ” behörigheter. Några admin-kontroller, ett par feature flags och lite UI-dold funktionalitet som får intressenter att känna sig trygga. Sedan hittar du ett direkt API-anrop som går förbi frontend, en intern roll som kan eskalera i det tysta, eller ett konsultkonto som fortfarande fungerar månader senare.</p>



<p>Den här <strong>enterprise RBAC-planen</strong> är byggd för <strong>säkerhetsfokuserade mjukvaruarkitekter</strong> som behöver mönster för efterlevnad som utvecklare inte råkar kringgå, <strong>engineering managers</strong> som städar upp röriga, inkonsekventa auktoriseringsregler mellan tjänster, och <strong>produktteam i reglerade miljöer</strong> som behöver revisionsredo åtkomstkontroller utan att göra UX:en miserabel. Resultatet är en komplett, implementeringsredo RBAC-blueprint: roller och behörigheter, ett dataschema med index och begränsningar, middleware-/guard-mönster, vägledning för UI-gating, testplaner, gransknings- och auditflöden samt en tydlig avgränsningssektion ”Det här är INTE”.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Vad du får</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Den återger din auktoriseringssituation och listar de specifika risker den är designad att stänga (obehörig åtkomst, privilegieeskalering och behörighetssprawl).</li>
          <li>Den designar en RBAC-modell som definierar roller, resurser, åtgärder och rollstruktur (platt vs. hierarkisk) med adminmönster som motstår eskalering.</li>
          <li>Den föreslår ett schema på datalagret (tabeller/collections) med index, begränsningar och migreringsanteckningar, inklusive prestandaimplikationer när roller och tenants växer.</li>
          <li>Den levererar backendmönster för enforcement (middleware/guards) plus vägledning för frontendupplevelsen så att UI:t aldrig blir den enda spärren.</li>
          <li>Den lägger till konkreta operativa skyddsräcken: tester, auditering och en sektion ”Det här är INTE” som förhindrar scope creep och falska säkerhetsantaganden.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du hittade en endpoint som borde vara begränsad, men den går att anropa med en vanlig användartoken.</li>
          <li>Din nuvarande ”admin”-roll är en allt-i-ett-lösning och du behöver tydlig separering av ansvar innan du lägger till fler interna team.</li>
          <li>Du refaktorerar tjänster och vill ha konsekventa auktoriseringsregler innan API:er blir fler i microservices.</li>
          <li>Compliance-krav eller enterprise-kunder efterfrågar minsta privilegium, auditloggar och tydliga processer för åtkomstgranskning.</li>
          <li>Multi-tenant-komplexitet är på väg (eller är redan här), och du behöver mönster som skalar utan att antalet behörigheter exploderar.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En komplett RBAC-modell med definierade roller, resurser, åtgärder och minst ett säkert mönster för admineskalering.</li>
           <li>Ett föreslaget schema med tabeller/collections, nyckelkolumner/fält och indexrekommendationer som håller behörighetskontroller snabba.</li>
           <li>Implementeringsredo vägledning för enforcement, inklusive middleware-/guard-logik och var kontroller måste ligga i request-livscykeln.</li>
           <li>En praktisk testplan (unit-, integrations- och missbrukstestfall) plus exempel på vad du ska verifiera för deny-by-default-beteende.</li>
           <li>En checklista för auditering och åtkomstgranskning, inklusive händelser att logga och återkommande granskningssteg som förblir hanterbara.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: generator för enterprise RBAC-blueprint</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[VERSALER_MED_UNDERSTRECK]</code></td>
                                <td class="var-desc">
                                    Ange den namnkonvention som ska användas för användarangivna värden, enligt formatet med versaler separerade med understreck.                                    <div class="var-example">Till exempel: "USER_ROLE_PERMISSIONS eller RESOURCE_ACCESS_LEVEL"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[VERSALER_MED_UNDERSTRECK]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[FORMAT]</code></td>
                                <td class="var-desc">
                                    Definiera vilket format eller vilken struktur som krävs för RBAC-ritningen, till exempel JSON, YAML eller ett databasschema.                                    <div class="var-example">Till exempel: "JSON-struktur med nästlade roller och behörigheter, eller ett SQL-schema för relationsdatabaser."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[FORMAT]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[KONTEXT]</code></td>
                                <td class="var-desc">
                                    Ange detaljer om applikationen, inklusive dess syfte, arkitektur och eventuella specifika begränsningar eller krav.                                    <div class="var-example">Till exempel: "En SaaS-applikation för projektledning med multitenancy som stödjer både webb och mobil samt hög samtidighet bland användare."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[KONTEXT]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BRANSCH]</code></td>
                                <td class="var-desc">
                                    Ange vilken bransch eller domän applikationen riktar sig till, eftersom detta kan påverka efterlevnadskrav och mönster för åtkomstkontroll.                                    <div class="var-example">Till exempel: "Hälso- och sjukvårdsbranschen med krav på HIPAA-efterlevnad och strikta kontroller för datasekretess."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BRANSCH]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[PRODUKTBESKRIVNING]</code></td>
                                <td class="var-desc">
                                    Beskriv kort produkten, inklusive dess huvudfunktioner, funktionalitet och målgrupp.                                    <div class="var-example">Till exempel: "En molnbaserad CRM-plattform som gör det möjligt för säljteam att hantera kundrelationer, följa upp leads och automatisera arbetsflöden."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[PRODUKTBESKRIVNING]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[MALGRUPP]</code></td>
                                <td class="var-desc">
                                    Beskriv applikationens primära användare, inklusive deras roller, behov och eventuella utmärkande egenskaper.                                    <div class="var-example">Till exempel: "Säkerhetsteam på företagsnivå som hanterar åtkomstkontroll för 500+ medarbetare över flera avdelningar och platser."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[MALGRUPP]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Vad detta INTE är</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INPUTS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">OUTPUTSPECIFIKATION</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Rollarkitektur</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Databasschema</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Middleware-implementation</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">UI-åtkomstkontroll</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Skydd av API-routes</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Felhantering</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Teststrategi</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Övervakning &amp; revision</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Checklista för driftsättning</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Skapa en komplett, implementeringsklar blueprint för rollbaserad åtkomstkontroll (RBAC) anpassad till den givna applikationen. Leveransen måste stänga pågående obehöriga åtkomstproblem, förhindra privilegieeskalering (extern och intern) och förbli underhållbar när produkten och teamet skalar – utan att försämra användarupplevelsen.

## PERSONA
Agera som en säkerhetsfokuserad mjukvaruarkitekt och tidigare enterprise-säkerhetsrådgivare som har lett flera utrullningar av zero-trust och least privilege i miljöer med hög compliance. Kommunicera som en pragmatisk byggare: exakt, kodnära och tydlig med skyddsräcken som utvecklare faktiskt kommer att behålla.

## BEGRÄNSNINGAR
- Prioritera least privilege, explicit deny-by-default och separation of duties.
- Undvik vaga säkerhetsfloskler; varje rekommendation måste kunna mappas till ett konkret implementeringssteg.
- Optimera för långsiktig skalbarhet (fler roller, fler resurser, fler endpoints, fler tenants om tillämpligt).
- Inkludera både backend-tillämpning och frontend-mönster för upplevelse (UI ska aldrig vara den enda grindvakten).
- Föredra mönster som minskar “permission sprawl” och minimerar prestandaöverhead.
- Lägg till en undersektion “Vad detta INTE är” för att tydliggöra exkluderat scope.
- Hantera oklara eller saknade inputs genom att ange antaganden och erbjuda 2–3 säkra alternativ.
- Följ formatkrav för variabler: användarens värden använder [VERSALER_MED_UNDERSTRECK]; AI-ifyllda platshållare använder {Title Case}.

## PROCESS
1. **Föranalys (krav):** Återge situationen med dina egna ord, lista de viktigaste säkerhetsriskerna du adresserar och bekräfta de huvudsakliga tekniska begränsningarna du härleder från inputs.
2. **RBAC-modelldesign:** Definiera roller, behörigheter, resurser och actions; besluta om rollhierarki vs. platta roller; inkludera eskaleringsresistenta admin-mönster.
3. **Plan för datalagret:** Föreslå ett schema (tabeller/collections), index och constraints; inkludera migreringsvägledning och prestandanoteringar.
4. **Tillämpningslager:** Tillhandahåll middleware/guards/hooks för backend-auktorisering och integration med token-/sessionsstrategi.
5. **Frontend-åtkomstmönster:** Visa säkra UI-gating-mönster (feature flags vs. auktorisering), inklusive loading states och varningar kring optimistisk UI.
6. **Felhantering:** Designa användarvänliga denial-flöden, konventioner för felpayloads och fallback-komponenter.
7. **Validering:** Tillhandahåll tester (unit/integration/e2e) som bevisar att gränserna håller och inte kan kringgås.
8. **Telemetri:** Specificera audit events, loggfält, alert-signaler och granskningsflöden.
9. **Härdning vid driftsättning:** Ta fram en rollout-checklista som minskar lockouts och förhindrar regressioner som blir “för tillåtande”.

### Vad detta INTE är
- Inte en komplett guide för val av identity provider (IdP) eller ett upphandlingsdokument för SSO.
- Inte en generisk dump av en OWASP-checklista.
- Inte behörighetsstyrning baserad enbart på frontend-villkor.
- Inte en ersättning för threat modeling utöver åtkomstkontroll (du får notera angränsande risker, men håll fokus på RBAC).

## INPUTS
- **Applikationstyp:** [FORMAT]
- **Teknikstack:** [KONTEXT]
- **Databassystem:** [BRANSCH]
- **Nuvarande autentiseringsupplägg:** [PRODUKTBESKRIVNING]
- **Användarbasens storlek + tillväxtförväntan:** [MALGRUPP]

## OUTPUTSPECIFIKATION
Använd följande sektioner och fyll varje med konkret, byggbar detalj. Inkludera kodsnuttar i den dominerande stacken som antyds av [KONTEXT], och anpassa datastrukturer till [BRANSCH]. Använd dessa platshållare vid behov: {Role}, {Permission}, {Resource}, {Action}, {Endpoint}, {Table}, {Column}, {Index}, {Error Code}, {Log Event}.

### Rollarkitektur
- Katalog över {Role} med syfte, tillåtna {Action}s och skyddade {Resource}s  
- Strategi för rollhierarki eller komposition (och varför)  
- Admin-design som undviker “god mode” som standard (break-glass, tidsbegränsad elevation, godkännanden om tillämpligt)  
- Least-privilege-defaults och implikationer för onboarding/offboarding  

### Databasschema
- Tabeller/collections för användare, roller, behörigheter och mappingar (t.ex. user↔role, role↔permission)  
- Constraints, index och frågemönster för snabba kontroller  
- Vägledning för multi-tenant-stöd om relevant (säkra scoping-regler)  
- Exempel på migreringar eller schemadefinitioner som matchar [BRANSCH]  

### Middleware-implementation
- Backend-middleware/guards för auktorisering med:
  - token-/sessionsparsing kopplad till [PRODUKTBESKRIVNING]
  - behörighetsupplösning (cache:ad där det är lämpligt)
  - deny-by-default-logik och explicita kontroller
- Frontend-hooks/utilities för behörighetsfrågor (aldrig auktoritativt ensamt)
- Exempel:
  - kontrollera {Permission} för {Endpoint}
  - säkra känsliga admin-actions
  - förhindra IDOR-liknande åtkomst till {Resource} via ägarskap/tenant-scope  

### UI-åtkomstkontroll
- Komponentmönster för villkorlig rendering med säkra standarder  
- Strategier för gating på route-nivå, feature-visibility vs. enforcement av capability  
- Loading-/okända-behörighetslägen och “begär åtkomst”-UX  
- Vägledning för att undvika läckage av känslig data via prefetching eller cachade svar  

### Skydd av API-routes
- Mapping av endpoint-policy: {Endpoint} → kräver {Permission}s  
- Auktorisering på objekt-nivå (resursägarskap/tenant-gränser)  
- Rate limiting och abuse controls där RBAC korsar brute-force-/admin-endpoints  
- Exempel i det primära backend-ramverket som antyds av [KONTEXT]  

### Felhantering
- Standardiserat felkontrakt (t.ex. {Error Code}, message, correlation id)  
- Användartext som hjälper utan att avslöja känslig auktoriseringslogik  
- Fallback-UI-komponenter för forbidden-/unauthenticated-tillstånd  
- Säkra redirects och mönster för fortsättning efter inloggning  

### Teststrategi
- Unit-tester för behörighetsutvärdering  
- Integrationstester för middleware och endpoint-täckning  
- E2E-tester för vanliga rollresor och regressionfällor  
- Negativa tester som bevisar att privilegieeskalering blockeras (rollmanipulation, token replay, forced browsing)  

### Övervakning &amp; revision
- Schema för audit log och vägledning för lagring:
  - {Log Event}-typer (rolländring, behörighetsändring, nekad åtkomst, admin-actions)
  - obligatoriska fält (actor, target, resource, scope, timestamp, request id)
- Alert-signaler (spikar i nekad åtkomst, upprepad admin-probing, avvikande rolländringar)
- Rekommendationer för policy kring granskning/retention i linje med enterprise-förväntningar  

### Checklista för driftsättning
- Rollout-plan för att undvika lockouts (stegvis enforcement, shadow mode, allowlists med utgångsdatum)  
- Steg för data backfill/migrering för befintliga användare  
- Prestandakontroller (cache hit rates, authz query latency)  
- Säkerhetsverifieringsgrindar före release  

## KVALITETSKONTROLLER
I slutet, inkludera en kort verifikationslista som bekräftar:
- Least-privilege-defaults är enforced och “implicit allow” är eliminerat.
- Auktorisering är enforced server-side för varje skyddad {Endpoint} och åtkomst på objekt-nivå hanteras.
- Schemat stödjer tillväxt (fler roller/behörigheter/användare) utan långsamma behörighetskontroller.
- Tester inkluderar negativa fall för privilegieeskalering och forced browsing.
- Audit trails fångar roll-/behörighetsändringar och känsliga åtkomstförsök med tillräcklig kontext för att kunna utreda.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nSkapa en komplett, implementeringsklar blueprint f\u00f6r rollbaserad \u00e5tkomstkontroll (RBAC) anpassad till den givna applikationen. Leveransen m\u00e5ste st\u00e4nga p\u00e5g\u00e5ende obeh\u00f6riga \u00e5tkomstproblem, f\u00f6rhindra privilegieeskalering (extern och intern) och f\u00f6rbli underh\u00e5llbar n\u00e4r produkten och teamet skalar \u2013 utan att f\u00f6rs\u00e4mra anv\u00e4ndarupplevelsen.\r\n\r\n## PERSONA\r\nAgera som en s\u00e4kerhetsfokuserad mjukvaruarkitekt och tidigare enterprise-s\u00e4kerhetsr\u00e5dgivare som har lett flera utrullningar av zero-trust och least privilege i milj\u00f6er med h\u00f6g compliance. Kommunicera som en pragmatisk byggare: exakt, kodn\u00e4ra och tydlig med skyddsr\u00e4cken som utvecklare faktiskt kommer att beh\u00e5lla.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- Prioritera least privilege, explicit deny-by-default och separation of duties.\r\n- Undvik vaga s\u00e4kerhetsfloskler; varje rekommendation m\u00e5ste kunna mappas till ett konkret implementeringssteg.\r\n- Optimera f\u00f6r l\u00e5ngsiktig skalbarhet (fler roller, fler resurser, fler endpoints, fler tenants om till\u00e4mpligt).\r\n- Inkludera b\u00e5de backend-till\u00e4mpning och frontend-m\u00f6nster f\u00f6r upplevelse (UI ska aldrig vara den enda grindvakten).\r\n- F\u00f6redra m\u00f6nster som minskar \u201cpermission sprawl\u201d och minimerar prestanda\u00f6verhead.\r\n- L\u00e4gg till en undersektion \u201cVad detta INTE \u00e4r\u201d f\u00f6r att tydligg\u00f6ra exkluderat scope.\r\n- Hantera oklara eller saknade inputs genom att ange antaganden och erbjuda 2\u20133 s\u00e4kra alternativ.\r\n- F\u00f6lj formatkrav f\u00f6r variabler: anv\u00e4ndarens v\u00e4rden anv\u00e4nder [VERSALER_MED_UNDERSTRECK]; AI-ifyllda platsh\u00e5llare anv\u00e4nder {Title Case}.\r\n\r\n## PROCESS\r\n1. **F\u00f6ranalys (krav):** \u00c5terge situationen med dina egna ord, lista de viktigaste s\u00e4kerhetsriskerna du adresserar och bekr\u00e4fta de huvudsakliga tekniska begr\u00e4nsningarna du h\u00e4rleder fr\u00e5n inputs.\r\n2. **RBAC-modelldesign:** Definiera roller, beh\u00f6righeter, resurser och actions; besluta om rollhierarki vs. platta roller; inkludera eskaleringsresistenta admin-m\u00f6nster.\r\n3. **Plan f\u00f6r datalagret:** F\u00f6resl\u00e5 ett schema (tabeller\/collections), index och constraints; inkludera migreringsv\u00e4gledning och prestandanoteringar.\r\n4. **Till\u00e4mpningslager:** Tillhandah\u00e5ll middleware\/guards\/hooks f\u00f6r backend-auktorisering och integration med token-\/sessionsstrategi.\r\n5. **Frontend-\u00e5tkomstm\u00f6nster:** Visa s\u00e4kra UI-gating-m\u00f6nster (feature flags vs. auktorisering), inklusive loading states och varningar kring optimistisk UI.\r\n6. **Felhantering:** Designa anv\u00e4ndarv\u00e4nliga denial-fl\u00f6den, konventioner f\u00f6r felpayloads och fallback-komponenter.\r\n7. **Validering:** Tillhandah\u00e5ll tester (unit\/integration\/e2e) som bevisar att gr\u00e4nserna h\u00e5ller och inte kan kringg\u00e5s.\r\n8. **Telemetri:** Specificera audit events, loggf\u00e4lt, alert-signaler och granskningsfl\u00f6den.\r\n9. **H\u00e4rdning vid drifts\u00e4ttning:** Ta fram en rollout-checklista som minskar lockouts och f\u00f6rhindrar regressioner som blir \u201cf\u00f6r till\u00e5tande\u201d.\r\n\r\n### Vad detta INTE \u00e4r\r\n- Inte en komplett guide f\u00f6r val av identity provider (IdP) eller ett upphandlingsdokument f\u00f6r SSO.\r\n- Inte en generisk dump av en OWASP-checklista.\r\n- Inte beh\u00f6righetsstyrning baserad enbart p\u00e5 frontend-villkor.\r\n- Inte en ers\u00e4ttning f\u00f6r threat modeling ut\u00f6ver \u00e5tkomstkontroll (du f\u00e5r notera angr\u00e4nsande risker, men h\u00e5ll fokus p\u00e5 RBAC).\r\n\r\n## INPUTS\r\n- **Applikationstyp:** [FORMAT]\r\n- **Teknikstack:** [KONTEXT]\r\n- **Databassystem:** [BRANSCH]\r\n- **Nuvarande autentiseringsuppl\u00e4gg:** [PRODUKTBESKRIVNING]\r\n- **Anv\u00e4ndarbasens storlek + tillv\u00e4xtf\u00f6rv\u00e4ntan:** [MALGRUPP]\r\n\r\n## OUTPUTSPECIFIKATION\r\nAnv\u00e4nd f\u00f6ljande sektioner och fyll varje med konkret, byggbar detalj. Inkludera kodsnuttar i den dominerande stacken som antyds av [KONTEXT], och anpassa datastrukturer till [BRANSCH]. Anv\u00e4nd dessa platsh\u00e5llare vid behov: {Role}, {Permission}, {Resource}, {Action}, {Endpoint}, {Table}, {Column}, {Index}, {Error Code}, {Log Event}.\r\n\r\n### Rollarkitektur\r\n- Katalog \u00f6ver {Role} med syfte, till\u00e5tna {Action}s och skyddade {Resource}s  \r\n- Strategi f\u00f6r rollhierarki eller komposition (och varf\u00f6r)  \r\n- Admin-design som undviker \u201cgod mode\u201d som standard (break-glass, tidsbegr\u00e4nsad elevation, godk\u00e4nnanden om till\u00e4mpligt)  \r\n- Least-privilege-defaults och implikationer f\u00f6r onboarding\/offboarding  \r\n\r\n### Databasschema\r\n- Tabeller\/collections f\u00f6r anv\u00e4ndare, roller, beh\u00f6righeter och mappingar (t.ex. user\u2194role, role\u2194permission)  \r\n- Constraints, index och fr\u00e5gem\u00f6nster f\u00f6r snabba kontroller  \r\n- V\u00e4gledning f\u00f6r multi-tenant-st\u00f6d om relevant (s\u00e4kra scoping-regler)  \r\n- Exempel p\u00e5 migreringar eller schemadefinitioner som matchar [BRANSCH]  \r\n\r\n### Middleware-implementation\r\n- Backend-middleware\/guards f\u00f6r auktorisering med:\r\n  - token-\/sessionsparsing kopplad till [PRODUKTBESKRIVNING]\r\n  - beh\u00f6righetsuppl\u00f6sning (cache:ad d\u00e4r det \u00e4r l\u00e4mpligt)\r\n  - deny-by-default-logik och explicita kontroller\r\n- Frontend-hooks\/utilities f\u00f6r beh\u00f6righetsfr\u00e5gor (aldrig auktoritativt ensamt)\r\n- Exempel:\r\n  - kontrollera {Permission} f\u00f6r {Endpoint}\r\n  - s\u00e4kra k\u00e4nsliga admin-actions\r\n  - f\u00f6rhindra IDOR-liknande \u00e5tkomst till {Resource} via \u00e4garskap\/tenant-scope  \r\n\r\n### UI-\u00e5tkomstkontroll\r\n- Komponentm\u00f6nster f\u00f6r villkorlig rendering med s\u00e4kra standarder  \r\n- Strategier f\u00f6r gating p\u00e5 route-niv\u00e5, feature-visibility vs. enforcement av capability  \r\n- Loading-\/ok\u00e4nda-beh\u00f6righetsl\u00e4gen och \u201cbeg\u00e4r \u00e5tkomst\u201d-UX  \r\n- V\u00e4gledning f\u00f6r att undvika l\u00e4ckage av k\u00e4nslig data via prefetching eller cachade svar  \r\n\r\n### Skydd av API-routes\r\n- Mapping av endpoint-policy: {Endpoint} \u2192 kr\u00e4ver {Permission}s  \r\n- Auktorisering p\u00e5 objekt-niv\u00e5 (resurs\u00e4garskap\/tenant-gr\u00e4nser)  \r\n- Rate limiting och abuse controls d\u00e4r RBAC korsar brute-force-\/admin-endpoints  \r\n- Exempel i det prim\u00e4ra backend-ramverket som antyds av [KONTEXT]  \r\n\r\n### Felhantering\r\n- Standardiserat felkontrakt (t.ex. {Error Code}, message, correlation id)  \r\n- Anv\u00e4ndartext som hj\u00e4lper utan att avsl\u00f6ja k\u00e4nslig auktoriseringslogik  \r\n- Fallback-UI-komponenter f\u00f6r forbidden-\/unauthenticated-tillst\u00e5nd  \r\n- S\u00e4kra redirects och m\u00f6nster f\u00f6r forts\u00e4ttning efter inloggning  \r\n\r\n### Teststrategi\r\n- Unit-tester f\u00f6r beh\u00f6righetsutv\u00e4rdering  \r\n- Integrationstester f\u00f6r middleware och endpoint-t\u00e4ckning  \r\n- E2E-tester f\u00f6r vanliga rollresor och regressionf\u00e4llor  \r\n- Negativa tester som bevisar att privilegieeskalering blockeras (rollmanipulation, token replay, forced browsing)  \r\n\r\n### \u00d6vervakning & revision\r\n- Schema f\u00f6r audit log och v\u00e4gledning f\u00f6r lagring:\r\n  - {Log Event}-typer (roll\u00e4ndring, beh\u00f6righets\u00e4ndring, nekad \u00e5tkomst, admin-actions)\r\n  - obligatoriska f\u00e4lt (actor, target, resource, scope, timestamp, request id)\r\n- Alert-signaler (spikar i nekad \u00e5tkomst, upprepad admin-probing, avvikande roll\u00e4ndringar)\r\n- Rekommendationer f\u00f6r policy kring granskning\/retention i linje med enterprise-f\u00f6rv\u00e4ntningar  \r\n\r\n### Checklista f\u00f6r drifts\u00e4ttning\r\n- Rollout-plan f\u00f6r att undvika lockouts (stegvis enforcement, shadow mode, allowlists med utg\u00e5ngsdatum)  \r\n- Steg f\u00f6r data backfill\/migrering f\u00f6r befintliga anv\u00e4ndare  \r\n- Prestandakontroller (cache hit rates, authz query latency)  \r\n- S\u00e4kerhetsverifieringsgrindar f\u00f6re release  \r\n\r\n## KVALITETSKONTROLLER\r\nI slutet, inkludera en kort verifikationslista som bekr\u00e4ftar:\r\n- Least-privilege-defaults \u00e4r enforced och \u201cimplicit allow\u201d \u00e4r eliminerat.\r\n- Auktorisering \u00e4r enforced server-side f\u00f6r varje skyddad {Endpoint} och \u00e5tkomst p\u00e5 objekt-niv\u00e5 hanteras.\r\n- Schemat st\u00f6djer tillv\u00e4xt (fler roller\/beh\u00f6righeter\/anv\u00e4ndare) utan l\u00e5ngsamma beh\u00f6righetskontroller.\r\n- Tester inkluderar negativa fall f\u00f6r privilegieeskalering och forced browsing.\r\n- Audit trails f\u00e5ngar roll-\/beh\u00f6righets\u00e4ndringar och k\u00e4nsliga \u00e5tkomstf\u00f6rs\u00f6k med tillr\u00e4cklig kontext f\u00f6r att kunna utreda.";
    const variables = ["[VERSALER_MED_UNDERSTRECK]","[FORMAT]","[KONTEXT]","[BRANSCH]","[PRODUKTBESKRIVNING]","[MALGRUPP]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat från AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Ta med en verklig resurskarta, inte bara ”användare och admins”.</strong> Innan du kör prompten, lista 10–30 konkreta resurser och verb (till exempel: ”Fakturor: skapa, visa, återbetala, exportera” och ”Användare: bjuda in, inaktivera, återställa MFA”). Om du bara säger ”säkra min app” får du abstrakta roller som faller sönder så fort en ny endpoint släpps.</li>


<li><strong>Tvinga fram explicit deny-by-default i outputen.</strong> När du fått första utkastet, följ upp med: ”Visa mig deny-by-default-regeln och exakt middleware-/guard-beteende när en behörighet saknas.” Det hindrar designen från att glida mot ”tillåt om det inte blockeras”, vilket är så privilegieeskalering brukar smyga sig in.</li>


<li><strong>Be den modellera dina mest riskfyllda flöden först.</strong> Välj 2–3 scenarier som ”återbetalningar”, ”export av PII” eller ”rolltilldelning”, och prompta: ”Designa roller och behörigheter kring dessa flöden och generalisera sedan.” Du får renare separering av ansvar och mindre behörighetssprawl än om du utgår från organisationsscheman.</li>


<li><strong>Iterera på rollgranularitet med riktade kontraster.</strong> Efter första outputen, prova att fråga: ”Gör nu alternativ 2 mer aggressivt (färre roller, bredare behörigheter) och alternativ 4 mer konservativt (mer separering av ansvar), och betygsätt varje alternativ för revisionsbarhet och utvecklarfriktion.” Att se tradeoffs sida vid sida gör godkännande från intressenter mycket snabbare.</li>


<li><strong>Kombinera RBAC med auditkrav i en andra vända.</strong> När roller och middleware är utkastade, fråga: ”Lägg till en taxonomi för audithändelser med händelsenamn, obligatoriska fält, rekommendationer för retention och 3 exempel på loggrader för de mest känsliga åtgärderna.” Det gör en teoretisk RBAC-modell till något du kan försvara vid en incidentgranskning.</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade prompter</h2>



<p>Om du bygger seriös systemdokumentation kan de här prompterna hjälpa dig att snabbt ta fram strukturerade, granskningsbara underlag (bara i helt andra format).</p>



<p>Om du också behöver ett tajt, minnesvärt sätt att kommunicera en komplex satsning internt kan <a href="https://nodenordic.se/prompts/skriv-en-sjungbar-refrang-med-ai-prompt">Skriv en sjungbar refräng med AI-prompt</a> vara en oväntat användbar kreativ begränsning. Använd den när du tar fram krokar till säkerhetsutbildning eller interna kampanjbudskap som team faktiskt kommer ihåg.</p>



<p>För team som tar fram polerat enablement-material passar <a href="https://nodenordic.se/prompts/skapa-en-catchy-melodiblueprint-med-ai-prompt">Skapa en catchy melodi‑blueprint med AI-prompt</a> bra när din lansering behöver ett strukturerat ”blueprint”-tänk. Annat domänområde, samma fördel: du får en repeterbar plan i stället för att improvisera varje gång.</p>



<p>När din organisation behöver en steg-för-steg-sekvens för leverabler och checkpoints är <a href="https://nodenordic.se/prompts/skapa-en-plan-for-latarrangemang-med-ai-prompt">Skapa en plan för låtarrangemang med AI-prompt</a> en bra referens för att göra råa idéer till en etappindelad disposition. Det kan komplettera en RBAC-utrullningsplan där ordningen spelar roll: schema först, sedan enforcement, sedan tester, sedan auditering.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/skriv-en-sjungbar-refrang-med-ai-prompt">Skriv en sjungbar refräng med AI-prompt</a>: Minnesvärd intern kommunikation och krokar för utbildning.</li>


<li><a href="https://nodenordic.se/prompts/skapa-en-catchy-melodiblueprint-med-ai-prompt">Skapa en catchy melodi‑blueprint med AI-prompt</a>: Strukturerad blueprint för kreativa leverabler.</li>


<li><a href="https://nodenordic.se/prompts/skapa-en-plan-for-latarrangemang-med-ai-prompt">Skapa en plan för låtarrangemang med AI-prompt</a>: Steg-för-steg-disposition med tydlig sekvensering.</li>

<li><a href="https://nodenordic.se/prompts/skriv-en-shakespeareansk-solomonolog">Skriv en shakespeareansk solomonolog</a>: Dramatisk berättelse för presentationer och manus.</li>

<li><a href="https://nodenordic.se/prompts/skapa-en-antologi-med-fem-dikter-med-ai-prompten">Skapa en antologi med fem dikter med AI-prompten</a>: Tematiskt paket av texter för kampanjer.</li>
<!-- /wp:post-content -->
</ul>
<!-- /wp:list -->
</div>

<div class="faq-section">
<!-- wp:heading {"level":2} -->
<h2 class="wp-block-heading">Vanliga frågor</h2>
<!-- /wp:heading -->

<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för en enterprise RBAC-plan?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>Mjukvaruarkitekter</strong> använder den för att göra ”vi behöver RBAC” till en konkret modell med roller, resurser, åtgärder och enforcement-lager som matchar verkliga request-flöden. <strong>Säkerhetsingenjörer</strong> använder den för att bygga in deny-by-default, minsta privilegium och separering av ansvar, plus audithändelser som håller vid granskningar. <strong>Engineering managers</strong> använder den när flera team levererar tjänster och auktoriseringslogiken börjar divergera, vilket skapar luckor och inkonsekvent beteende. <strong>Tekniska produktchefer</strong> använder den för att definiera rollkrav, förväntningar på UX-gating och acceptanskriterier utan svepande formuleringar.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för en enterprise RBAC-plan?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>SaaS-plattformar som säljer till mid-market och enterprise</strong> får värde eftersom kunder förväntar sig tydliga roller, tenant-medveten åtkomst och förutsägbara behörighetskontroller i både API:er och UI. <strong>Fintech- och betalningsteam</strong> använder den för att minska bedrägerier och internt missbruk genom att separera ansvar för högriskåtgärder som återbetalningar, exporter och ändringar av utbetalningar, och sedan backa det med audit trails. <strong>Vård och health tech</strong> använder den när åtkomst till PHI måste vara strikt avgränsad utifrån roll och kontext, och auditloggning behöver vara konsekvent mellan tjänster. <strong>B2B-marknadsplatser</strong> använder den för att hantera åtkomst för flera parter (köpare, säljare, operatörer) samtidigt som de förhindrar dataläckage mellan tenants när plattformen skalar.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Varför ger enkla AI-prompter för att designa en RBAC-blueprint svaga resultat?</span>
<!-- wp:paragraph -->
<p class="answer">En typisk prompt som ”Skriv ett RBAC-system för min app” misslyckas eftersom den: saknar en deny-by-default-hållning med explicit guard-beteende, inte ger något konkret schema eller indexeringsplan för prestanda vid behörighetskontroller, ignorerar separering av ansvar och vägar för admineskalering (där det mesta verkliga missbruket sker), producerar generiska roller som ”Admin/User” i stället för att mappa behörigheter till resurser och åtgärder, och missar operativa delar som tester, auditering och en tydlig avgränsning ”Det här är INTE” som förhindrar falsk säkerhetstrygghet.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här prompten för en enterprise RBAC-plan till min specifika situation?</span>
<!-- wp:paragraph -->
<p class="answer">Ja. Även om prompten har noll formulärvariabler anpassar du den genom att lägga till egna placeholders i rätt format, som [APPLICATION_TYPE], [TENANCY_MODEL], [SENSITIVE_ACTIONS] och [COMPLIANCE_REQUIREMENTS], och sedan låta modellen fylla sektioner i {Title Case}. Om detaljer är oklara, be den uttryckligen att ange antaganden och erbjuda 2–3 säkra alternativ, välj sedan ett och kör prompten igen med det beslutet låst. En bra uppföljning är: ”Revidera RBAC-blueprinten med antagandet [TENANCY_MODEL]=‘single database, tenant_id on every row’ och [SENSITIVE_ACTIONS]=‘export PII, change billing, manage roles’.”</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här prompten för en enterprise RBAC-plan?</span>
<!-- wp:paragraph -->
<p class="answer">Det största misstaget är att lämna [SENSITIVE_ACTIONS] för vagt — i stället för ”admin-grejer”, prova ”rolltilldelning, dataexport, återbetalningar, skapande av API-nycklar och impersonering.” Ett annat vanligt fel är att glömma tenant-upplägget i [TENANCY_MODEL]; ”multi-tenant” räcker inte, men ”delad databas med tenant_id och ibland operatörsåtkomst mellan tenants” fungerar. Team specificerar också [RESOURCES_AND_ACTIONS] för dåligt, vilket leder till fluffiga roller; ge en lista som ”Fakturor:visa/återbetala/exportera” snarare än ”fakturering.” Till sist hoppar många över [CURRENT_AUTH_GAPS]; ”några endpoints är öppna” är svagt, men ”GET /reports/export saknar server-side-kontroll” ger prompten något konkret att täppa till.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vem ska INTE använda den här prompten för en enterprise RBAC-plan?</span>
<!-- wp:paragraph -->
<p class="answer">Den här prompten är inte idealisk för engångsprototyper där du inte kommer att implementera enforcement på serversidan eller tester, eftersom blueprinten medvetet är grundlig. Den passar också dåligt om du inte har validerat vad dina roller faktiskt representerar (till exempel inga tydliga resurser, inga definierade känsliga åtgärder), eftersom modellen då tvingas göra breda antaganden. Om du bara behöver ett snabbt koncept för UI-only gating, använd i stället en lättviktig feature-flag-approach och kom tillbaka när du är redo att enforcea auktorisering i backend.</p>
<!-- /wp:paragraph -->
</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för en enterprise RBAC-plan?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Mjukvaruarkitekter använder den för att göra ”vi behöver RBAC” till en konkret modell med roller, resurser, åtgärder och enforcement-lager som matchar verkliga request-flöden. Säkerhetsingenjörer använder den för att bygga in deny-by-default, minsta privilegium och separering av ansvar, plus audithändelser som håller vid granskningar. Engineering managers använder den när flera team levererar tjänster och auktoriseringslogiken börjar divergera, vilket skapar luckor och inkonsekvent beteende. Tekniska produktchefer använder den för att definiera rollkrav, förväntningar på UX-gating och acceptanskriterier utan svepande formuleringar."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för en enterprise RBAC-plan?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SaaS-plattformar som säljer till mid-market och enterprise får värde eftersom kunder förväntar sig tydliga roller, tenant-medveten åtkomst och förutsägbara behörighetskontroller i både API:er och UI. Fintech- och betalningsteam använder den för att minska bedrägerier och internt missbruk genom att separera ansvar för högriskåtgärder som återbetalningar, exporter och ändringar av utbetalningar, och sedan backa det med audit trails. Vård och health tech använder den när åtkomst till PHI måste vara strikt avgränsad utifrån roll och kontext, och auditloggning behöver vara konsekvent mellan tjänster. B2B-marknadsplatser använder den för att hantera åtkomst för flera parter (köpare, säljare, operatörer) samtidigt som de förhindrar dataläckage mellan tenants när plattformen skalar."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger enkla AI-prompter för att designa en RBAC-blueprint svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som ”Skriv ett RBAC-system för min app” misslyckas eftersom den: saknar en deny-by-default-hållning med explicit guard-beteende, inte ger något konkret schema eller indexeringsplan för prestanda vid behörighetskontroller, ignorerar separering av ansvar och vägar för admineskalering (där det mesta verkliga missbruket sker), producerar generiska roller som ”Admin/User” i stället för att mappa behörigheter till resurser och åtgärder, och missar operativa delar som tester, auditering och en tydlig avgränsning ”Det här är INTE” som förhindrar falsk säkerhetstrygghet."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här prompten för en enterprise RBAC-plan till min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja. Även om prompten har noll formulärvariabler anpassar du den genom att lägga till egna placeholders i rätt format, som [APPLICATION_TYPE], [TENANCY_MODEL], [SENSITIVE_ACTIONS] och [COMPLIANCE_REQUIREMENTS], och sedan låta modellen fylla sektioner i {Title Case}. Om detaljer är oklara, be den uttryckligen att ange antaganden och erbjuda 2–3 säkra alternativ, välj sedan ett och kör prompten igen med det beslutet låst. En bra uppföljning är: ”Revidera RBAC-blueprinten med antagandet [TENANCY_MODEL]=‘single database, tenant_id on every row’ och [SENSITIVE_ACTIONS]=‘export PII, change billing, manage roles’.”"
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här prompten för en enterprise RBAC-plan?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att lämna [SENSITIVE_ACTIONS] för vagt — i stället för ”admin-grejer”, prova ”rolltilldelning, dataexport, återbetalningar, skapande av API-nycklar och impersonering.” Ett annat vanligt fel är att glömma tenant-upplägget i [TENANCY_MODEL]; ”multi-tenant” räcker inte, men ”delad databas med tenant_id och ibland operatörsåtkomst mellan tenants” fungerar. Team specificerar också [RESOURCES_AND_ACTIONS] för dåligt, vilket leder till fluffiga roller; ge en lista som ”Fakturor:visa/återbetala/exportera” snarare än ”fakturering.” Till sist hoppar många över [CURRENT_AUTH_GAPS]; ”några endpoints är öppna” är svagt, men ”GET /reports/export saknar server-side-kontroll” ger prompten något konkret att täppa till."
      }
    },
    {
      "@type": "Question",
      "name": "Vem ska INTE använda den här prompten för en enterprise RBAC-plan?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten är inte idealisk för engångsprototyper där du inte kommer att implementera enforcement på serversidan eller tester, eftersom blueprinten medvetet är grundlig. Den passar också dåligt om du inte har validerat vad dina roller faktiskt representerar (till exempel inga tydliga resurser, inga definierade känsliga åtgärder), eftersom modellen då tvingas göra breda antaganden. Om du bara behöver ett snabbt koncept för UI-only gating, använd i stället en lättviktig feature-flag-approach och kom tillbaka när du är redo att enforcea auktorisering i backend."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">
<!-- wp:paragraph -->
<p>RBAC är lätt att beskriva och svårt att hålla korrekt i skala. Använd den här prompten för att få en försvarbar, implementeringsredo plan för åtkomstkontroll som du kan leverera, testa och auditerera.</p>
<!-- /wp:paragraph -->
</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/bygg-en-rbac-plan-for-foretag-med-ai-prompt/">Bygg en RBAC-plan för företag med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Designa ett system för eskalering av compliance</title>
		<link>https://nodenordic.se/prompts/designa-ett-system-for-eskalering-av-compliance/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=designa-ett-system-for-eskalering-av-compliance</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:50:48 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5003042</guid>

					<description><![CDATA[<p>Incidenter försvinner efter kontorstid – den här AI-prompten bygger ett nivåindelat juridiskt eskaleringssystem med privilegiesäkra kanaler och styrelseinsyn.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/designa-ett-system-for-eskalering-av-compliance/">Designa ett system för eskalering av compliance</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: compliance escalation system -->
<div class="hook-introduction">

<p>De flesta compliance-eskaleringsplaner ser bra ut i en policyperm, för att sedan falla isär klockan 19:43 en fredag. Folk är osäkra på vad som “räknas”, chefer tonar ned dåliga nyheter och den första verkliga signalen når juridikfunktionen först när det redan är ett regulatoriskt problem. Än värre: spåret du skapar kan oavsiktligt leda till att juridisk sekretess/privilegium går förlorat eller dränka styrelsen i brus.</p>



<p>Det här <strong>compliance-eskaleringssystemet</strong> är byggt för <strong>juridiska chefer in-house</strong> som behöver en revisionsredo eskaleringsväg för flera länder som fortfarande fungerar efter kontorstid, <strong>compliance managers</strong> som vill stoppa “informell” tystning innan den blir en skandal, och <strong>risk-/bolagssekreterarteam</strong> som måste ge styrelsen meningsfull insyn utan att överösa underlagspaket med råa anklagelser. Resultatet är ett nivåindelat operativt system: tydliga definitioner av rapporteringspliktiga ärenden, styrning av routing och beslutsrätt per allvarlighetsgrad, privilegiesäkra kanaler, en “break glass”-väg för akuta lägen och lätta dokumentationsregler som bara skalar upp när risken är väsentlig.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Det du får</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Den utformar ett flernivåflöde för eskalering och styrning som täcker “från frontlinje till styrelse”, inklusive tydliga beslutsrätter och överlämningar på varje nivå.</li>
          <li>Den definierar kategorier för “rapporteringspliktiga ärenden” i klarspråk så att icke-juridisk personal kan flagga problem utan juridiskt fackspråk eller fullständig säkerhet.</li>
          <li>Den bygger privilegie-medvetna vägar (juridisk rådgivning vs. operativa åtgärder) för att minska risken för oavsiktligt bortfall av privilegium samtidigt som tillsynen bibehålls.</li>
          <li>Den kartlägger verkliga eskaleringsvägar som tar höjd för informella maktstrukturer, “skugg”-beslutsfattare, informellt inflytande och politiska stoppklossar – inte bara organisationsschemat.</li>
          <li>Den lägger till mekanik för införande (anti-repressalie-signaler, anonyma intagsalternativ, chef-bypass och återkopplingsloopar) så att rapportering faktiskt sker under press.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Ni har haft nära-ögat-händelser, hotline-rapporter eller internrevisionsfynd som inte nådde rätt nivå tillräckligt snabbt.</li>
          <li>Ni har verksamhet i flera jurisdiktioner och teamen är oense om vad som ska eskaleras till juridik, compliance, ledning eller styrelse.</li>
          <li>Incidenter efter kontorstid är en svag punkt och er nuvarande “ringlista”-lösning bygger på tyst kunskap.</li>
          <li>Ni möter ökade förväntningar från regulatorer och behöver en spårbar, försvarbar process i linje med King IV:s styrningsprinciper.</li>
          <li>Organisationen skalar upp, integrerar förvärv eller arbetar på distans, och informell tystning blir svårare att upptäcka.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En eskaleringsmodell med 4–6 nivåer med allvarlighetsgränser, beslutsrätt och namngivna överlämningspunkter.</li>
           <li>En taxonomi för rapporteringspliktiga ärenden med exempel, “om/så”-triggers och en kort checklista för intag utan juridikspråk.</li>
           <li>En privilegiesäker kommunikationsplan, inklusive vad som går till juridik, vad som hanteras operativt och vad styrelsen ser.</li>
           <li>En “break glass”-akutväg med en 60-minuters åtgärdssekvens och logik för kontakter efter kontorstid.</li>
           <li>Lätta dokumentationsregler plus ett uppskalningspaket för väsentliga ärenden, med revisionsredo minimiuppgifter.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: compliance-eskalering och styrning som operativt system</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[KONTEXT]</code></td>
                                <td class="var-desc">
                                    Ge en detaljerad beskrivning av organisationens nuvarande situation, inklusive struktur, jurisdiktionellt omfång och eventuella relevanta styrningsutmaningar.                                    <div class="var-example">Till exempel: "Ett globalt fintechbolag som verkar i 12 jurisdiktioner och har problem med inkonsekvent regelefterlevnadsrapportering samt brister i eskalering utanför kontorstid."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[KONTEXT]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[UTMANING]</code></td>
                                <td class="var-desc">
                                    Beskriv det konkreta problemet eller hindret som organisationen vill lösa med detta styrningsoperativsystem.                                    <div class="var-example">Till exempel: "Svårigheter att säkerställa eskalering av ärenden utanför kontorstid, samtidigt som juridiskt privilegium upprätthålls och operativa flaskhalsar undviks."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[UTMANING]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BRANSCH]</code></td>
                                <td class="var-desc">
                                    Ange vilken bransch organisationen verkar inom, inklusive relevanta regulatoriska eller operativa särdrag.                                    <div class="var-example">Till exempel: "Halsoteknik, med krav pa regelefterlevnad enligt HIPAA och GDPR."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BRANSCH]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[VARUMARKESROST]</code></td>
                                <td class="var-desc">
                                    Definiera ton, stil och språk som ska användas för att ligga i linje med organisationens kommunikationsstandarder.                                    <div class="var-example">Till exempel: "Professionell, koncis och tillgänglig, med fokus på tydlighet för intressenter utan juridisk bakgrund."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[VARUMARKESROST]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[FORMAT]</code></td>
                                <td class="var-desc">
                                    Ange önskat format för resultatet, till exempel rapport, presentation eller guide, och inkludera eventuella specifika formateringsönskemål.                                    <div class="var-example">Till exempel: "En PDF-guide pa 10 sidor med tydliga avsnitt, punktlistor och visuella processkartor for enkel referens."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[FORMAT]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Vad detta INTE är (avgränsningar)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INDATA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">SPECIFIKATION AV OUTPUT</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Utforma ett praktiskt, revisionsredo operativt system för juridik-/compliance-eskalering och styrning för en organisation som verkar i flera jurisdiktioner. Systemet måste: lyfta fram frågor tidigt (även från icke-juridisk personal), fungera under stress och utanför kontorstid, skydda legal privilege, bevara lämplig transparens för styrelsen och undvika dokumentationsöverbelastning eller operativ förlamning – samtidigt som det linjerar med King IV-principer för bolagsstyrning.

## PERSONA
Agera som en tvärfunktionell designer av juridisk styrning: en tidigare bolagsjurist som blivit en krisredo governance-specialist och som kombinerar King IV-informerad governance-design med tillämpad organisationspsykologi. Skriv i ett tydligt, direkt styrande språk riktat till chefer och operativa roller, med fokus på faktisk användning i verkligheten under press.

## BEGRÄNSNINGAR
- Använd klarspråk så att icke-juridiska team kan identifiera rapporteringspliktiga frågor utan jargong.
- Bygg eskaleringsvägar som speglar informellt inflytande, politik och ”skugg”-beslutsfattare – inte bara organisationsscheman.
- Håll dokumentationen lättviktig som standard, med ”skala upp”-dokumentation för väsentliga eller högriskärenden.
- Specificera beslutsrätt på varje nivå och definiera rena överlämningar mellan nivåer.
- Bevara legal privilege där det är relevant samtidigt som styrelsen får lämplig insyn.
- Inkludera en ”break glass”-väg för brådskande ärenden med hög allvarlighetsgrad som kräver omedelbar uppmärksamhet från senior nivå.
- Alla steg måste vara försvarbara inför tillsynsmyndigheter och möjliga att revidera av interna governance-funktioner.
- Inkludera adoptions-/införandetaktiker som hanterar rädsla för repressalier, tröghet och att mellanchefer stoppar frågor.
- Teknik får hjälpa till med routning, loggning och prompts; den får inte ersätta mänskligt omdöme.
- Inkludera feedbackloopar (near-miss-lärande, retrospektiv, kontrolltestning) så att ramverket utvecklas.

## PROCESS
1. **Bekräftelse före analys (obligatorisk):** Återge din förståelse av organisationens situation och det avsedda utfallet, och lista eventuella antaganden du måste göra.
2. **Nulägesdiagnos:** Analysera hierarki, beslutsregler, befintliga eskaleringskanaler och var de fallerar utanför kontorstid. Kartlägg flaskhalsar, incitament och maktdynamik.
3. **Riskigenkänningslager:** Skapa enkla ”triggers för att identifiera ärenden” per funktion och senioritetsnivå, inklusive exempel på vad som ska rapporteras och vad som inte ska fördröjas.
4. **Eskalering i flera nivåer:** Definiera nivåer, tidsbundna vägar, automatiska eskaleringsutlösare och beslutsmandat per nivå.
5. **Privilege + transparensdesign:** Ta fram kommunikationsregler och mallar som separerar privilegierad juridisk analys från operativ rapportering.
6. **Ansvar + trygghetsmekanismer:** Lägg till skydd för rapportörer i god tro, hantering av repressalier och åtgärder/sanktioner vid undertryckande.
7. **Kris- och beredskap utanför kontorstid:** Ange on-call-struktur, triageregler, break-glass-routning och trösklar för notifiering till ledningen.
8. **Integrationskarta:** Specificera gränssnitt mellan compliance, juridik, risk, internrevision, HR, säkerhet och ledningsfunktioner.
9. **Mätning + förbättring:** Definiera mätetal, dashboards, granskningskadens, near-miss-program och uppdateringsstyrning.
10. **Hantering av edge cases:** Om underlag saknas/är otydligt, föreslå 2–3 genomförbara alternativ och ange vilken ytterligare information som krävs för att slutföra.

### Vad detta INTE är (avgränsningar)
- Inte jurisdiktionsspecifik juridisk rådgivning eller en ersättning för licensierad juridisk rådgivare i varje land.
- Inte en total omskrivning av alla företagspolicys; det är ett operativt eskalerings- och governance-system med mallar och minsta nödvändiga kontroller.
- Inte en utredningsrapport; det är mekanismen för att initiera och hantera utredningar.
- Inte ett dokument för upphandling av teknik; verktyg är valfria möjliggörare med krav, inte leverantörsval.

## INDATA
- **Organisationsstruktur:** [KONTEXT]
- **Nuvarande juridik-/compliance-utmaningar:** [UTMANING]
- **Bransch och regulatorisk miljö:** [BRANSCH]
- **Organisationskultur och maktdynamik:** [VARUMARKESROST]
- **Befintliga governance-ramverk/policys/verktyg:** [FORMAT]

## SPECIFIKATION AV OUTPUT
Leverera en strukturerad implementeringsguide med följande avsnitt och artefakter:

1. **Sammanfattning för ledningen**
   - {Critical Success Factors}
   - {Top Failure Modes To Prevent}
   - {Immediate Actions (First 30–45 Days)}

2. **Nulägesbedömning**
   - {Governance Topology Map} (formell vs informell makt)
   - {Decision Rights Inventory}
   - {Escalation Bottlenecks &amp; Blind Spots}
   - {After-Hours Exposure Points}

3. **Ramverk för eskalering i nivåer**
   - {Tier Definitions} (t.ex. frontline, manager, function lead, legal/compliance, executive/board)
   - {Issue Identification Triggers} per nivå och funktion
   - {Time-Bound Escalation Paths} (med SLA:er och överlämningar)
   - {Automatic Escalation Rules} (allvarlighetsgrad, upprepning, whistleblower-signaler, myndighetskontakt, etc.)

4. **Beslutsverktyg**
   - {Decision Trees} för vanliga scenarier (minst 6)
   - {Decision Matrix} som mappar allvarlighetsgrad × brådska × jurisdiktion × reputationsrisk till nödvändiga åtgärder
   - {Authority &amp; Handoff Protocol} (RACI-lik tabell)

5. **Flödesscheman för eskaleringsvägar**
   - {Primary Flowchart} (kontorstid)
   - {After-Hours Flowchart}
   - {Break-Glass Flowchart} (notifiering till C-suite/styrelse)

6. **Verktygslåda för kommunikation &amp; privilege**
   - {Privilege Guardrails} (vad hör hemma var, märkning, distributionsregler)
   - {Transparency Rules} (styrelserapportering utan överexponering)
   - Mallbibliotek:
     - {Initial Report Template} (icke-juridisk)
     - {Manager Escalation Note}
     - {Legal Intake Summary}
     - {Executive Brief}
     - {Board Update Snapshot}
     - {Regulator Contact Log}
     - {Hold Notice / Preservation Message}

7. **Ansvar, skydd och efterlevnad**
   - {Good-Faith Reporter Protections}
   - {Anti-Retaliation Handling Workflow}
   - {Suppression/Delay Consequences} och eskalering om en chef blockerar rapportering
   - {Audit Trail Requirements} (minsta livskraftiga dokumentation + villkor för utökad dokumentation)

8. **Operativ modell &amp; integrationspunkter**
   - {Legal–Compliance–Risk–Audit Interfaces}
   - {HR/Security/IT Touchpoints}
   - {Cadence} (triagemöten, veckovisa riskhuddles, månatlig governance-review)

9. **Implementeringsplan**
   - Plan i faser med {Phase Name}, {Milestones}, {Owners}, {Dependencies}, {Artifacts Produced}
   - Inkludera en tidslinje som sträcker sig ungefär 8–14 veckor, med en stabiliseringsperiod efteråt

10. **Utbildnings- och adoptionssystem**
   - {Training Curriculum Outline} per roll
   - {Behavioral Adoption Mechanisms} (nudges, förstärkning, chefers KPI:er)
   - {Rollout Plan} (pilot → iterera → skala)
   - {Resistance Mitigation Playbook}

11. **Dashboard för mätetal &amp; övervakning**
   - {KPIs and KRIs} (hastighet, kvalitet, near-miss-fångst, undertryckandesignaler, utfall)
   - {Dashboard Layout}
   - {Thresholds and Triggers} för governance-review

12. **Metod för kontinuerlig förbättring**
   - {Near-Miss Program}
   - {Post-Incident Review Format}
   - {Control Testing Schedule}
   - {Policy/Process Update Workflow}

## KVALITETSKONTROLLER
Innan du slutför, verifiera:
- Eskaleringstriggers är begripliga för icke-juridisk personal och innehåller konkreta exempel.
- Varje nivå har tydligt beslutsmandat, tidsgränser och överlämningssteg.
- Privilegierat innehåll är tydligt separerat från operativ rapportering och styrelsens transparens är hanterad.
- Break-glass- och utanför-kontorstid-rutiner är kompletta och genomförbara (vem, hur, inom vilken tid).
- Artefakter är revisionsbara: minsta livskraftiga dokumentation är definierad och försvarbarhet inför myndigheter/styrelse är uttryckligen täckt.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nUtforma ett praktiskt, revisionsredo operativt system f\u00f6r juridik-\/compliance-eskalering och styrning f\u00f6r en organisation som verkar i flera jurisdiktioner. Systemet m\u00e5ste: lyfta fram fr\u00e5gor tidigt (\u00e4ven fr\u00e5n icke-juridisk personal), fungera under stress och utanf\u00f6r kontorstid, skydda legal privilege, bevara l\u00e4mplig transparens f\u00f6r styrelsen och undvika dokumentations\u00f6verbelastning eller operativ f\u00f6rlamning \u2013 samtidigt som det linjerar med King IV-principer f\u00f6r bolagsstyrning.\r\n\r\n## PERSONA\r\nAgera som en tv\u00e4rfunktionell designer av juridisk styrning: en tidigare bolagsjurist som blivit en krisredo governance-specialist och som kombinerar King IV-informerad governance-design med till\u00e4mpad organisationspsykologi. Skriv i ett tydligt, direkt styrande spr\u00e5k riktat till chefer och operativa roller, med fokus p\u00e5 faktisk anv\u00e4ndning i verkligheten under press.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- Anv\u00e4nd klarspr\u00e5k s\u00e5 att icke-juridiska team kan identifiera rapporteringspliktiga fr\u00e5gor utan jargong.\r\n- Bygg eskaleringsv\u00e4gar som speglar informellt inflytande, politik och \u201dskugg\u201d-beslutsfattare \u2013 inte bara organisationsscheman.\r\n- H\u00e5ll dokumentationen l\u00e4ttviktig som standard, med \u201dskala upp\u201d-dokumentation f\u00f6r v\u00e4sentliga eller h\u00f6grisk\u00e4renden.\r\n- Specificera beslutsr\u00e4tt p\u00e5 varje niv\u00e5 och definiera rena \u00f6verl\u00e4mningar mellan niv\u00e5er.\r\n- Bevara legal privilege d\u00e4r det \u00e4r relevant samtidigt som styrelsen f\u00e5r l\u00e4mplig insyn.\r\n- Inkludera en \u201dbreak glass\u201d-v\u00e4g f\u00f6r br\u00e5dskande \u00e4renden med h\u00f6g allvarlighetsgrad som kr\u00e4ver omedelbar uppm\u00e4rksamhet fr\u00e5n senior niv\u00e5.\r\n- Alla steg m\u00e5ste vara f\u00f6rsvarbara inf\u00f6r tillsynsmyndigheter och m\u00f6jliga att revidera av interna governance-funktioner.\r\n- Inkludera adoptions-\/inf\u00f6randetaktiker som hanterar r\u00e4dsla f\u00f6r repressalier, tr\u00f6ghet och att mellanchefer stoppar fr\u00e5gor.\r\n- Teknik f\u00e5r hj\u00e4lpa till med routning, loggning och prompts; den f\u00e5r inte ers\u00e4tta m\u00e4nskligt omd\u00f6me.\r\n- Inkludera feedbackloopar (near-miss-l\u00e4rande, retrospektiv, kontrolltestning) s\u00e5 att ramverket utvecklas.\r\n\r\n## PROCESS\r\n1. **Bekr\u00e4ftelse f\u00f6re analys (obligatorisk):** \u00c5terge din f\u00f6rst\u00e5else av organisationens situation och det avsedda utfallet, och lista eventuella antaganden du m\u00e5ste g\u00f6ra.\r\n2. **Nul\u00e4gesdiagnos:** Analysera hierarki, beslutsregler, befintliga eskaleringskanaler och var de fallerar utanf\u00f6r kontorstid. Kartl\u00e4gg flaskhalsar, incitament och maktdynamik.\r\n3. **Riskigenk\u00e4nningslager:** Skapa enkla \u201dtriggers f\u00f6r att identifiera \u00e4renden\u201d per funktion och senioritetsniv\u00e5, inklusive exempel p\u00e5 vad som ska rapporteras och vad som inte ska f\u00f6rdr\u00f6jas.\r\n4. **Eskalering i flera niv\u00e5er:** Definiera niv\u00e5er, tidsbundna v\u00e4gar, automatiska eskaleringsutl\u00f6sare och beslutsmandat per niv\u00e5.\r\n5. **Privilege + transparensdesign:** Ta fram kommunikationsregler och mallar som separerar privilegierad juridisk analys fr\u00e5n operativ rapportering.\r\n6. **Ansvar + trygghetsmekanismer:** L\u00e4gg till skydd f\u00f6r rapport\u00f6rer i god tro, hantering av repressalier och \u00e5tg\u00e4rder\/sanktioner vid undertryckande.\r\n7. **Kris- och beredskap utanf\u00f6r kontorstid:** Ange on-call-struktur, triageregler, break-glass-routning och tr\u00f6sklar f\u00f6r notifiering till ledningen.\r\n8. **Integrationskarta:** Specificera gr\u00e4nssnitt mellan compliance, juridik, risk, internrevision, HR, s\u00e4kerhet och ledningsfunktioner.\r\n9. **M\u00e4tning + f\u00f6rb\u00e4ttring:** Definiera m\u00e4tetal, dashboards, granskningskadens, near-miss-program och uppdateringsstyrning.\r\n10. **Hantering av edge cases:** Om underlag saknas\/\u00e4r otydligt, f\u00f6resl\u00e5 2\u20133 genomf\u00f6rbara alternativ och ange vilken ytterligare information som kr\u00e4vs f\u00f6r att slutf\u00f6ra.\r\n\r\n### Vad detta INTE \u00e4r (avgr\u00e4nsningar)\r\n- Inte jurisdiktionsspecifik juridisk r\u00e5dgivning eller en ers\u00e4ttning f\u00f6r licensierad juridisk r\u00e5dgivare i varje land.\r\n- Inte en total omskrivning av alla f\u00f6retagspolicys; det \u00e4r ett operativt eskalerings- och governance-system med mallar och minsta n\u00f6dv\u00e4ndiga kontroller.\r\n- Inte en utredningsrapport; det \u00e4r mekanismen f\u00f6r att initiera och hantera utredningar.\r\n- Inte ett dokument f\u00f6r upphandling av teknik; verktyg \u00e4r valfria m\u00f6jligg\u00f6rare med krav, inte leverant\u00f6rsval.\r\n\r\n## INDATA\r\n- **Organisationsstruktur:** [KONTEXT]\r\n- **Nuvarande juridik-\/compliance-utmaningar:** [UTMANING]\r\n- **Bransch och regulatorisk milj\u00f6:** [BRANSCH]\r\n- **Organisationskultur och maktdynamik:** [VARUMARKESROST]\r\n- **Befintliga governance-ramverk\/policys\/verktyg:** [FORMAT]\r\n\r\n## SPECIFIKATION AV OUTPUT\r\nLeverera en strukturerad implementeringsguide med f\u00f6ljande avsnitt och artefakter:\r\n\r\n1. **Sammanfattning f\u00f6r ledningen**\r\n   - {Critical Success Factors}\r\n   - {Top Failure Modes To Prevent}\r\n   - {Immediate Actions (First 30\u201345 Days)}\r\n\r\n2. **Nul\u00e4gesbed\u00f6mning**\r\n   - {Governance Topology Map} (formell vs informell makt)\r\n   - {Decision Rights Inventory}\r\n   - {Escalation Bottlenecks & Blind Spots}\r\n   - {After-Hours Exposure Points}\r\n\r\n3. **Ramverk f\u00f6r eskalering i niv\u00e5er**\r\n   - {Tier Definitions} (t.ex. frontline, manager, function lead, legal\/compliance, executive\/board)\r\n   - {Issue Identification Triggers} per niv\u00e5 och funktion\r\n   - {Time-Bound Escalation Paths} (med SLA:er och \u00f6verl\u00e4mningar)\r\n   - {Automatic Escalation Rules} (allvarlighetsgrad, upprepning, whistleblower-signaler, myndighetskontakt, etc.)\r\n\r\n4. **Beslutsverktyg**\r\n   - {Decision Trees} f\u00f6r vanliga scenarier (minst 6)\r\n   - {Decision Matrix} som mappar allvarlighetsgrad \u00d7 br\u00e5dska \u00d7 jurisdiktion \u00d7 reputationsrisk till n\u00f6dv\u00e4ndiga \u00e5tg\u00e4rder\r\n   - {Authority & Handoff Protocol} (RACI-lik tabell)\r\n\r\n5. **Fl\u00f6desscheman f\u00f6r eskaleringsv\u00e4gar**\r\n   - {Primary Flowchart} (kontorstid)\r\n   - {After-Hours Flowchart}\r\n   - {Break-Glass Flowchart} (notifiering till C-suite\/styrelse)\r\n\r\n6. **Verktygsl\u00e5da f\u00f6r kommunikation & privilege**\r\n   - {Privilege Guardrails} (vad h\u00f6r hemma var, m\u00e4rkning, distributionsregler)\r\n   - {Transparency Rules} (styrelserapportering utan \u00f6verexponering)\r\n   - Mallbibliotek:\r\n     - {Initial Report Template} (icke-juridisk)\r\n     - {Manager Escalation Note}\r\n     - {Legal Intake Summary}\r\n     - {Executive Brief}\r\n     - {Board Update Snapshot}\r\n     - {Regulator Contact Log}\r\n     - {Hold Notice \/ Preservation Message}\r\n\r\n7. **Ansvar, skydd och efterlevnad**\r\n   - {Good-Faith Reporter Protections}\r\n   - {Anti-Retaliation Handling Workflow}\r\n   - {Suppression\/Delay Consequences} och eskalering om en chef blockerar rapportering\r\n   - {Audit Trail Requirements} (minsta livskraftiga dokumentation + villkor f\u00f6r ut\u00f6kad dokumentation)\r\n\r\n8. **Operativ modell & integrationspunkter**\r\n   - {Legal\u2013Compliance\u2013Risk\u2013Audit Interfaces}\r\n   - {HR\/Security\/IT Touchpoints}\r\n   - {Cadence} (triagem\u00f6ten, veckovisa riskhuddles, m\u00e5natlig governance-review)\r\n\r\n9. **Implementeringsplan**\r\n   - Plan i faser med {Phase Name}, {Milestones}, {Owners}, {Dependencies}, {Artifacts Produced}\r\n   - Inkludera en tidslinje som str\u00e4cker sig ungef\u00e4r 8\u201314 veckor, med en stabiliseringsperiod efter\u00e5t\r\n\r\n10. **Utbildnings- och adoptionssystem**\r\n   - {Training Curriculum Outline} per roll\r\n   - {Behavioral Adoption Mechanisms} (nudges, f\u00f6rst\u00e4rkning, chefers KPI:er)\r\n   - {Rollout Plan} (pilot \u2192 iterera \u2192 skala)\r\n   - {Resistance Mitigation Playbook}\r\n\r\n11. **Dashboard f\u00f6r m\u00e4tetal & \u00f6vervakning**\r\n   - {KPIs and KRIs} (hastighet, kvalitet, near-miss-f\u00e5ngst, undertryckandesignaler, utfall)\r\n   - {Dashboard Layout}\r\n   - {Thresholds and Triggers} f\u00f6r governance-review\r\n\r\n12. **Metod f\u00f6r kontinuerlig f\u00f6rb\u00e4ttring**\r\n   - {Near-Miss Program}\r\n   - {Post-Incident Review Format}\r\n   - {Control Testing Schedule}\r\n   - {Policy\/Process Update Workflow}\r\n\r\n## KVALITETSKONTROLLER\r\nInnan du slutf\u00f6r, verifiera:\r\n- Eskaleringstriggers \u00e4r begripliga f\u00f6r icke-juridisk personal och inneh\u00e5ller konkreta exempel.\r\n- Varje niv\u00e5 har tydligt beslutsmandat, tidsgr\u00e4nser och \u00f6verl\u00e4mningssteg.\r\n- Privilegierat inneh\u00e5ll \u00e4r tydligt separerat fr\u00e5n operativ rapportering och styrelsens transparens \u00e4r hanterad.\r\n- Break-glass- och utanf\u00f6r-kontorstid-rutiner \u00e4r kompletta och genomf\u00f6rbara (vem, hur, inom vilken tid).\r\n- Artefakter \u00e4r revisionsbara: minsta livskraftiga dokumentation \u00e4r definierad och f\u00f6rsvarbarhet inf\u00f6r myndigheter\/styrelse \u00e4r uttryckligen t\u00e4ckt.";
    const variables = ["[KONTEXT]","[UTMANING]","[BRANSCH]","[VARUMARKESROST]","[FORMAT]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat med AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Mata in en realistisk incident.</strong> Innan du kör prompten, skriv ett “fredag kväll”-scenario på 6–10 rader (till exempel: en distributör påstår mutor i land B, en chef vill hantera det tyst och ekonomi har redan betalat en “expedite fee”). Fråga sedan: “Använd det här scenariot för att stresstesta dina eskaleringsnivåer och visa var den första notifikationen måste landa.”</li>


<li><strong>Ställ krav på flera jurisdiktioner.</strong> Prompten är byggd för komplexitet, så håll den inte abstrakt. Lägg till en uppföljningsrad som: “Anta att vi verkar i Sydafrika, Storbritannien och Förenade Arabemiraten; lokala HR- och works council-hänsyn kan fördröja utredningar.” Då får du tydligare överlämningar och mer strukturerade regler för vad som ska synas för styrelsen.</li>


<li><strong>Be om versionen på “icke-juridiskt språk”.</strong> Ett starkt eskaleringssystem faller om frontlinjeteam inte snabbt kan känna igen ärenden. Efter första resultatet, skriv: “Skriv om triggers för rapporteringspliktiga ärenden till en ensidig guide för butikschefer, med exempel och formuleringar i stil med ‘vid tveksamhet, eskalera’.”</li>


<li><strong>Iterera på beslutsrätt, inte bara steg.</strong> Den vanligaste luckan är otydlighet kring vem som kan pausa en affär, stänga av någon, underrätta en regulator eller briefa styrelseordföranden. Efter utkastet, testa: “Tajta till nivå 2–4 så att varje nivå har en ensam ansvarig ägare, en ersättare och en tydlig lista över ‘stop authority’.”</li>


<li><strong>Kombinera med en checklista för miniminivå av bevis.</strong> För att vara revisionsredo utan att skapa ett dokumentationsmonster, be om ett “minimum viable record” för ärenden med låg till medelhög allvarlighetsgrad. Följ upp med: “Skapa en loggmall med 12 fält som fångar datum/tid, kanal, typ av påstående, fattat beslut och nästa granskningsdatum, samtidigt som den undviker spekulativt språk som kan skada privilegiet.”</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade promptar</h2>



<p>När ditt eskaleringssystem är definierat hjälper de här promptarna dig att lägga till övervakning, granskningskadens och upptäckt av “tidiga signaler” runt det:</p>



<p>Om du också behöver en återkommande styrningsrytm som håller eskaleringsreglerna vid liv (inte bortglömda efter lansering), kombinera detta med <a href="https://nodenordic.se/prompts/bygg-en-kvartalsvis-prognosgranskning-med-ai">Bygg en kvartalsvis prognosgranskning med AI</a>. Strukturen är användbar för att sätta upp kvartalsvisa forum för risk- och compliancegenomgångar, ägarskap, uppföljning av åtgärder och ett konsekvent format för styrelseklar sammanfattning.</p>



<p>När utmaningen är att upptäcka problem innan de blir “rapporteringspliktiga” kan logiken från <a href="https://nodenordic.se/prompts/bygg-en-tidig-varningsmodell-for-kursavhopp">Bygg en tidig varningsmodell för kursavhopp</a> översättas förvånansvärt väl. Använd den som inspiration för tidiga varningsindikatorer (topp i klagomål, ovanliga godkännanden, policyundantag) och trösklar som automatiskt triggar en nivågranskning.</p>



<p>För team som arbetar med assurance och revision kan <a href="https://nodenordic.se/prompts/validera-arima-prognoser-for-kursavslut">Validera ARIMA-prognoser för kursavslut</a> stödja ert kontrolltest-tänk. Det är en bra följeslagare när du vill ha ett disciplinerat sätt att validera trender, rimlighetskontrollera antaganden och flagga avvikelser som bör matas in i er governance-loop för eskalering.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/bygg-en-kvartalsvis-prognosgranskning-med-ai">Bygg en kvartalsvis prognosgranskning med AI</a>: Bygg en repeterbar granskningskadens och leverabler.</li>


<li><a href="https://nodenordic.se/prompts/bygg-en-tidig-varningsmodell-for-kursavhopp">Bygg en tidig varningsmodell för kursavhopp</a>: Skapa tidiga signaler och trösklar för triggers.</li>


<li><a href="https://nodenordic.se/prompts/validera-arima-prognoser-for-kursavslut">Validera ARIMA-prognoser för kursavslut</a>: Validera trender och testa antaganden rigoröst.</li>

<li><a href="https://nodenordic.se/prompts/skapa-en-konkurrentrapport-for-kursmarknaden">Skapa en konkurrentrapport för kursmarknaden</a>: Omvärldsspaning och jämförelsebaserade risksignaler.</li>

<li><a href="https://nodenordic.se/prompts/bygg-en-forkunskapskarta-for-kursen">Bygg en förkunskapskarta för kursen</a>: Kartlägg beroenden och överlämningar mellan team.</li>
<!-- /wp:post-content -->
</ul>
<!-- /wp:list -->
</div>

<div class="faq-section">
<!-- wp:heading {"level":2} -->
<h2 class="wp-block-heading">Vanliga frågor</h2>
<!-- /wp:heading -->

<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för compliance-eskaleringssystem?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>General Counsel och chefsjurister</strong> använder den för att designa privilegiesäkra vägar som ändå gör att ledning och styrelse ser det de behöver, på rätt detaljnivå. <strong>Chief Compliance Officers</strong> använder den för att standardisera “vad som eskaleras” mellan länder och affärsenheter, särskilt där lokal kultur uppmuntrar att hålla frågor tysta. <strong>Chefer för internrevision</strong> får nytta eftersom resultatet är revisionsredo: tydliga nivåer, beslutsrätt och minimi-fält för dokumentation som går att testa. <strong>Bolagssekreterare och governance-team</strong> använder den för att formalisera styrelserapportering, överlämningar till kommittéer och King IV-anpassad tillsyn utan att varje incident blir en kris för styrelsepärmarna.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för compliance-eskaleringssystem?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>Finansiella tjänster</strong> använder den för att hantera tidskritiska incidenter (marknadsbeteendefrågor, sanktions-träffar, bedrägerisignaler) samtidigt som eskaleringen förblir försvarbar och konsekvent mellan kontor. <strong>Sjukvård och life science</strong> använder den när biverkningshändelser, dataskyddsfrågor eller tredjepartsagerande kan utlösa obligatorisk rapportering och reputationsskada. <strong>Gruv-, energi- och tung industri</strong> får värde eftersom säkerhetsincidenter och kontakter med samhälle/regulator ofta sker efter kontorstid och kräver en “break glass”-väg med tydlig beslutsrätt. <strong>Teknik- och SaaS-bolag</strong> använder den för integritets- och säkerhetseskaleringar, där privilegiumgränser och styrelseinsyn är lätt att hantera fel i snabbrörliga incidenter.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Varför ger grundläggande AI-promptar för att designa ett compliance-eskaleringssystem svaga resultat?</span>
<!-- wp:paragraph -->
<p class="answer">En typisk prompt som “<em>Skriv en compliance-eskaleringspolicy</em>” misslyckas eftersom den: saknar en nivåindelad operativ modell med tydliga beslutsrätter och överlämningar, ger ingen privilegiesäker vägledning för routing (så folk dokumenterar fel saker i fel kanaler), ignorerar informella maktstrukturer och “skugg”-beslutsfattare som kan stoppa eskalering, producerar generisk standardtext i stället för revisionsredo minimi-fält för dokumentation och missar införandetaktik som hanterar rädsla för repressalier och tystning från mellanchefer. Du får ett dokument som ser officiellt ut men som inte fungerar under press. Ärligt talat är det den farliga delen.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här prompten för compliance-eskaleringssystem till min specifika situation?</span>
<!-- wp:paragraph -->
<p class="answer">Ja. Även om grundprompten saknar ifyllnadsvariabler kan du anpassa den genom att lägga till en kort “kontextheader” innan du kör den: era jurisdiktioner, arbetstider, reglerade skyldigheter, styrelsens kommittéstruktur och era nuvarande rapporteringskanaler (hotline, linjechef, HR, security ops). Du bör också ange er riskaptit och vad som räknas som “väsentligt” för styrelsens insyn, eftersom det styr dokumentationsnivån för uppskalning. En användbar uppföljningsprompt är: “Skriv om ramverket för ett bolag med [länder], [fackliga/works council-begränsningar] och en riskkommitté i styrelsen; inkludera en RACI och en ensidig eskaleringsmatris.”</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här prompten för compliance-eskaleringssystem?</span>
<!-- wp:paragraph -->
<p class="answer">Det största misstaget är att lämna er organisatoriska verklighet för vag; i stället för “globalt bolag”, skriv “koncern i fem länder med shared services i Polen och en dominerande försäljningschef som kringgår processen”. Ett annat vanligt fel är att inte ange vilka kanaler som finns i dag, så resultatet inte kan hantera tystningspunkter; “vi har en hotline och en incidentbrevlåda som bevakas 9–5” är mycket bättre än “vi har rapportering”. Team glömmer också att definiera väsentlighet för styrelserapportering, vilket leder till antingen överbelastning eller hemlighetsmakeri; ange en konkret tröskel som “alla anklagelser om mutor, dataintrång som påverkar 5 000+ poster eller potentiell förlust över 250 000 USD”. Slutligen hoppar många över verkligheten efter kontorstid; säg inte “24/7-support”, säg “en jouransvarig, roterande veckovis, med krav på bekräftelse inom 30 minuter”.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vem ska INTE använda den här prompten för compliance-eskaleringssystem?</span>
<!-- wp:paragraph -->
<p class="answer">Den här prompten är inte idealisk för engångsprojekt där ni inte kommer att implementera, utbilda och iterera, eftersom värdet ligger i införandemekanik och återkopplingsloopar. Den passar också sämre om organisationen inte har validerat sina grundläggande compliance-förutsättningar (inga rapporteringskanaler, ingen utredningsförmåga, inga ansvariga ägare), eftersom ramverket förutsätter att de kan etableras. Och om du bara vill ha en kort mall för att “bocka av rutan” kommer du att tycka att den är för operativ och styrningstung. I så fall: börja med ett lätt policyutkast och återvänd till den här prompten när du är redo att få eskalering att fungera i verkligheten.</p>
<!-- /wp:paragraph -->
</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för compliance-eskaleringssystem?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "General Counsel och chefsjurister använder den för att designa privilegiesäkra vägar som ändå gör att ledning och styrelse ser det de behöver, på rätt detaljnivå. Chief Compliance Officers använder den för att standardisera “vad som eskaleras” mellan länder och affärsenheter, särskilt där lokal kultur uppmuntrar att hålla frågor tysta. Chefer för internrevision får nytta eftersom resultatet är revisionsredo: tydliga nivåer, beslutsrätt och minimi-fält för dokumentation som går att testa. Bolagssekreterare och governance-team använder den för att formalisera styrelserapportering, överlämningar till kommittéer och King IV-anpassad tillsyn utan att varje incident blir en kris för styrelsepärmarna."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för compliance-eskaleringssystem?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Finansiella tjänster använder den för att hantera tidskritiska incidenter (marknadsbeteendefrågor, sanktions-träffar, bedrägerisignaler) samtidigt som eskaleringen förblir försvarbar och konsekvent mellan kontor. Sjukvård och life science använder den när biverkningshändelser, dataskyddsfrågor eller tredjepartsagerande kan utlösa obligatorisk rapportering och reputationsskada. Gruv-, energi- och tung industri får värde eftersom säkerhetsincidenter och kontakter med samhälle/regulator ofta sker efter kontorstid och kräver en “break glass”-väg med tydlig beslutsrätt. Teknik- och SaaS-bolag använder den för integritets- och säkerhetseskaleringar, där privilegiumgränser och styrelseinsyn är lätt att hantera fel i snabbrörliga incidenter."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger grundläggande AI-promptar för att designa ett compliance-eskaleringssystem svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som “Skriv en compliance-eskaleringspolicy” misslyckas eftersom den: saknar en nivåindelad operativ modell med tydliga beslutsrätter och överlämningar, ger ingen privilegiesäker vägledning för routing (så folk dokumenterar fel saker i fel kanaler), ignorerar informella maktstrukturer och “skugg”-beslutsfattare som kan stoppa eskalering, producerar generisk standardtext i stället för revisionsredo minimi-fält för dokumentation och missar införandetaktik som hanterar rädsla för repressalier och tystning från mellanchefer. Du får ett dokument som ser officiellt ut men som inte fungerar under press. Ärligt talat är det den farliga delen."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här prompten för compliance-eskaleringssystem till min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja. Även om grundprompten saknar ifyllnadsvariabler kan du anpassa den genom att lägga till en kort “kontextheader” innan du kör den: era jurisdiktioner, arbetstider, reglerade skyldigheter, styrelsens kommittéstruktur och era nuvarande rapporteringskanaler (hotline, linjechef, HR, security ops). Du bör också ange er riskaptit och vad som räknas som “väsentligt” för styrelsens insyn, eftersom det styr dokumentationsnivån för uppskalning. En användbar uppföljningsprompt är: “Skriv om ramverket för ett bolag med [länder], [fackliga/works council-begränsningar] och en riskkommitté i styrelsen; inkludera en RACI och en ensidig eskaleringsmatris.”"
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här prompten för compliance-eskaleringssystem?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att lämna er organisatoriska verklighet för vag; i stället för “globalt bolag”, skriv “koncern i fem länder med shared services i Polen och en dominerande försäljningschef som kringgår processen”. Ett annat vanligt fel är att inte ange vilka kanaler som finns i dag, så resultatet inte kan hantera tystningspunkter; “vi har en hotline och en incidentbrevlåda som bevakas 9–5” är mycket bättre än “vi har rapportering”. Team glömmer också att definiera väsentlighet för styrelserapportering, vilket leder till antingen överbelastning eller hemlighetsmakeri; ange en konkret tröskel som “alla anklagelser om mutor, dataintrång som påverkar 5 000+ poster eller potentiell förlust över 250 000 USD”. Slutligen hoppar många över verkligheten efter kontorstid; säg inte “24/7-support”, säg “en jouransvarig, roterande veckovis, med krav på bekräftelse inom 30 minuter”."
      }
    },
    {
      "@type": "Question",
      "name": "Vem ska INTE använda den här prompten för compliance-eskaleringssystem?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten är inte idealisk för engångsprojekt där ni inte kommer att implementera, utbilda och iterera, eftersom värdet ligger i införandemekanik och återkopplingsloopar. Den passar också sämre om organisationen inte har validerat sina grundläggande compliance-förutsättningar (inga rapporteringskanaler, ingen utredningsförmåga, inga ansvariga ägare), eftersom ramverket förutsätter att de kan etableras. Och om du bara vill ha en kort mall för att “bocka av rutan” kommer du att tycka att den är för operativ och styrningstung. I så fall: börja med ett lätt policyutkast och återvänd till den här prompten när du är redo att få eskalering att fungera i verkligheten."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">
<!-- wp:paragraph -->
<p>En policy stoppar inte en kris. Ett fungerande eskaleringssystem gör det. Klistra in den här prompten i din modell, stresstesta den med ett verkligt scenario och gör nästa incident till en kontrollerad process i stället för ett kaosartat ryck.</p>
<!-- /wp:paragraph -->
</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/designa-ett-system-for-eskalering-av-compliance/">Designa ett system för eskalering av compliance</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bygg skiktade API-rate limits med AI-prompt</title>
		<link>https://nodenordic.se/prompts/bygg-skiktade-api-rate-limits-med-ai-prompt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bygg-skiktade-api-rate-limits-med-ai-prompt</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:50:32 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5001441</guid>

					<description><![CDATA[<p>Skrapare överbelastar ditt API. En vass AI-prompt som designar skiktade rate limits med kod, 429-hantering, telemetri, tester och utrullning.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/bygg-skiktade-api-rate-limits-med-ai-prompt/">Bygg skiktade API-rate limits med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: API rate limits -->
<div class="hook-introduction">

<p>Ditt API fungerar bra. Tills det inte gör det. En scraper träffar en enda endpoint, gör aggressiva retries, roterar IP-adresser och plötsligt ser legitima användare timeouts, högre latens och en flod av ”varför är det här trasigt?”-meddelanden.</p>



<p>Den här prompten för <strong>API rate limits</strong> är byggd för <strong>backendingenjörer</strong> som behöver en produktionsredo throttling-plan utan veckor av trial-and-error, <strong>plattformansvariga</strong> som vill stoppa missbrukstrafik utan att straffa power users och <strong>DevOps/SRE-team</strong> som måste lägga till synlighet, larm och säkra utrullningar innan nästa spike. Resultatet är en driftsättningsbar blueprint: lager av IP- + identitetskontroller, alternativ för lagringsbackend, kodexempel i middleware-stil, vägledning för 429 + Retry-After, telemetri, tester och en checklista för utrullning med låg risk.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Vad du får</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Den modellerar sannolika missbruksvägar (bursts, retry-stormar, credential stuffing, IP-rotation) och omvandlar dem till konkreta rate-limit-regler.</li>
          <li>Den designar lagerindelad throttling med minst två oberoende enforcement-lager (IP-baserat plus identitetsbaserat), inklusive vägledning för oautentiserad trafik.</li>
          <li>Den specificerar skalbara mönster för lagring av state för räknare och tidsfönster, från lokalt minne till delad cache och distribuerade backends.</li>
          <li>Den genererar kodorienterade exempel i middleware-stil som du kan anpassa till din stack, samtidigt som kärnupplägget är ramverksagnostiskt.</li>
          <li>Den definierar operativ synlighet: loggar, mätvärden, dashboards, larm och vilka signaler du ska bevaka när angripare ändrar taktik.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du ser plötsliga 429:or, timeouts eller förhöjd p95-latens vid trafikspikar och behöver skydd utan driftstopp.</li>
          <li>Scrapers tömmer kvoter eller driver upp infra-kostnader, särskilt på endpoints för ”list”, ”search”, ”export” eller ”pricing”.</li>
          <li>Du har autentisering för vissa routes men stödjer också publika endpoints, och du behöver rimliga regler för båda.</li>
          <li>Angripare rundar naiva IP-begränsningar genom att rotera adresser, distribuera requests eller missbruka retry-beteende.</li>
          <li>Du ska snart lansera, bli uppmärksammad eller öppna ett integrationsprogram, och du vill ha skyddsräcken innan tillväxten stresstestar dig.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En lagerindelad rate-limit-blueprint med minst 2 enforcement-lager plus ett fallback-beteende för edge cases.</li>
           <li>Policyförslag per endpoint (exempel: burst- kontra uthålliga limits) med en kort motivering för varje.</li>
           <li>Middleware/pseudokod som är redo att anpassa och som visar request-keying, uppdatering av räknare och konsekvent utvärdering av limits.</li>
           <li>Ett 429-svarskontrakt inklusive vägledning för Retry-After och klientsäker feltext som inte läcker intern information.</li>
           <li>En validerings- och utrullningsplan: testmatris, upplägg för lastsimulering och en steg-för-steg-checklista för stegvis driftsättning.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: generator för lagerindelad blueprint för API rate-limiting</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[FORMAT]</code></td>
                                <td class="var-desc">
                                    Ange i vilket format leveransen ska presenteras, till exempel text, diagram eller kodutdrag.                                    <div class="var-example">Till exempel: "Ett Markdown-dokument med inbäddade kodexempel och arkitekturdiagram."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[FORMAT]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[KONTEXT]</code></td>
                                <td class="var-desc">
                                    Ge bakgrundsinformation om API:et, inklusive syfte, typiska användningsmönster och trafikegenskaper.                                    <div class="var-example">Till exempel: "Ett offentligt API för en social medieplattform med 10 miljoner dagligt aktiva användare, med frekventa anrop för både hämtning och publicering av data."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[KONTEXT]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BRANSCH]</code></td>
                                <td class="var-desc">
                                    Beskriv branschen eller domänen som API:et betjänar, eftersom det kan påverka missbruksmönster och strategier för rate limiting.                                    <div class="var-example">Till exempel: "E-handelsplattform med API:er för produktsök, lageruppdateringar och hantering av utcheckning."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BRANSCH]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[HUVUDUTMANING]</code></td>
                                <td class="var-desc">
                                    Förklara det huvudsakliga problemet eller hotet som rate limiting-lösningen behöver hantera, till exempel trafiktoppar eller riktat missbruk.                                    <div class="var-example">Till exempel: "Att begränsa credential stuffing-attacker och förhindra oautentiserad scraping i samband med flash sales-kampanjer."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[HUVUDUTMANING]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TIDSRAM]</code></td>
                                <td class="var-desc">
                                    Ange den förväntade tidsplanen för att leverera lösningen, inklusive eventuella milstolpar eller deadlines.                                    <div class="var-example">Till exempel: "Två månader för full implementering, inklusive testning och stegvis utrullning."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[TIDSRAM]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Vad detta INTE är (avgränsningar)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Hantering av edge cases</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INPUTS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">OUTPUTSPECIFIKATION</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Skapa en produktionsredo ritning och implementationsguide för API-rate limiting som klarar trafiktoppar och aktivt missbruk. Leveransen måste täcka lagerbaserad throttling (IP + identitet), skalbar tillståndslagring, säker klientkommunikation och operativ insyn—utan att försämra upplevelsen för legitima användare.

## PERSONA
Agera som en erfaren API-försvarsingenjör som har designat anti-missbrukskontroller för högvolymsplattformar i enterprise-klass. Du prioriterar modellering av angriparbeteenden, adaptiva kontroller och praktiska implementationer som överlever verklig belastning och undvikandetaktiker. Skriv med skarp, ingenjörsfokuserad tydlighet.

## BEGRÄNSNINGAR
- Ge konkreta, driftsättningsbara mönster; undvik generiska råd i stil med ”säkra ditt API”.
- Använd flerskiktsskydd (minst två oberoende enforcement-lager plus ett fallback-beteende).
- Inkludera både IP-baserad och användar-/identitetsbaserad throttling, med vägledning för oautentiserad trafik.
- Erbjud ramverksagnostiska koncept plus kodorienterade middleware-exempel anpassade till den angivna stacken.
- Rekommendera state backends som passar skalan (lokalt minne, delad cache, distribuerade alternativ).
- 429-hantering måste inkludera **Retry-After** och klientsäker meddelandetext som inte läcker interna detaljer.
- Inkludera plan för loggning, övervakning och larm med fokus på att upptäcka föränderliga missbruksmönster.
- Adressera prestandaöverhead och tuning.
- Inkludera en valideringsplan (tester + lastsimulering) och en utrullningsplan med låg risk.

### Vad detta INTE är (avgränsningar)
- Inte en fullständig rapport för val av WAF/CDN-leverantör.
- Inte en komplett omdesign av IAM/auth (täck endast identitetssignaler som behövs för rate limiting).
- Inte malware-forensik eller incident response-playbooks utöver loggning/larm som behövs för throttling.
- Inte juridisk vägledning kring compliance; endast tekniska åtgärder mappade till angivna krav.

## PROCESS
1. **Föranalys (krävs):** Återge din förståelse av API-scenariot, sannolika missbruksformer och framgångskriterier baserat på de givna inputsen. Lista eventuella antaganden.
2. **Hot-till-kontroll-mappning:** Översätt de angivna hoten till specifika throttles (burst, sustained, endpoint-känsligt, credential stuffing-liknande mönster, scraping-heuristiker).
3. **Lagerbaserad design:** Specificera minst:
   - Edge- eller gateway-kontroll (grov begränsning)
   - Applikations-middleware-kontroll (finmaskig begränsning)
   - Ett fallback-/containment-läge när beroenden fallerar (t.ex. lagringsavbrott)
4. **Byggplan för middleware:** Ge implementationsmönster för:
   - IP-nyckling (inklusive vägledning för hantering av proxy/CDN-headers)
   - Användar-/identitetsnyckling (user ID, API-nyckel, session, device fingerprint där lämpligt)
   - Kombinerade nycklar (t.ex. per-användare-per-endpoint) och endpoint-viktning
5. **Beslutsunderlag för state storage:** Rekommendera backend(s) med tydliga trösklar för när man ska gå från in-process till delade/distribuerade stores. Inkludera installations-/setup-noteringar.
6. **Klientresponsbeteende:** Definiera 429-struktur, headers och meddelandemallar som hjälper klienter att återhämta sig utan att avslöja arkitektur.
7. **Observability:** Definiera loggschema, metrics, dashboards och larmregler; inkludera exempel på queries/mönster för att upptäcka hur missbruk utvecklas.
8. **Prestanda &amp; tuning:** Lista optimeringar (hot paths, sampling, async logging, lokala caches, Lua/scripts om Redis, etc.).
9. **Validering:** Ge enhets-/integrationstester, adversarial testfall och lasttester. Inkludera acceptanskriterier.
10. **Utrullning:** Ge en stegvis driftsättningsplan över **4–6 faser** med övervakningsgrindar och rollback-triggers.

### Hantering av edge cases
- Om någon input saknas eller är tvetydig, ställ först riktade förtydligande frågor. Om användaren ändå begär omedelbar output, fortsätt med rimliga standardval och märk dem tydligt som antaganden.
- Om stacken inte kan stödja en rekommenderad taktik, ge ett alternativ som bevarar samma säkerhetsintention.
- Om strikt begränsning krockar med prestandakrav, föreslå adaptiva gränser och ”grace”-mekanismer för betrodda klienter.

## INPUTS
- **Applikationstyp:** [FORMAT]
- **Trafikprofil (baseline + peak + spike-form):** [KONTEXT]
- **Teknikstack (ramverk, runtime, infra, DB):** [BRANSCH]
- **Säkerhetskrav (hot + compliance):** [HUVUDUTMANING]
- **Prestandabegränsningar (latens/throughput SLO:er):** [TIDSRAM]

## OUTPUTSPECIFIKATION
Använd markdown-rubriker och tillhandahåll avsnitt i exakt denna ordning:

1. **Rate limiting-arkitektur**
   - {Threat Model Summary}
   - {Layered Controls Overview}
   - {Keying Strategy} (IP, user, combined, endpoint sensitivity)
   - {Adaptive Rules} (burst vs sustained, anomaly triggers)

2. **Middleware-implementation**
   - {Middleware Approach} (var den körs, hur den komponeras)
   - {IP Throttle Example} (kodorienterad pseudokod eller stack-specifikt exempel)
   - {User/Identity Throttle Example}
   - {Composite &amp; Endpoint-Weighted Limits}
   - {Failure Modes &amp; Fallback Behavior}

3. **State storage &amp; konfiguration**
   - {When In-Memory Is Acceptable}
   - {When Shared/Distributed Storage Is Required}
   - {Redis/Upstash-Style Setup Notes}
   - {Key Design, TTLs, Atomicity Notes}

4. **429-svar &amp; klientvägledning**
   - {Response Schema}
   - {Retry-After Strategy}
   - {Safe Message Examples} (omskrivna, icke-avslöjande)
   - {Handling for Auth vs Unauth Clients}

5. **Loggning, övervakning och larm**
   - {Log Fields &amp; Structure}
   - {Metrics to Emit}
   - {Dashboards}
   - {Alert Rules}
   - {Abuse Pattern Detection Examples}

6. **Prestandaoptimering**
   - {Hot Path Optimizations}
   - {Caching &amp; Sampling Guidance}
   - {Distributed Store Latency Mitigations}

7. **Testning &amp; validering**
   - {Unit Tests}
   - {Integration Tests}
   - {Adversarial Scenarios}
   - {Load/Spike Tests}
   - {Pass/Fail Criteria}

8. **Driftsättning &amp; gradvis utrullning**
   - {Phase Plan}
   - {Monitoring Gates}
   - {Rollback Triggers}
   - {Post-Launch Tuning Loop}

## KVALITETSKONTROLLER
Innan du finaliserar, verifiera:
- Planen inkluderar minst två enforcement-lager plus ett definierat fallback-läge.
- Både IP-baserade och identitetsbaserade throttles implementeras med tydliga nyckeldefinitioner.
- 429-hantering inkluderar Retry-After och klientsäker formulering som undviker att läcka interna detaljer.
- Lagringsrekommendationer är kopplade till den angivna trafikskalan och prestandabegränsningarna.
- Test- och utrullningssteg är handlingsbara och inkluderar mätbara acceptanskriterier.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nSkapa en produktionsredo ritning och implementationsguide f\u00f6r API-rate limiting som klarar trafiktoppar och aktivt missbruk. Leveransen m\u00e5ste t\u00e4cka lagerbaserad throttling (IP + identitet), skalbar tillst\u00e5ndslagring, s\u00e4ker klientkommunikation och operativ insyn\u2014utan att f\u00f6rs\u00e4mra upplevelsen f\u00f6r legitima anv\u00e4ndare.\r\n\r\n## PERSONA\r\nAgera som en erfaren API-f\u00f6rsvarsingenj\u00f6r som har designat anti-missbrukskontroller f\u00f6r h\u00f6gvolymsplattformar i enterprise-klass. Du prioriterar modellering av angriparbeteenden, adaptiva kontroller och praktiska implementationer som \u00f6verlever verklig belastning och undvikandetaktiker. Skriv med skarp, ingenj\u00f6rsfokuserad tydlighet.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- Ge konkreta, drifts\u00e4ttningsbara m\u00f6nster; undvik generiska r\u00e5d i stil med \u201ds\u00e4kra ditt API\u201d.\r\n- Anv\u00e4nd flerskiktsskydd (minst tv\u00e5 oberoende enforcement-lager plus ett fallback-beteende).\r\n- Inkludera b\u00e5de IP-baserad och anv\u00e4ndar-\/identitetsbaserad throttling, med v\u00e4gledning f\u00f6r oautentiserad trafik.\r\n- Erbjud ramverksagnostiska koncept plus kodorienterade middleware-exempel anpassade till den angivna stacken.\r\n- Rekommendera state backends som passar skalan (lokalt minne, delad cache, distribuerade alternativ).\r\n- 429-hantering m\u00e5ste inkludera **Retry-After** och klients\u00e4ker meddelandetext som inte l\u00e4cker interna detaljer.\r\n- Inkludera plan f\u00f6r loggning, \u00f6vervakning och larm med fokus p\u00e5 att uppt\u00e4cka f\u00f6r\u00e4nderliga missbruksm\u00f6nster.\r\n- Adressera prestanda\u00f6verhead och tuning.\r\n- Inkludera en valideringsplan (tester + lastsimulering) och en utrullningsplan med l\u00e5g risk.\r\n\r\n### Vad detta INTE \u00e4r (avgr\u00e4nsningar)\r\n- Inte en fullst\u00e4ndig rapport f\u00f6r val av WAF\/CDN-leverant\u00f6r.\r\n- Inte en komplett omdesign av IAM\/auth (t\u00e4ck endast identitetssignaler som beh\u00f6vs f\u00f6r rate limiting).\r\n- Inte malware-forensik eller incident response-playbooks ut\u00f6ver loggning\/larm som beh\u00f6vs f\u00f6r throttling.\r\n- Inte juridisk v\u00e4gledning kring compliance; endast tekniska \u00e5tg\u00e4rder mappade till angivna krav.\r\n\r\n## PROCESS\r\n1. **F\u00f6ranalys (kr\u00e4vs):** \u00c5terge din f\u00f6rst\u00e5else av API-scenariot, sannolika missbruksformer och framg\u00e5ngskriterier baserat p\u00e5 de givna inputsen. Lista eventuella antaganden.\r\n2. **Hot-till-kontroll-mappning:** \u00d6vers\u00e4tt de angivna hoten till specifika throttles (burst, sustained, endpoint-k\u00e4nsligt, credential stuffing-liknande m\u00f6nster, scraping-heuristiker).\r\n3. **Lagerbaserad design:** Specificera minst:\r\n   - Edge- eller gateway-kontroll (grov begr\u00e4nsning)\r\n   - Applikations-middleware-kontroll (finmaskig begr\u00e4nsning)\r\n   - Ett fallback-\/containment-l\u00e4ge n\u00e4r beroenden fallerar (t.ex. lagringsavbrott)\r\n4. **Byggplan f\u00f6r middleware:** Ge implementationsm\u00f6nster f\u00f6r:\r\n   - IP-nyckling (inklusive v\u00e4gledning f\u00f6r hantering av proxy\/CDN-headers)\r\n   - Anv\u00e4ndar-\/identitetsnyckling (user ID, API-nyckel, session, device fingerprint d\u00e4r l\u00e4mpligt)\r\n   - Kombinerade nycklar (t.ex. per-anv\u00e4ndare-per-endpoint) och endpoint-viktning\r\n5. **Beslutsunderlag f\u00f6r state storage:** Rekommendera backend(s) med tydliga tr\u00f6sklar f\u00f6r n\u00e4r man ska g\u00e5 fr\u00e5n in-process till delade\/distribuerade stores. Inkludera installations-\/setup-noteringar.\r\n6. **Klientresponsbeteende:** Definiera 429-struktur, headers och meddelandemallar som hj\u00e4lper klienter att \u00e5terh\u00e4mta sig utan att avsl\u00f6ja arkitektur.\r\n7. **Observability:** Definiera loggschema, metrics, dashboards och larmregler; inkludera exempel p\u00e5 queries\/m\u00f6nster f\u00f6r att uppt\u00e4cka hur missbruk utvecklas.\r\n8. **Prestanda & tuning:** Lista optimeringar (hot paths, sampling, async logging, lokala caches, Lua\/scripts om Redis, etc.).\r\n9. **Validering:** Ge enhets-\/integrationstester, adversarial testfall och lasttester. Inkludera acceptanskriterier.\r\n10. **Utrullning:** Ge en stegvis drifts\u00e4ttningsplan \u00f6ver **4\u20136 faser** med \u00f6vervakningsgrindar och rollback-triggers.\r\n\r\n### Hantering av edge cases\r\n- Om n\u00e5gon input saknas eller \u00e4r tvetydig, st\u00e4ll f\u00f6rst riktade f\u00f6rtydligande fr\u00e5gor. Om anv\u00e4ndaren \u00e4nd\u00e5 beg\u00e4r omedelbar output, forts\u00e4tt med rimliga standardval och m\u00e4rk dem tydligt som antaganden.\r\n- Om stacken inte kan st\u00f6dja en rekommenderad taktik, ge ett alternativ som bevarar samma s\u00e4kerhetsintention.\r\n- Om strikt begr\u00e4nsning krockar med prestandakrav, f\u00f6resl\u00e5 adaptiva gr\u00e4nser och \u201dgrace\u201d-mekanismer f\u00f6r betrodda klienter.\r\n\r\n## INPUTS\r\n- **Applikationstyp:** [FORMAT]\r\n- **Trafikprofil (baseline + peak + spike-form):** [KONTEXT]\r\n- **Teknikstack (ramverk, runtime, infra, DB):** [BRANSCH]\r\n- **S\u00e4kerhetskrav (hot + compliance):** [HUVUDUTMANING]\r\n- **Prestandabegr\u00e4nsningar (latens\/throughput SLO:er):** [TIDSRAM]\r\n\r\n## OUTPUTSPECIFIKATION\r\nAnv\u00e4nd markdown-rubriker och tillhandah\u00e5ll avsnitt i exakt denna ordning:\r\n\r\n1. **Rate limiting-arkitektur**\r\n   - {Threat Model Summary}\r\n   - {Layered Controls Overview}\r\n   - {Keying Strategy} (IP, user, combined, endpoint sensitivity)\r\n   - {Adaptive Rules} (burst vs sustained, anomaly triggers)\r\n\r\n2. **Middleware-implementation**\r\n   - {Middleware Approach} (var den k\u00f6rs, hur den komponeras)\r\n   - {IP Throttle Example} (kodorienterad pseudokod eller stack-specifikt exempel)\r\n   - {User\/Identity Throttle Example}\r\n   - {Composite & Endpoint-Weighted Limits}\r\n   - {Failure Modes & Fallback Behavior}\r\n\r\n3. **State storage & konfiguration**\r\n   - {When In-Memory Is Acceptable}\r\n   - {When Shared\/Distributed Storage Is Required}\r\n   - {Redis\/Upstash-Style Setup Notes}\r\n   - {Key Design, TTLs, Atomicity Notes}\r\n\r\n4. **429-svar & klientv\u00e4gledning**\r\n   - {Response Schema}\r\n   - {Retry-After Strategy}\r\n   - {Safe Message Examples} (omskrivna, icke-avsl\u00f6jande)\r\n   - {Handling for Auth vs Unauth Clients}\r\n\r\n5. **Loggning, \u00f6vervakning och larm**\r\n   - {Log Fields & Structure}\r\n   - {Metrics to Emit}\r\n   - {Dashboards}\r\n   - {Alert Rules}\r\n   - {Abuse Pattern Detection Examples}\r\n\r\n6. **Prestandaoptimering**\r\n   - {Hot Path Optimizations}\r\n   - {Caching & Sampling Guidance}\r\n   - {Distributed Store Latency Mitigations}\r\n\r\n7. **Testning & validering**\r\n   - {Unit Tests}\r\n   - {Integration Tests}\r\n   - {Adversarial Scenarios}\r\n   - {Load\/Spike Tests}\r\n   - {Pass\/Fail Criteria}\r\n\r\n8. **Drifts\u00e4ttning & gradvis utrullning**\r\n   - {Phase Plan}\r\n   - {Monitoring Gates}\r\n   - {Rollback Triggers}\r\n   - {Post-Launch Tuning Loop}\r\n\r\n## KVALITETSKONTROLLER\r\nInnan du finaliserar, verifiera:\r\n- Planen inkluderar minst tv\u00e5 enforcement-lager plus ett definierat fallback-l\u00e4ge.\r\n- B\u00e5de IP-baserade och identitetsbaserade throttles implementeras med tydliga nyckeldefinitioner.\r\n- 429-hantering inkluderar Retry-After och klients\u00e4ker formulering som undviker att l\u00e4cka interna detaljer.\r\n- Lagringsrekommendationer \u00e4r kopplade till den angivna trafikskalan och prestandabegr\u00e4nsningarna.\r\n- Test- och utrullningssteg \u00e4r handlingsbara och inkluderar m\u00e4tbara acceptanskriterier.";
    const variables = ["[FORMAT]","[KONTEXT]","[BRANSCH]","[HUVUDUTMANING]","[TIDSRAM]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat från AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Lista dina ”dyra endpoints” först.</strong> Ge AI:n en liten tabell med routes och varför de är kostsamma (DB-fanout, tredjepartsanrop, exporter). Exempel på följdfråga: ”Här är 8 endpoints; markera vilka som behöver burst-limits kontra uthålliga limits, och föreslå olika tidsfönster för varje.”</li>


<li><strong>Beskriv missbrukstrafiken som en berättelse.</strong> Lägg till vad du observerade: user agents, referrers, IP-ASN, request-mönster, retries och peak RPS. Fråga sedan: ”Baserat på det här mönstret, vilka nycklar ska vi rate-limita på (IP, token, konto, org, API-nyckel), och vilka kringgåenden ska vi förvänta oss härnäst?”</li>

<li><strong>Kräv explicita 429-kontrakt.</strong> Många team glömmer klientupplevelsen. Be modellen att skriva ut exakt JSON-body, headers (inklusive Retry-After) och vilka fält som är säkra: ”Skriv en 429-responsspec för publika endpoints kontra autentiserade endpoints; undvik att avslöja interna trösklar.”</li>


<li><strong>Iterera på tuning, inte bara regler.</strong> Efter första passet, skärp med en kontrollerad prompt: ”Gör nu alternativ A mer aggressivt för anonym trafik, men håll autentiserade power users under 1 % falska positiva. Förklara tradeoffs i 6 punkter.”</li>


<li><strong>Kombinera det med din observability-verklighet.</strong> Berätta vad du faktiskt använder (CloudWatch, Datadog, Grafana, ELK) och be om konkreta metriknamn och larmtrösklar. En bra följdfråga: ”Föreslå 10 mätvärden, 5 dashboards och 6 larm; inkludera vad varje larm betyder och den troliga nästa åtgärden.”</li>

</ul>
<!-- /wp:post-content -->
</div>

<div class="related-prompts-section">
<!-- wp:heading {"level":2} -->
<h2 class="wp-block-heading">Relaterade prompts</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>När du väl har designat lagerindelad throttling hjälper de här relaterade promptarna dig att operationalisera arbetet över team, process och kapacitet.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Om du också behöver standardisera hur ingenjörsarbetet rör sig från ”inkommande” till ”klart”, hjälper mognadsramverket i <a href="https://nodenordic.se/prompts/gor-en-mognadsanalys-av-uppgiftshantering-med-ai-prompt">Gör en mognadsanalys av uppgiftshantering med AI-prompt</a> dig att upptäcka flaskhalsar som gör utrullningar av rate limits riskabla (oklart ägarskap, saknade change windows, svaga kontroller efter driftsättning). Den passar bra när problemet inte bara är missbruk, utan långsam exekvering och inkonsekvent uppföljning.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>För team som jobbar med löpande plattformsförstärkning är <a href="https://nodenordic.se/prompts/bygg-en-adaptiv-plan-for-en-aktivitetshanterare-med-ai-prompt">Bygg en adaptiv plan för en aktivitetshanterare med AI-prompt</a> användbar direkt efter att du har genererat din throttling-blueprint. Du kan göra om utrullningsplanen till ett levande system: återkommande tuning-uppgifter, dashboard-granskningar och retrospektiver kring ”attackmönster” som inte glöms bort.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>När rate limits berör flera grupper (API, SRE, support och ibland sälj) blir misskommunikation en incident i sig. <a href="https://nodenordic.se/prompts/skapa-en-spelbok-for-uppgiftsoverlamning">Skapa en spelbok för uppgiftsöverlämning</a> hjälper dig att definiera vem som äger policyändringar, vem som hanterar kundeskaleringar kring 429:or och vad som måste dokumenteras innan du slår på striktare regler.</p>
<!-- /wp:paragraph -->

<br>

<!-- wp:paragraph -->
<p>Snabbreferens:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul>
<!-- wp:list-item -->
<li><a href="https://nodenordic.se/prompts/gor-en-mognadsanalys-av-uppgiftshantering-med-ai-prompt">Gör en mognadsanalys av uppgiftshantering med AI-prompt</a>: Identifiera processglapp som blockerar säkra utrullningar.</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
<li><a href="https://nodenordic.se/prompts/bygg-en-adaptiv-plan-for-en-aktivitetshanterare-med-ai-prompt">Bygg en adaptiv plan för en aktivitetshanterare med AI-prompt</a>: Gör planen till återkommande driftuppgifter.</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
<li><a href="https://nodenordic.se/prompts/bygg-en-plan-for-talent-management-med-en-ai-prompt">Bygg en plan för talent management med en AI-prompt</a>: Bemanna ägarskap för arbete med plattformens driftsäkerhet.</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
<li><a href="https://nodenordic.se/prompts/bygg-en-ritning-for-lagerstyrning-med-denna-ai-prompt">Bygg en ritning för lagerstyrning med denna AI-prompt</a>: Förbättra spårningen av ”rate-limit-beroenden” som tillgångar.</li>
<!-- /wp:list-item -->
<!-- wp:list-item -->
<li><a href="https://nodenordic.se/prompts/skapa-en-spelbok-for-uppgiftsoverlamning">Skapa en spelbok för uppgiftsöverlämning</a>: Förhindra tapp i överlämningar mellan team.</li>
<!-- /wp:list-item -->
</ul>
<!-- /wp:list -->
</div>

<div class="faq-section">
<!-- wp:heading {"level":2} -->
<h2 class="wp-block-heading">Vanliga frågor</h2>
<!-- /wp:heading -->

<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för API rate limits?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>Backendingenjörer</strong> använder den för att omvandla diffusa ”lägg till rate limiting”-ärenden till en lagerindelad policy plus implementationsdetaljer för middleware. <strong>Plattform-/SRE-ansvariga</strong> förlitar sig på den för telemetri, larm och utrullningssteg med låg risk som minskar överraskningar i produktion. <strong>API-produktchefer</strong> får en tydligare specifikation för klientupplevelsen (429 + Retry-After, säkra meddelanden) så att integrationer går sönder mer sällan. <strong>Säkerhetsingenjörer</strong> använder den för att koppla angriparbeteenden till kontroller och planera adaptiv tuning i takt med att missbruket utvecklas.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för API rate limits?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>SaaS-bolag</strong> använder den för att skydda multi-tenant-API:er där en enda högljudd kund (eller en läckt token) kan försämra upplevelsen för alla. Den hjälper att separera limits per konto från limits per IP och undviker att bestraffa kontors-NAT-trafik. <strong>E-handel och marknadsplatser</strong> använder den för att avskräcka scraping av priser, lager och sökresultat, särskilt runt kampanjer när trafikspikar är normala men missbruk också ökar. <strong>Fintech- och betalningsteam</strong> använder den för att tygla retry-stormar kopplade till inloggning och för att throttla känsliga endpoints utan att läcka trösklar till angripare. <strong>Media- och dataleverantörer</strong> får värde eftersom innehåll och dataset lockar automatiserad extraktion, så lagerindelad identitets- + IP-throttling plus övervakning är avgörande.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Varför ger grundläggande AI-prompter för att designa API rate limits svaga resultat?</span>
<!-- wp:paragraph -->
<p class="answer">En typisk prompt som ”Skriv en rate limiting-strategi för mitt API” misslyckas eftersom den: saknar modellering av angriparbeteenden (bursts, IP-rotation, retries) så limits blir lätta att kringgå, inte ger någon plan för lagerindelad enforcement (IP plus identitet plus fallback) och slutar som en enda skör regel, ignorerar avvägningar för state-lagring så den föreslår mönster som skapar fel under last eller mellan instanser, ger generiska 429-råd i stället för ett klientsäkert kontrakt med Retry-After, och missar operativ synlighet så du inte kan tunna limits säkert efter lansering.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här prompten för API rate limits till min specifika situation?</span>
<!-- wp:paragraph -->
<p class="answer">Ja. Snabbaste sättet är att lägga till din stack (språk, ramverk, gateway), din trafikprofil (genomsnittlig/peak RPS, burstighet) och en kort lista med endpoints med ”kostnads”-noteringar så att policyn kan variera per route. Inkludera identitetssignaler du redan har (API-nyckel, användar-ID, org-ID) och förtydliga hur oautentiserad trafik ser ut (publika endpoints, onboarding, webhooks). Ställ sedan en riktad följdfråga som: ”Skriv om blueprinten för Node/Express bakom NGINX, med Redis-räknare, och föreslå per-endpoint-limits för /search, /export, /login och /webhook.”</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här prompten för API rate limits?</span>
<!-- wp:paragraph -->
<p class="answer">Det största misstaget är att lämna missbruksscenariot för vagt — i stället för ”vi blir scrapade”, skriv ”/search får bursts på 300 RPS i 2–3 minuter från roterande residential IPs, följt av en 10x retry-spike på 5xx.” Ett annat vanligt fel är att inte lista identitetsnycklar; ”autentiserade användare” är svagt jämfört med ”rate-limita per org_id, sedan user_id, med API-nyckel som fallback.” Folk glömmer också att specificera vilka endpoints som är publika kontra autentiserade, vilket leder till policyer som blockerar onboarding-flöden. Till sist utelämnar team ofta utrullningsbegränsningar (feature flags, procentuell utrullning, shadow mode), så planen är korrekt på papper men riskabel att driftsätta.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vem ska INTE använda den här prompten för API rate limits?</span>
<!-- wp:paragraph -->
<p class="answer">Den här prompten är inte idealisk för team som vill ha en copy-paste-snutt utan någon tuning, eftersom rate limiting bara fungerar bra när den speglar dina routes, tenants och din trafikprofil. Den passar inte heller om du inte kan ändra applikationskod eller edge-konfiguration alls; då kan du i stället behöva en hanterad gateway/WAF-lösning. Och om du inte har identifierat dina centrala identitetssignaler (API-nycklar, användar-ID:n, org-ID:n) får du en svagare plan tills den grunden finns på plats.</p>
<!-- /wp:paragraph -->
</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för API rate limits?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Backendingenjörer använder den för att omvandla diffusa ”lägg till rate limiting”-ärenden till en lagerindelad policy plus implementationsdetaljer för middleware. Plattform-/SRE-ansvariga förlitar sig på den för telemetri, larm och utrullningssteg med låg risk som minskar överraskningar i produktion. API-produktchefer får en tydligare specifikation för klientupplevelsen (429 + Retry-After, säkra meddelanden) så att integrationer går sönder mer sällan. Säkerhetsingenjörer använder den för att koppla angriparbeteenden till kontroller och planera adaptiv tuning i takt med att missbruket utvecklas."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för API rate limits?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SaaS-bolag använder den för att skydda multi-tenant-API:er där en enda högljudd kund (eller en läckt token) kan försämra upplevelsen för alla. Den hjälper att separera limits per konto från limits per IP och undviker att bestraffa kontors-NAT-trafik. E-handel och marknadsplatser använder den för att avskräcka scraping av priser, lager och sökresultat, särskilt runt kampanjer när trafikspikar är normala men missbruk också ökar. Fintech- och betalningsteam använder den för att tygla retry-stormar kopplade till inloggning och för att throttla känsliga endpoints utan att läcka trösklar till angripare. Media- och dataleverantörer får värde eftersom innehåll och dataset lockar automatiserad extraktion, så lagerindelad identitets- + IP-throttling plus övervakning är avgörande."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger grundläggande AI-prompter för att designa API rate limits svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som ”Skriv en rate limiting-strategi för mitt API” misslyckas eftersom den: saknar modellering av angriparbeteenden (bursts, IP-rotation, retries) så limits blir lätta att kringgå, inte ger någon plan för lagerindelad enforcement (IP plus identitet plus fallback) och slutar som en enda skör regel, ignorerar avvägningar för state-lagring så den föreslår mönster som skapar fel under last eller mellan instanser, ger generiska 429-råd i stället för ett klientsäkert kontrakt med Retry-After, och missar operativ synlighet så du inte kan tunna limits säkert efter lansering."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här prompten för API rate limits till min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja. Snabbaste sättet är att lägga till din stack (språk, ramverk, gateway), din trafikprofil (genomsnittlig/peak RPS, burstighet) och en kort lista med endpoints med ”kostnads”-noteringar så att policyn kan variera per route. Inkludera identitetssignaler du redan har (API-nyckel, användar-ID, org-ID) och förtydliga hur oautentiserad trafik ser ut (publika endpoints, onboarding, webhooks). Ställ sedan en riktad följdfråga som: ”Skriv om blueprinten för Node/Express bakom NGINX, med Redis-räknare, och föreslå per-endpoint-limits för /search, /export, /login och /webhook.”"
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här prompten för API rate limits?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att lämna missbruksscenariot för vagt — i stället för ”vi blir scrapade”, skriv ”/search får bursts på 300 RPS i 2–3 minuter från roterande residential IPs, följt av en 10x retry-spike på 5xx.” Ett annat vanligt fel är att inte lista identitetsnycklar; ”autentiserade användare” är svagt jämfört med ”rate-limita per org_id, sedan user_id, med API-nyckel som fallback.” Folk glömmer också att specificera vilka endpoints som är publika kontra autentiserade, vilket leder till policyer som blockerar onboarding-flöden. Till sist utelämnar team ofta utrullningsbegränsningar (feature flags, procentuell utrullning, shadow mode), så planen är korrekt på papper men riskabel att driftsätta."
      }
    },
    {
      "@type": "Question",
      "name": "Vem ska INTE använda den här prompten för API rate limits?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten är inte idealisk för team som vill ha en copy-paste-snutt utan någon tuning, eftersom rate limiting bara fungerar bra när den speglar dina routes, tenants och din trafikprofil. Den passar inte heller om du inte kan ändra applikationskod eller edge-konfiguration alls; då kan du i stället behöva en hanterad gateway/WAF-lösning. Och om du inte har identifierat dina centrala identitetssignaler (API-nycklar, användar-ID:n, org-ID:n) får du en svagare plan tills den grunden finns på plats."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">
<!-- wp:paragraph -->
<p>Missbruk väntar inte på din roadmap. Använd den här prompten för att designa lagerindelade API rate limits som du faktiskt kan driftsätta, övervaka och tunna, klistra sedan in den i ditt arbetsflöde och börja härda redan i dag.</p>
<!-- /wp:paragraph -->
</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/bygg-skiktade-api-rate-limits-med-ai-prompt/">Bygg skiktade API-rate limits med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Skapa ISO 9001-mallar för bakgrundskontroller</title>
		<link>https://nodenordic.se/prompts/skapa-iso-9001-mallar-for-bakgrundskontroller/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=skapa-iso-9001-mallar-for-bakgrundskontroller</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:49:39 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5003041</guid>

					<description><![CDATA[<p>Bakgrundskontroller vid rekrytering känns riskfyllda och spretiga – den här AI-prompten skapar ISO 9001-anpassade mallar med steg och revisionsspår.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/skapa-iso-9001-mallar-for-bakgrundskontroller/">Skapa ISO 9001-mallar för bakgrundskontroller</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: ISO 9001 background check -->
<div class="hook-introduction">

<p>Bakgrundskontroller fallerar ofta på samma ställen. Anteckningar sprids i mejl, kriterier ändras beroende på vem som granskar, och ”vi gjorde så gott vi kunde” blir till ”kan vi bevisa det” så fort det uppstår en tvist eller revision. Det är riskfyllt. Och det går att undvika.</p>



<p>Den här <strong>ISO 9001-bakgrundskontrollen</strong> är byggd för <strong>chefer inom HR operations</strong> som behöver en konsekvent, försvarbar process över rekryterare och sajter, <strong>complianceansvariga</strong> som måste kunna visa spårbarhet utan att dränka team i administration, och <strong>people-konsulter</strong> som standardiserar rekryteringsflöden för kunder med blandad rollkänslighet. Resultatet är en komplett uppsättning mallar: stegvisa verifieringschecklistor (cirka 3–15 steg), dokumentstyrningsartefakter, revisionsspår, steg för korrigerande åtgärder och rättviseskydd som du kan anpassa efter bransch, skala, jurisdiktion och risktolerans.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Vad du får</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Designar ett ISO 9001-inspirerat arbetsflöde för bakgrundsverifiering som betonar dokumentstyrning, spårbarhet och konsekvent beslutsfattande.</li>
          <li>Fastställer ett lämpligt antal verifieringssteg (vanligtvis 3–15) baserat på organisationsstorlek, rollkänslighet och risktolerans.</li>
          <li>Bygger standardiserade mallar för varje steg, inklusive fält för datainsamling, acceptanskriterier och granskarens sign-off.</li>
          <li>Bygger in skydd för rättvisa genom att kräva relevansbaserade kontroller, dataminimering för integritet och konsekventa kriterier mellan kandidater.</li>
          <li>Skapar mekanismer för revisionsbarhet som ändringsloggar, versionshantering, avvikelsehantering och loopar för korrigerande/förebyggande åtgärder.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du rekryterar över flera team och inser att varje rekryterare ”gör kontroller” på olika sätt.</li>
          <li>En kandidattvist, intern utredning eller kundkrav tvingar dig att visa hur ett beslut fattades och dokumenterades.</li>
          <li>Du skalar upp inom reglerade områden (finans, vård, säkerhetskänsliga roller) och behöver stramare kontroller utan att bygga allt från grunden.</li>
          <li>Ledningen vill kortare time-to-hire, men du har inte råd med genvägar som skapar compliance- eller bedrägeririsk.</li>
          <li>Du byter leverantör, lägger till en eller går mot en hybridlösning och behöver tydlighet i processen innan ni väljer verktyg.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En stegvis processkarta för bakgrundsverifiering med 3–15 steg och tydliga stage gates.</li>
           <li>Checklistor och formulär steg för steg med {Title Case}-platshållare för konsekvent datainsamling.</li>
           <li>Ett dokumentstyrningspaket inklusive versionshistorik, godkännandeflöde och vägledning för arkivering (ej juridisk rådgivning).</li>
           <li>Ett arbetsflöde för avvikelser och korrigerande åtgärder vid diskrepanser, inklusive eskaleringstriggers och utredningsanteckningar.</li>
           <li>Ett avsnitt om skydd för rättvisa och integritet med konsekventa kriterier, relevanstester och steg vid negativt beslut (ej jurisdiktionsspecifikt).</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: mallsvit för bakgrundskontroll i linje med ISO 9001</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[VERSALER_MED_UNDERSCORES]</code></td>
                                <td class="var-desc">
                                    Ange eventuella extra, användardefinierade indata som behöver inkluderas dynamiskt i resultatet. Dessa ska skrivas med versaler och understreck som platshållare.                                    <div class="var-example">Till exempel: "BAKGRUNDSKONTROLL_LEVERANTOR eller ONBOARDING_DOKUMENTATION"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[VERSALER_MED_UNDERSCORES]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[MALGRUPP]</code></td>
                                <td class="var-desc">
                                    Beskriv den primära målgruppen eller intressenterna för systemet för bakgrundsverifiering, inklusive deras roll och mål.                                    <div class="var-example">Till exempel: "HR-chefer på medelstora techbolag som vill effektivisera efterlevnadsprocesser vid rekrytering."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[MALGRUPP]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[KONTEXT]</code></td>
                                <td class="var-desc">
                                    Ge detaljer om organisationens nuvarande situation, inklusive rekryteringsutmaningar, branschtrender eller specifika behov.                                    <div class="var-example">Till exempel: "En växande e-handelsstartup som expanderar internationellt och behöver robusta bakgrundskontroller för att förebygga bedrägerier."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[KONTEXT]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BRANSCH]</code></td>
                                <td class="var-desc">
                                    Ange vilken bransch organisationen verkar inom.                                    <div class="var-example">Till exempel: "Hälso- och sjukvård, finansiella tjänster eller teknik"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BRANSCH]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[FORETAGSNAMN]</code></td>
                                <td class="var-desc">
                                    Ange organisationens fullständiga namn.                                    <div class="var-example">Till exempel: "Acme AB"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[FORETAGSNAMN]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[YRKESROLLER]</code></td>
                                <td class="var-desc">
                                    Lista de yrkesroller eller kategorier som systemet för bakgrundsverifiering ska användas för.                                    <div class="var-example">Till exempel: "Mjukvaruutvecklare, säljrepresentanter och kundsupportspecialister"</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[YRKESROLLER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[PRIMAR_JURISDIKTION]</code></td>
                                <td class="var-desc">
                                    Ange den primära rättsliga jurisdiktion där organisationen verkar eller där majoriteten av rekryteringarna kommer att ske.                                    <div class="var-example">Till exempel: "Kalifornien, USA"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[PRIMAR_JURISDIKTION]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[YTTERLIGARE_JURISDIKTIONER]</code></td>
                                <td class="var-desc">
                                    Lista eventuella ytterligare jurisdiktioner där organisationen verkar eller planerar att rekrytera, om tillämpligt.                                    <div class="var-example">Till exempel: "Ontario, Kanada; London, Storbritannien"</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[YTTERLIGARE_JURISDIKTIONER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[ORGANISATIONSSTORLEK]</code></td>
                                <td class="var-desc">
                                    Ange organisationens storlek, vanligtvis i antal anställda eller omsättning.                                    <div class="var-example">Till exempel: "250 anställda eller 50 MUSD i årlig omsättning"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[ORGANISATIONSSTORLEK]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[RISKTOLERANS]</code></td>
                                <td class="var-desc">
                                    Definiera organisationens tolerans för risk i rekryteringsprocessen, från låg till hög.                                    <div class="var-example">Till exempel: "Låg risktolerans på grund av hantering av känsliga kunddata."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[RISKTOLERANS]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[KANSLIGA_BEFATTNINGSTYPER]</code></td>
                                <td class="var-desc">
                                    Identifiera roller som kräver fördjupade bakgrundskontroller på grund av sin känslighet eller ansvarsnivå.                                    <div class="var-example">Till exempel: "Finanschef (CFO), IT-säkerhetschef eller dataskyddsombud"</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[KANSLIGA_BEFATTNINGSTYPER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[NUVARANDE_MOGNADSGRAD]</code></td>
                                <td class="var-desc">
                                    Beskriv den nuvarande mognadsgraden i organisationens processer för bakgrundsverifiering.                                    <div class="var-example">Till exempel: "Grundläggande bakgrundskontroller genomförs manuellt, utan ett centraliserat system eller en etablerad policy."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[NUVARANDE_MOGNADSGRAD]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[HUVUDUTMANING]</code></td>
                                <td class="var-desc">
                                    Förklara den huvudsakliga utmaningen eller det problem som organisationen försöker lösa med systemet för bakgrundsverifiering.                                    <div class="var-example">Till exempel: "Oenhetliga bakgrundskontroller mellan avdelningar som leder till regelefterlevnadsrisker."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[HUVUDUTMANING]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BEFINTLIGA_SYSTEM]</code></td>
                                <td class="var-desc">
                                    Lista eventuella befintliga system eller verktyg som organisationen använder för rekrytering eller bakgrundsverifiering.                                    <div class="var-example">Till exempel: "Workday för HR-administration och Checkr för bakgrundskontroller."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[BEFINTLIGA_SYSTEM]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TONALITET]</code></td>
                                <td class="var-desc">
                                    Beskriv den ton och stil som dokumentationen ska ha för att stämma överens med organisationens varumärke.                                    <div class="var-example">Till exempel: "Professionell, koncis och med fokus på regelefterlevnad."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[TONALITET]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TIDSRAM]</code></td>
                                <td class="var-desc">
                                    Ange den förväntade tidsramen för att implementera systemet för bakgrundsverifiering.                                    <div class="var-example">Till exempel: "3 månader för initial utrullning, med full implementering inom 6 månader."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[TIDSRAM]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Vad detta INTE är (omfattningsgränser)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INPUT</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">SPECIFIKATION FÖR OUTPUT</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">1) Uppgiftsförståelse (föranalys)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">2) Blueprint för verifieringsprogram</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">3) Rollkänslighet och kontrollmappning</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">4) Mallar steg för steg (upprepa för varje steg)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">5) Kärndokumentuppsättning (färdiga mallar)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">6) Vägledning för arbetsflöde och integration</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">7) ISO 9001-kvalitetssystemlager</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">8) Implementerings- och utbildningskit</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Utforma en komplett, ISO 9001-inspirerad mallsvit för bakgrundsverifiering av anställda som skalar från små team till stora företag, balanserar noggrannhet med rättvis behandling av kandidater och minskar rekryteringsrisk genom standardiserad dokumentation och revisionsbarhet.

## PERSONA
Agera som en **systemdesigner för bakgrundskontroller av personal** med djup HR- och regelefterlevnadskompetens och en tidigare karriär inom utredningar av företagsbedrägerier. Du bygger verifieringsprogram som är försvarbara, repeterbara och praktiska för riktiga HR-team—med fokus på tydliga kontroller, rena register och konsekvent beslutsfattande.

## BEGRÄNSNINGAR
- Anpassa hela systemet till **ISO 9001-koncept för kvalitetsledning** (dokumentstyrning, spårbarhet, korrigerande åtgärder, ständiga förbättringar).
- Anpassa resultaten efter **bransch, organisationsskala, rollkänslighet, jurisdiktion och risktolerans**.
- Fastställ ett lämpligt antal steg dynamiskt (ungefär **3–15 steg**, justerat efter input och komplexitet).
- Bygg in **rättviseskydd** (relevansbaserade bedömningar, konsekventa kriterier, integritetsminimering).
- Inkludera efterlevnadsmedvetna delar (samtycke, lagringstid, steg vid negativt beslut) utan att ge jurisdiktionsspecifik juridisk rådgivning.
- Använd **[VERSALER_MED_UNDERSCORES]** endast för användarinmatade uppgifter och **{Title Case}** endast för AI-ifyllda platshållare i leverabler.

### Vad detta INTE är (omfattningsgränser)
- Inte en ersättning för juridisk rådgivning eller en definitiv tolkning av ett enskilt lands lagar.
- Inte ett leverantörsomhuldande eller en rekommendation av typen ”välj den här leverantören”.
- Inte instruktioner för att utföra olaglig övervakning, diskriminering eller förbjudna frågor.
- Inte en one-size-fits-all-policy; den måste skräddarsys med hjälp av indata.

## PROCESS
1. **Föranalys (obligatorisk):** Återge din förståelse av organisationens situation, verifieringsmålen och centrala begränsningar. Lista eventuella antaganden.
2. **Gap-/riskdiagnos:** Identifiera de verifieringsfelpunkter som mest sannolikt orsakar skada (bedrägeri, regulatorisk exponering, vårdslös rekrytering, inkonsekvent behandling).
3. **Stegarkitektur:** Välj rätt antal steg (inom intervallet 3–15) och namnge dem. Förklara varför det antalet passar indata.
4. **Mallkonstruktion:** För varje steg, ta fram nödvändiga formulär, checklistor, besluts­kriterier och standarder för journalföring.
5. **Modell för rollkänslighet:** Bygg en rollklassificeringsmatris och mappa minimikontroller kontra förstärkta kontroller per kategori.
6. **Efterlevnads- och rättviselager:** Lägg till samtyckesflöden, dataminimering, vägledning för individualiserad bedömning och arbetsflöde för negativt beslut (där tillämpligt).
7. **Operationalisering:** Ge vägledning för workflow-integration (ATS-överlämningar, statustracking, kandidatkommunikation, eskaleringsvägar).
8. **Kvalitetsledning:** Lägg till ISO-liknande kontroller: versionering, revisionsspår, interna revisioner, CAPA (korrigerande och förebyggande åtgärder), mätetal och loop för ständiga förbättringar.
9. **Hantering av edge cases:** Om någon input saknas/är tvetydig, ställ först riktade frågor; annars, fortsätt med tydligt märkta antaganden och valfria grenar.

## INPUT
- **Ideal mottagare / beskrivning av kandidatpool:** [MALGRUPP]
- **Organisationskontext och bakgrund:** [KONTEXT]
- **Bransch / sektor:** [BRANSCH]
- **Företagsnamn (valfritt, för att varumärkesanpassa mallar):** [FORETAGSNAMN]
- **Roller som ska omfattas (titlar eller familjer):** [YRKESROLLER]
- **Primär jurisdiktion / land:** [PRIMAR_JURISDIKTION]
- **Ytterligare jurisdiktioner (om några):** [YTTERLIGARE_JURISDIKTIONER]
- **Organisationsstorlek (antal anställda eller fas):** [ORGANISATIONSSTORLEK]
- **Risktolerans (låg/medel/hög) + motivering:** [RISKTOLERANS]
- **Befattningar som kräver högre granskning (finans, minderåriga, infra, etc.):** [KANSLIGA_BEFATTNINGSTYPER]
- **Nuvarande processmognad (ingen/grundläggande/styrd/reviderad):** [NUVARANDE_MOGNADSGRAD]
- **Kända tidigare problem eller misslyckanden (valfritt):** [HUVUDUTMANING]
- **Verktyg som används (ATS/HRIS/ärendehantering):** [BEFINTLIGA_SYSTEM]
- **Varumärkeston för kandidatkommunikation:** [TONALITET]
- **Tidsbegränsningar för rekryteringscykler:** [TIDSRAM]

## SPECIFIKATION FÖR OUTPUT
Tillhandahåll ett sammanhållet paket med dessa avsnitt, i ordning:

### 1) Uppgiftsförståelse (föranalys)
- {Summary Of Goals}
- {Key Risks Observed}
- {Assumptions}
- {Questions Needed If Inputs Missing}

### 2) Blueprint för verifieringsprogram
- {Chosen Number Of Stages}
- {Stage List With Purpose}
- {How Stages Scale By Org Size And Risk}

### 3) Rollkänslighet och kontrollmappning
- {Role Categories}
- {Minimum Checks By Category}
- {Enhanced Checks By Category}
- {Decision Consistency Rules}

### 4) Mallar steg för steg (upprepa för varje steg)
För varje steg, inkludera:
- {Stage Name}
- {Objective}
- {Entry Criteria}
- {Step By Step Procedure}
- {Required Inputs / Documents}
- {Acceptable Evidence Matrix}
- {Red Flags}
- {Escalation Path}
- {Pass/Fail/Review Outcomes}
- {Candidate Communication Snippets} (i [TONALITET])
- {Records To Retain} + {Retention Guidance} (icke-juridisk, principbaserad)
- {Audit Trail Fields}
- {Common Exceptions And How To Handle}

### 5) Kärndokumentuppsättning (färdiga mallar)
Inkludera redigerbara mallar med platshållare såsom:
- {Consent Form}
- {Disclosure Notice}
- {Identity Verification Checklist}
- {Employment Verification Script}
- {Reference Interview Guide}
- {Discrepancy Resolution Form}
- {Individualized Assessment Worksheet}
- {Adverse Decision Notice Template} (där tillämpligt)
- {Vendor Due Diligence Checklist}
- {Data Access Control Matrix}
- {Record Index And Filing Taxonomy}
- {Change Log And Version Control Page}

### 6) Vägledning för arbetsflöde och integration
- {Process Flow Description}
- {Recommended Parallelization Opportunities}
- {ATS/HRIS Handoff Points}
- {Status Tracking Fields}
- {SLA Targets By Role Category}

### 7) ISO 9001-kvalitetssystemlager
- {KPIs And Definitions}
- {Internal Audit Checklist}
- {Nonconformance Handling}
- {CAPA Workflow}
- {Continuous Improvement Cadence}

### 8) Implementerings- och utbildningskit
- {Rollout Plan}
- {Training Modules By HR Role}
- {Hiring Manager Quick Guide}
- {90 Day Stabilization Checklist}

## KVALITETSKONTROLLER
På slutet, inkludera en **checklista för kvalitetsvalidering** med 4–5 pass/fail-punkter, till exempel:
- Verifieringssteg är spårbara, dokumenterade och versionsstyrda.
- Rollbaserade krav är konsekventa och motiverade utifrån risk.
- Rättviseskydd för kandidater finns på plats (relevans, konsekvens, integritetsminimering).
- Mallar innehåller tydlig eskalering och hantering av undantag.
- Mätetal och revisionsmekanismer finns för att stödja ständiga förbättringar.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nUtforma en komplett, ISO 9001-inspirerad mallsvit f\u00f6r bakgrundsverifiering av anst\u00e4llda som skalar fr\u00e5n sm\u00e5 team till stora f\u00f6retag, balanserar noggrannhet med r\u00e4ttvis behandling av kandidater och minskar rekryteringsrisk genom standardiserad dokumentation och revisionsbarhet.\r\n\r\n## PERSONA\r\nAgera som en **systemdesigner f\u00f6r bakgrundskontroller av personal** med djup HR- och regelefterlevnadskompetens och en tidigare karri\u00e4r inom utredningar av f\u00f6retagsbedr\u00e4gerier. Du bygger verifieringsprogram som \u00e4r f\u00f6rsvarbara, repeterbara och praktiska f\u00f6r riktiga HR-team\u2014med fokus p\u00e5 tydliga kontroller, rena register och konsekvent beslutsfattande.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- Anpassa hela systemet till **ISO 9001-koncept f\u00f6r kvalitetsledning** (dokumentstyrning, sp\u00e5rbarhet, korrigerande \u00e5tg\u00e4rder, st\u00e4ndiga f\u00f6rb\u00e4ttringar).\r\n- Anpassa resultaten efter **bransch, organisationsskala, rollk\u00e4nslighet, jurisdiktion och risktolerans**.\r\n- Fastst\u00e4ll ett l\u00e4mpligt antal steg dynamiskt (ungef\u00e4r **3\u201315 steg**, justerat efter input och komplexitet).\r\n- Bygg in **r\u00e4ttviseskydd** (relevansbaserade bed\u00f6mningar, konsekventa kriterier, integritetsminimering).\r\n- Inkludera efterlevnadsmedvetna delar (samtycke, lagringstid, steg vid negativt beslut) utan att ge jurisdiktionsspecifik juridisk r\u00e5dgivning.\r\n- Anv\u00e4nd **[VERSALER_MED_UNDERSCORES]** endast f\u00f6r anv\u00e4ndarinmatade uppgifter och **{Title Case}** endast f\u00f6r AI-ifyllda platsh\u00e5llare i leverabler.\r\n\r\n### Vad detta INTE \u00e4r (omfattningsgr\u00e4nser)\r\n- Inte en ers\u00e4ttning f\u00f6r juridisk r\u00e5dgivning eller en definitiv tolkning av ett enskilt lands lagar.\r\n- Inte ett leverant\u00f6rsomhuldande eller en rekommendation av typen \u201dv\u00e4lj den h\u00e4r leverant\u00f6ren\u201d.\r\n- Inte instruktioner f\u00f6r att utf\u00f6ra olaglig \u00f6vervakning, diskriminering eller f\u00f6rbjudna fr\u00e5gor.\r\n- Inte en one-size-fits-all-policy; den m\u00e5ste skr\u00e4ddarsys med hj\u00e4lp av indata.\r\n\r\n## PROCESS\r\n1. **F\u00f6ranalys (obligatorisk):** \u00c5terge din f\u00f6rst\u00e5else av organisationens situation, verifieringsm\u00e5len och centrala begr\u00e4nsningar. Lista eventuella antaganden.\r\n2. **Gap-\/riskdiagnos:** Identifiera de verifieringsfelpunkter som mest sannolikt orsakar skada (bedr\u00e4geri, regulatorisk exponering, v\u00e5rdsl\u00f6s rekrytering, inkonsekvent behandling).\r\n3. **Stegarkitektur:** V\u00e4lj r\u00e4tt antal steg (inom intervallet 3\u201315) och namnge dem. F\u00f6rklara varf\u00f6r det antalet passar indata.\r\n4. **Mallkonstruktion:** F\u00f6r varje steg, ta fram n\u00f6dv\u00e4ndiga formul\u00e4r, checklistor, besluts\u00adkriterier och standarder f\u00f6r journalf\u00f6ring.\r\n5. **Modell f\u00f6r rollk\u00e4nslighet:** Bygg en rollklassificeringsmatris och mappa minimikontroller kontra f\u00f6rst\u00e4rkta kontroller per kategori.\r\n6. **Efterlevnads- och r\u00e4ttviselager:** L\u00e4gg till samtyckesfl\u00f6den, dataminimering, v\u00e4gledning f\u00f6r individualiserad bed\u00f6mning och arbetsfl\u00f6de f\u00f6r negativt beslut (d\u00e4r till\u00e4mpligt).\r\n7. **Operationalisering:** Ge v\u00e4gledning f\u00f6r workflow-integration (ATS-\u00f6verl\u00e4mningar, statustracking, kandidatkommunikation, eskaleringsv\u00e4gar).\r\n8. **Kvalitetsledning:** L\u00e4gg till ISO-liknande kontroller: versionering, revisionssp\u00e5r, interna revisioner, CAPA (korrigerande och f\u00f6rebyggande \u00e5tg\u00e4rder), m\u00e4tetal och loop f\u00f6r st\u00e4ndiga f\u00f6rb\u00e4ttringar.\r\n9. **Hantering av edge cases:** Om n\u00e5gon input saknas\/\u00e4r tvetydig, st\u00e4ll f\u00f6rst riktade fr\u00e5gor; annars, forts\u00e4tt med tydligt m\u00e4rkta antaganden och valfria grenar.\r\n\r\n## INPUT\r\n- **Ideal mottagare \/ beskrivning av kandidatpool:** [MALGRUPP]\r\n- **Organisationskontext och bakgrund:** [KONTEXT]\r\n- **Bransch \/ sektor:** [BRANSCH]\r\n- **F\u00f6retagsnamn (valfritt, f\u00f6r att varum\u00e4rkesanpassa mallar):** [FORETAGSNAMN]\r\n- **Roller som ska omfattas (titlar eller familjer):** [YRKESROLLER]\r\n- **Prim\u00e4r jurisdiktion \/ land:** [PRIMAR_JURISDIKTION]\r\n- **Ytterligare jurisdiktioner (om n\u00e5gra):** [YTTERLIGARE_JURISDIKTIONER]\r\n- **Organisationsstorlek (antal anst\u00e4llda eller fas):** [ORGANISATIONSSTORLEK]\r\n- **Risktolerans (l\u00e5g\/medel\/h\u00f6g) + motivering:** [RISKTOLERANS]\r\n- **Befattningar som kr\u00e4ver h\u00f6gre granskning (finans, minder\u00e5riga, infra, etc.):** [KANSLIGA_BEFATTNINGSTYPER]\r\n- **Nuvarande processmognad (ingen\/grundl\u00e4ggande\/styrd\/reviderad):** [NUVARANDE_MOGNADSGRAD]\r\n- **K\u00e4nda tidigare problem eller misslyckanden (valfritt):** [HUVUDUTMANING]\r\n- **Verktyg som anv\u00e4nds (ATS\/HRIS\/\u00e4rendehantering):** [BEFINTLIGA_SYSTEM]\r\n- **Varum\u00e4rkeston f\u00f6r kandidatkommunikation:** [TONALITET]\r\n- **Tidsbegr\u00e4nsningar f\u00f6r rekryteringscykler:** [TIDSRAM]\r\n\r\n## SPECIFIKATION F\u00d6R OUTPUT\r\nTillhandah\u00e5ll ett sammanh\u00e5llet paket med dessa avsnitt, i ordning:\r\n\r\n### 1) Uppgiftsf\u00f6rst\u00e5else (f\u00f6ranalys)\r\n- {Summary Of Goals}\r\n- {Key Risks Observed}\r\n- {Assumptions}\r\n- {Questions Needed If Inputs Missing}\r\n\r\n### 2) Blueprint f\u00f6r verifieringsprogram\r\n- {Chosen Number Of Stages}\r\n- {Stage List With Purpose}\r\n- {How Stages Scale By Org Size And Risk}\r\n\r\n### 3) Rollk\u00e4nslighet och kontrollmappning\r\n- {Role Categories}\r\n- {Minimum Checks By Category}\r\n- {Enhanced Checks By Category}\r\n- {Decision Consistency Rules}\r\n\r\n### 4) Mallar steg f\u00f6r steg (upprepa f\u00f6r varje steg)\r\nF\u00f6r varje steg, inkludera:\r\n- {Stage Name}\r\n- {Objective}\r\n- {Entry Criteria}\r\n- {Step By Step Procedure}\r\n- {Required Inputs \/ Documents}\r\n- {Acceptable Evidence Matrix}\r\n- {Red Flags}\r\n- {Escalation Path}\r\n- {Pass\/Fail\/Review Outcomes}\r\n- {Candidate Communication Snippets} (i [TONALITET])\r\n- {Records To Retain} + {Retention Guidance} (icke-juridisk, principbaserad)\r\n- {Audit Trail Fields}\r\n- {Common Exceptions And How To Handle}\r\n\r\n### 5) K\u00e4rndokumentupps\u00e4ttning (f\u00e4rdiga mallar)\r\nInkludera redigerbara mallar med platsh\u00e5llare s\u00e5som:\r\n- {Consent Form}\r\n- {Disclosure Notice}\r\n- {Identity Verification Checklist}\r\n- {Employment Verification Script}\r\n- {Reference Interview Guide}\r\n- {Discrepancy Resolution Form}\r\n- {Individualized Assessment Worksheet}\r\n- {Adverse Decision Notice Template} (d\u00e4r till\u00e4mpligt)\r\n- {Vendor Due Diligence Checklist}\r\n- {Data Access Control Matrix}\r\n- {Record Index And Filing Taxonomy}\r\n- {Change Log And Version Control Page}\r\n\r\n### 6) V\u00e4gledning f\u00f6r arbetsfl\u00f6de och integration\r\n- {Process Flow Description}\r\n- {Recommended Parallelization Opportunities}\r\n- {ATS\/HRIS Handoff Points}\r\n- {Status Tracking Fields}\r\n- {SLA Targets By Role Category}\r\n\r\n### 7) ISO 9001-kvalitetssystemlager\r\n- {KPIs And Definitions}\r\n- {Internal Audit Checklist}\r\n- {Nonconformance Handling}\r\n- {CAPA Workflow}\r\n- {Continuous Improvement Cadence}\r\n\r\n### 8) Implementerings- och utbildningskit\r\n- {Rollout Plan}\r\n- {Training Modules By HR Role}\r\n- {Hiring Manager Quick Guide}\r\n- {90 Day Stabilization Checklist}\r\n\r\n## KVALITETSKONTROLLER\r\nP\u00e5 slutet, inkludera en **checklista f\u00f6r kvalitetsvalidering** med 4\u20135 pass\/fail-punkter, till exempel:\r\n- Verifieringssteg \u00e4r sp\u00e5rbara, dokumenterade och versionsstyrda.\r\n- Rollbaserade krav \u00e4r konsekventa och motiverade utifr\u00e5n risk.\r\n- R\u00e4ttviseskydd f\u00f6r kandidater finns p\u00e5 plats (relevans, konsekvens, integritetsminimering).\r\n- Mallar inneh\u00e5ller tydlig eskalering och hantering av undantag.\r\n- M\u00e4tetal och revisionsmekanismer finns f\u00f6r att st\u00f6dja st\u00e4ndiga f\u00f6rb\u00e4ttringar.";
    const variables = ["[VERSALER_MED_UNDERSCORES]","[MALGRUPP]","[KONTEXT]","[BRANSCH]","[FORETAGSNAMN]","[YRKESROLLER]","[PRIMAR_JURISDIKTION]","[YTTERLIGARE_JURISDIKTIONER]","[ORGANISATIONSSTORLEK]","[RISKTOLERANS]","[KANSLIGA_BEFATTNINGSTYPER]","[NUVARANDE_MOGNADSGRAD]","[HUVUDUTMANING]","[BEFINTLIGA_SYSTEM]","[TONALITET]","[TIDSRAM]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat med AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Börja med att definiera ”rollkänslighet” i klartext.</strong> Även om prompten kan skala antalet steg dynamiskt får du en vassare mallsvit om du berättar för modellen vad ”hög risk” betyder i er organisation (tillgång till pengar, utsatta grupper, reglerade data, fysisk åtkomst osv.). Efter första utkastet, fråga: ”Skapa tre varianter: låg, medel och hög rollkänslighet, och markera vad som ändras per steg.”</li>


<li><strong>Kräv att resultatet inkluderar bevistyper, inte bara steg.</strong> Många bakgrundskontroll-dokument faller på att de listar aktiviteter men inte definierar godtagbara bevis. Följ upp med: ”För varje steg, lägg till exempel på godtagbara bevis, avvisningskriterier och vem som kan godkänna undantag.”</li>


<li><strong>Be om ett revisionsspår som en icke-HR-revisor kan följa.</strong> Om mallarna ska granskas av internrevision, ISO-revisorer eller en kunds compliance-team, begär tydlighet. Testa: ”Skriv om avsnittet om revisionsspår så att någon som inte kan HR kan återskapa beslutet enbart från underlagen.”</li>


<li><strong>Iterera skydden för rättvisa med konkreta scenarier.</strong> Prompten innehåller principer för rättvisa, men du bör stresstesta dem med realistiska gränsfall. Efter första körningen, fråga: ”Lägg nu till en checklista för ’rättvisetest’ för inkonsekventa uppgifter, namnbyten och internationella kandidater, och ange hur vi undviker irrelevanta kontroller.”</li>


<li><strong>Gör om mallarna till en utrullningsplan.</strong> En mallsvit kan vara perfekt och ändå misslyckas i verkligheten om ingen använder den. Använd: ”Skapa en 30-dagars implementeringsplan med utbildningssteg, pilotfeedback, dokumentversionering och en loop för kontinuerliga förbättringar”, och jämför sedan med strukturen i <a href="https://nodenordic.se/prompts/bygg-en-30-dagars-handlingsplan-for-marknadsforing">https://nodenordic.se/prompts/bygg-en-30-dagars-handlingsplan-for-marknadsforing</a> för att hålla planen tidsatt och genomförandevänlig.</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade prompter</h2>



<p>När ditt verifieringsflöde är standardiserat kan de här relaterade promptarna hjälpa dig att utbilda team, bygga adoptionsdriv och hålla förbättringscyklerna igång.</p>



<p>Om du även behöver kompetensutveckla rekryterare eller HR-koordinatorer så att de konsekvent följer samma steg passar <a href="https://nodenordic.se/prompts/skapa-en-plan-for-att-lara-dig-en-ny-fardighet-med-ai">https://nodenordic.se/prompts/skapa-en-plan-for-att-lara-dig-en-ny-fardighet-med-ai</a> bra. Den är användbar när processen är definierad men genomförandet är ojämnt, särskilt över flera platser eller mellan olika rekryterande chefer.</p>



<p>När du vill ha en strukturerad, tidsatt utrullning (utbildning, pilot, feedback, revidering) är <a href="https://nodenordic.se/prompts/skapa-en-30-dagars-plan-for-att-lara-en-fardighet">https://nodenordic.se/prompts/skapa-en-30-dagars-plan-for-att-lara-en-fardighet</a> ett praktiskt tillägg. Den hjälper dig att göra en ny ISO-liknande mallsvit till en 30-dagars adoptionssprint med tydliga veckoutfall.</p>



<p>För team som driver förändring tvärfunktionellt gör en enkel aktivitetskadens att arbetet inte stannar av. <a href="https://nodenordic.se/prompts/bygg-en-30-dagars-handlingsplan-for-marknadsforing">https://nodenordic.se/prompts/bygg-en-30-dagars-handlingsplan-for-marknadsforing</a> är inte HR-specifik, men ramverket är starkt för att planera kommunikation, intressentförankring och veckovisa kontrollpunkter för genomförande.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/skapa-en-30-dagars-plan-for-att-lara-en-fardighet">Skapa en AI-prompt för en 30-dagars plan för kompetensutveckling</a>: Tidsatt kompetenslyftsplan för ett team.</li>


<li><a href="https://nodenordic.se/prompts/skapa-en-plan-for-att-lara-dig-en-ny-fardighet-med-ai">Skapa en plan för kompetensutveckling med den här AI-prompten</a>: Rollbaserad lärplan för konsekvent genomförande.</li>


<li><a href="https://nodenordic.se/prompts/bygg-en-30-dagars-handlingsplan-for-marknadsforing">Skapa en AI-prompt för en 30-dagars marknadsföringsplan</a>: 30-dagars utrullningskadens och struktur för ansvarstagande.</li>


<li><a href="https://nodenordic.se/prompts/skapa-ett-30-dagars-mindfulnessprogram-for-studenter-med-ai">Skapa en AI-prompt för ett 30-dagars mindfulnessprogram för studenter</a>: Programliknande struktur med dagliga/veckovisa steg.</li>


<li><a href="https://nodenordic.se/prompts/bygg-en-roadmap-for-fardighetsmasterskap-med-ai-prompt">Skapa en färdplan för kompetensmästerskap med den här AI-prompten</a>: Långsiktig förmågefärdplan och milstolpar.</li>

</ul>

</div>

<div class="faq-section">

<h2 class="wp-block-heading">Vanliga frågor</h2>


<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för ISO 9001-bakgrundskontroll?</span>

<p class="answer"><strong>Chefer inom HR operations</strong> använder den för att standardisera hur kontroller genomförs över rekryterare, platser och rekryteringsteam, så att beslut inte beror på vem som råkade hantera ärendet. <strong>Compliance- och riskansvariga</strong> har nytta av den eftersom mallarna är byggda för spårbarhet, dokumentstyrning och revisionsklara underlag, inte lösa anteckningar. <strong>Ansvariga för talent acquisition</strong> använder den när de behöver både tempo och konsekvens, särskilt när rekryteringsvolymen ökar och ”tyst kunskap” slutar räcka. <strong>People ops-konsulter</strong> använder den för att leverera ett försvarbart, upprepningsbart verifieringsflöde till kunder utan att skriva varje formulär från grunden.</p>

</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för ISO 9001-bakgrundskontroll?</span>

<p class="answer"><strong>SaaS- och teknikbolag</strong> använder den när roller innebär privilegierad åtkomst till kunddata, administratörskonsoler eller produktionssystem, och de behöver konsekventa verifieringsunderlag för säkerhetsgranskningar. <strong>Vårdorganisationer</strong> använder den för roller som interagerar med patienter eller skyddad information, där dataminimering för integritet och relevansbaserade kontroller är lika viktiga som noggrannhet. <strong>Team inom finansiella tjänster</strong> får värde eftersom standardiserade stage gates och avvikelsehantering minskar bedrägeriexponering och gör det enklare att visa konsekvent beslutsfattande. <strong>Bemannings- och BPO-leverantörer</strong> använder den för att skapa ett kärnsystem som kan anpassas per kund, rollkänslighet och jurisdiktion, samtidigt som ett internt revisionsspår behålls.</p>

</div>

<div class="faq-item">
<span class="question">Varför ger grundläggande AI-prompter för att bygga bakgrundskontrollmallar svaga resultat?</span>

<p class="answer">En typisk prompt som ”Skriv en process för bakgrundskontroll för mitt företag” misslyckas eftersom den: saknar dokumentstyrning och versionshantering, så ingen vet vilken mall som är aktuell; saknar stage gates eller acceptanskriterier, vilket leder till inkonsekventa godkännanden; ignorerar spårbarhetskrav, vilket gör revisioner jobbiga; ger generiska steg i stället för en strukturerad mallsvit med formulär, checklistor och underlag; och missar skydd för rättvisa som relevanstestning och dataminimering för integritet, vilket ökar kandidatrisk och interna tvister.</p>

</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här ISO 9001-bakgrundskontrollprompten till min specifika situation?</span>

<p class="answer">Ja, men du får bäst resultat om du berättar för AI:n vad den ska anpassa efter, även om du lägger till detaljerna som en kort notis innan du kör den. I ditt meddelande, ange bransch, organisationsstorlek, rollkänslighet, jurisdiktionskomplexitet (ett land vs flera länder) och risktolerans, och be den sedan justera antalet steg och beviskraven därefter. En bra uppföljning är: ”Skapa två versioner av mallsviten: en för roller med låg känslighet och en för roller med hög känslighet, och visa exakt vad som ändras i steg, underlag och avvikelsehantering.” Om du redan har en delvis process, klistra in den och be AI:n mappa den mot ISO 9001-koncept (dokumentstyrning, korrigerande åtgärder, kontinuerliga förbättringar) och fylla luckorna.</p>

</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här ISO 9001-bakgrundskontrollprompten?</span>

<p class="answer">Det största misstaget är att inte ge någon verklig kontext och sedan förvänta sig att de ”dynamiska stegen” ska matcha din miljö perfekt; ”Vi är ett företag som anställer folk” är svagt, medan ”300-personers fintech som anställer kundsupport med åtkomst till faktureringsverktyg, USA och Storbritannien, medel risktolerans” ger AI:n något att forma. Ett annat vanligt fel är att inte definiera rollkänslighet, så att resultatet blir antingen för tungt för juniora roller eller för lätt för roller med privilegierad åtkomst; beskriv vad personen kan komma åt och vad som kan gå fel. Många hoppar också över skydden för rättvisa i implementationen även om AI:n tar med dem, vilket undergräver hela systemet; behåll relevanskriterier och dataminimering för integritet som obligatoriska fält. Slutligen glömmer team att operationalisera dokumentstyrning (versionsägare, ikraftträdandedatum, ändringslogg), så mallarna börjar driva direkt; tilldela ägarskap och bygg in godkännanden i arbetsflödet.</p>

</div>

<div class="faq-item">
<span class="question">Vem bör INTE använda den här ISO 9001-bakgrundskontrollprompten?</span>

<p class="answer">Den här prompten är inte optimal för enstaka rekryteringar där du inte kommer att upprätthålla en upprepningsbar process, eftersom värdet kommer av standardisering och revisionsbarhet över tid. Den passar inte heller team som söker jurisdiktionsspecifika juridiska instruktioner; den undviker medvetet juridisk rådgivning, så du behöver fortfarande jurist eller compliancegranskning för lokala krav. Och ärligt talat: om du inte alls har validerat dina rekryteringskriterier (vad rollen kräver, vilka risker som är relevanta) kan resultatet kännas för strukturerat för tidigt. I så fall, börja med att definiera rollkrav och risknivåer och kom sedan tillbaka för att bygga mallsviten.</p>

</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för ISO 9001-bakgrundskontroll?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Chefer inom HR operations använder den för att standardisera hur kontroller genomförs över rekryterare, platser och rekryteringsteam, så att beslut inte beror på vem som råkade hantera ärendet. Compliance- och riskansvariga har nytta av den eftersom mallarna är byggda för spårbarhet, dokumentstyrning och revisionsklara underlag, inte lösa anteckningar. Ansvariga för talent acquisition använder den när de behöver både tempo och konsekvens, särskilt när rekryteringsvolymen ökar och ”tyst kunskap” slutar räcka. People ops-konsulter använder den för att leverera ett försvarbart, upprepningsbart verifieringsflöde till kunder utan att skriva varje formulär från grunden."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för ISO 9001-bakgrundskontroll?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SaaS- och teknikbolag använder den när roller innebär privilegierad åtkomst till kunddata, administratörskonsoler eller produktionssystem, och de behöver konsekventa verifieringsunderlag för säkerhetsgranskningar. Vårdorganisationer använder den för roller som interagerar med patienter eller skyddad information, där dataminimering för integritet och relevansbaserade kontroller är lika viktiga som noggrannhet. Team inom finansiella tjänster får värde eftersom standardiserade stage gates och avvikelsehantering minskar bedrägeriexponering och gör det enklare att visa konsekvent beslutsfattande. Bemannings- och BPO-leverantörer använder den för att skapa ett kärnsystem som kan anpassas per kund, rollkänslighet och jurisdiktion, samtidigt som ett internt revisionsspår behålls."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger grundläggande AI-prompter för att bygga bakgrundskontrollmallar svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som ”Skriv en process för bakgrundskontroll för mitt företag” misslyckas eftersom den: saknar dokumentstyrning och versionshantering, så ingen vet vilken mall som är aktuell; saknar stage gates eller acceptanskriterier, vilket leder till inkonsekventa godkännanden; ignorerar spårbarhetskrav, vilket gör revisioner jobbiga; ger generiska steg i stället för en strukturerad mallsvit med formulär, checklistor och underlag; och missar skydd för rättvisa som relevanstestning och dataminimering för integritet, vilket ökar kandidatrisk och interna tvister."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här ISO 9001-bakgrundskontrollprompten till min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja, men du får bäst resultat om du berättar för AI:n vad den ska anpassa efter, även om du lägger till detaljerna som en kort notis innan du kör den. I ditt meddelande, ange bransch, organisationsstorlek, rollkänslighet, jurisdiktionskomplexitet (ett land vs flera länder) och risktolerans, och be den sedan justera antalet steg och beviskraven därefter. En bra uppföljning är: ”Skapa två versioner av mallsviten: en för roller med låg känslighet och en för roller med hög känslighet, och visa exakt vad som ändras i steg, underlag och avvikelsehantering.” Om du redan har en delvis process, klistra in den och be AI:n mappa den mot ISO 9001-koncept (dokumentstyrning, korrigerande åtgärder, kontinuerliga förbättringar) och fylla luckorna."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här ISO 9001-bakgrundskontrollprompten?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att inte ge någon verklig kontext och sedan förvänta sig att de ”dynamiska stegen” ska matcha din miljö perfekt; ”Vi är ett företag som anställer folk” är svagt, medan ”300-personers fintech som anställer kundsupport med åtkomst till faktureringsverktyg, USA och Storbritannien, medel risktolerans” ger AI:n något att forma. Ett annat vanligt fel är att inte definiera rollkänslighet, så att resultatet blir antingen för tungt för juniora roller eller för lätt för roller med privilegierad åtkomst; beskriv vad personen kan komma åt och vad som kan gå fel. Många hoppar också över skydden för rättvisa i implementationen även om AI:n tar med dem, vilket undergräver hela systemet; behåll relevanskriterier och dataminimering för integritet som obligatoriska fält. Slutligen glömmer team att operationalisera dokumentstyrning (versionsägare, ikraftträdandedatum, ändringslogg), så mallarna börjar driva direkt; tilldela ägarskap och bygg in godkännanden i arbetsflödet."
      }
    },
    {
      "@type": "Question",
      "name": "Vem bör INTE använda den här ISO 9001-bakgrundskontrollprompten?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten är inte optimal för enstaka rekryteringar där du inte kommer att upprätthålla en upprepningsbar process, eftersom värdet kommer av standardisering och revisionsbarhet över tid. Den passar inte heller team som söker jurisdiktionsspecifika juridiska instruktioner; den undviker medvetet juridisk rådgivning, så du behöver fortfarande jurist eller compliancegranskning för lokala krav. Och ärligt talat: om du inte alls har validerat dina rekryteringskriterier (vad rollen kräver, vilka risker som är relevanta) kan resultatet kännas för strukturerat för tidigt. I så fall, börja med att definiera rollkrav och risknivåer och kom sedan tillbaka för att bygga mallsviten."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">

<p>I rekrytering är konsekvens en kontroll, inte byråkrati. Använd den här ISO 9001-bakgrundskontrollprompten för att generera en revisionsklar mallsvit som ni faktiskt kan köra, finslipa den i en eller två iterationer och sätt den i drift.</p>

</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/skapa-iso-9001-mallar-for-bakgrundskontroller/">Skapa ISO 9001-mallar för bakgrundskontroller</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bygg en tokensäker JWT-autentiseringsritning med AI-prompt</title>
		<link>https://nodenordic.se/prompts/bygg-en-tokensaker-jwt-autentiseringsritning-med-ai-prompt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bygg-en-tokensaker-jwt-autentiseringsritning-med-ai-prompt</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:49:32 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5001440</guid>

					<description><![CDATA[<p>Sessionskapningar fortsätter. En vass AI-prompt som designar JWT med HTTP-only-cookies, CSRF-skydd, rotation, övervakning och kod.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/bygg-en-tokensaker-jwt-autentiseringsritning-med-ai-prompt/">Bygg en tokensäker JWT-autentiseringsritning med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: JWT auth blueprint -->

<div class="hook-introduction">

<p>Sessionskapningar fortsätter att hända eftersom många ”JWT-uppsättningar” i tysthet placerar tokens där angripare älskar dem: i webbläsarens lagring, exponerade för XSS, och kopierade in i headers för hand. Sedan bultas refresh-logik på i efterhand, cookie-flaggor blir fel, och du får slumpmässiga utloggningar eller (värre) stulna sessioner som lever länge. Det är rörigt, och det går att undvika.</p>



<p>Den här <strong>JWT-autentiseringsblueprinten</strong> är byggd för <strong>backendutvecklare</strong> som behöver en cookie-baserad JWT-modell med vettiga rotationsregler, <strong>säkerhetsmedvetna tech leads</strong> som städar upp riskfylld tokenhantering inför en revision eller incident, och <strong>startupgrundare</strong> som vill ha autentisering som är ”secure by default” utan att förstöra UX. Resultatet är en produktionsredo blueprint: headers, cookie-inställningar, endpointflöden, stack-specifika kodsnuttar, tester och en incidentplan vid misstänkt kompromettering av inloggningsuppgifter.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Vad du får</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Den designar en cookie-baserad JWT-sessionsarkitektur där tokens aldrig är åtkomliga för JavaScript.</li>
          <li>Den definierar access- och refresh-livslängder, rotationsregler och felmoder för att hålla inloggningar smidiga men förutsägbara.</li>
          <li>Den levererar konkreta implementationsdetaljer för headers, cookie-flaggor, CORS-beteende och CSRF-skydd.</li>
          <li>Den tar fram kodsnuttar anpassade efter din stack baserat på dina indata för [BACKEND_TECHNOLOGY] och [FRONTEND_TECHNOLOGY].</li>
          <li>Den lägger till övervakning, detekteringssignaler och automatiserade åtgärder för inneslutning vid misstänkt sessionsstöld eller replay.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du lagrar idag JWT:er i localStorage eller sessionStorage och vill ta bort den exponeringen utan att skriva om allt.</li>
          <li>Din app har ”mystiska utloggningar” eftersom refresh-logik och cookie-/CORS-inställningar har lappats ihop över tid.</li>
          <li>Du lägger till en ny SPA eller mobil webb-frontend och behöver ett konsekvent authflöde som inte blir en supportmardröm.</li>
          <li>En säkerhetsgranskning flaggade XSS-risk, tokenstöld eller saknat CSRF-skydd i cookie-baserade sessioner.</li>
          <li>Du skalar trafiken och behöver övervakning och incident-playbooks, inte bara ett authdiagram i en slide deck.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En komplett blueprint för JWT-cookie-sessioner med rekommenderade tokenlivslängder och rotationspolicy.</li>
           <li>Endpoint-för-endpoint-flöde för inloggning, tyst refresh, utloggning och hantering av ”ogiltig session”.</li>
           <li>Stack-specifika kodsnuttar för [BACKEND_TECHNOLOGY] och [FRONTEND_TECHNOLOGY], inklusive headers och cookie-attribut.</li>
           <li>Ett CSRF-skyddspaket: vald metod, konfigurationsnoter och valideringslogik för skyddade routes.</li>
           <li>En checklista för övervakning och inneslutning med larmsignaler plus automatiserade steg för att isolera misstänkta sessioner.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: tokensäker cookie-JWT-auth blueprint</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[BACKEND_TEKNIK]</code></td>
                                <td class="var-desc">
                                    Ange vilket backend-språk eller ramverk som används för att bygga applikationens serversida.                                    <div class="var-example">Till exempel: "Node.js med Express eller Python med Django"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BACKEND_TEKNIK]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[FRONTEND_TEKNIK]</code></td>
                                <td class="var-desc">
                                    Ange vilket frontend-ramverk eller bibliotek som används för att bygga applikationens användargränssnitt.                                    <div class="var-example">Till exempel: "React.js eller Angular"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[FRONTEND_TEKNIK]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[VERSALER_MED_UNDERSTRECK]</code></td>
                                <td class="var-desc">
                                    Ange ett variabel- eller inmatningsnamn som är formaterat med versaler och understreck mellan ord.                                    <div class="var-example">Till exempel: "USER_SESSION_ID eller ACCESS_TOKEN"</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[VERSALER_MED_UNDERSTRECK]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[APPLIKATIONSTYP]</code></td>
                                <td class="var-desc">
                                    Beskriv vilken typ av applikation som utvecklas, inklusive syfte och målgrupp.                                    <div class="var-example">Till exempel: "E-handelswebbapplikation för småföretag"</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[APPLIKATIONSTYP]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[NUVARANDE_SAKERHETSNIVA]</code></td>
                                <td class="var-desc">
                                    Beskriv den nuvarande säkerhetsstrategin eller de mekanismer som är implementerade i applikationen.                                    <div class="var-example">Till exempel: "Använder JWT lagrat i localStorage med grundläggande CSRF-skydd"</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[NUVARANDE_SAKERHETSNIVA]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[UTMANING]</code></td>
                                <td class="var-desc">
                                    Beskriv den specifika autentiserings- eller säkerhetsutmaning som applikationen står inför eller försöker lösa.                                    <div class="var-example">Till exempel: "Förhindra sessionskapning samtidigt som användarupplevelsen förblir smidig"</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[UTMANING]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[KONTEXT]</code></td>
                                <td class="var-desc">
                                    Ange relevant bakgrund eller situationsdetaljer som påverkar säkerhetsarkitekturen eller implementationen.                                    <div class="var-example">Till exempel: "Applikationen används i en högriskmiljö med frekventa nätfiskeförsök som riktas mot användare"</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[KONTEXT]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Vad detta INTE är (avgränsningar)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INDATA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">OUTPUTSPECIFIKATION</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">1) Säkerhetsarkitektur</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">2) Cookie-implementering (HTTP-only)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">3) Sessionshantering &amp; tyst refresh</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">4) Middleware-design (validering + användarkontext)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">5) Hotdetektion &amp; automatiserad respons</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">6) Kodexempel (anpassade)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">7) Säkerhetstestplan</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">8) Driftsättningschecklista</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Skapa en produktionsklar blueprint för JWT-autentisering som tar bort all klient-side lagring/hantering av tokens, står emot XSS/tokenstöld/sessionkapning, bevarar en smidig inloggningsupplevelse och inkluderar konkreta implementeringsdetaljer (kod, headers, inställningar, tester och incidenthantering).

## PERSONA
Agera som en erfaren applikationssäkerhetsarkitekt som har byggt och granskat autentiseringssystem i verkligheten under pågående attacker. Kommunicera i en pragmatisk, ingenjörsdriven stil: precis, skeptisk till plattityder om ”best practice” och fokuserad på driftsättbara mönster med tydliga tradeoffs.

## BEGRÄNSNINGAR
- Prioritera designer där tokens aldrig är åtkomliga för JavaScript (ingen localStorage/sessionStorage/tokencirkus i minnet i webbläsaren).
- Använd HTTP-only cookies som primär transport/lagring för sessionsuppgifter.
- Ge stack-specifika snippets anpassade till [BACKEND_TEKNIK] och [FRONTEND_TEKNIK].
- Föredra handlingsbar konfiguration framför generiska råd.
- Bevara UX: tyst refresh, minimalt antal återinloggningar, förutsägbara felmoder.
- Inkludera övervakning samt automatiserade inneslutningsåtgärder vid misstänkt kompromettering av autentiseringsuppgifter.
- **Efterlevnad av variabelformat:** användarens inmatade poster måste vara i **[VERSALER_MED_UNDERSTRECK]**; alla mallfält som AI:n fyller i måste använda **{Title Case}**.

### Vad detta INTE är (avgränsningar)
- Inte en komplett guide för val av IAM/SSO-leverantör.
- Inte en fullständig pentestrapport eller ett formellt hotmodellsdokument.
- Inte en ersättning för juridiska/compliance-krav (PCI/HIPAA/etc.).
- Inte ett godkännande av att lägga access tokens i webbläsarlagring ”med extra kryptering”.

## PROCESS
1. **Föranalys (måste skrivas ut först):** Återge kort din förståelse av appkontexten och de sannolika hotvägarna, baserat på de givna indata. Lista eventuella antaganden.
2. **Arkitekturuppbyggnad:** Föreslå en cookie-baserad JWT-sessionsmodell (access + refresh eller motsvarande) med tydliga livslängder och rotationsregler.
3. **Implementeringsdetaljer:** Ange headers, cookie-attribut, CORS/CSRF-hållning samt serverrutter/handlers som behövs för login, refresh, logout och återkallning.
4. **Middleware &amp; request-flöde:** Definiera hur varje request autentiseras, hur användarkontext kopplas på, och hur fel hanteras utan att läcka information.
5. **Hotrespons:** Beskriv detektionssignaler (loggar/mått), larmtrösklar och automatiserade åtgärder (återkalla, rotera, step-up auth, lockouts).
6. **Testplan:** Ge repeterbara tester (unit/integration/e2e) samt en liten checklista för ”attack-simulering”.
7. **Edge cases:** Om indata är ofullständiga eller motsägelsefulla, ställ riktade frågor och ge en säker standardväg märkt som {Assumed Default}.
8. **Avsluta med validering:** Ge en kort verifieringschecklista (4–5 punkter).

## INDATA
- **Applikationstyp:** [APPLIKATIONSTYP]
- **Backend-teknik/ramverk:** [BACKEND_TEKNIK]
- **Frontend-teknik/ramverk:** [FRONTEND_TEKNIK]
- **Nuvarande JWT/säkerhetsupplägg:** [NUVARANDE_SAKERHETSNIVA]
- **Specifika säkerhetsrisker/krav:** [UTMANING]
- **Miljödetaljer (domäner, hosting, reverse proxy, etc.):** [KONTEXT]

## OUTPUTSPECIFIKATION
Använd följande sektioner och inkludera stack-specifik kod/konfiguration där det är möjligt:

### 1) Säkerhetsarkitektur
Ange:
- {Session Model} (t.ex. ”kortlivad access token + roterande refresh token i HTTP-only cookie”)
- {Token Contents} (claims, issuer/audience, vägledning för minimal PII)
- {Lifetime Policy} (access TTL, refresh TTL, idle timeout, absolute timeout)
- {Rotation &amp; Revocation Strategy} (refresh-rotation, återanvändningsdetektion, server-side denylist/allowlist-upplägg)
- {UX Behavior} (vad användaren upplever vid refresh/utgång)

### 2) Cookie-implementering (HTTP-only)
Inkludera:
- {Cookie Names} och syften
- Exakta cookie-attribut: HttpOnly, Secure, SameSite, Path, Domain, Max-Age/Expires
- Nödvändiga säkerhetsheaders (minst): CSP-vägledning, HSTS, X-Content-Type-Options, Referrer-Policy, Permissions-Policy
- CORS-inställningar kompatibla med cookie-auth
- CSRF-strategi kompatibel med SameSite-policy (double-submit, origin checks, CSRF token cookie pattern, etc.)

### 3) Sessionshantering &amp; tyst refresh
Inkludera:
- {Auth Endpoints} (login/refresh/logout/me)
- {Refresh Flow} beskrivet som steg (server-centriskt; frontend ska inte röra tokens)
- Samtidighetshantering (flera flikar, refresh-stormar)
- Logout-semantik (server + klientens cookie-rensning)
- Felhantering (när man ska tvinga re-auth vs retry)

### 4) Middleware-design (validering + användarkontext)
Inkludera:
- {Middleware Responsibilities}
- Signaturverifiering, issuer/audience-kontroller, hantering av clock skew
- Koppla {User Context} till request
- Auktoriseringshooks (roller/scopes) utan att överbelasta JWT
- Prestandanoteringar (cache av nycklar/JWKS om tillämpligt)

### 5) Hotdetektion &amp; automatiserad respons
Inkludera:
- Vad som ska loggas (auth-händelser, refresh-återanvändning, IP/UA-ändringar, anomaliesignaler)
- {Detection Rules} (exempel med trösklar)
- {Automated Actions} (återkalla sessionsfamilj, kräva re-auth, notifiera användare, rate limit, temporärt blockera)
- Vägledning för scenarier med komprometterad refresh token
- Mönster för säkra felmeddelanden

### 6) Kodexempel (anpassade)
Ge:
- {Backend Implementation Snippets} för [BACKEND_TEKNIK]
- {Frontend Integration Notes} för [FRONTEND_TEKNIK] (cookie-baserade requests, hantering av 401/419, retry-mönster)
- {Configuration Snippets} (proxy/load balancer, miljövariabler, säkra standardvärden)
- Ett minimalt exempel för varje: login-handler, refresh-handler, auth-middleware, logout-handler

### 7) Säkerhetstestplan
Inkludera:
- Unit-tester (tokenvalidering, utgång, rotation, CSRF-kontroller)
- Integrationstester (cookie-attribut, CORS-beteende, korrekt refresh-rotation)
- E2E-tester (tyst refresh, multi-tab, logout)
- ”Adversary checks” (XSS-försök att läsa tokens, replay av refresh, försök till session fixation)

### 8) Driftsättningschecklista
En steg-för-steg-lista inför pre-prod som inkluderar:
- Cookie-flaggor verifierade i prod
- TLS/HSTS aktiverat och testat
- CSP i report-only och därefter enforcement
- Loggning/larm inkopplat
- Nyckelrotation/JWKS-strategi bekräftad
- Grunder för incident-runbook (återkallning, tvingad utloggning, rotation av hemligheter)

## KVALITETSKONTROLLER
På slutet ska du skriva ut en **Quality Validation Checklist** med 4–5 punkter som bekräftar:
- Ingen klient-side lagring/läsning av tokens krävs
- Cookies och headers är korrekt specificerade för vald stack
- CSRF-skydd är kompatibla med cookie-baserad auth
- Refresh-rotation + hantering vid kompromettering är uttryckligen täckt
- Tester inkluderar minst ett replay/återanvändningsscenario och ett XSS-drivet verifieringsförsök            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nSkapa en produktionsklar blueprint f\u00f6r JWT-autentisering som tar bort all klient-side lagring\/hantering av tokens, st\u00e5r emot XSS\/tokenst\u00f6ld\/sessionkapning, bevarar en smidig inloggningsupplevelse och inkluderar konkreta implementeringsdetaljer (kod, headers, inst\u00e4llningar, tester och incidenthantering).\r\n\r\n## PERSONA\r\nAgera som en erfaren applikationss\u00e4kerhetsarkitekt som har byggt och granskat autentiseringssystem i verkligheten under p\u00e5g\u00e5ende attacker. Kommunicera i en pragmatisk, ingenj\u00f6rsdriven stil: precis, skeptisk till plattityder om \u201dbest practice\u201d och fokuserad p\u00e5 drifts\u00e4ttbara m\u00f6nster med tydliga tradeoffs.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- Prioritera designer d\u00e4r tokens aldrig \u00e4r \u00e5tkomliga f\u00f6r JavaScript (ingen localStorage\/sessionStorage\/tokencirkus i minnet i webbl\u00e4saren).\r\n- Anv\u00e4nd HTTP-only cookies som prim\u00e4r transport\/lagring f\u00f6r sessionsuppgifter.\r\n- Ge stack-specifika snippets anpassade till [BACKEND_TEKNIK] och [FRONTEND_TEKNIK].\r\n- F\u00f6redra handlingsbar konfiguration framf\u00f6r generiska r\u00e5d.\r\n- Bevara UX: tyst refresh, minimalt antal \u00e5terinloggningar, f\u00f6ruts\u00e4gbara felmoder.\r\n- Inkludera \u00f6vervakning samt automatiserade inneslutnings\u00e5tg\u00e4rder vid misst\u00e4nkt kompromettering av autentiseringsuppgifter.\r\n- **Efterlevnad av variabelformat:** anv\u00e4ndarens inmatade poster m\u00e5ste vara i **[VERSALER_MED_UNDERSTRECK]**; alla mallf\u00e4lt som AI:n fyller i m\u00e5ste anv\u00e4nda **{Title Case}**.\r\n\r\n### Vad detta INTE \u00e4r (avgr\u00e4nsningar)\r\n- Inte en komplett guide f\u00f6r val av IAM\/SSO-leverant\u00f6r.\r\n- Inte en fullst\u00e4ndig pentestrapport eller ett formellt hotmodellsdokument.\r\n- Inte en ers\u00e4ttning f\u00f6r juridiska\/compliance-krav (PCI\/HIPAA\/etc.).\r\n- Inte ett godk\u00e4nnande av att l\u00e4gga access tokens i webbl\u00e4sarlagring \u201dmed extra kryptering\u201d.\r\n\r\n## PROCESS\r\n1. **F\u00f6ranalys (m\u00e5ste skrivas ut f\u00f6rst):** \u00c5terge kort din f\u00f6rst\u00e5else av appkontexten och de sannolika hotv\u00e4garna, baserat p\u00e5 de givna indata. Lista eventuella antaganden.\r\n2. **Arkitekturuppbyggnad:** F\u00f6resl\u00e5 en cookie-baserad JWT-sessionsmodell (access + refresh eller motsvarande) med tydliga livsl\u00e4ngder och rotationsregler.\r\n3. **Implementeringsdetaljer:** Ange headers, cookie-attribut, CORS\/CSRF-h\u00e5llning samt serverrutter\/handlers som beh\u00f6vs f\u00f6r login, refresh, logout och \u00e5terkallning.\r\n4. **Middleware & request-fl\u00f6de:** Definiera hur varje request autentiseras, hur anv\u00e4ndarkontext kopplas p\u00e5, och hur fel hanteras utan att l\u00e4cka information.\r\n5. **Hotrespons:** Beskriv detektionssignaler (loggar\/m\u00e5tt), larmtr\u00f6sklar och automatiserade \u00e5tg\u00e4rder (\u00e5terkalla, rotera, step-up auth, lockouts).\r\n6. **Testplan:** Ge repeterbara tester (unit\/integration\/e2e) samt en liten checklista f\u00f6r \u201dattack-simulering\u201d.\r\n7. **Edge cases:** Om indata \u00e4r ofullst\u00e4ndiga eller mots\u00e4gelsefulla, st\u00e4ll riktade fr\u00e5gor och ge en s\u00e4ker standardv\u00e4g m\u00e4rkt som {Assumed Default}.\r\n8. **Avsluta med validering:** Ge en kort verifieringschecklista (4\u20135 punkter).\r\n\r\n## INDATA\r\n- **Applikationstyp:** [APPLIKATIONSTYP]\r\n- **Backend-teknik\/ramverk:** [BACKEND_TEKNIK]\r\n- **Frontend-teknik\/ramverk:** [FRONTEND_TEKNIK]\r\n- **Nuvarande JWT\/s\u00e4kerhetsuppl\u00e4gg:** [NUVARANDE_SAKERHETSNIVA]\r\n- **Specifika s\u00e4kerhetsrisker\/krav:** [UTMANING]\r\n- **Milj\u00f6detaljer (dom\u00e4ner, hosting, reverse proxy, etc.):** [KONTEXT]\r\n\r\n## OUTPUTSPECIFIKATION\r\nAnv\u00e4nd f\u00f6ljande sektioner och inkludera stack-specifik kod\/konfiguration d\u00e4r det \u00e4r m\u00f6jligt:\r\n\r\n### 1) S\u00e4kerhetsarkitektur\r\nAnge:\r\n- {Session Model} (t.ex. \u201dkortlivad access token + roterande refresh token i HTTP-only cookie\u201d)\r\n- {Token Contents} (claims, issuer\/audience, v\u00e4gledning f\u00f6r minimal PII)\r\n- {Lifetime Policy} (access TTL, refresh TTL, idle timeout, absolute timeout)\r\n- {Rotation & Revocation Strategy} (refresh-rotation, \u00e5teranv\u00e4ndningsdetektion, server-side denylist\/allowlist-uppl\u00e4gg)\r\n- {UX Behavior} (vad anv\u00e4ndaren upplever vid refresh\/utg\u00e5ng)\r\n\r\n### 2) Cookie-implementering (HTTP-only)\r\nInkludera:\r\n- {Cookie Names} och syften\r\n- Exakta cookie-attribut: HttpOnly, Secure, SameSite, Path, Domain, Max-Age\/Expires\r\n- N\u00f6dv\u00e4ndiga s\u00e4kerhetsheaders (minst): CSP-v\u00e4gledning, HSTS, X-Content-Type-Options, Referrer-Policy, Permissions-Policy\r\n- CORS-inst\u00e4llningar kompatibla med cookie-auth\r\n- CSRF-strategi kompatibel med SameSite-policy (double-submit, origin checks, CSRF token cookie pattern, etc.)\r\n\r\n### 3) Sessionshantering & tyst refresh\r\nInkludera:\r\n- {Auth Endpoints} (login\/refresh\/logout\/me)\r\n- {Refresh Flow} beskrivet som steg (server-centriskt; frontend ska inte r\u00f6ra tokens)\r\n- Samtidighetshantering (flera flikar, refresh-stormar)\r\n- Logout-semantik (server + klientens cookie-rensning)\r\n- Felhantering (n\u00e4r man ska tvinga re-auth vs retry)\r\n\r\n### 4) Middleware-design (validering + anv\u00e4ndarkontext)\r\nInkludera:\r\n- {Middleware Responsibilities}\r\n- Signaturverifiering, issuer\/audience-kontroller, hantering av clock skew\r\n- Koppla {User Context} till request\r\n- Auktoriseringshooks (roller\/scopes) utan att \u00f6verbelasta JWT\r\n- Prestandanoteringar (cache av nycklar\/JWKS om till\u00e4mpligt)\r\n\r\n### 5) Hotdetektion & automatiserad respons\r\nInkludera:\r\n- Vad som ska loggas (auth-h\u00e4ndelser, refresh-\u00e5teranv\u00e4ndning, IP\/UA-\u00e4ndringar, anomaliesignaler)\r\n- {Detection Rules} (exempel med tr\u00f6sklar)\r\n- {Automated Actions} (\u00e5terkalla sessionsfamilj, kr\u00e4va re-auth, notifiera anv\u00e4ndare, rate limit, tempor\u00e4rt blockera)\r\n- V\u00e4gledning f\u00f6r scenarier med komprometterad refresh token\r\n- M\u00f6nster f\u00f6r s\u00e4kra felmeddelanden\r\n\r\n### 6) Kodexempel (anpassade)\r\nGe:\r\n- {Backend Implementation Snippets} f\u00f6r [BACKEND_TEKNIK]\r\n- {Frontend Integration Notes} f\u00f6r [FRONTEND_TEKNIK] (cookie-baserade requests, hantering av 401\/419, retry-m\u00f6nster)\r\n- {Configuration Snippets} (proxy\/load balancer, milj\u00f6variabler, s\u00e4kra standardv\u00e4rden)\r\n- Ett minimalt exempel f\u00f6r varje: login-handler, refresh-handler, auth-middleware, logout-handler\r\n\r\n### 7) S\u00e4kerhetstestplan\r\nInkludera:\r\n- Unit-tester (tokenvalidering, utg\u00e5ng, rotation, CSRF-kontroller)\r\n- Integrationstester (cookie-attribut, CORS-beteende, korrekt refresh-rotation)\r\n- E2E-tester (tyst refresh, multi-tab, logout)\r\n- \u201dAdversary checks\u201d (XSS-f\u00f6rs\u00f6k att l\u00e4sa tokens, replay av refresh, f\u00f6rs\u00f6k till session fixation)\r\n\r\n### 8) Drifts\u00e4ttningschecklista\r\nEn steg-f\u00f6r-steg-lista inf\u00f6r pre-prod som inkluderar:\r\n- Cookie-flaggor verifierade i prod\r\n- TLS\/HSTS aktiverat och testat\r\n- CSP i report-only och d\u00e4refter enforcement\r\n- Loggning\/larm inkopplat\r\n- Nyckelrotation\/JWKS-strategi bekr\u00e4ftad\r\n- Grunder f\u00f6r incident-runbook (\u00e5terkallning, tvingad utloggning, rotation av hemligheter)\r\n\r\n## KVALITETSKONTROLLER\r\nP\u00e5 slutet ska du skriva ut en **Quality Validation Checklist** med 4\u20135 punkter som bekr\u00e4ftar:\r\n- Ingen klient-side lagring\/l\u00e4sning av tokens kr\u00e4vs\r\n- Cookies och headers \u00e4r korrekt specificerade f\u00f6r vald stack\r\n- CSRF-skydd \u00e4r kompatibla med cookie-baserad auth\r\n- Refresh-rotation + hantering vid kompromettering \u00e4r uttryckligen t\u00e4ckt\r\n- Tester inkluderar minst ett replay\/\u00e5teranv\u00e4ndningsscenario och ett XSS-drivet verifieringsf\u00f6rs\u00f6k";
    const variables = ["[BACKEND_TEKNIK]","[FRONTEND_TEKNIK]","[VERSALER_MED_UNDERSTRECK]","[APPLIKATIONSTYP]","[NUVARANDE_SAKERHETSNIVA]","[UTMANING]","[KONTEXT]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat från AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Var brutalt specifik om hur din app är uppbyggd.</strong> Berätta för AI:n om det är en ren SPA, SSR + API, eller en hybrid med flera subdomäner, eftersom cookie-scope och CORS-regler ändras snabbt. Lägg till detaljer som ”api.example.com + app.example.com” och om du måste stödja cross-site-requests. Om du inte gör det får du en generisk design som går sönder i produktion.</li>


<li><strong>Fyll i [BACKEND_TECHNOLOGY] och [FRONTEND_TECHNOLOGY] med versioner, inte etiketter.</strong> ”Node” är otydligt; ”Node 20 + Express 4 bakom Nginx” är användbart. Samma för frontend: ”Next.js 14 App Router” eller ”React + Vite serverat från CloudFront.” Följdfråga: ”Skriv nu om implementationsdelen med Next.js route handlers och Express middleware.”</li>


<li><strong>Be den välja ett CSRF-mönster och motivera det.</strong> Cookie-auth tvingar fram CSRF-diskussionen, och luddiga svar är så team skickar luckor. Prompt: ”Välj double-submit cookie eller synchronizer token för mitt fall, och inkludera exakta cookie-namn, valideringssteg och hur det beter sig med same-site-requests.”</li>


<li><strong>Iterera på livslängder utifrån din faktiska risktolerans.</strong> Första vändan blir ett rimligt standardförslag, men du kan justera efter användarbeteende och hotnivå. Efter första resultatet, testa: ”Gör access tokens 5 minuter, refresh 14 dagar med rotation; förklara nu UX-effekten och hur du undviker överraskande utloggningar.”</li>


<li><strong>Tvinga incidentplanen att vara körbar.</strong> Övervakning hjälper bara om den leder till åtgärder som teamet faktiskt genomför klockan 02.00. Fråga: ”Lägg till detekteringsregler för replay av refresh-token och omöjliga resor; inkludera automatiserade svar (återkalla session, step-up auth) och vad som ska loggas för senare forensik.” Ärligt talat är det här de flesta ”auth-guider” faller isär.</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade prompts</h2>



<p>När din autentiseringsblueprint är stabil hjälper de här promptarna dig att ta bort prestanda- och processfriktion som ofta dyker upp under implementation och utrullning:</p>



<p>Om du också behöver strama upp leveranspipen runt säkerhetsarbete (granskningar, QA, releasekoordinering) hjälper <a href="https://nodenordic.se/prompts/fixa-flaskhalsar-i-workflow-och-genomstromning">Fixa flaskhalsar i workflow och genomströmning</a> dig att kartlägga var ärenden fastnar och vad du ska ändra först. Den passar bra när ditt authprojekt fortsätter att halka efter eftersom godkännanden, överlämningar och okontrollerade loopar med ”en ändring till” tar över.</p>



<p>För team som gör återkommande authrelaterade fixar över flera tjänster är <a href="https://nodenordic.se/prompts/atgarda-flaskhalsar-i-arbetsfloden-och-oka-throughput">Åtgärda flaskhalsar i arbetsflöden och öka throughput</a> användbar direkt efter att du har valt måldesignen. Använd den för att standardisera genomförandet: checklistor, ansvar och en pragmatisk takt så att blueprinten blir mergad kod, inte ett bortglömt dokument.</p>



<p>När din största smärta är friktion i vardagen (långsamma kodgranskningar, otydliga definitioner av klart, miljödrift) kompletterar <a href="https://nodenordic.se/prompts/los-flaskhalsar-i-det-dagliga-arbetsflodet">Lös flaskhalsar i det dagliga arbetsflödet</a> det här JWT-arbetet bra. Du kommer märka det under authrefactors, eftersom du rör känsliga endpoints och tester, och små ineffektiviteter multipliceras.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/fixa-flaskhalsar-i-workflow-och-genomstromning">Fixa flaskhalsar i workflow och genomströmning</a>: Hitta överlämningar som bromsar viktiga projekt.</li>


<li><a href="https://nodenordic.se/prompts/atgarda-flaskhalsar-i-arbetsfloden-och-oka-throughput">Åtgärda flaskhalsar i arbetsflöden och öka throughput</a>: Gör planer till repeterbar leverans.</li>


<li><a href="https://nodenordic.se/prompts/los-flaskhalsar-i-det-dagliga-arbetsflodet">Lös flaskhalsar i det dagliga arbetsflödet</a>: Ta bort vardagshinder under refactors.</li>


<li><a href="https://nodenordic.se/prompts/felsok-flaskhalsar-i-runtime-och-atgarder">Felsök flaskhalsar i runtime och åtgärder</a>: Upptäck prestandaproblem efter ändringar.</li>


<li><a href="https://nodenordic.se/prompts/bygg-en-skraddarsydd-io-masteryplan-med-ai-prompt">Bygg en skräddarsydd io-masteryplan med AI-prompt</a>: Träna färdigheter för bättre genomförande.</li>

</ul>

</div>

<div class="faq-section">

<h2 class="wp-block-heading">Vanliga frågor</h2>


<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för JWT-auth blueprint?</span>

<p class="answer"><strong>Backendutvecklare</strong> använder den för att implementera cookie-baserade JWT-sessioner med korrekta flaggor, livslängder och rotation så att tokens aldrig når JavaScript. <strong>Säkerhetsingenjörer</strong> lutar sig mot den för att validera CSRF-nivå, skydd mot replay av refresh-token samt loggnings-/övervakningssignaler de kan larma på. <strong>Tech leads</strong> använder den för att standardisera auth över tjänster och minska säkerhetsdrift av typen ”det funkar på min dator”. <strong>Fullstackutvecklare</strong> har nytta av den eftersom den bygger bro mellan frontendbegränsningar (CORS, cookie-beteende) och serverside-krav i en plan som går att driftsätta.</p>

</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för JWT-auth blueprint?</span>

<p class="answer"><strong>SaaS-bolag</strong> får värde eftersom en enda stulen session kan exponera flera tenants, och cookie- + rotationsmönster hjälper att begränsa skadeomfånget. Den här prompten tvingar också fram tydlighet kring livslängder och återkallelse, vilket är viktigt när supportteam hanterar kontoövertaganden. <strong>E-handelsvarumärken</strong> använder den för att minska checkout-bedrägerier och skydda kundkonton utan att införa ständiga ominloggningar som försämrar konverteringen. <strong>Fintech och betalningsnära appar</strong> har nytta av övervaknings- och inneslutningsstegen, eftersom kraven på incidenthantering är högre och ”vi kollar loggarna senare” inte räcker. <strong>Sjukvård och patientportaler</strong> använder den för att strama upp sessionshantering och revisionsvänlig loggning, samtidigt som upplevelsen förblir användbar för icke-tekniska patienter.</p>

</div>

<div class="faq-item">
<span class="question">Varför ger grundläggande AI-prompts för att designa JWT-autentisering svaga resultat?</span>

<p class="answer">En typisk prompt som ”Skriv en JWT-auth setup för min app” misslyckas eftersom den: saknar nyckelkontext som subdomäner, cross-site-requests och din faktiska tech stack, vilket gör att cookie- och CORS-råd blir fel. Den ger ingen tvingande struktur för refresh-rotation och replay-detektering, vilket är där många verkliga attacker landar. Den ignorerar CSRF-avvägningar som uppstår så fort du använder cookies, vilket ger osäkra standarder eller luddiga ”aktivera CSRF”. Den producerar generiska mönster som ”lagra token i localStorage” i stället för en design som håller tokens borta från JavaScript. Och den missar ofta övervakning plus inneslutningssteg, så du saknar en plan när sessioner missbrukas.</p>

</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här JWT-auth blueprint-prompten för min specifika situation?</span>

<p class="answer">Ja, men du måste mata in rätt variabler i formatet den förväntar sig, särskilt [BACKEND_TECHNOLOGY] och [FRONTEND_TECHNOLOGY]. Lägg till din domänmodell (en domän vs api-/app-subdomäner), dina UX-krav för inloggning (tyst refresh, ”kom ihåg mig”, enhetsbegränsningar) och eventuella begränsningar som ”måste stödja inbäddade tredjepartswidgets”. En bra följdfråga är: ”Givet [BACKEND_TECHNOLOGY] och [FRONTEND_TECHNOLOGY], skriv ut de exakta cookie-namnen, SameSite-värden, CORS-inställningar och pseudokod för refresh-endpointen.” Om du har ett befintligt system, be den ta fram en migreringsplan i faser så att du kan leverera säkert.</p>

</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här JWT-auth blueprint-prompten?</span>

<p class="answer">Det största misstaget är att lämna [BACKEND_TECHNOLOGY] för vagt — i stället för ”Python”, prova ”Python 3.12 + FastAPI + Uvicorn bakom Cloudflare”. Ett annat vanligt fel är att specificera [FRONTEND_TECHNOLOGY] för dåligt; ”React” är inte samma sak som ”Next.js med server actions”, och cookie-beteende samt routing spelar roll. Folk glömmer också att beskriva sin domänsetup, vilket gör att du får oanvändbara SameSite-/CORS-råd; ”single origin https://app.example.com” är bra input, ”vi har en webbplats” är det inte. Slutligen hoppar team över UX-krav, så modellen kan välja livslängder som orsakar ständiga inloggningar; säg ”tyst refresh krävs, tolerera ominloggning först efter 14 dagar eller vid lösenordsbyte”.</p>

</div>

<div class="faq-item">
<span class="question">Vem ska INTE använda den här JWT-auth blueprint-prompten?</span>

<p class="answer">Den här prompten är inte idealisk för team som behöver fatta ett fullständigt beslut om SSO-/IAM-leverantör eller en federationsdesign för enterprise, eftersom den fokuserar på driftsättbara cookie-baserade JWT-mönster, inte produktval. Den passar också dåligt om du vill ha en snabb mall på en sida utan iteration, eftersom bästa resultat kommer av att tydliggöra stack, domänmodell och hotantaganden. Och om du inte kan använda HTTP-only-cookies alls (till exempel i en begränsad klientmiljö som förbjuder dem) behöver du en annan approach. I de fallen, börja i stället med en formell arkitekturgranskning eller en dedikerad utvärdering av auth-ramverk.</p>

</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för JWT-auth blueprint?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Backendutvecklare använder den för att implementera cookie-baserade JWT-sessioner med korrekta flaggor, livslängder och rotation så att tokens aldrig når JavaScript. Säkerhetsingenjörer lutar sig mot den för att validera CSRF-nivå, skydd mot replay av refresh-token samt loggnings-/övervakningssignaler de kan larma på. Tech leads använder den för att standardisera auth över tjänster och minska säkerhetsdrift av typen ”det funkar på min dator”. Fullstackutvecklare har nytta av den eftersom den bygger bro mellan frontendbegränsningar (CORS, cookie-beteende) och serverside-krav i en plan som går att driftsätta."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för JWT-auth blueprint?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SaaS-bolag får värde eftersom en enda stulen session kan exponera flera tenants, och cookie- + rotationsmönster hjälper att begränsa skadeomfånget. Den här prompten tvingar också fram tydlighet kring livslängder och återkallelse, vilket är viktigt när supportteam hanterar kontoövertaganden. E-handelsvarumärken använder den för att minska checkout-bedrägerier och skydda kundkonton utan att införa ständiga ominloggningar som försämrar konverteringen. Fintech och betalningsnära appar har nytta av övervaknings- och inneslutningsstegen, eftersom kraven på incidenthantering är högre och ”vi kollar loggarna senare” inte räcker. Sjukvård och patientportaler använder den för att strama upp sessionshantering och revisionsvänlig loggning, samtidigt som upplevelsen förblir användbar för icke-tekniska patienter."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger grundläggande AI-prompts för att designa JWT-autentisering svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som ”Skriv en JWT-auth setup för min app” misslyckas eftersom den: saknar nyckelkontext som subdomäner, cross-site-requests och din faktiska tech stack, vilket gör att cookie- och CORS-råd blir fel. Den ger ingen tvingande struktur för refresh-rotation och replay-detektering, vilket är där många verkliga attacker landar. Den ignorerar CSRF-avvägningar som uppstår så fort du använder cookies, vilket ger osäkra standarder eller luddiga ”aktivera CSRF”. Den producerar generiska mönster som ”lagra token i localStorage” i stället för en design som håller tokens borta från JavaScript. Och den missar ofta övervakning plus inneslutningssteg, så du saknar en plan när sessioner missbrukas."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här JWT-auth blueprint-prompten för min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja, men du måste mata in rätt variabler i formatet den förväntar sig, särskilt [BACKEND_TECHNOLOGY] och [FRONTEND_TECHNOLOGY]. Lägg till din domänmodell (en domän vs api-/app-subdomäner), dina UX-krav för inloggning (tyst refresh, ”kom ihåg mig”, enhetsbegränsningar) och eventuella begränsningar som ”måste stödja inbäddade tredjepartswidgets”. En bra följdfråga är: ”Givet [BACKEND_TECHNOLOGY] och [FRONTEND_TECHNOLOGY], skriv ut de exakta cookie-namnen, SameSite-värden, CORS-inställningar och pseudokod för refresh-endpointen.” Om du har ett befintligt system, be den ta fram en migreringsplan i faser så att du kan leverera säkert."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här JWT-auth blueprint-prompten?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att lämna [BACKEND_TECHNOLOGY] för vagt — i stället för ”Python”, prova ”Python 3.12 + FastAPI + Uvicorn bakom Cloudflare”. Ett annat vanligt fel är att specificera [FRONTEND_TECHNOLOGY] för dåligt; ”React” är inte samma sak som ”Next.js med server actions”, och cookie-beteende samt routing spelar roll. Folk glömmer också att beskriva sin domänsetup, vilket gör att du får oanvändbara SameSite-/CORS-råd; ”single origin https://app.example.com” är bra input, ”vi har en webbplats” är det inte. Slutligen hoppar team över UX-krav, så modellen kan välja livslängder som orsakar ständiga inloggningar; säg ”tyst refresh krävs, tolerera ominloggning först efter 14 dagar eller vid lösenordsbyte”."
      }
    },
    {
      "@type": "Question",
      "name": "Vem ska INTE använda den här JWT-auth blueprint-prompten?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten är inte idealisk för team som behöver fatta ett fullständigt beslut om SSO-/IAM-leverantör eller en federationsdesign för enterprise, eftersom den fokuserar på driftsättbara cookie-baserade JWT-mönster, inte produktval. Den passar också dåligt om du vill ha en snabb mall på en sida utan iteration, eftersom bästa resultat kommer av att tydliggöra stack, domänmodell och hotantaganden. Och om du inte kan använda HTTP-only-cookies alls (till exempel i en begränsad klientmiljö som förbjuder dem) behöver du en annan approach. I de fallen, börja i stället med en formell arkitekturgranskning eller en dedikerad utvärdering av auth-ramverk."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">

<p>Auth är ett av de där systemen du bara märker när det fallerar — och angripare märker det först. Använd den här prompten för att få en tokensäker, cookie-baserad JWT-blueprint som du faktiskt kan implementera, klistra sedan in den i ditt AI-verktyg och börja täta de verkliga skarvarna.</p>

</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/bygg-en-tokensaker-jwt-autentiseringsritning-med-ai-prompt/">Bygg en tokensäker JWT-autentiseringsritning med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Skapa en plan för regelefterlevnadsbevakning</title>
		<link>https://nodenordic.se/prompts/skapa-en-plan-for-regelefterlevnadsbevakning/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=skapa-en-plan-for-regelefterlevnadsbevakning</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:48:38 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5003040</guid>

					<description><![CDATA[<p>Regeländringar slår till utan förvarning – den här AI-prompten skapar en levande plan för bevakning och åtgärder med ISO 19600-spårbarhet.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/skapa-en-plan-for-regelefterlevnadsbevakning/">Skapa en plan för regelefterlevnadsbevakning</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: regulatory monitoring blueprint -->

<div class="hook-introduction">

<p>Regelverk ändras sällan enligt ditt schema. Ena veckan är det en mindre uppdatering, nästa vecka är det ett nytt krav som påverkar produkt, säkerhet, HR och rapportering. Och om du fortfarande spårar ändringar via spridda inkorgsaviseringar och ad hoc-kalkylblad, så missas saker. Tyst.</p>



<p>Den här <strong>ritningen för regulatorisk övervakning</strong> är byggd för <strong>complianceansvariga</strong> som behöver ett försvarbart sätt att följa förändringar över jurisdiktioner, <strong>operativa ledare</strong> som måste göra “nya krav” till ägt arbete utan att bromsa leverans, och <strong>risk- och revisionsteam</strong> som behöver spårbarhet (vad som ändrades, vem som beslutade, vilka bevis som visar att det är slutfört). Resultatet är en levande operativ modell: bevakningskällor, automatiserad aviseringslogik, triage- och beslutsflöden, ägarkoppling till verksamhetsprocesser och ett ISO 19600-anpassat bevisunderlag.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Vad du får</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Utformar ett “levande” system för regulatorisk övervakning förankrat i ISO 19600-principer (styrning, proportionalitet, integration, kontinuerlig förbättring).</li>
          <li>Bygger ett automatiserat aviseringsflöde som riskrankar uppdateringar efter påverkan, brådska och nedströmsberoenden.</li>
          <li>Kartlägger regulatoriska krav till verkliga verksamhetsprocesser, namngivna kontrollägare och tvärfunktionella samarbetspartner.</li>
          <li>Skapar en snabb triageväg för akuta regulatoriska skiften, inklusive tillfälliga kontroller och tidsbegränsade granskningar.</li>
          <li>Definierar ett revisionsbart bevisunderlag som fångar vad som ändrades, vem som bedömde det, fattade beslut, genomförda åtgärder och bevis på slutförande.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du verkar i flera delstater/länder och kan inte tillförlitligt upptäcka förändringar innan de påverkar leveranstidsplaner.</li>
          <li>Er “regulatoriska uppföljning” är mest vidarebefordran i inkorgen, och ansvar blir otydligt så fort det blir mycket att göra.</li>
          <li>Ledningen vill se en tydlig kedja från nya regler till faktiska kontroller, ägare och mätbart slutförande.</li>
          <li>En revision eller utredning närmar sig, och du behöver spårbarhet utan att skapa compliance-teater.</li>
          <li>Ni skalar snabbt (nya produkter, nya marknader, nya leverantörer) och reaktiv åtgärdning blir för dyrt.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En komplett övervakningsritning med styrningsmodell, roller, möteskadens och beslutsmandat.</li>
           <li>Ett ramverk för riskrankning (påverkan/brådska/beroenden) samt regler för aviseringsroutning per funktion.</li>
           <li>Ett repeterbart flöde från inkommande förändring till implementering, inklusive triagesteg och tvärfunktionella överlämningar.</li>
           <li>En ISO 19600-anpassad mall för spårbarhetslogg som beskriver vad som ändrades, bedömningar, beslut, åtgärder och bevis.</li>
           <li>En loop för kontinuerlig förbättring med KPI:er (tid till triage, tid till implementering, andel missade förändringar) och triggers för uppföljning.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: levande ritning för regulatorisk övervakning och anpassning</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[BRANSCH]</code></td>
                                <td class="var-desc">
                                    Ange vilken bransch eller sektor organisationen verkar inom. Var så specifik som möjligt för att säkerställa relevans utifrån regulatoriska krav.                                    <div class="var-example">Till exempel: "Finansiell teknik (FinTech) med fokus på betalningshantering och digitala plånböcker."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[BRANSCH]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[VERKSAMHETSREGIONER]</code></td>
                                <td class="var-desc">
                                    Lista de geografiska regioner eller jurisdiktioner där organisationen bedriver verksamhet och står under regulatorisk tillsyn.                                    <div class="var-example">Till exempel: "USA, Europeiska unionen och Sydostasien."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[VERKSAMHETSREGIONER]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[TILLAMPLIGA_REGELVERK]</code></td>
                                <td class="var-desc">
                                    Ange en lista över centrala regelverk, lagkrav eller compliance-ramverk som organisationen måste följa inom sin bransch och sina regioner.                                    <div class="var-example">Till exempel: "GDPR, CCPA, PSD2 och PCI-DSS."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[TILLAMPLIGA_REGELVERK]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[ORGANISATIONSSTORLEK]</code></td>
                                <td class="var-desc">
                                    Ange organisationens storlek, till exempel antal anställda, omsättningsintervall eller andra relevanta mått som påverkar compliance-komplexiteten.                                    <div class="var-example">Till exempel: "Medelstort företag med 500 anställda och 50 miljoner USD i årlig omsättning."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[ORGANISATIONSSTORLEK]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[HUVUDUTMANING]</code></td>
                                <td class="var-desc">
                                    Beskriv det huvudsakliga compliance- eller regulatoriska problem som organisationen står inför och som planen ska adressera.                                    <div class="var-example">Till exempel: "Svårigheter att följa upp och agera på frekventa regulatoriska förändringar i flera jurisdiktioner."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[HUVUDUTMANING]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Vad detta INTE är</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Hantering av edge cases</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INPUTS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">SPECIFIKATION FÖR OUTPUT</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">1) Ledningsöversikt</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">2) Regulatoriskt landskap och signal-karta</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">3) Arkitektur för bevakning och anpassning</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">4) Leveransstruktur för arbetsflöden (end-to-end)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">5) Spårningsmekanismer och automatisering</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">6) Ramverk för relevansmappning (regelverk → process)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div><div class="locked-line" style="width: 83%;"></div><div class="locked-line" style="width: 85%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">7) Åtgärdstilldelning och ansvar (inkludera RACI)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">8) Metod för kontinuerlig förbättring</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">9) Riskindikatorer och tidigt varningssystem</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">10) Framgångsmått och KPI:er</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div><div class="locked-line" style="width: 70%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Utforma en “levande” plan för regulatorisk bevakning och anpassning som hjälper en organisation att ligga steget före regeländringar i flera jurisdiktioner, översätta uppdateringar till egna åtgärder och kontinuerligt förbättra sig—utan att skapa performativ byråkrati.

## PERSONA
Du är en systemdesigner för compliance-transformation med bakgrund inom regulatoriska utredningar och tillsyn/efterlevnadsåtgärder. Du kommunicerar på ett praktiskt, verksamhetsnära sätt: tydliga strukturer, minimalt fluff, med stort fokus på mekanismer, ägarskap och beviskedjor.

## BEGRÄNSNINGAR
- Förankra designen i principerna i ISO 19600 Compliance Management Guidelines (styrning, proportionalitet, integration, kontinuerlig förbättring).
- Optimera för proaktiv anpassning (signaler, prognoser, beredskap), inte reaktiv åtgärdande i efterhand.
- Varje regulatoriskt krav ska mappas till verkliga affärsprocesser och kontrollägare.
- Aviseringar ska vara automatiserade och riskrankade (påverkan/brådska/beroenden).
- Inkludera en granskningsbar logg över: vad som ändrades, vem som bedömde det, fattade beslut, vidtagna åtgärder och bevis på slutförande.
- Undvik “compliance theater”: lägg inte till steg som inte minskar risk eller ökar hastighet/tydlighet.
- Systemet måste vara flexibelt vid snabba, akuta regulatoriska skiften (snabb triage + tillfälliga kontroller).
- Bygg tvärfunktionellt samarbete för komplexa skyldigheter (juridik/compliance/ops/IT/säkerhet/produkt/HR vid behov).

### Vad detta INTE är
- Inte juridisk rådgivning eller jurisdiktionsspecifika tolkningar utöver övergripande bevakningsdesign.
- Inte ett fullständigt paket med policydokument, kontrollbeskrivningar eller revisionsrapporter.
- Inte ett leverantörsval eller verktygsupphandlingsprojekt (du får föreslå verktygskategorier, inte rekommendationer/endorsements).
- Inte en engångschecklista; målet är ett operativsystem för kontinuerlig förändring.

## PROCESS
1. **Föranalys (ange din förståelse först):** Återge kort organisationskontexten utifrån de givna inputs och lista centrala antaganden samt 3–6 förtydligande frågor (endast vid behov).
2. **Landskapsuppbyggnad:** Identifiera primära tillsynsmyndigheter/regelgivare, typiska uppdateringskanaler, tillsyns-/sanktionssignaler och framväxande teman relevanta för [BRANSCH] och [VERKSAMHETSREGIONER].
3. **Prioriteringsmodell:** Skapa en hierarki som rankar skyldigheter efter {Impact Level}, {Implementation Urgency} och {Dependency Links} till andra regler/processer.
4. **Systemdesign:** Specificera komponenter (människor, process, data, verktyg) som upptäcker förändringar, utvärderar tillämplighet, tilldelar arbete, verifierar slutförande och bevarar audit trails.
5. **Operativa arbetsflöden:** Definiera end-to-end “change intake → triage → assessment → decision → implementation → validation → evidence retention → retrospective.”
6. **Relevansmappning:** Ge ett repeterbart ramverk som kopplar varje regelverk till processområden, system, kontroller, risker och ansvariga roller.
7. **Tidiga varningssignaler:** Definiera ledande indikatorer med regulatoriska agendor, remisser/konsultationer, tillsynsåtgärder och branschsignaler; inkludera tröskelvärden och eskaleringsvägar.
8. **Skalning och robusthet:** Visa hur systemet expanderar till nya geografier/affärslinjer och hur det växlar till ett rapid-response-läge vid akuta uppdateringar.
9. **Kontinuerlig förbättring:** Lägg till feedbackloopar efter varje uppdateringshändelse för att korta ledtid och minska missad tillämplighet.

### Hantering av edge cases
- Om inputs är ofullständiga, fortsätt med en best-practice standarddesign och markera tydligt var antaganden gjorts.
- Om regelverk krockar mellan regioner, föreslå en harmoniseringsstrategi (t.ex. “högsta gemensamma standard”, regionala overlays, produkt-per-region-regler) och definiera en beslutsväg.
- Om organisationen är liten/tidig fas, ge en lättviktig version som bevarar spårbarhet och tempo.
- Om organisationen är stor/komplex, inkludera styrningslager och delegering utan att bromsa genomförandet.

## INPUTS
- **Bransch:** [BRANSCH]  
- **Verksamhetsregioner/länder:** [VERKSAMHETSREGIONER]  
- **Viktigaste lagar/regelverk att bevaka:** [TILLAMPLIGA_REGELVERK]  
- **Organisationsstorlek (anställda/intäktsskala):** [ORGANISATIONSSTORLEK]  
- **Nuvarande smärtpunkter inom compliance:** [HUVUDUTMANING]  

## SPECIFIKATION FÖR OUTPUT
Leverera en heltäckande blueprint med följande avsnitt och mallar:

### 1) Ledningsöversikt
- {System Purpose}
- {Design Principles}
- {Top Risks Addressed}
- {How This Avoids Bureaucracy}

### 2) Regulatoriskt landskap och signal-karta
- {Primary Regulators By Region}
- {Mandatory vs. Voluntary Standards}
- {Update Sources} (officiella kungörelser/gazetter, myndighetssajter, konsultationer/remisser, branschorganisationer, rättsfallssammanfattningar, tillsynsbulletiner)
- {Emerging Trend Themes} relevanta för [BRANSCH]
- {Current-State Gaps} härledda från [HUVUDUTMANING]

### 3) Arkitektur för bevakning och anpassning
Beskriv varje komponent med:
- {Component Name}
- {Owner Role}
- {Inputs}
- {Outputs}
- {Tools/Automation Options}
- {Audit Evidence Produced}

Minimikomponenter som ska ingå:
- Change intake hub
- Triage/prioritization engine (risk-based)
- Applicability assessment
- Implementation work management
- Validation/testing
- Evidence repository &amp; audit trail
- Metrics &amp; continuous improvement

### 4) Leveransstruktur för arbetsflöden (end-to-end)
Definiera arbetsflödets steg med:
- {Trigger}
- {Decision Gates}
- {RACI Roles}
- {SLA/Time Targets}
- {Artifacts Created}
- {Escalation Rules}

Inkludera en “rapid-response”-variant för akuta uppdateringar med komprimerade tidslinjer.

### 5) Spårningsmekanismer och automatisering
Tillhandahåll:
- {Alert Sources} och {Frequency}
- {Deduplication Rules}
- {Risk Scoring Factors} (t.ex. kundpåverkan, sanktionsavgifter/böter, operativ störning, datakänslighet)
- {Prioritization Tiers} med routinglogik
- {Example Automation Flow} (skrivet som steg, inte kod)

### 6) Ramverk för relevansmappning (regelverk → process)
Inkludera en återanvändbar mappningstabell med:
- {Regulation/Clause}
- {Region}
- {Business Process}
- {Systems/Applications}
- {Control/Policy Link}
- {Risk If Not Met}
- {Control Owner}
- {Evidence Location}
- {Review Cadence}
- {Dependencies}

### 7) Åtgärdstilldelning och ansvar (inkludera RACI)
- En RACI-mall som täcker: intake, assessment, decision, implementation, validation, sign-off, evidence retention
- {Role Definitions} anpassade till [ORGANISATIONSSTORLEK]
- {Deadline Setting Rules} baserat på risknivå
- {Completion Criteria} (vad som räknas som “klart”)

### 8) Metod för kontinuerlig förbättring
- {Retrospective Cadence}
- {Root Cause Categories} för missar/sena åtgärder
- {System Tuning Levers} (trösklar, routing, källor, mallar)
- {Knowledge Management} (playbooks, beslutsloggar, bibliotek för tolkningar av paragrafer/klausuler)

### 9) Riskindikatorer och tidigt varningssystem
Tillhandahåll:
- {Leading Indicators} (agendapunkter, volym av konsultationer/remisser, toppar i tillsyn/sanktioner, incidentmönster)
- {Lagging Indicators} (missade deadlines, revisionsfynd, kontrollbrister)
- {Thresholds} och {Response Playbooks}
- {Heat Map} beskrivning (påverkan vs sannolikhet vs beredskap)

### 10) Framgångsmått och KPI:er
Inkludera minst:
- {Detection-to-Triage Time}
- {Triage-to-Decision Time}
- {Decision-to-Implementation Time}
- {On-Time Completion Rate}
- {Applicability Accuracy Rate}
- {Audit Evidence Completeness}
- {Repeat Finding Rate}
- {Regulatory Change Coverage} per region/källa

## KVALITETSKONTROLLER
Innan du slutför, verifiera:
- Blueprinten refererar uttryckligen till ISO 19600-anpassade principer och mekanismer för kontinuerlig förbättring.
- Varje regelverk kan spåras till en process, en ägare och en plats för evidens (inga orphan requirements).
- Aviseringar är automatiserade och prioriterade med en tydlig poäng-/scoringsmodell och routinglogik.
- Designen innehåller en försvarbar audit trail från “change detected” till “actions completed.”
- Systemet förblir tillräckligt lättviktigt för att köras veckovis och tillräckligt robust för akuta förändringar utan kaos.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nUtforma en \u201clevande\u201d plan f\u00f6r regulatorisk bevakning och anpassning som hj\u00e4lper en organisation att ligga steget f\u00f6re regel\u00e4ndringar i flera jurisdiktioner, \u00f6vers\u00e4tta uppdateringar till egna \u00e5tg\u00e4rder och kontinuerligt f\u00f6rb\u00e4ttra sig\u2014utan att skapa performativ byr\u00e5krati.\r\n\r\n## PERSONA\r\nDu \u00e4r en systemdesigner f\u00f6r compliance-transformation med bakgrund inom regulatoriska utredningar och tillsyn\/efterlevnads\u00e5tg\u00e4rder. Du kommunicerar p\u00e5 ett praktiskt, verksamhetsn\u00e4ra s\u00e4tt: tydliga strukturer, minimalt fluff, med stort fokus p\u00e5 mekanismer, \u00e4garskap och beviskedjor.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- F\u00f6rankra designen i principerna i ISO 19600 Compliance Management Guidelines (styrning, proportionalitet, integration, kontinuerlig f\u00f6rb\u00e4ttring).\r\n- Optimera f\u00f6r proaktiv anpassning (signaler, prognoser, beredskap), inte reaktiv \u00e5tg\u00e4rdande i efterhand.\r\n- Varje regulatoriskt krav ska mappas till verkliga aff\u00e4rsprocesser och kontroll\u00e4gare.\r\n- Aviseringar ska vara automatiserade och riskrankade (p\u00e5verkan\/br\u00e5dska\/beroenden).\r\n- Inkludera en granskningsbar logg \u00f6ver: vad som \u00e4ndrades, vem som bed\u00f6mde det, fattade beslut, vidtagna \u00e5tg\u00e4rder och bevis p\u00e5 slutf\u00f6rande.\r\n- Undvik \u201ccompliance theater\u201d: l\u00e4gg inte till steg som inte minskar risk eller \u00f6kar hastighet\/tydlighet.\r\n- Systemet m\u00e5ste vara flexibelt vid snabba, akuta regulatoriska skiften (snabb triage + tillf\u00e4lliga kontroller).\r\n- Bygg tv\u00e4rfunktionellt samarbete f\u00f6r komplexa skyldigheter (juridik\/compliance\/ops\/IT\/s\u00e4kerhet\/produkt\/HR vid behov).\r\n\r\n### Vad detta INTE \u00e4r\r\n- Inte juridisk r\u00e5dgivning eller jurisdiktionsspecifika tolkningar ut\u00f6ver \u00f6vergripande bevakningsdesign.\r\n- Inte ett fullst\u00e4ndigt paket med policydokument, kontrollbeskrivningar eller revisionsrapporter.\r\n- Inte ett leverant\u00f6rsval eller verktygsupphandlingsprojekt (du f\u00e5r f\u00f6resl\u00e5 verktygskategorier, inte rekommendationer\/endorsements).\r\n- Inte en eng\u00e5ngschecklista; m\u00e5let \u00e4r ett operativsystem f\u00f6r kontinuerlig f\u00f6r\u00e4ndring.\r\n\r\n## PROCESS\r\n1. **F\u00f6ranalys (ange din f\u00f6rst\u00e5else f\u00f6rst):** \u00c5terge kort organisationskontexten utifr\u00e5n de givna inputs och lista centrala antaganden samt 3\u20136 f\u00f6rtydligande fr\u00e5gor (endast vid behov).\r\n2. **Landskapsuppbyggnad:** Identifiera prim\u00e4ra tillsynsmyndigheter\/regelgivare, typiska uppdateringskanaler, tillsyns-\/sanktionssignaler och framv\u00e4xande teman relevanta f\u00f6r [BRANSCH] och [VERKSAMHETSREGIONER].\r\n3. **Prioriteringsmodell:** Skapa en hierarki som rankar skyldigheter efter {Impact Level}, {Implementation Urgency} och {Dependency Links} till andra regler\/processer.\r\n4. **Systemdesign:** Specificera komponenter (m\u00e4nniskor, process, data, verktyg) som uppt\u00e4cker f\u00f6r\u00e4ndringar, utv\u00e4rderar till\u00e4mplighet, tilldelar arbete, verifierar slutf\u00f6rande och bevarar audit trails.\r\n5. **Operativa arbetsfl\u00f6den:** Definiera end-to-end \u201cchange intake \u2192 triage \u2192 assessment \u2192 decision \u2192 implementation \u2192 validation \u2192 evidence retention \u2192 retrospective.\u201d\r\n6. **Relevansmappning:** Ge ett repeterbart ramverk som kopplar varje regelverk till processomr\u00e5den, system, kontroller, risker och ansvariga roller.\r\n7. **Tidiga varningssignaler:** Definiera ledande indikatorer med regulatoriska agendor, remisser\/konsultationer, tillsyns\u00e5tg\u00e4rder och branschsignaler; inkludera tr\u00f6skelv\u00e4rden och eskaleringsv\u00e4gar.\r\n8. **Skalning och robusthet:** Visa hur systemet expanderar till nya geografier\/aff\u00e4rslinjer och hur det v\u00e4xlar till ett rapid-response-l\u00e4ge vid akuta uppdateringar.\r\n9. **Kontinuerlig f\u00f6rb\u00e4ttring:** L\u00e4gg till feedbackloopar efter varje uppdateringsh\u00e4ndelse f\u00f6r att korta ledtid och minska missad till\u00e4mplighet.\r\n\r\n### Hantering av edge cases\r\n- Om inputs \u00e4r ofullst\u00e4ndiga, forts\u00e4tt med en best-practice standarddesign och markera tydligt var antaganden gjorts.\r\n- Om regelverk krockar mellan regioner, f\u00f6resl\u00e5 en harmoniseringsstrategi (t.ex. \u201ch\u00f6gsta gemensamma standard\u201d, regionala overlays, produkt-per-region-regler) och definiera en beslutsv\u00e4g.\r\n- Om organisationen \u00e4r liten\/tidig fas, ge en l\u00e4ttviktig version som bevarar sp\u00e5rbarhet och tempo.\r\n- Om organisationen \u00e4r stor\/komplex, inkludera styrningslager och delegering utan att bromsa genomf\u00f6randet.\r\n\r\n## INPUTS\r\n- **Bransch:** [BRANSCH]  \r\n- **Verksamhetsregioner\/l\u00e4nder:** [VERKSAMHETSREGIONER]  \r\n- **Viktigaste lagar\/regelverk att bevaka:** [TILLAMPLIGA_REGELVERK]  \r\n- **Organisationsstorlek (anst\u00e4llda\/int\u00e4ktsskala):** [ORGANISATIONSSTORLEK]  \r\n- **Nuvarande sm\u00e4rtpunkter inom compliance:** [HUVUDUTMANING]  \r\n\r\n## SPECIFIKATION F\u00d6R OUTPUT\r\nLeverera en helt\u00e4ckande blueprint med f\u00f6ljande avsnitt och mallar:\r\n\r\n### 1) Lednings\u00f6versikt\r\n- {System Purpose}\r\n- {Design Principles}\r\n- {Top Risks Addressed}\r\n- {How This Avoids Bureaucracy}\r\n\r\n### 2) Regulatoriskt landskap och signal-karta\r\n- {Primary Regulators By Region}\r\n- {Mandatory vs. Voluntary Standards}\r\n- {Update Sources} (officiella kung\u00f6relser\/gazetter, myndighetssajter, konsultationer\/remisser, branschorganisationer, r\u00e4ttsfallssammanfattningar, tillsynsbulletiner)\r\n- {Emerging Trend Themes} relevanta f\u00f6r [BRANSCH]\r\n- {Current-State Gaps} h\u00e4rledda fr\u00e5n [HUVUDUTMANING]\r\n\r\n### 3) Arkitektur f\u00f6r bevakning och anpassning\r\nBeskriv varje komponent med:\r\n- {Component Name}\r\n- {Owner Role}\r\n- {Inputs}\r\n- {Outputs}\r\n- {Tools\/Automation Options}\r\n- {Audit Evidence Produced}\r\n\r\nMinimikomponenter som ska ing\u00e5:\r\n- Change intake hub\r\n- Triage\/prioritization engine (risk-based)\r\n- Applicability assessment\r\n- Implementation work management\r\n- Validation\/testing\r\n- Evidence repository & audit trail\r\n- Metrics & continuous improvement\r\n\r\n### 4) Leveransstruktur f\u00f6r arbetsfl\u00f6den (end-to-end)\r\nDefiniera arbetsfl\u00f6dets steg med:\r\n- {Trigger}\r\n- {Decision Gates}\r\n- {RACI Roles}\r\n- {SLA\/Time Targets}\r\n- {Artifacts Created}\r\n- {Escalation Rules}\r\n\r\nInkludera en \u201crapid-response\u201d-variant f\u00f6r akuta uppdateringar med komprimerade tidslinjer.\r\n\r\n### 5) Sp\u00e5rningsmekanismer och automatisering\r\nTillhandah\u00e5ll:\r\n- {Alert Sources} och {Frequency}\r\n- {Deduplication Rules}\r\n- {Risk Scoring Factors} (t.ex. kundp\u00e5verkan, sanktionsavgifter\/b\u00f6ter, operativ st\u00f6rning, datak\u00e4nslighet)\r\n- {Prioritization Tiers} med routinglogik\r\n- {Example Automation Flow} (skrivet som steg, inte kod)\r\n\r\n### 6) Ramverk f\u00f6r relevansmappning (regelverk \u2192 process)\r\nInkludera en \u00e5teranv\u00e4ndbar mappningstabell med:\r\n- {Regulation\/Clause}\r\n- {Region}\r\n- {Business Process}\r\n- {Systems\/Applications}\r\n- {Control\/Policy Link}\r\n- {Risk If Not Met}\r\n- {Control Owner}\r\n- {Evidence Location}\r\n- {Review Cadence}\r\n- {Dependencies}\r\n\r\n### 7) \u00c5tg\u00e4rdstilldelning och ansvar (inkludera RACI)\r\n- En RACI-mall som t\u00e4cker: intake, assessment, decision, implementation, validation, sign-off, evidence retention\r\n- {Role Definitions} anpassade till [ORGANISATIONSSTORLEK]\r\n- {Deadline Setting Rules} baserat p\u00e5 riskniv\u00e5\r\n- {Completion Criteria} (vad som r\u00e4knas som \u201cklart\u201d)\r\n\r\n### 8) Metod f\u00f6r kontinuerlig f\u00f6rb\u00e4ttring\r\n- {Retrospective Cadence}\r\n- {Root Cause Categories} f\u00f6r missar\/sena \u00e5tg\u00e4rder\r\n- {System Tuning Levers} (tr\u00f6sklar, routing, k\u00e4llor, mallar)\r\n- {Knowledge Management} (playbooks, beslutsloggar, bibliotek f\u00f6r tolkningar av paragrafer\/klausuler)\r\n\r\n### 9) Riskindikatorer och tidigt varningssystem\r\nTillhandah\u00e5ll:\r\n- {Leading Indicators} (agendapunkter, volym av konsultationer\/remisser, toppar i tillsyn\/sanktioner, incidentm\u00f6nster)\r\n- {Lagging Indicators} (missade deadlines, revisionsfynd, kontrollbrister)\r\n- {Thresholds} och {Response Playbooks}\r\n- {Heat Map} beskrivning (p\u00e5verkan vs sannolikhet vs beredskap)\r\n\r\n### 10) Framg\u00e5ngsm\u00e5tt och KPI:er\r\nInkludera minst:\r\n- {Detection-to-Triage Time}\r\n- {Triage-to-Decision Time}\r\n- {Decision-to-Implementation Time}\r\n- {On-Time Completion Rate}\r\n- {Applicability Accuracy Rate}\r\n- {Audit Evidence Completeness}\r\n- {Repeat Finding Rate}\r\n- {Regulatory Change Coverage} per region\/k\u00e4lla\r\n\r\n## KVALITETSKONTROLLER\r\nInnan du slutf\u00f6r, verifiera:\r\n- Blueprinten refererar uttryckligen till ISO 19600-anpassade principer och mekanismer f\u00f6r kontinuerlig f\u00f6rb\u00e4ttring.\r\n- Varje regelverk kan sp\u00e5ras till en process, en \u00e4gare och en plats f\u00f6r evidens (inga orphan requirements).\r\n- Aviseringar \u00e4r automatiserade och prioriterade med en tydlig po\u00e4ng-\/scoringsmodell och routinglogik.\r\n- Designen inneh\u00e5ller en f\u00f6rsvarbar audit trail fr\u00e5n \u201cchange detected\u201d till \u201cactions completed.\u201d\r\n- Systemet f\u00f6rblir tillr\u00e4ckligt l\u00e4ttviktigt f\u00f6r att k\u00f6ras veckovis och tillr\u00e4ckligt robust f\u00f6r akuta f\u00f6r\u00e4ndringar utan kaos.";
    const variables = ["[BRANSCH]","[VERKSAMHETSREGIONER]","[TILLAMPLIGA_REGELVERK]","[ORGANISATIONSSTORLEK]","[HUVUDUTMANING]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat med AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Definiera “regulatorisk förändring” i din kontext.</strong> Slå inte ihop allt. Berätta för modellen vad som räknas (ny lag, reviderad vägledning, enforcement-trend, uttalande från myndighet) och vad som inte gör det (tyckarbloggar, generella nyheter). Följ upp med: “Separera förändringar i bindande krav vs tolkande vägledning vs enforcement-signaler.”</li>


<li><strong>Namnge era verkliga verksamhetsprocesser, inte avdelningar.</strong> “Finans” är för vagt; “order-to-cash”, “lönehantering”, “leverantörsonboarding” eller “incidenthantering” ger ritningen något konkret att mappa till ägare och kontroller. Efter första utkastet, fråga: “För varje mappad process, lista 2 exempel på kontroller och vilket bevis som skulle godkännas vid en revision.”</li>


<li><strong>Gör riskrankningen operativ.</strong> Påverkan och brådska är uppenbart; beroenden är där projekt spricker. Lägg till beroenden som “kräver release från engineering”, “kräver ändring i leverantörsavtal” eller “kräver kundkommunikation.” Testa: “Skriv om rankningsrubriken så att en triageanalytiker kan poängsätta en avisering på under 3 minuter.”</li>


<li><strong>Iterera playbooken för akuta skiften.</strong> Första versionen blir generell. Tryck den mot er verklighet genom att prompta: “Gör nu så att akutvägen fungerar för en deadline på 72 timmar, med tillfälliga kontroller, en enda ansvarig beslutsfattare och en rollback-plan om vägledningen ändras igen.”</li>


<li><strong>Kombinera med en kadens för skatteförändringar om det är er smärtpunkt.</strong> Om den största volymen förändringar är skatterelaterad, kör ritningen och anpassa sedan källor och routning till er skattekalender. En bra följdfråga är: “Lägg till en kvartalsvis ritual för granskning av skatteförändringar och koppla den till bevis för deklarationer, källskatt och förebyggande av sanktioner.” Att para ihop med planeringsprompter som https://nodenordic.se/prompts/planera-kvartalsskatt-och-undvik-straffavgifter kan skärpa genomförandet.</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade prompter</h2>



<p>När du väl har ett operativt system för övervakning och respons hjälper de här prompterna dig att leverera inom regulatoriska områden med hög frekvens (särskilt skatt) med färre överraskningar.</p>



<p>Om du också behöver ett strukturerat sätt att översätta skattekrav på delstatsnivå till konkreta steg, passar <a href="https://nodenordic.se/prompts/checklista-for-delstatlig-inkomstskatt-och-efterlevnad">AI-prompten State Income Tax Compliance Checklist</a> bra. Använd den när din ritning flaggar en förändring i delstatsskatt och du vill ha en snabb checklista som kan tilldelas, följas upp och styrkas utan att uppfinna hjulet på nytt.</p>



<p>För team som hanterar lön och betalningar till uppdragstagare kan avdragsnivåer som glider bli en tyst risk. När övervakningen identifierar nya riktlinjer för källskatt eller när din inkomstmix ändras mitt under året, hjälper <a href="https://nodenordic.se/prompts/optimera-skatteavdrag-for-sidoinkomster">AI-prompten Optimize Tax Withholding for Side Income</a> dig att översätta uppdateringen till en praktisk justeringsplan som du kan dokumentera och återkomma till.</p>



<p>När ditt övervakningssystem fångar signaler om att kvartalsvisa preliminärskatter kan förändras (nya regler, intäktsförskjutningar, enforcement-trend) vill du ha en tidig prognosloop. <a href="https://nodenordic.se/prompts/berakna-preliminar-kvartalsskatt-i-tid-med-ai-prompt">AI-prompten Estimate Quarterly Taxes Early</a> är användbar i det beslutsögonblicket eftersom den betonar prognostisering och förberedelse, inte panik när sanktioner redan uppstått.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/checklista-for-delstatlig-inkomstskatt-och-efterlevnad">AI-prompten State Income Tax Compliance Checklist</a>: Gör delstatliga skatteuppdateringar till tilldelningsbara steg.</li>


<li><a href="https://nodenordic.se/prompts/optimera-skatteavdrag-for-sidoinkomster">AI-prompten Optimize Tax Withholding for Side Income</a>: Justera källskatt utifrån faktiska inkomstförändringar.</li>


<li><a href="https://nodenordic.se/prompts/berakna-preliminar-kvartalsskatt-i-tid-med-ai-prompt">AI-prompten Estimate Quarterly Taxes Early</a>: Prognostisera kvartalsvisa preliminärskatter innan deadlines slår till.</li>

<li><a href="https://nodenordic.se/prompts/planera-kvartalsskatt-och-undvik-straffavgifter">AI-prompten Plan Quarterly Taxes and Avoid Penalties</a>: Sätt en kadens för att betala och dokumentera.</li>

<li><a href="https://nodenordic.se/prompts/bygg-en-inkomstplan-utan-budget-med-denna-ai-prompt">AI-prompten Bygg en inkomstplan utan budget med denna ai-prompt</a>: Stäm av inkomstplaner mot skyldigheter.</li>
<!-- /wp:post-content -->
</ul>
<!-- /wp:list -->
</div>

<div class="faq-section">
<!-- wp:heading {"level":2} -->
<h2 class="wp-block-heading">Vanliga frågor</h2>
<!-- /wp:heading -->

<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för en ritning för regulatorisk övervakning?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>Complianceansvariga</strong> använder den här för att göra “vi övervakar regelverk” till ett repeterbart system med ägare, beslutsmandat och bevisunderlag. <strong>ledare inom legal operations</strong> tycker att den är värdefull för att routa uppdateringar till rätt intressenter samtidigt som tolkningar hålls separata från operativ implementering. <strong>ledare för risk och internrevision</strong> använder den för att etablera ISO 19600-anpassad styrning och spårbarhet som håller vid revisioner eller utredningar. <strong>program managers i reglerade produktteam</strong> använder flödet för att triagera förändringar, hantera beroenden och förhindra att överraskningsarbete spårar ur releaser.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för en ritning för regulatorisk övervakning?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>Fintech och finansiella tjänster</strong> får omedelbart värde eftersom regulatoriska uppdateringar ofta har snäva tidsramar och beroenden mellan team (compliance, säkerhet, produkt, support). <strong>sjukvård och digital hälsa</strong>-team använder den för att följa förändringar i vägledning, enforcement-signaler och dokumentationsförväntningar samtidigt som de behåller ett korrekt formaterat bevisunderlag för revisioner. <strong>e-handel och marknadsplatser</strong> gynnas när skyldigheter varierar per delstat eller land och förändringar påverkar skatter, upplysningar, återbetalningar eller konsumentskyddsflöden. <strong>B2B SaaS som betjänar reglerade kunder</strong> använder den för att ligga steget före kunddrivna krav (SOC-förväntningar, integritetsförändringar, avtalsklausuler) och för att kunna bevisa snabb respons utan att blåsa upp processen.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Varför ger grundläggande AI-prompter för att bygga en ritning för regulatorisk övervakning svaga resultat?</span>
<!-- wp:paragraph -->
<p class="answer">En typisk prompt som “<em>Skriv en plan för regulatorisk övervakning</em>” misslyckas eftersom den: saknar ISO 19600-struktur för styrning och kontinuerlig förbättring, erbjuder ingen mekanism för automatiserade och riskrankade aviseringar, ignorerar att mappa krav till verkliga verksamhetsprocesser och namngivna ägare, producerar generella råd i stället för ett revisionsbart arbetsflöde med bevisunderlag, och missar hantering av akuta skiften (snabb triage, tillfälliga kontroller, tidsbegränsade ombedömningar). Du får ett dokument som låter bra, men som ingen kan drifta, revidera eller förbättra.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här prompten för ritningen för regulatorisk övervakning till min specifika situation?</span>
<!-- wp:paragraph -->
<p class="answer">Ja. Börja med att lägga in din operativa kontext i chatten innan du kör prompten: jurisdiktioner, regulatoriska domäner (integritet, skatt, arbetsrätt, produktsäkerhet) och era nuvarande bevakningskällor. Anpassa sedan ritningen genom att ange era trösklar för riskrankning (vad som räknas som “hög påverkan”), era beviskrav (skärmbilder, ticket-ID:n, policy-diffar) och er tvärfunktionella uppställning (juridik, ops, IT, säkerhet, produkt, HR). En användbar följdprompt är: “Anpassa den här ritningen för ett företag med 200 personer som verkar i USA och EU; anta två personer inom compliance, Jira för uppföljning och månadsvisa releaser. Håll det proportionerligt och ta bort alla steg som inte minskar risk eller snabbar upp respons.”</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här prompten för en ritning för regulatorisk övervakning?</span>
<!-- wp:paragraph -->
<p class="answer">Det största misstaget är att lämna organisationskontexten för vag — i stället för “vi är globala”, prova “vi säljer en konsumentapp i USA, Storbritannien och Tyskland; vi hanterar betalningar; vi marknadsför via e-post och pushnotiser.” Ett annat vanligt fel är att inte namnge verksamhetsprocesser, vilket förhindrar ägarmappning; “Operations äger det” är svagt, medan “kontrollägare för leverantörsonboarding: Procurement Ops Manager” är handlingsbart. Team glömmer också beroenden, så triage kan inte prognostisera leveransrisk; “kräver engineering-ändring i Q3:s release-takt” är den typen av detalj som gör ritningen användbar. Slutligen hoppar många över bevisdefinitioner; “dokumentera compliance” är otydligt, men “länk till ticket, kod-PR, uppdaterad rutin och godkännandepost” är revisionsbart.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vem bör INTE använda den här prompten för en ritning för regulatorisk övervakning?</span>
<!-- wp:paragraph -->
<p class="answer">Den här prompten passar inte för engångsprojekt där du inte kommer att upprätthålla en löpande bevakningskadens, eller för team som förväntar sig jurisdiktionsspecifika juridiska tolkningar snarare än ett operativt system. Den är också ett dåligt val om du inte kan tilldela ägare eller följa upp arbete (inga tickets, inga processägare, ingen styrning), eftersom ritningen bygger på genomförande. Om det är din situation: börja med en smal compliance-checklista för ett enskilt område och bygg sedan ut till ett bevakningssystem när ägarskap och uppföljning finns på plats.</p>
<!-- /wp:paragraph -->
</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för en ritning för regulatorisk övervakning?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Complianceansvariga använder den här för att göra “vi övervakar regelverk” till ett repeterbart system med ägare, beslutsmandat och bevisunderlag. ledare inom legal operations tycker att den är värdefull för att routa uppdateringar till rätt intressenter samtidigt som tolkningar hålls separata från operativ implementering. ledare för risk och internrevision använder den för att etablera ISO 19600-anpassad styrning och spårbarhet som håller vid revisioner eller utredningar. program managers i reglerade produktteam använder flödet för att triagera förändringar, hantera beroenden och förhindra att överraskningsarbete spårar ur releaser."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för en ritning för regulatorisk övervakning?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Fintech och finansiella tjänster får omedelbart värde eftersom regulatoriska uppdateringar ofta har snäva tidsramar och beroenden mellan team (compliance, säkerhet, produkt, support). sjukvård och digital hälsa-team använder den för att följa förändringar i vägledning, enforcement-signaler och dokumentationsförväntningar samtidigt som de behåller ett korrekt formaterat bevisunderlag för revisioner. e-handel och marknadsplatser gynnas när skyldigheter varierar per delstat eller land och förändringar påverkar skatter, upplysningar, återbetalningar eller konsumentskyddsflöden. B2B SaaS som betjänar reglerade kunder använder den för att ligga steget före kunddrivna krav (SOC-förväntningar, integritetsförändringar, avtalsklausuler) och för att kunna bevisa snabb respons utan att blåsa upp processen."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger grundläggande AI-prompter för att bygga en ritning för regulatorisk övervakning svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som “Skriv en plan för regulatorisk övervakning” misslyckas eftersom den: saknar ISO 19600-struktur för styrning och kontinuerlig förbättring, erbjuder ingen mekanism för automatiserade och riskrankade aviseringar, ignorerar att mappa krav till verkliga verksamhetsprocesser och namngivna ägare, producerar generella råd i stället för ett revisionsbart arbetsflöde med bevisunderlag, och missar hantering av akuta skiften (snabb triage, tillfälliga kontroller, tidsbegränsade ombedömningar). Du får ett dokument som låter bra, men som ingen kan drifta, revidera eller förbättra."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här prompten för ritningen för regulatorisk övervakning till min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja. Börja med att lägga in din operativa kontext i chatten innan du kör prompten: jurisdiktioner, regulatoriska domäner (integritet, skatt, arbetsrätt, produktsäkerhet) och era nuvarande bevakningskällor. Anpassa sedan ritningen genom att ange era trösklar för riskrankning (vad som räknas som “hög påverkan”), era beviskrav (skärmbilder, ticket-ID:n, policy-diffar) och er tvärfunktionella uppställning (juridik, ops, IT, säkerhet, produkt, HR). En användbar följdprompt är: “Anpassa den här ritningen för ett företag med 200 personer som verkar i USA och EU; anta två personer inom compliance, Jira för uppföljning och månadsvisa releaser. Håll det proportionerligt och ta bort alla steg som inte minskar risk eller snabbar upp respons.”"
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här prompten för en ritning för regulatorisk övervakning?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att lämna organisationskontexten för vag — i stället för “vi är globala”, prova “vi säljer en konsumentapp i USA, Storbritannien och Tyskland; vi hanterar betalningar; vi marknadsför via e-post och pushnotiser.” Ett annat vanligt fel är att inte namnge verksamhetsprocesser, vilket förhindrar ägarmappning; “Operations äger det” är svagt, medan “kontrollägare för leverantörsonboarding: Procurement Ops Manager” är handlingsbart. Team glömmer också beroenden, så triage kan inte prognostisera leveransrisk; “kräver engineering-ändring i Q3:s release-takt” är den typen av detalj som gör ritningen användbar. Slutligen hoppar många över bevisdefinitioner; “dokumentera compliance” är otydligt, men “länk till ticket, kod-PR, uppdaterad rutin och godkännandepost” är revisionsbart."
      }
    },
    {
      "@type": "Question",
      "name": "Vem bör INTE använda den här prompten för en ritning för regulatorisk övervakning?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten passar inte för engångsprojekt där du inte kommer att upprätthålla en löpande bevakningskadens, eller för team som förväntar sig jurisdiktionsspecifika juridiska tolkningar snarare än ett operativt system. Den är också ett dåligt val om du inte kan tilldela ägare eller följa upp arbete (inga tickets, inga processägare, ingen styrning), eftersom ritningen bygger på genomförande. Om det är din situation: börja med en smal compliance-checklista för ett enskilt område och bygg sedan ut till ett bevakningssystem när ägarskap och uppföljning finns på plats."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">
<!-- wp:paragraph -->
<p>Regulatoriskt arbete är smärtsamt när det är reaktivt och odokumenterat. Sätt ett verkligt operativt system på plats, håll det proportionerligt och gör varje förändring spårbar till en ägare och en åtgärd. Klistra in den här prompten i ditt AI-verktyg och börja bygga din övervakningsritning i dag.</p>
<!-- /wp:paragraph -->
</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/skapa-en-plan-for-regelefterlevnadsbevakning/">Skapa en plan för regelefterlevnadsbevakning</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Designa JWT-inloggning med cookieflöde med AI-prompt</title>
		<link>https://nodenordic.se/prompts/designa-jwt-inloggning-med-cookieflode-med-ai-prompt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=designa-jwt-inloggning-med-cookieflode-med-ai-prompt</link>
		
		<dc:creator><![CDATA[Rickard Andersson]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 02:48:24 +0000</pubDate>
				<category><![CDATA[prompts]]></category>
		<guid isPermaLink="false">https://nodenordic.se/?p=5001439</guid>

					<description><![CDATA[<p>Cookiesessioner kapas. En beprövad AI-prompt som designar JWT-autentisering med HTTP-only-cookies, CSRF-skydd, rotation, middleware och loggning.</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/designa-jwt-inloggning-med-cookieflode-med-ai-prompt/">Designa JWT-inloggning med cookieflöde med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<!-- FOCUS_KEYWORD: cookie-based JWT auth -->
<div class="hook-introduction">

<p>JWT-autentisering går sönder i de tråkiga detaljerna. Tokens hamnar i localStorage, XSS blir ett kontoövertagande och refresh-flöden blir en hög av edge cases som ingen övervakar. Sedan skeppar du ”tillräckligt bra” autentisering och spenderar nästa kvartal med att jaga märkliga utloggningsbuggar och misstänkta replays.</p>



<p>Den här <strong>cookie-baserade JWT-autentiseringen</strong> är byggd för <strong>produktingenjörer</strong> som behöver ett säkert inloggning/refresh/utloggningsflöde som inte läcker tokens till webbläsarens JavaScript, <strong>tech leads</strong> som måste standardisera middleware och cookie-policyer över flera tjänster, och <strong>säkerhetsmedvetna grundare</strong> som vill ha en praktisk plan inför ett penetrationstest. Resultatet är ett design-dokument i produktionsklass med implementationsmönster (cookies, headers, rotationsregler, middleware-struktur) plus loggning och övervakningssignaler som du faktiskt kan koppla in.</p>

</div>

<div class="what-and-when-section">

<h2 class="wp-block-heading">Vad gör den här AI-prompten och när ska du använda den?</h2>



<table class="solution-results-table three-column" role="presentation" aria-label="What this prompt does, when to use it, and what you get">
 <thead>
    <tr>
      <th scope="col">Vad den här prompten gör</th>
      <th scope="col">När du ska använda den här prompten</th>
      <th scope="col">Vad du får</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <ul class="automation-list">
          <li>Den kartlägger ett end-to-end-flöde för inloggning → autentiserad request → tyst refresh → utloggning där webbläsaren aldrig läser tokens via JavaScript.</li>
          <li>Den definierar en access/refresh-tokenmodell, inklusive livslängder, rotationsstrategi och hur sessioner ogiltigförklaras på serversidan efter stöld eller utloggning.</li>
          <li>Den specificerar cookie-flaggor och header-mönster (SameSite, Secure, HttpOnly, Path-scoping, CSRF-headers) med konkreta standardinställningar.</li>
          <li>Den ger middleware-mönster för att autentisera requests, fästa användarkontext, hantera klockdrift och stoppa manipulerade eller återspelade tokens.</li>
          <li>Den lägger till operativ vägledning: vad som ska loggas, vilka signaler som indikerar missbruk och vilka larm som hjälper dig att snabbt upptäcka återanvändning av refresh-token.</li>
       </ul>
      </td>
      <td>
        <ul class="results-list">
          <li>Du migrerar bort från tokens i localStorage/sessionStorage och behöver en säkrare approach utan att skriva om hela frontenden.</li>
          <li>Ditt refresh-flöde är opålitligt (slumpmässiga 401:or, utloggningsloopar, ”funkar på min dator”), och du behöver tydligt felbeteende och hantering av race conditions.</li>
          <li>Du ska precis skeppa en SPA + API och behöver CSRF-skydd som matchar cookie-baserad autentisering i stället för bearer-tokens.</li>
          <li>En säkerhetsgranskning eller kundenkät frågar hur du förhindrar token-stöld via XSS, replay efter stöld och session hijacking.</li>
          <li>Du skalar till flera tjänster och behöver konsekventa middleware- och loggningskonventioner så incidenter kan utredas snabbt.</li>
        </ul>
      </td>
       <td>
         <ul class="deliverables-list">
           <li>En komplett blueprint för autentiseringsflödet med steg-för-steg-sekvenser för request/response för inloggning, refresh och utloggning.</li>
           <li>En tabell för tokenpolicy som inkluderar TTL för access/refresh, rotationsregler, återanvändningsdetektering och säker hantering av klockdrift.</li>
           <li>Exempel på cookie- och header-konfiguration (HttpOnly/Secure/SameSite, CSRF-header, CORS-noteringar) redo att klistra in i dokumentation.</li>
           <li>Pseudokod för middleware för autentiseringsverifiering, koppling av användarkontext och konsekventa felsvar över endpoints.</li>
           <li>En checklista för övervakning med konkreta loggfält och larmidéer för replay-försök, refresh-avvikelser och misstänkta utloggningsraces.</li>
         </ul>
       </td>
    </tr>
  </tbody>
</table>

</div>

<div class="prompt-display-section">

<h2 class="wp-block-heading">Hela AI-prompten: cookie-baserat JWT-autentiseringsflöde i produktionsklass</h2>



<div class="prompt-viewer-wrapper" id="prompt-section">
    <div class="prompt-comparison-row prompt-premium">
        <!-- Header with buttons -->
        <div class="prompt-row-header">
            <!-- <span class="prompt-row-icon">✨</span> -->
            <span class="prompt-row-title">
                                    Steg 1: Anpassa prompten med din information
                            </span>
            <div class="prompt-header-buttons">
                                    <button class="prompt-header-btn prompt-header-reset" onclick="resetPrompt()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                                <button class="prompt-header-btn prompt-header-copy-green flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span>Anpassa och kopiera hela prompten</span>
                </button>
            </div>
        </div>

        <!-- Customize the Prompt Section -->
                    <div class="prompt-customize-section">
                <span class="customize-title">Anpassa prompten</span>
                <p class="customize-subtitle">Fyll i fälten nedan för att anpassa prompten efter dina behov.</p>
                <table class="customize-table">
                    <thead>
                        <tr>
                            <th>Variabel</th>
                            <th>Vad du ska ange</th>
                            <th>Anpassa prompten</th>
                        </tr>
                    </thead>
                    <tbody>
                                                    <tr>
                                <td class="var-name"><code>[APPLIKATIONSTYP]</code></td>
                                <td class="var-desc">
                                    Ange vilken typ av applikation du arbetar med, till exempel webb, mobil eller desktop, och inkludera relevanta detaljer om funktionalitet och hur användare interagerar med den.                                    <div class="var-example">Till exempel: "En single-page webbapplikation för e-handel, byggd med React och som integrerar mot REST-API:er."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[APPLIKATIONSTYP]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[NUVARANDE_TEKNIKSTACK]</code></td>
                                <td class="var-desc">
                                    Beskriv vilka ramverk, runtime-miljö, hostingupplägg och reverse proxy-konfiguration som applikationen använder i dag.                                    <div class="var-example">Till exempel: "Node.js-backend med Express, driftad på AWS Lambda med en NGINX reverse proxy framför."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[NUVARANDE_TEKNIKSTACK]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[SAKERHETS_ELLER_EFTERLEVNADSKRAV]</code></td>
                                <td class="var-desc">
                                    Beskriv vilka specifika säkerhets- eller efterlevnadsstandarder applikationen måste uppfylla, till exempel SOC2, HIPAA, PCI eller GDPR.                                    <div class="var-example">Till exempel: "Applikationen måste följa GDPR för hantering av användardata och SOC2 för operativa säkerhetskrav."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[SAKERHETS_ELLER_EFTERLEVNADSKRAV]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[ONSKAD_SESSIONSLANGD]</code></td>
                                <td class="var-desc">
                                    Ange önskad sessionslängd, inklusive både inaktivitets-timeout och absolut utgångstid, för att kunna definiera token-livslängder.                                    <div class="var-example">Till exempel: "Inaktivitets-timeout på 15 minuter och absolut sessionstid som löper ut efter 24 timmar."</div>
                                </td>
                                <td class="var-input">
                                                                            <input
                                            type="text"
                                            class="customize-input"
                                            data-placeholder="[ONSKAD_SESSIONSLANGD]"
                                            placeholder="Ange ditt värde här..." />
                                                                    </td>
                            </tr>
                                                    <tr>
                                <td class="var-name"><code>[BEFINTLIGA_AUTENTISERINGSPROBLEM]</code></td>
                                <td class="var-desc">
                                    Beskriv eventuella observerade sårbarheter eller problem i nuvarande autentiseringslösning, till exempel tokenstöld, sessionskapning eller bristfällig utloggningshantering.                                    <div class="var-example">Till exempel: "Tokens som lagras i localStorage är sårbara för XSS-attacker, och sessionskapning har observerats på grund av saknat CSRF-skydd."</div>
                                </td>
                                <td class="var-input">
                                                                            <textarea
                                            class="customize-input"
                                            data-placeholder="[BEFINTLIGA_AUTENTISERINGSPROBLEM]"
                                            placeholder="Ange ditt värde här..."
                                            rows="3"></textarea>
                                                                    </td>
                            </tr>
                                            </tbody>
                </table>

                <button class="copy-customized-btn flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                        <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                        <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                    </svg>
                    <span class="copy-customized-text">Anpassa prompten nu</span>

                </button>
            </div>
        
        <!-- Full Prompt Code Header -->
                    <div class="prompt-code-header">
                <span class="prompt-code-title">
                    Steg 2: Kopiera prompten
                </span>
                <div class="prompt-code-buttons">
                    <!-- Reset: Only visible when unlocked -->
                    <button class="prompt-header-btn prompt-header-reset btn-when-unlocked" onclick="resetPrompt()" style="display: none;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
                            <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" />
                        </svg>
                        <span>Återställ</span>
                    </button>
                    <!-- Copy Full Prompt -->
                    <button class="prompt-header-btn prompt-header-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
                            <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                            <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
                        </svg>
                        <span>Kopiera hela prompten</span>
                    </button>
                </div>
            </div>
        

        <!-- Prompt Content -->
        <div class="prompt-box prompt-gated-wrapper">
            <!-- Gated: Blurred content -->
            <div class="prompt-gated-content">
                <div class="prompt-header-visible">MÅL</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PERSONA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">BEGRÄNSNINGAR</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">PROCESS</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div><div class="locked-line" style="width: 95%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">Vad detta INTE är (scope-gränser)</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">INDATA</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">OUTPUTSPECIFIKATION</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">1) {Security Architecture}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">2) {Cookie Implementation}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div><div class="locked-line" style="width: 80%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">3) {Token Refresh System}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">4) {Validation Middleware}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">5) {Logout Security}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">6) {Frontend Integration}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">7) {Security Monitoring}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible subheader">8) {Implementation Checklist}</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div></div></div><div class="locked-section-icon">🔒</div></div><div class="prompt-header-visible">KVALITETSKONTROLLER</div><div class="locked-section"><div class="locked-section-bg"><div class="locked-section-lines"><div class="locked-line" style="width: 85%;"></div><div class="locked-line" style="width: 78%;"></div><div class="locked-line" style="width: 92%;"></div><div class="locked-line" style="width: 75%;"></div><div class="locked-line" style="width: 88%;"></div><div class="locked-line" style="width: 72%;"></div></div></div><div class="locked-section-icon">🔒</div></div>            </div>
            <!-- Unlocked: Full content (hidden by default) -->
            <div class="prompt-content-full" id="premium-prompt-content" style="display: none;">
                ## MÅL
Skapa en produktionsredo JWT-autentiseringsdesign som tar bort all tokenlagring som är åtkomlig i webbläsaren och stänger de vanliga angreppsvägarna (XSS-tokeninsamling, token-replay efter stöld, sessionskapning). Leveransen ska förklara exakt hur du implementerar HTTP-only cookie-auth, tyst refresh, validering på serversidan och säker utloggning — komplett med kodmönster och vägledning för operativ övervakning.

## PERSONA
Agera som en före detta säkerhetsrådgivare med fokus på verkliga autentiseringshaverier. Du tänker först i angriparens arbetsflöden, föredrar försvar som är transparenta för legitima användare och översätter säkerhetsintention till implementerbara ingenjörssteg för moderna webbstackar.

## BEGRÄNSNINGAR
- Prioritera arkitekturer där tokens aldrig läses eller lagras av klientens JavaScript.
- Använd HTTP-only cookies som primär transport för sessionsuppgifter.
- Inkludera CSRF-försvar som är lämpliga för cookie-baserad auth.
- Ge specifika konfigurationsvärden/mönster (cookie-flaggor, headers, rotationsregler, middleware-struktur), inte vaga “best practices”.
- Håll frontenden fri från tokenlogik; servern äger utfärdande, refresh och invalidering.
- Inkludera explicit hantering för utgång, manipulering, återanvändning, klockdrift och utloggningsrace.
- Lägg till praktiska loggnings-/övervakningssignaler för att upptäcka auth-missbruk.
- Om indata saknas eller är oklara, ställ riktade frågor och ange säkra standardantaganden som sådana.

## PROCESS
1. **Föranalyssteg (obligatoriskt):** Återge kort scenariot med egna ord och lista eventuella antaganden du kommer att använda.
2. Föreslå det end-to-end-auth-flödet (inloggning → autentiserade förfrågningar → refresh → utloggning).
3. Definiera tokenmodell: access vs refresh token-ansvar, livslängder, rotation och strategi för invalidering på serversidan.
4. Specificera cookie-inställningar och security headers för den givna stacken/miljön.
5. Ge middleware-mönster för request-autentisering och koppling av user context.
6. Beskriv felbeteende (vad klienten ser vs vad som loggas) för varje feltyp.
7. Lägg till övervakningsvägledning (händelser, mätvärden, larm) anpassad för tokenmissbruk.
8. Avsluta med en implementationschecklista som ingenjörer kan följa och verifiera.

### Vad detta INTE är (scope-gränser)
- Inte en generell “JWT-översikt” eller en kryptografi-primer.
- Inte en rekommendation att lagra tokens i localStorage/sessionStorage.
- Inte en ersättning för ett fullständigt penetrationstest eller juridisk efterlevnadsgranskning.
- Inte en one-size-fits-all SSO/OAuth-omdesign om det inte uttryckligen efterfrågas.

## INDATA
- **Applikationstyp:** [APPLIKATIONSTYP]
- **Nuvarande teknikstack (ramverk, runtime, hosting, reverse proxy):** [NUVARANDE_TEKNIKSTACK]
- **Säkerhets-/efterlevnadskrav (t.ex. SOC2, HIPAA, PCI, GDPR):** [SAKERHETS_ELLER_EFTERLEVNADSKRAV]
- **Önskad sessionslängd (idle + absolut):** [ONSKAD_SESSIONSLANGD]
- **Befintliga autentiseringsproblem/sårbarheter som observerats:** [BEFINTLIGA_AUTENTISERINGSPROBLEM]

## OUTPUTSPECIFIKATION
Använd följande avsnitt och inkludera implementeringsredo detaljnivå i varje:

### 1) {Security Architecture}
- Sammanfattning av hotmodell: {Primary Threats} och {Excluded Threats}
- Rekommenderad JWT-layout: {Token Types}, {Claims}, {Signing Algorithm}, {Key Management}
- Sessionsstrategi: {Access Lifetime}, {Refresh Lifetime}, {Rotation Policy}, {Revocation Approach}
- Flödesdiagram för requests (text): {Flow Steps}

### 2) {Cookie Implementation}
- Cookie(s) som krävs: {Cookie Names} och syften
- Exakta cookie-attribut med motivering:
  - {HttpOnly}, {Secure}, {SameSite}, {Domain}, {Path}, {MaxAge}
- Nödvändiga headers &amp; plattformskontroller:
  - {CSP Guidance}, {HSTS}, {X-Content-Type-Options}, {Referrer-Policy}
- CSRF-skydd för cookie-auth:
  - {CSRF Pattern} (t.ex. double-submit eller synchronizer token) och när det ska upprätthållas

### 3) {Token Refresh System}
- Design för refresh-endpoint: {Route}, {Expected Cookies}, {Response Behavior}
- Rotation &amp; detektering av återanvändning: {How You Detect Replay}, {What You Invalidate}
- Hantering av samtidighet: {Multiple Tabs Strategy} och {Race Resolution}
- Exempel på server-pseudo/kod: {Refresh Handler Example}

### 4) {Validation Middleware}
- Middleware-ansvar: {Verification Steps} (signatur, exp/nbf, issuer/audience, jti, användarstatus)
- Koppling av user context: {User Context Shape}
- Auktoriseringshooks: {RBAC/ABAC Extension Points}
- Exempel på middleware pseudo/kod: {Middleware Example}

### 5) {Logout Security}
- Utloggningstyper: {Client-Initiated Logout} och {Server-Forced Logout}
- Invalideringsdesign: {Blacklist/Allowlist/Session Store} och retention-fönster
- Strategi för cookie-rensning: {Clear Cookie Rules} (path/domain-justering)
- Exempel på endpoint pseudo/kod: {Logout Handler Example}

### 6) {Frontend Integration}
- Regler för frontend-requests: {Fetch/XHR Settings} (credentials-läge, CORS-interaktion)
- Angreppssätt för UI-auth state: {Session Check Endpoint} och cache-vägledning
- No-token-garanti: ange uttryckligen vad frontenden aldrig får göra

### 7) {Security Monitoring}
- Feltaxonomi: {Client-Facing Errors} vs {Server Logs}
- Logghändelser att fånga: {Auth Event List} (misslyckad verifiering, refresh-återanvändning, onormala IP/UA-skiften)
- Mätvärden &amp; larm: {Alert Conditions} och {Suggested Thresholds}
- Incident response-noteringar: {Triage Steps} vid misstänkt tokenstöld

### 8) {Implementation Checklist}
Tillhandahåll en steg-för-steg-lista där varje steg innehåller:
- {Step}
- {How To Implement}
- {How To Verify}
- {Failure Modes To Test}

## KVALITETSKONTROLLER
På slutet, inkludera en verifieringslista som bekräftar:
- Tokens är aldrig åtkomliga för klientens JavaScript (ingen localStorage/sessionStorage, inga JS-läsbara cookies).
- Cookies använder lämpliga flaggor och CSRF-skydd upprätthålls där det behövs.
- Refresh-rotation + detektering av återanvändning är definierad och implementerbar på serversidan.
- Middleware validerar alla kritiska claims och hanterar klockdrift/manipulering säkert.
- Utloggning invaliderar sessioner pålitligt och rensar cookies utan path/domain-mismatchar.            </div>
        </div>


    </div>

    <!-- CTA Row - Full width buttons -->
    <div class="prompt-cta-row">
        <button class="prompt-cta-btn prompt-cta-copy flowpast-copy-prompt-btn" onclick="handlePromptCopy()">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
                <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z" />
                <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z" />
            </svg>
            <span class="cta-copy-text">Kopiera hela prompten</span>
        </button>
    </div>
</div>

<style>
    /* Gated prompt states */
    .prompt-gated-wrapper {
        position: relative;
    }

    /* When unlocked - show full content, hide gated */
    body.flowpast-unlocked .prompt-gated-wrapper .prompt-gated-content {
        display: none;
    }

    body.flowpast-unlocked .prompt-gated-wrapper .prompt-content-full {
        display: block !important;
    }

    /* Show/hide elements based on unlock state */
    body.flowpast-unlocked .btn-when-unlocked {
        display: inline-flex !important;
    }

    .prompt-viewer-wrapper {
        scroll-margin-top: 250px;
    }

    /* ========================================
   PROMPT VIEWER - MAIN WRAPPER
   ======================================== */
    .prompt-viewer-wrapper {
        margin: 30px 0;
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    /* ========================================
   PROMPT BOX CONTAINER
   ======================================== */
    .prompt-comparison-row {
        border-radius: 12px;
        overflow: hidden;
        border: 1px solid #e0e0e0;
        background: #fff;
    }

    /* ========================================
   HEADER WITH BUTTONS
   ======================================== */
    .prompt-row-header {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 14px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
        flex-wrap: wrap;
    }

    .prompt-row-icon {
        font-size: 20px;
    }

    .prompt-row-title {
        font-weight: 600;
        font-size: 22px;
        color: #fff !important;
        text-decoration: underline
    }

    .prompt-header-buttons {
        margin-left: auto;
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
    }

    /* Header buttons */
    .prompt-header-btn {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        padding: 10px 20px;
        border-radius: 6px;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-header-copy {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-header-copy:hover {
        background: #2a2a2a;
    }

    .prompt-header-copy.copied {
        background: #2e7d32;
    }

    .prompt-header-copy-green {
        background: #04AA6D !important;
        color: #fff !important;
    }

    .prompt-header-copy-green span {
        color: #fff !important;
    }

    .prompt-header-copy-green:hover {
        background: #039860 !important;
    }

    .prompt-header-copy-green.copied {
        background: #2e7d32 !important;
    }

    .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-header-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-1px);
    }

    /* ========================================
   PROMPT CONTENT - FULL (NO SCROLL)
   ======================================== */
    .prompt-box {
        background: #ffffff;
    }

    .prompt-content-full {
        padding: 24px;
        margin: 0;
        color: #202124;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.7;
        white-space: pre-wrap;
        word-wrap: break-word;
        /* No scroll - show full content */
        max-height: none;
        overflow: visible;
    }

    /* Highlighted variable in prompt */
    .prompt-variable {
        background: #fff3cd;
        color: #1967d2;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #ffc107;
    }

    .prompt-variable-filled {
        background: #d4edda;
        color: #155724;
        font-weight: 700;
        padding: 2px 4px;
        border-radius: 3px;
        border: 1px solid #28a745;
    }

    /* ========================================
   GATED CONTENT (NO ACCESS)
   ======================================== */
    .prompt-gated-content {
        padding: 24px;
        background: #ffffff;
        font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
        font-size: 13px;
        line-height: 1.8;
        max-height: none;
        overflow: visible;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        cursor: default;
    }

    /* ## headers - larger, black */
    .prompt-header-visible {
        color: #202124;
        font-weight: 600;
        margin: 5px 0 0px 0;
        font-size: 20px;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        text-decoration: underline;
        text-underline-offset: 4px;
    }

    /* ### headers - smaller, black */
    .prompt-header-visible.subheader {
        color: #202124;
        font-weight: 600;
        margin: 5px 0;
        font-size: 18px;
    }

    .prompt-header-visible:first-child {
        margin-top: 0;
    }

    /* ========================================
   LOCKED SECTION BLOCK
   ======================================== */
    .locked-section {
        position: relative;
        margin: 4px 0 8px 0;
        border-radius: 6px;
        overflow: hidden;
        background: linear-gradient(110deg, #e2e8f0 8%, #f1f5f9 18%, #e2e8f0 33%);
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }

    .locked-section-bg {
        position: relative;
    }

    .locked-section-lines {
        padding: 8px 12px;
        position: relative;
    }

    .locked-line {
        height: 6px;
        background: rgba(255, 255, 255, 0.6);
        border-radius: 3px;
        margin-bottom: 4px;
        margin-left: 12px;
    }

    .locked-line:last-child {
        margin-bottom: 0;
    }

    .locked-section-icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 10;
        font-size: 24px;
        filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1));
    }

    /* Subheader locked sections - slightly indented */
    /*  .prompt-header-visible.subheader+.locked-section {
        margin-left: 16px;
    } */

    /* ========================================
   COMPATIBILITY BADGES
   ======================================== */
    .prompt-compatibility {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 8px;
        padding: 12px 20px;
        background: #f8f9fa;
        border-top: 1px solid #e0e0e0;
    }

    .compat-label {
        font-size: 13px;
        color: #5f6368;
        font-weight: 500;
    }

    .compat-badge {
        padding: 4px 10px;
        background: #e8f0fe;
        color: #1967d2;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 500;
    }

    /* ========================================
   CTA ROW - FULL WIDTH BUTTONS
   ======================================== */
    .prompt-cta-row {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;
    }

    .prompt-cta-btn {
        flex: 1;
        min-width: 200px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        padding: 16px 24px;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
        text-decoration: none;
        border: none;
    }

    .prompt-cta-copy {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy span {
        background: #3a3a3a;
        color: #fff !important;
    }


    .prompt-cta-copy:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }


    .prompt-cta-copy.copied {
        background: #2e7d32;
    }

    .prompt-cta-reset {
        background: #3a3a3a;
        color: #fff;
    }

    .prompt-cta-reset:hover {
        background: #2a2a2a;
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .prompt-cta-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
    }

    .prompt-cta-access:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    /* ========================================
    CUSTOMIZE YOUR PROMPT SECTION
    ======================================== */
    .prompt-customize-section {
        padding: 24px;
        border-bottom: 1px solid #e0e0e0;
        background: #fafbfc;
    }

    .customize-title {
        margin: 0 0 8px 0;
        font-size: 18px;
        font-weight: 700;
        color: #202124;
    }

    .customize-subtitle {
        margin: 0 0 20px 0;
        font-size: 14px;
        color: #5f6368;
    }

    .customize-table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 20px;
    }

    .customize-table th {
        text-align: left;
        padding: 12px;
        background: #f1f3f4;
        border: 1px solid #e0e0e0;
        font-size: 13px;
        font-weight: 600;
        color: #202124;
    }

    .customize-table td {
        padding: 12px;
        border: 1px solid #e0e0e0;
        vertical-align: top;
    }

    .customize-table .var-name {
        width: 25%;
        background: #f8f9fa;
    }

    .customize-table .var-name code {
        background: #fff3cd;
        color: #1967d2;
        border: 1px solid #ffc107;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        word-break: break-all;
        font-weight: 600;
    }

    .customize-table .var-desc {
        width: 35%;
        font-size: 13px;
        color: #5f6368;
        line-height: 1.5;
    }

    .customize-table .var-example {
        margin-top: 8px;
        padding: 8px 10px;
        background: #f8f9fa;
        border-left: 3px solid #dadce0;
        font-size: 12px;
        color: #5f6368;
        font-style: italic;
        border-radius: 0 4px 4px 0;
    }

    .customize-table .var-input {
        width: 40%;
    }

    .customize-input {
        width: 100%;
        padding: 10px 12px;
        border: 1px solid #dadce0;
        border-radius: 6px;
        font-size: 13px;
        font-family: inherit;
        resize: vertical;
        transition: border-color 0.2s, box-shadow 0.2s;
    }

    .customize-input:focus {
        outline: none;
        border-color: rgb(5, 152, 98);
        box-shadow: 0 0 0 3px rgba(5, 152, 98, 0.1);
    }

    .customize-input::placeholder {
        color: #9aa0a6;
        font-style: italic;
    }

    .copy-customized-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        width: 100%;
        padding: 16px 24px;
        background: rgb(5, 152, 98);
        color: #fff !important;
        border: none;
        border-radius: 8px;
        font-size: 16px;
        font-weight: 600;
        cursor: pointer;
        transition: all 0.2s;
    }

    .copy-customized-btn span {
        color: #fff !important
    }

    .copy-customized-text span {
        color: #fff !important
    }

    .copy-customized-btn:hover {
        background: rgb(4, 130, 83);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(5, 152, 98, 0.3);
    }

    .copy-customized-btn.copied {
        background: #2e7d32;
    }

    /* ========================================
    FULL PROMPT CODE HEADER
    ======================================== */
    .prompt-code-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 10px 20px;
        color: #fff !important;
        background: #141414;
        border-bottom: 1px solid #e0e0e0;
    }

    .prompt-code-title {
        font-size: 22px;
        font-weight: 600;
        text-decoration: underline;
        color: #fff !important;

    }

    .prompt-code-buttons {
        display: flex;
        gap: 8px;
    }

    .prompt-code-buttons .prompt-header-btn {
        padding: 8px 14px;
        font-size: 13px;
        background: #ffffff;
        color: #202124;
        border: 1px solid #dadce0;
    }

    .prompt-code-buttons .prompt-header-access {
        background: rgb(5, 152, 98);
        color: #fff !important;
        border-color: rgb(5, 152, 98);
    }

    .prompt-code-buttons .prompt-header-btn.prompt-header-access:hover {
        background: rgb(4, 130, 83) !important;
        border-color: rgb(4, 130, 83);
        color: #fff !important;
    }

    .prompt-code-buttons .prompt-header-btn:hover {
        background: #f1f3f4;
    }

    .prompt-code-buttons .prompt-header-copy.copied {
        background: #d4edda;
        color: #155724;
        border-color: #28a745;
    }

    .prompt-header-reset {
        background: #ffffff;
        color: #202124;
    }

    /* ========================================
   RESPONSIVE
   ======================================== */
    @media (max-width: 768px) {
        .prompt-row-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 12px;
        }

        .prompt-header-buttons {
            margin-left: 0;
            width: 100%;
        }

        .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }

        .prompt-cta-row {
            flex-direction: column;
        }

        .prompt-cta-btn {
            width: 100%;
        }

        /* Customize table responsive */
        .customize-table,
        .customize-table thead,
        .customize-table tbody,
        .customize-table tr,
        .customize-table th,
        .customize-table td {
            display: block;
        }

        .customize-table thead {
            display: none;
        }

        .customize-table tr {
            margin-bottom: 16px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
        }

        .customize-table td {
            width: 100% !important;
            border: none;
            border-bottom: 1px solid #e0e0e0;
        }

        .customize-table td:last-child {
            border-bottom: none;
        }

        .customize-table .var-name {
            background: #f1f3f4;
            font-weight: 600;
        }

        .prompt-code-header {
            flex-direction: column;
            gap: 12px;
            align-items: flex-start;
        }

        .prompt-code-buttons {
            width: 100%;
        }

        .prompt-code-buttons .prompt-header-btn {
            flex: 1;
            justify-content: center;
        }
    }
</style>

<script>
    function handlePromptCopy() {
        // Check if unlocked via cookie
        if (typeof window.flowpastIsUnlocked === 'function' && !window.flowpastIsUnlocked()) {
            // Show email popup
            if (typeof window.flowpastShowEmailPopup === 'function') {
                window.flowpastShowEmailPopup('prompt');
            }
            return;
        }

        // Copy the customized prompt (with filled variables)
        const customizedPrompt = getCustomizedPrompt();
        const copyButtons = document.querySelectorAll('.prompt-header-copy, .prompt-header-copy-green, .prompt-cta-copy, .copy-customized-btn');

        navigator.clipboard.writeText(customizedPrompt).then(() => {
            copyButtons.forEach(btn => {
                btn.classList.add('copied');
                const textSpan = btn.querySelector('span');
                if (textSpan) textSpan.textContent = 'Kopierad!';
            });

            setTimeout(() => {
                copyButtons.forEach(btn => {
                    btn.classList.remove('copied');
                    const textSpan = btn.querySelector('span');
                    if (textSpan) textSpan.textContent = 'Kopiera hela prompten';
                });
            }, 2000);
        }).catch(err => {
            console.error('Failed to copy:', err);
        });
    }

    // Store original prompt for customization
    const originalPrompt = "## M\u00c5L\r\nSkapa en produktionsredo JWT-autentiseringsdesign som tar bort all tokenlagring som \u00e4r \u00e5tkomlig i webbl\u00e4saren och st\u00e4nger de vanliga angreppsv\u00e4garna (XSS-tokeninsamling, token-replay efter st\u00f6ld, sessionskapning). Leveransen ska f\u00f6rklara exakt hur du implementerar HTTP-only cookie-auth, tyst refresh, validering p\u00e5 serversidan och s\u00e4ker utloggning \u2014 komplett med kodm\u00f6nster och v\u00e4gledning f\u00f6r operativ \u00f6vervakning.\r\n\r\n## PERSONA\r\nAgera som en f\u00f6re detta s\u00e4kerhetsr\u00e5dgivare med fokus p\u00e5 verkliga autentiseringshaverier. Du t\u00e4nker f\u00f6rst i angriparens arbetsfl\u00f6den, f\u00f6redrar f\u00f6rsvar som \u00e4r transparenta f\u00f6r legitima anv\u00e4ndare och \u00f6vers\u00e4tter s\u00e4kerhetsintention till implementerbara ingenj\u00f6rssteg f\u00f6r moderna webbstackar.\r\n\r\n## BEGR\u00c4NSNINGAR\r\n- Prioritera arkitekturer d\u00e4r tokens aldrig l\u00e4ses eller lagras av klientens JavaScript.\r\n- Anv\u00e4nd HTTP-only cookies som prim\u00e4r transport f\u00f6r sessionsuppgifter.\r\n- Inkludera CSRF-f\u00f6rsvar som \u00e4r l\u00e4mpliga f\u00f6r cookie-baserad auth.\r\n- Ge specifika konfigurationsv\u00e4rden\/m\u00f6nster (cookie-flaggor, headers, rotationsregler, middleware-struktur), inte vaga \u201cbest practices\u201d.\r\n- H\u00e5ll frontenden fri fr\u00e5n tokenlogik; servern \u00e4ger utf\u00e4rdande, refresh och invalidering.\r\n- Inkludera explicit hantering f\u00f6r utg\u00e5ng, manipulering, \u00e5teranv\u00e4ndning, klockdrift och utloggningsrace.\r\n- L\u00e4gg till praktiska loggnings-\/\u00f6vervakningssignaler f\u00f6r att uppt\u00e4cka auth-missbruk.\r\n- Om indata saknas eller \u00e4r oklara, st\u00e4ll riktade fr\u00e5gor och ange s\u00e4kra standardantaganden som s\u00e5dana.\r\n\r\n## PROCESS\r\n1. **F\u00f6ranalyssteg (obligatoriskt):** \u00c5terge kort scenariot med egna ord och lista eventuella antaganden du kommer att anv\u00e4nda.\r\n2. F\u00f6resl\u00e5 det end-to-end-auth-fl\u00f6det (inloggning \u2192 autentiserade f\u00f6rfr\u00e5gningar \u2192 refresh \u2192 utloggning).\r\n3. Definiera tokenmodell: access vs refresh token-ansvar, livsl\u00e4ngder, rotation och strategi f\u00f6r invalidering p\u00e5 serversidan.\r\n4. Specificera cookie-inst\u00e4llningar och security headers f\u00f6r den givna stacken\/milj\u00f6n.\r\n5. Ge middleware-m\u00f6nster f\u00f6r request-autentisering och koppling av user context.\r\n6. Beskriv felbeteende (vad klienten ser vs vad som loggas) f\u00f6r varje feltyp.\r\n7. L\u00e4gg till \u00f6vervakningsv\u00e4gledning (h\u00e4ndelser, m\u00e4tv\u00e4rden, larm) anpassad f\u00f6r tokenmissbruk.\r\n8. Avsluta med en implementationschecklista som ingenj\u00f6rer kan f\u00f6lja och verifiera.\r\n\r\n### Vad detta INTE \u00e4r (scope-gr\u00e4nser)\r\n- Inte en generell \u201cJWT-\u00f6versikt\u201d eller en kryptografi-primer.\r\n- Inte en rekommendation att lagra tokens i localStorage\/sessionStorage.\r\n- Inte en ers\u00e4ttning f\u00f6r ett fullst\u00e4ndigt penetrationstest eller juridisk efterlevnadsgranskning.\r\n- Inte en one-size-fits-all SSO\/OAuth-omdesign om det inte uttryckligen efterfr\u00e5gas.\r\n\r\n## INDATA\r\n- **Applikationstyp:** [APPLIKATIONSTYP]\r\n- **Nuvarande teknikstack (ramverk, runtime, hosting, reverse proxy):** [NUVARANDE_TEKNIKSTACK]\r\n- **S\u00e4kerhets-\/efterlevnadskrav (t.ex. SOC2, HIPAA, PCI, GDPR):** [SAKERHETS_ELLER_EFTERLEVNADSKRAV]\r\n- **\u00d6nskad sessionsl\u00e4ngd (idle + absolut):** [ONSKAD_SESSIONSLANGD]\r\n- **Befintliga autentiseringsproblem\/s\u00e5rbarheter som observerats:** [BEFINTLIGA_AUTENTISERINGSPROBLEM]\r\n\r\n## OUTPUTSPECIFIKATION\r\nAnv\u00e4nd f\u00f6ljande avsnitt och inkludera implementeringsredo detaljniv\u00e5 i varje:\r\n\r\n### 1) {Security Architecture}\r\n- Sammanfattning av hotmodell: {Primary Threats} och {Excluded Threats}\r\n- Rekommenderad JWT-layout: {Token Types}, {Claims}, {Signing Algorithm}, {Key Management}\r\n- Sessionsstrategi: {Access Lifetime}, {Refresh Lifetime}, {Rotation Policy}, {Revocation Approach}\r\n- Fl\u00f6desdiagram f\u00f6r requests (text): {Flow Steps}\r\n\r\n### 2) {Cookie Implementation}\r\n- Cookie(s) som kr\u00e4vs: {Cookie Names} och syften\r\n- Exakta cookie-attribut med motivering:\r\n  - {HttpOnly}, {Secure}, {SameSite}, {Domain}, {Path}, {MaxAge}\r\n- N\u00f6dv\u00e4ndiga headers & plattformskontroller:\r\n  - {CSP Guidance}, {HSTS}, {X-Content-Type-Options}, {Referrer-Policy}\r\n- CSRF-skydd f\u00f6r cookie-auth:\r\n  - {CSRF Pattern} (t.ex. double-submit eller synchronizer token) och n\u00e4r det ska uppr\u00e4tth\u00e5llas\r\n\r\n### 3) {Token Refresh System}\r\n- Design f\u00f6r refresh-endpoint: {Route}, {Expected Cookies}, {Response Behavior}\r\n- Rotation & detektering av \u00e5teranv\u00e4ndning: {How You Detect Replay}, {What You Invalidate}\r\n- Hantering av samtidighet: {Multiple Tabs Strategy} och {Race Resolution}\r\n- Exempel p\u00e5 server-pseudo\/kod: {Refresh Handler Example}\r\n\r\n### 4) {Validation Middleware}\r\n- Middleware-ansvar: {Verification Steps} (signatur, exp\/nbf, issuer\/audience, jti, anv\u00e4ndarstatus)\r\n- Koppling av user context: {User Context Shape}\r\n- Auktoriseringshooks: {RBAC\/ABAC Extension Points}\r\n- Exempel p\u00e5 middleware pseudo\/kod: {Middleware Example}\r\n\r\n### 5) {Logout Security}\r\n- Utloggningstyper: {Client-Initiated Logout} och {Server-Forced Logout}\r\n- Invalideringsdesign: {Blacklist\/Allowlist\/Session Store} och retention-f\u00f6nster\r\n- Strategi f\u00f6r cookie-rensning: {Clear Cookie Rules} (path\/domain-justering)\r\n- Exempel p\u00e5 endpoint pseudo\/kod: {Logout Handler Example}\r\n\r\n### 6) {Frontend Integration}\r\n- Regler f\u00f6r frontend-requests: {Fetch\/XHR Settings} (credentials-l\u00e4ge, CORS-interaktion)\r\n- Angreppss\u00e4tt f\u00f6r UI-auth state: {Session Check Endpoint} och cache-v\u00e4gledning\r\n- No-token-garanti: ange uttryckligen vad frontenden aldrig f\u00e5r g\u00f6ra\r\n\r\n### 7) {Security Monitoring}\r\n- Feltaxonomi: {Client-Facing Errors} vs {Server Logs}\r\n- Loggh\u00e4ndelser att f\u00e5nga: {Auth Event List} (misslyckad verifiering, refresh-\u00e5teranv\u00e4ndning, onormala IP\/UA-skiften)\r\n- M\u00e4tv\u00e4rden & larm: {Alert Conditions} och {Suggested Thresholds}\r\n- Incident response-noteringar: {Triage Steps} vid misst\u00e4nkt tokenst\u00f6ld\r\n\r\n### 8) {Implementation Checklist}\r\nTillhandah\u00e5ll en steg-f\u00f6r-steg-lista d\u00e4r varje steg inneh\u00e5ller:\r\n- {Step}\r\n- {How To Implement}\r\n- {How To Verify}\r\n- {Failure Modes To Test}\r\n\r\n## KVALITETSKONTROLLER\r\nP\u00e5 slutet, inkludera en verifieringslista som bekr\u00e4ftar:\r\n- Tokens \u00e4r aldrig \u00e5tkomliga f\u00f6r klientens JavaScript (ingen localStorage\/sessionStorage, inga JS-l\u00e4sbara cookies).\r\n- Cookies anv\u00e4nder l\u00e4mpliga flaggor och CSRF-skydd uppr\u00e4tth\u00e5lls d\u00e4r det beh\u00f6vs.\r\n- Refresh-rotation + detektering av \u00e5teranv\u00e4ndning \u00e4r definierad och implementerbar p\u00e5 serversidan.\r\n- Middleware validerar alla kritiska claims och hanterar klockdrift\/manipulering s\u00e4kert.\r\n- Utloggning invaliderar sessioner p\u00e5litligt och rensar cookies utan path\/domain-mismatchar.";
    const variables = ["[APPLIKATIONSTYP]","[NUVARANDE_TEKNIKSTACK]","[SAKERHETS_ELLER_EFTERLEVNADSKRAV]","[ONSKAD_SESSIONSLANGD]","[BEFINTLIGA_AUTENTISERINGSPROBLEM]"];
    // Initial render with highlighted variables
    document.addEventListener('DOMContentLoaded', function() {
        renderPromptWithHighlights();
    });

    // Live update prompt as user types
    document.querySelectorAll('.customize-input').forEach(input => {
        input.addEventListener('input', renderPromptWithHighlights);
    });

    function renderPromptWithHighlights() {
        const promptContent = document.getElementById('premium-prompt-content');
        if (!promptContent) return;

        let updatedPrompt = originalPrompt;
        let filledVariables = {};

        // Collect filled values
        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                filledVariables[placeholder] = value;
            }
        });

        // Replace filled variables and highlight remaining
        let htmlContent = escapeHtml(updatedPrompt);

        variables.forEach(placeholder => {
            const escapedPlaceholder = escapeHtml(placeholder);
            const regex = new RegExp(escapeRegex(escapedPlaceholder), 'g');

            if (filledVariables[placeholder]) {
                // Show filled value with green highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable-filled">' + escapeHtml(filledVariables[placeholder]) + '</span>'
                );
            } else {
                // Show original placeholder with yellow highlight
                htmlContent = htmlContent.replace(regex,
                    '<span class="prompt-variable">' + escapedPlaceholder + '</span>'
                );
            }
        });

        promptContent.innerHTML = htmlContent;
    }

    function escapeRegex(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    function escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    function resetPrompt() {
        // Clear all input fields
        document.querySelectorAll('.customize-input').forEach(input => {
            input.value = '';
        });

        // Re-render with original placeholders highlighted
        renderPromptWithHighlights();

        // Visual feedback
        const resetBtns = document.querySelectorAll('.prompt-header-reset, .prompt-cta-reset');
        resetBtns.forEach(btn => {
            const originalText = btn.querySelector('span').textContent;
            btn.querySelector('span').textContent = 'Återställd!';
            setTimeout(() => {
                btn.querySelector('span').textContent = originalText;
            }, 1000);
        });
    }


    function getCustomizedPrompt() {
        let updatedPrompt = originalPrompt;

        document.querySelectorAll('.customize-input').forEach(input => {
            const placeholder = input.dataset.placeholder;
            const value = input.value.trim();

            if (value) {
                const regex = new RegExp(escapeRegex(placeholder), 'g');
                updatedPrompt = updatedPrompt.replace(regex, value);
            }
        });

        return updatedPrompt;
    }
</script>

</div>

<div class="pro-tips-section">

<h2 class="wp-block-heading">Proffstips för bättre resultat med AI-prompten</h2>



<ul class="wp-block-list">

<li><strong>Ange klienttyp och API-topologi.</strong> Berätta för prompten om du har en SPA som anropar en separat API-domän, en monolit eller en BFF (backend-for-frontend). Lägg till en rad som: ”Frontend: Next.js på app.example.com, API: api.example.com bakom ALB” så att cookie-domän/path och CORS/CSRF-detaljer blir korrekta.</li>


<li><strong>Be om en konkret cookie-matris.</strong> Efter första svaret, följ upp med: ”Ge mig de exakta cookie-namnen, flaggor, domän/path-scope och max-age för access-, refresh- och CSRF-cookies.” Det tvingar fram specifika värden i stället för allmänheter och gör implementationsgranskningar enklare.</li>


<li><strong>Tvinga återanvändningsdetektering och hantering av utloggningsraces.</strong> Många designer hoppar över detta, och ärligt talat är det här verkliga incidenter bor. Prompt: ”Inkludera refresh token-rotation med återanvändningsdetektering, och förklara vad som händer när en stulen refresh används efter att den legitima klienten redan har roterat.”</li>


<li><strong>Iterera på felbeteende, inte bara säkerhet.</strong> När du fått det säkra flödet, be: ”Skriv nu om de klient-synliga felen och retry-reglerna för att undvika oändliga refresh-loopar; inkludera exempel för svaren 401 vs 403 vs 419 (CSRF).” Målet är en säker och lugn UX.</li>


<li><strong>Gör det operativt genom att be om loggscheman.</strong> Lägg till: ”Ge ett JSON-loggexempel för inloggning, refresh, refresh-nekad (replay) och utloggning, inklusive fält som user_id, session_id, token_family_id, ip_hash, user_agent_hash och reason codes.” Det gör en design till något ditt SIEM kan använda.</li>

</ul>

</div>

<div class="related-prompts-section">

<h2 class="wp-block-heading">Relaterade prompter</h2>



<p>När ditt auth-flöde är designat behöver du vanligtvis check-in-system och onboarding-workflows för att rulla ut det säkert över team och kunder.</p>



<p>Om du också behöver ett strukturerat sätt att hålla användare engagerade efter lansering (och fånga problem tidigt), hjälper <a href="https://nodenordic.se/prompts/bygg-ett-system-for-kundcheck-ins-med-ai-prompt">Bygg ett kund-check-in-system med den här AI-prompten</a> dig att designa en repeterbar kadens, frågor och uppföljningar. Den passar bra ihop med säkerhetsförändringar eftersom cookie/auth-migreringar ofta skapar subtil friktion, och proaktiva check-ins fångar det innan churn gör det.</p>



<p>För team som gör interna utrullningar kan <a href="https://nodenordic.se/prompts/skapa-en-checklista-for-forsta-onboardingveckan">Bygg en onboarding-checklista för första veckan med den här AI-prompten</a> omvandla dina nya auth-krav till en tydlig första-veckan-plan för ingenjörer och support. Använd den när du standardiserar cookie-flaggor, CSRF-förväntningar eller loggfält över repos och vill ha färre ”men jag visste inte”-överraskningar.</p>



<p>Säkerhetsarbete kan vara intensivt, och utbrändhet gör misstag mer sannolika. När du vill upptäcka process-stress medan du driver viktiga förändringar ger <a href="https://nodenordic.se/prompts/diagnos-och-atgardsplan-for-arbetsplatsvalmaende">AI-prompten för diagnos av välmående på arbetsplatsen och handlingsplan</a> dig ett praktiskt sätt att identifiera teamflaskhalsar, on-call-smärta och workflow-glapp som ofta blir synliga under auth- eller infrastrukturmigreringar.</p>


<br>


<p>Snabbreferens:</p>



<ul class="wp-block-list">

<li><a href="https://nodenordic.se/prompts/bygg-ett-system-for-kundcheck-ins-med-ai-prompt">Bygg ett kund-check-in-system med den här AI-prompten</a>: Skapa kadens, frågor och uppföljningsworkflow.</li>


<li><a href="https://nodenordic.se/prompts/skapa-en-checklista-for-forsta-onboardingveckan">Bygg en onboarding-checklista för första veckan med den här AI-prompten</a>: Gör förändringar till tydliga uppgifter för första veckan.</li>

<li><a href="https://nodenordic.se/prompts/diagnos-och-atgardsplan-for-arbetsplatsvalmaende">AI-prompten för diagnos av välmående på arbetsplatsen och handlingsplan</a>: Identifiera flaskhalsar och minska utrullningsstress.</li>


<li><a href="https://nodenordic.se/prompts/skapa-en-aterkommande-check-in-mall-for-livet">AI-prompten för att bygga ett återkommande livs-check-in-worksheet</a>: Bygg en repeterbar struktur för självutvärdering.</li>


<li><a href="https://nodenordic.se/prompts/skapa-en-skuldfri-utgiftsavstamning-med-en-ai-prompt">Bygg en skamfri utgifts-check-in med den här AI-prompten</a>: Skapa en tydlig rutin för utgiftsgranskning.</li>

</ul>
<!-- /wp:post-content -->
</div>

<div class="faq-section">
<!-- wp:heading {"level":2} -->
<h2 class="wp-block-heading">Vanliga frågor</h2>
<!-- /wp:heading -->

<div class="faq-item">
<span class="question">Vilka roller har mest nytta av den här AI-prompten för cookie-baserad JWT-autentisering?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>Backendingenjörer</strong> använder den här för att göra ”använd HttpOnly-cookies” till ett faktiskt flöde med middleware, rotation och ogiltigförklaring på serversidan. <strong>Frontendansvariga</strong> vinner på att designen håller UI:t fritt från tokenlagring och refresh-logik, vilket minskar skör klientkod och märkliga edge cases. <strong>Säkerhetsingenjörer</strong> använder den för att hotmodellera vanliga exploit-vägar (XSS-stöld, replay, session fixation) och verifiera kontroller som CSRF-skydd och återanvändningsdetektering. <strong>Ingenjörschefer</strong> använder leveransen som referens för utrullning så att flera tjänster implementerar samma cookie-flaggor, felbeteende och loggfält.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka branscher får mest värde av den här AI-prompten för cookie-baserad JWT-autentisering?</span>
<!-- wp:paragraph -->
<p class="answer"><strong>SaaS-bolag</strong> får värde eftersom multi-tenant-appar ofta möter strikta säkerhetsenkäter, och en dokumenterad cookie-baserad JWT-approach med rotation och övervakning besvarar dem tydligt. <strong>E-handelsvarumärken</strong> gynnas när checkout- och kontoområden ofta är XSS-mål; att hålla tokens borta från JavaScript minskar skadeomfånget vid en frontend-bugg. <strong>Fintech och reglerade produkter</strong> använder den för att linjera sessionshantering med compliance-förväntningar som tydligt utloggningsbeteende, session ogiltigförklaring och revisionsvänliga loggar. <strong>Byråer som bygger webbplattformar åt kunder</strong> kan standardisera en auth-baslinje över projekt, vilket gör leverans snabbare och minskar risken med ”specialbyggd auth”.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Varför ger grundläggande AI-prompter för att designa cookie-baserade JWT-auth-flöden svaga resultat?</span>
<!-- wp:paragraph -->
<p class="answer">En typisk prompt som &#8221;<em>Skriv ett säkert JWT-auth-system med cookies</em>&#8221; misslyckas eftersom den: saknar konkreta regler för rotation och återanvändningsdetektering, ger ingen middleware-struktur för verifiering och koppling av användarkontext, ignorerar CSRF-mekanik som är obligatorisk när cookies används för autentisering, producerar vaga råd som ”sätt HttpOnly och Secure” i stället för exakta cookie/header-mönster, och missar operativ vägledning som loggfält och larmbara signaler. Du får något som låter säkert men faller isär vid replay, utloggningsraces och verkliga angriparflöden.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Kan jag anpassa den här prompten för cookie-baserad JWT-autentisering för min specifika situation?</span>
<!-- wp:paragraph -->
<p class="answer">Ja. Det snabbaste sättet är att lägga till dina miljödetaljer först (SPA vs server-renderad, en domän vs subdomäner, mobilklienter och om du har en gateway/proxy som terminerar TLS). Be sedan om stack-specifik output, till exempel: ”Anta Node/Express + Next.js bakom Cloudflare; ge cookie Domain/Path, SameSite-val, CSRF-header-mönster och middleware-pseudokod.” Om du har ovanliga begränsningar (cross-site embeds, tredjeparts-IdP, flera API:er), säg det direkt och be om ”säkra standardval” plus alternativa val med avvägningar.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vilka är de vanligaste misstagen när man använder den här prompten för cookie-baserad JWT-autentisering?</span>
<!-- wp:paragraph -->
<p class="answer">Det största misstaget är att lämna deployment-topologin vag—i stället för ”en webbapp”, säg ”SPA på app.example.com som anropar api.example.com med credentials inkluderade.” Ett annat vanligt fel är att inte be om explicit CSRF-hantering; ”vi använder cookies” räcker inte, så be om ett specifikt double-submit- eller origin/CSRF-header-mönster och när det ska enforced. Team glömmer också att kräva detaljer för refresh-rotation, vilket leder till refresh-tokens som går att återspela; be om ”rotation plus återanvändningsdetektering på serversidan” och vad som händer vid återanvändning. Slutligen hoppar många över övervakningsoutput; kräv en lista med loggfält och exempel på events så att du kan upptäcka refresh-stormar, toppar i ogiltiga signaturer och misstänkta geo-/IP-förändringar.</p>
<!-- /wp:paragraph -->
</div>

<div class="faq-item">
<span class="question">Vem bör INTE använda den här prompten för cookie-baserad JWT-autentisering?</span>
<!-- wp:paragraph -->
<p class="answer">Den här prompten passar inte optimalt för team som behöver en minimal demo med en enda endpoint och inte tänker implementera rotation, ogiltigförklaring och övervakning. Den är också ett dåligt val om din produkt strikt är icke-webbläsarbaserad (till exempel machine-to-machine-API:er) där cookies och CSRF helt enkelt inte är rätt verktyg. Och om du inte har validerat grundkrav som sessionens varaktighet, regler för enhetstillit eller utloggningsförväntningar kan designen kännas för ”tung” för tidigt. I de fallen: börja med att dokumentera krav och hotmodellens omfattning, och kom sedan tillbaka till den här prompten för versionen i produktionsklass.</p>
<!-- /wp:paragraph -->
</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Vilka roller har mest nytta av den här AI-prompten för cookie-baserad JWT-autentisering?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Backendingenjörer använder den här för att göra ”använd HttpOnly-cookies” till ett faktiskt flöde med middleware, rotation och ogiltigförklaring på serversidan. Frontendansvariga vinner på att designen håller UI:t fritt från tokenlagring och refresh-logik, vilket minskar skör klientkod och märkliga edge cases. Säkerhetsingenjörer använder den för att hotmodellera vanliga exploit-vägar (XSS-stöld, replay, session fixation) och verifiera kontroller som CSRF-skydd och återanvändningsdetektering. Ingenjörschefer använder leveransen som referens för utrullning så att flera tjänster implementerar samma cookie-flaggor, felbeteende och loggfält."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka branscher får mest värde av den här AI-prompten för cookie-baserad JWT-autentisering?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SaaS-bolag får värde eftersom multi-tenant-appar ofta möter strikta säkerhetsenkäter, och en dokumenterad cookie-baserad JWT-approach med rotation och övervakning besvarar dem tydligt. E-handelsvarumärken gynnas när checkout- och kontoområden ofta är XSS-mål; att hålla tokens borta från JavaScript minskar skadeomfånget vid en frontend-bugg. Fintech och reglerade produkter använder den för att linjera sessionshantering med compliance-förväntningar som tydligt utloggningsbeteende, session ogiltigförklaring och revisionsvänliga loggar. Byråer som bygger webbplattformar åt kunder kan standardisera en auth-baslinje över projekt, vilket gör leverans snabbare och minskar risken med ”specialbyggd auth”."
      }
    },
    {
      "@type": "Question",
      "name": "Varför ger grundläggande AI-prompter för att designa cookie-baserade JWT-auth-flöden svaga resultat?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "En typisk prompt som \"Skriv ett säkert JWT-auth-system med cookies\" misslyckas eftersom den: saknar konkreta regler för rotation och återanvändningsdetektering, ger ingen middleware-struktur för verifiering och koppling av användarkontext, ignorerar CSRF-mekanik som är obligatorisk när cookies används för autentisering, producerar vaga råd som ”sätt HttpOnly och Secure” i stället för exakta cookie/header-mönster, och missar operativ vägledning som loggfält och larmbara signaler. Du får något som låter säkert men faller isär vid replay, utloggningsraces och verkliga angriparflöden."
      }
    },
    {
      "@type": "Question",
      "name": "Kan jag anpassa den här prompten för cookie-baserad JWT-autentisering för min specifika situation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ja. Det snabbaste sättet är att lägga till dina miljödetaljer först (SPA vs server-renderad, en domän vs subdomäner, mobilklienter och om du har en gateway/proxy som terminerar TLS). Be sedan om stack-specifik output, till exempel: ”Anta Node/Express + Next.js bakom Cloudflare; ge cookie Domain/Path, SameSite-val, CSRF-header-mönster och middleware-pseudokod.” Om du har ovanliga begränsningar (cross-site embeds, tredjeparts-IdP, flera API:er), säg det direkt och be om ”säkra standardval” plus alternativa val med avvägningar."
      }
    },
    {
      "@type": "Question",
      "name": "Vilka är de vanligaste misstagen när man använder den här prompten för cookie-baserad JWT-autentisering?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Det största misstaget är att lämna deployment-topologin vag—instead of “a web app,” say “SPA on app.example.com calling api.example.com with credentials included.” Another common error is not asking for explicit CSRF handling; “we use cookies” is not enough, so request a specific double-submit or origin/CSRF-header pattern and when to enforce it. Teams also forget to demand refresh rotation details, which leads to replayable refresh tokens; ask for “rotation plus server-side reuse detection” and what happens on reuse. Finally, people skip monitoring outputs; insist on a list of log fields and sample events so you can detect refresh storms, invalid signature spikes, and suspicious geo/IP changes."
      }
    },
    {
      "@type": "Question",
      "name": "Vem bör INTE använda den här prompten för cookie-baserad JWT-autentisering?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Den här prompten passar inte optimalt för team som behöver en minimal demo med en enda endpoint och inte tänker implementera rotation, ogiltigförklaring och övervakning. Den är också ett dåligt val om din produkt strikt är icke-webbläsarbaserad (till exempel machine-to-machine-API:er) där cookies och CSRF helt enkelt inte är rätt verktyg. Och om du inte har validerat grundkrav som sessionens varaktighet, regler för enhetstillit eller utloggningsförväntningar kan designen kännas för ”tung” för tidigt. I de fallen: börja med att dokumentera krav och hotmodellens omfattning, och kom sedan tillbaka till den här prompten för versionen i produktionsklass."
      }
    }
  ]
}
</script>
</div>

<div class="closing-section">
<!-- wp:paragraph -->
<p>Autentisering är antingen lugn eller kaotisk. Den här prompten hjälper dig att designa den lugna versionen, med cookies, CSRF-skydd, rotation och övervakning tydligt beskrivna så att du kan implementera med trygghet.</p>
<!-- /wp:paragraph -->
</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://nodenordic.se/prompts/designa-jwt-inloggning-med-cookieflode-med-ai-prompt/">Designa JWT-inloggning med cookieflöde med AI-prompt</a> first appeared on <a rel="nofollow" href="https://nodenordic.se">Node Nordic - AI Konsult för företag</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
