import type { Metadata } from 'next' import { createServiceClientNoCookies } from '@/lib/auth/api-keys' import { resolvePayslipToken } from '@/lib/salary/payslips/links' import { formatCurrency } from '@/lib/utils' // The token is the authentication — no session, no company context. Swedish // only (employee-facing). Never indexed. export const metadata: Metadata = { title: 'Lönespecifikation', robots: { index: false, follow: false }, } export const dynamic = 'force-dynamic' const MONTH_NAMES = [ 'januari', 'februari', 'mars', 'april', 'maj', 'juni', 'juli', 'augusti', 'september', 'oktober', 'november', 'december', ] function MessageShell({ title, body }: { title: string; body: string }) { return ( {title} {body} ) } export default async function PayslipPage({ params, }: { params: Promise<{ token: string }> }) { const { token } = await params const serviceClient = createServiceClientNoCookies() const resolved = await resolvePayslipToken(serviceClient, token) if (!resolved.ok) { if (resolved.reason === 'expired') { return ( ) } if (resolved.reason === 'revoked') { return ( ) } return ( ) } const { link } = resolved const [{ data: run }, { data: sre }, { data: company }] = await Promise.all([ serviceClient .from('salary_runs') .select('period_year, period_month, payment_date') .eq('id', link.salary_run_id) .eq('company_id', link.company_id) .single(), serviceClient .from('salary_run_employees') .select('gross_salary, tax_withheld, tax_withheld_override, net_salary, employee:employees(first_name, last_name)') .eq('salary_run_id', link.salary_run_id) .eq('employee_id', link.employee_id) .single(), serviceClient .from('companies') .select('name') .eq('id', link.company_id) .single(), ]) if (!run || !sre || !company) { return ( ) } const emp = sre.employee as unknown as { first_name: string; last_name: string } | null const effectiveTax = (sre.tax_withheld_override as number | null) ?? (sre.tax_withheld as number) const effectiveNet = (sre.net_salary as number) + ((sre.tax_withheld as number) - effectiveTax) const monthName = MONTH_NAMES[run.period_month - 1] return ( {company.name} Lönespecifikation {monthName} {run.period_year} {emp && ( {emp.first_name} {emp.last_name} )} Bruttolön {formatCurrency(sre.gross_salary as number)} Skatteavdrag −{formatCurrency(effectiveTax)} Nettolön {formatCurrency(effectiveNet)} Utbetalningsdag {run.payment_date} Ladda ner PDF (lönespecifikation) Länken är personlig — dela den inte vidare. PDF-filen innehåller den fullständiga specifikationen. ) }
{body}
{company.name}
{emp.first_name} {emp.last_name}
Länken är personlig — dela den inte vidare. PDF-filen innehåller den fullständiga specifikationen.