From d2d5e1dabbb5bbcb092c13ed34d0215486899a29 Mon Sep 17 00:00:00 2001 From: Andrei Laas Date: Tue, 15 Sep 2026 20:42:42 +0200 Subject: [PATCH] Drei Befunde aus dem Test: Logo, Geplant-Filter, Anstehend-Farben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Das Logo auf der Anmeldeseite.** Statt des Schriftzugs stand dort der Ersatztext "Manner". Die SVG-Fassung war gueltiges XML, lag im Repository und war committet — warum sie im Betrieb nicht geladen wurde, laesst sich von hier aus nicht feststellen; dafuer braucht es die Antwort des Servers auf die URL. Statt das weiter zu raten, faellt die Angriffsflaeche weg: es gibt jetzt eine Datei, manner-logo.png, der Schriftzug mit durchsichtigem Grund. Kein XML, kein Beschnitt, kein eingebackenes Feld. Das Blau darin ist #164194, also der Wert aus §1.1. Damit verschwinden auch die zwei Fassungen. §1.2 laesst den Schriftzug nur zur Gaenze auf Rosa zu, und das Manual kennt dafuer zwei Lagen: auf Weiss gehoert er nach §4.1 in ein rechteckiges rosa Feld, in einem grossflaechigen rosa Umfeld nach §3.1 nur mit Freiraum. Beides entsteht jetzt aus derselben Datei — das Feld zeichnet das Bauteil, aus derselben Polsterung wie den Freiraum. **Der Filter "Geplant" fand Ausgetretene.** Die Ableitung pruefte den Eintritt vor dem Austritt, und wer einen Eintritt in der Zukunft hatte, galt als geplant — auch wenn der Austritt laengst verbucht war. Das trifft genau den No-Show (Migration 20260814100000): eingestellt, nie erschienen, Austritt vor dem Eintrittstag. Im Bestand sind das Zeilen mit Eintritt 01.10.2026, die der Filter mitzaehlte, waehrend die Liste daneben "Ausgetreten" anzeigte. employees.status, das die SQL-Funktion beim Austritt setzt, sagte von Anfang an das Richtige; falsch war die Ableitung in der Anwendung. Ein abgeschlossener Austritt wird jetzt zuerst geprueft: er beendet das Verhaeltnis, gleichgueltig ob der Eintritt schon war oder noch kommt. Ein Austritt, der selbst noch bevorsteht, nimmt den Eintritt nicht zurueck — wer am 01.10. anfaengt und am 31.12. aufhoert, ist heute geplant. Die SQL-Fassung in lib/employee-status-filter.ts bildet dieselbe Reihenfolge ab. Keine Migration: beide Fassungen der Regel liegen in TypeScript. In SQL wird nur der Karenz-Teil wiederholt, fuer die Fuehrungslinie, und der ist nicht betroffen. **Die vier Anstehend-Chips.** Zwei davon standen in der Markenfarbe, weil die Farbe ueber den Beschriftungstext aus der Tabelle der Protokoll-Aktionen geholt wurde — und die kennt eine andere Sprache: "Neueinstellung", nicht "Eintritt". Wer dort nicht steht, bekam den neutralen Chip. Ein Nachschlagen, das bei einem Fehlschlag still etwas Plausibles liefert, faellt eben nicht auf. Die vier haben jetzt eine eigene Zuordnung, nach dem Wert verschluesselt und nicht nach der Beschriftung: Eintritt gruen, Austritt rot, Wiedervorlage gelb, Rueckkehr violett. Tuerkis waere fuer die Rueckkehr die naheliegendere Lesart gewesen, kam gegen das Gruen des Eintritts aber nur auf dE 13.0; Violett steht mit 30.8 eindeutig daneben. Schwaechstes Paar der vier: 14.2, schwaechster Kontrast 5.49:1. Zehn Tests dazu, darunter die drei Faelle, an denen der Filter gescheitert war. Lint, Typen, Schemaabgleich, 562 Tests und der Build sind sauber. Im Browser nicht gesehen. Co-Authored-By: Claude Opus 5 --- app/(auth)/login/page.tsx | 11 ++- components/brand/Logo.tsx | 83 +++++++++--------- components/dashboard/AnstehendFilter.tsx | 4 +- docs/farbschema.html | 49 +++++++---- lib/colors.ts | 37 ++++++++ lib/employee-status-filter.ts | 19 +++- lib/reports.ts | 21 ++++- public/brand/manner-logo-auf-rosa.svg | 13 --- public/brand/manner-logo.png | Bin 0 -> 54372 bytes public/brand/manner-logo.svg | 14 --- tests/unit/employee-status-filter.test.ts | 100 ++++++++++++++++++++++ tests/unit/reports.test.ts | 21 +++++ 12 files changed, 275 insertions(+), 97 deletions(-) delete mode 100644 public/brand/manner-logo-auf-rosa.svg create mode 100644 public/brand/manner-logo.png delete mode 100644 public/brand/manner-logo.svg create mode 100644 tests/unit/employee-status-filter.test.ts diff --git a/app/(auth)/login/page.tsx b/app/(auth)/login/page.tsx index 53741d5..937a8d0 100644 --- a/app/(auth)/login/page.tsx +++ b/app/(auth)/login/page.tsx @@ -57,7 +57,10 @@ export default async function LoginPage({ searchParams }: LoginPageProps) {
-
+ {/* Ohne Versatz: hier steht das Logo auf Weiss und bekommt nach §4.1 + sein rosa Feld, dessen Kante mit der Ueberschrift darunter + fluchten soll. */} +
@@ -140,15 +143,15 @@ function BrandPanel() { }} /> - {/* -ml-4 gleicht den Freiraum des Logos aus, damit die Wortmarke - buendig mit dem Text darunter beginnt und nicht eingerueckt wirkt. */} + {/* -ml-3 gleicht den Freiraum des Logos aus (hoehe 36 / 3 = 12 px), + damit der Schriftzug buendig mit dem Text darunter beginnt. */} {/* Alles Geschriebene hier steht in brand-700. Weiss faellt auf Manner Rosa mit 2.18:1 aus, und ink traegt zwar (7.47:1), sieht aber aus wie Text, der aus Versehen auf der Marke gelandet ist. Dunkelblau auf Rosa (6.60:1) ist dieselbe Paarung, aus der der Schriftzug selbst besteht. Die Abstufung macht Groesse und Gewicht, nicht Transparenz: eine aufgehellte Schrift waere genau das, was hier durchfaellt. */} -
+
diff --git a/components/brand/Logo.tsx b/components/brand/Logo.tsx index 1b88b65..9462610 100644 --- a/components/brand/Logo.tsx +++ b/components/brand/Logo.tsx @@ -6,41 +6,35 @@ // Verwendet wird das **Markenlogo** (CD §4.1): der Schriftzug allein, ohne // den Stephansdom-Medaillon. Das Unternehmenslogo (§3.1) waere nach §3.2 das // formal richtige, wo „Josef Manner & Comp. AG" als Absender auftritt — es -// steht hier aber nicht zur Verfuegung, und das Markenlogo ist die Fassung, -// die vorliegt. +// steht hier aber nicht zur Verfuegung. // -// ═══ Freiraum ═══ +// ═══ Eine Datei, zwei Faelle ═══ // -// §4.1 verlangt „genuegend Freiraum rundum (X, X/3)". X ist der Modul des -// Logos; gelesen wird er hier als seine Hoehe, der Freiraum also als ein -// Drittel davon. Er steckt als Polsterung in diesem Bauteil und nicht in den -// Aufrufstellen — sonst haengt die Einhaltung daran, dass jede einzelne -// daran denkt. +// Die Vorlage ist ein PNG mit durchsichtigem Grund: nur der Schriftzug, blau +// (#164194, der Wert aus §1.1) mit weisser Kontur, kein Feld darunter. // -// ═══ Rosa — und warum es zwei Dateien gibt ═══ +// §1.2 laesst den Schriftzug ausschliesslich zur Gaenze auf Rosa zu, und das +// Manual kennt dafuer zwei Lagen: // -// §1.2: der Schriftzug darf ausschliesslich zur Gaenze auf Rosa stehen. Das -// Manual kennt dafuer zwei Faelle, und sie brauchen verschiedene Dateien: +// • **In einem grossflaechigen rosa Umfeld** (§3.1) wird er „mit genuegend +// Freiraum rundum integriert" — die Flaeche ist schon da. Das ist +// `aufRosa`: nur Freiraum, kein eigener Grund. // -// • **Auf Weiss** (§4.1) gehoert das Logo „in ein rechteckiges rosa Feld". -// Das ist manner-logo.svg — der Schriftzug samt seiner rosa Flaeche. +// • **Auf Weiss** (§4.1) gehoert er „in ein rechteckiges rosa Feld, das den +// Regeln des Freiraums folgt". Dieses Feld zeichnet das Bauteil selbst, +// aus derselben Polsterung. // -// • **In einem grossflaechigen rosa Umfeld** (§3.1) wird es „mit genuegend -// Freiraum rundum integriert" — die Flaeche ist dann schon da. Dafuer -// gibt es manner-logo-auf-rosa.svg, den Schriftzug ohne eigenes Feld. +// Vorher lagen dafuer zwei SVG nebeneinander, eines mit eingebackenem Feld +// und eines ohne. Das war eine Datei zu viel — und die Fassung mit Feld liess +// sich auf einer rosa Flaeche nicht sauber unterbringen, weil ihr Rechteck +// sichtbar blieb, sobald ueber der Flaeche noch irgendetwas lag. // -// Die zweite Fassung ist nicht nur schoener, sie ist noetig: mit Feld stand -// auf dem rosa Panel ein Rechteck in leicht anderem Ton. Der Ton war dabei -// derselbe — was ihn verschob, war die Lichtblende, die ueber der Panelflaeche -// liegt und unter dem Logo endet. Ohne eigenes Feld gibt es nichts mehr, wo -// sie enden koennte. -// -// Als und nicht inline: die Datei holt der Browser einmal und nimmt sie -// danach aus dem Zwischenspeicher, statt in jeder Seitenauslieferung -// mitzureisen. +// Als und nicht inline: der Browser holt die Datei einmal und nimmt sie +// danach aus dem Zwischenspeicher, statt sie in jeder Seitenauslieferung +// mitzuschleppen. -/** Seitenverhaeltnis beider Dateien: viewBox 288.6781 x 116.18912. */ -const VERHAELTNIS = 288.6781 / 116.18912; +/** Seitenverhaeltnis der Vorlage: 1203 x 484 Pixel. */ +const VERHAELTNIS = 1203 / 484; export function MannerLogo({ hoehe = 28, @@ -48,26 +42,27 @@ export function MannerLogo({ className = "", }: { hoehe?: number; - /** Fuer rosa Untergruende: die Fassung ohne eigenes Feld. */ + /** Fuer rosa Untergruende: ohne eigenes Feld, nur mit Freiraum. */ aufRosa?: boolean; className?: string; }) { const breite = Math.round(hoehe * VERHAELTNIS); + // Der Freiraum nach §4.1: X/3, wobei X als Hoehe des Schriftzugs gelesen + // ist. Er steckt hier und nicht in den Aufrufstellen — sonst haengt seine + // Einhaltung daran, dass jede einzelne daran denkt. + const freiraum = Math.round(hoehe / 3); + return ( - // next/image bringt Groessenvarianten und Ladelogik fuer Fotos mit; fuer - // eine Vektordatei fester Groesse ist beides Ballast, und die - // Bildoptimierung laesst SVG ohnehin unveraendert durch. - // eslint-disable-next-line @next/next/no-img-element - Manner + + {/* next/image bringt Groessenvarianten und Ladelogik fuer Fotos mit; fuer + eine Bildmarke fester Groesse ist beides Ballast. */} + {/* eslint-disable-next-line @next/next/no-img-element */} + Manner + ); } @@ -89,7 +84,9 @@ export function AppWortmarke({ className?: string; }) { return ( - + // Nur ein schmaler Abstand: den Hauptteil der Trennung leistet der + // Freiraum des Logos, der ohnehin frei bleiben muss. + Alpenwerk HR diff --git a/components/dashboard/AnstehendFilter.tsx b/components/dashboard/AnstehendFilter.tsx index 091475a..8759c13 100644 --- a/components/dashboard/AnstehendFilter.tsx +++ b/components/dashboard/AnstehendFilter.tsx @@ -2,7 +2,7 @@ import { usePathname, useRouter, useSearchParams } from "next/navigation"; import { SegmentedControl } from "@/components/ui/SegmentedControl"; -import { actionBadgeStyle } from "@/lib/colors"; +import { ANSTEHEND_STYLES } from "@/lib/colors"; import { ANSTEHEND_ARTEN, STANDARD_ZEITRAUM, @@ -57,7 +57,7 @@ export function AnstehendFilter({ zeitraum, arten }: { zeitraum: Zeitraum; arten onClick={() => artUmschalten(a.value)} aria-pressed={aktiv} className={`rounded-full px-2 py-0.5 text-xs font-semibold focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand-500 ${ - aktiv ? actionBadgeStyle(a.label) : "bg-surface text-ink-muted hover:text-ink" + aktiv ? ANSTEHEND_STYLES[a.value] : "bg-surface text-ink-muted hover:text-ink" }`} > {a.label} diff --git a/docs/farbschema.html b/docs/farbschema.html index 0f59cbe..7203fde 100644 --- a/docs/farbschema.html +++ b/docs/farbschema.html @@ -291,7 +291,7 @@

Navigation

+
+

Anstehend — die vier Arten

+
+ Eintritt + Austritt + Rückkehr + Wiedervorlage +
+

+ Jemand kommt (gruen), jemand geht (rot), ein Termin will erledigt werden (gelb) — + und die Rueckkehr ist keines davon, also eine eigene Klasse. Tuerkis waere die + naheliegendere Lesart gewesen, kam gegen das Gruen aber nur auf dE 13.0; Violett + steht mit 30.8 eindeutig daneben. Schwaechstes Paar der vier: 14.2.

+
+

Organigramm — die vier Knotenarten

@@ -317,39 +332,39 @@
-

5 · Das Logo, sein Freiraum und die zwei Fassungen

-

§1.2 laesst den Schriftzug nur zur Gaenze auf Rosa zu. Das Manual kennt dafuer zwei - Faelle, und sie brauchen verschiedene Dateien — deshalb liegen zwei im Projekt.

+

5 · Das Logo und sein Freiraum

+

Eine Datei: manner-logo.png, der Schriftzug mit durchsichtigem Grund. + §1.2 laesst ihn nur zur Gaenze auf Rosa zu, und das Manual kennt dafuer zwei Lagen — + beide entstehen aus derselben Datei, den Unterschied macht das Bauteil.

- - Manner + Manner
- manner-logo.svg — auf Weiss, mit eigenem rosa Feld (§4.1)
+ auf Weiss — das rosa Feld zeichnet das Bauteil (§4.1)
- Manner
- manner-logo-auf-rosa.svg — im rosa Umfeld, ohne Feld (§3.1)
+ im rosa Umfeld — nur Freiraum, kein eigenes Feld (§3.1)

Der Freiraum X/3 (gestrichelt) steckt im Bauteil selbst und nicht in den Aufrufstellen — sonst haengt seine Einhaltung daran, dass jede einzelne daran denkt. - Die Fassung mit Feld auf eine rosa Flaeche zu setzen ging schief: das Feld stand als - Rechteck in leicht anderem Ton darauf. Der Ton war derselbe — verschoben hat ihn die - Lichtblende ueber der Flaeche, die unter dem Logo endete.

+ Auf Weiss ist er zugleich der Rand des rosa Feldes.

- Nebenbei ausgemistet. Beide Dateien wogen 74 kB, weil die Vorlage aus Seite 3 - des Manuals gezogen wurde und die ganze Seite mitgenommen hat: 219 Elemente, die den - Fliesstext jener Seite zeichnen („Der Manner Schriftzug … darf nicht veraendert - werden"), rosa auf Rosa oder ausserhalb des Beschnitts. Das eigentliche Logo sind - vier Pfade. Jetzt 18,7 kB. + Warum nicht mehr als SVG. Vorher lagen hier zwei aus dem Manual gezogene SVG, + eines mit eingebackenem rosa Feld und eines ohne. Auf der rosa Flaeche blieb das + eingebackene Feld als Rechteck sichtbar, und im Betrieb wurde die Datei ueberhaupt + nicht geladen — die Anmeldeseite zeigte nur den Ersatztext „Manner". Ein PNG mit + durchsichtigem Grund hat keine dieser Angriffsflaechen: kein XML, kein Beschnitt, + kein Feld, das an der falschen Stelle endet.
diff --git a/lib/colors.ts b/lib/colors.ts index bc031d1..5f97cb2 100644 --- a/lib/colors.ts +++ b/lib/colors.ts @@ -1,3 +1,4 @@ +import type { AnstehendArt } from "./dashboard-filter"; import type { EmploymentStatus, NoteCategory } from "./types"; // Die Initialen stehen in Weiss darauf, jeder Ton braucht also 4.5:1 gegen @@ -72,6 +73,42 @@ export function actionBadgeStyle(action: string): string { return CATEGORY_STYLES[ACTION_CATEGORY[action] ?? "brand"]; } +/** + * Die vier Arten auf der Karte „Anstehend". + * + * Eigene Zuordnung statt actionBadgeStyle(): das war der Fehler, den sie + * ersetzt. Dort wird ueber den **Beschriftungstext** in die Tabelle der + * Protokoll-Aktionen nachgeschlagen, und die kennt eine andere Sprache — + * „Neueinstellung", nicht „Eintritt". Zwei der vier Beschriftungen standen + * gar nicht darin und fielen auf den neutralen Rosa-Chip zurueck. Ein + * Nachschlagen, das bei einem Fehlschlag still etwas Plausibles liefert, + * faellt eben nicht auf. + * + * Deshalb hier: nach dem **Wert** verschluesselt, nicht nach der Beschriftung + * — eine umbenannte Beschriftung kann die Farben so nicht mehr stillschweigend + * verstellen. Und vollstaendig ueber `Record`: eine fuenfte + * Art muesste sich hier eintragen, der Typpruefer laesst sie sonst nicht durch. + * + * Die Farben selbst, nebeneinander gemessen (dE im CIELAB, Kontrast nach + * WCAG — schwaechstes Paar 14.2, schwaechster Kontrast 5.49:1): + * + * Eintritt gruen jemand kommt + * Austritt rot jemand geht + * Rueckkehr violett weder das eine noch das andere — eine eigene Klasse + * Wiedervorlage gelb ein Termin, an dem etwas zu tun ist + * + * Tuerkis fuer die Rueckkehr waere die naheliegendere Lesart gewesen, kam + * gegen das Gruen des Eintritts aber nur auf dE 13.0. Violett steht mit 30.8 + * eindeutig daneben, und die vier sind das, was sie sein sollen: vier Dinge, + * die man im Vorbeigehen auseinanderhaelt. + */ +export const ANSTEHEND_STYLES: Record = { + hire: CATEGORY_STYLES.success, + exit: CATEGORY_STYLES.danger, + return: CATEGORY_STYLES.purple, + note: CATEGORY_STYLES.warning, +}; + export const NOTE_CATEGORY_STYLES: Record = { Vertraulich: CATEGORY_STYLES.purple, "Personalgespräch": CATEGORY_STYLES.info, diff --git a/lib/employee-status-filter.ts b/lib/employee-status-filter.ts index 70a8fd5..0325d40 100644 --- a/lib/employee-status-filter.ts +++ b/lib/employee-status-filter.ts @@ -13,11 +13,15 @@ import type { EmploymentStatus } from "./types"; // // Kept deliberately close to deriveStatusAsOf, clause for clause: // -// entry_date > asOf -> Geplant // exit_date <= asOf -> Ausgetreten +// entry_date > asOf -> Geplant // karenz window covers asOf -> Karenz // otherwise -> Aktiv // +// Die Reihenfolge der ersten beiden ist nicht beliebig: ein abgeschlossener +// Austritt schlaegt einen Eintritt, der noch bevorsteht. Warum das der Fall +// ist, steht bei deriveStatusAsOf. +// // tests/integration/employee-status-filter.test.ts asserts the two agree // against a real database, which is the only place that can prove it. @@ -39,8 +43,17 @@ export function derivedStatusFilter(eb: Eb, statuses: EmploymentStatus[], asOf: const wanted = new Set(statuses); if (wanted.size === 0) return null; - // A single non-employed status is a straight date comparison. - if (wanted.size === 1 && wanted.has("Geplant")) return eb("entry_date", ">", asOf); + // „Geplant" ist ein Eintritt, der noch bevorsteht **und** nicht + // zurueckgenommen wurde. Ohne die zweite Haelfte zaehlte der Filter die + // No-Shows mit: eingestellt, nie erschienen, Austritt vor dem Eintrittstag + // verbucht — in der Liste als „Ausgetreten" ausgewiesen und trotzdem unter + // „Geplant" gefunden. + if (wanted.size === 1 && wanted.has("Geplant")) { + return eb.and([ + eb("entry_date", ">", asOf), + eb.or([eb("exit_date", "is", null), eb("exit_date", ">", asOf)]), + ]); + } if (wanted.size === 1 && wanted.has("Ausgetreten")) { return eb.and([eb("exit_date", "is not", null), eb("exit_date", "<=", asOf)]); } diff --git a/lib/reports.ts b/lib/reports.ts index 55b2e4e..ded4237 100644 --- a/lib/reports.ts +++ b/lib/reports.ts @@ -133,12 +133,31 @@ export type OrgLookups = { // gruppiert also nach der Einheit von damals. Vorher gab es diese Historie // nicht, und ein Stichtagsbericht gruppierte nach der heutigen Zuordnung — // was in der Oberfläche vermerkt werden musste, statt still falsch zu sein. +// ── Warum der Austritt zuerst geprüft wird ────────────────────────── +// +// Umgekehrt herum stand hier „Geplant" vor „Ausgetreten", und wer einen +// Eintritt in der Zukunft hatte, galt als geplant — auch dann noch, wenn der +// Austritt längst erfasst war. Genau das trifft den No-Show (Migration +// 20260814100000): jemand wird eingestellt, erscheint nie, und der Austritt +// wird noch vor dem Eintrittstag verbucht. Im Bestand sind das Zeilen mit +// Eintritt 01.10.2026 und einem Austritt, die der Filter „Geplant" mitzählte, +// während die Liste daneben „Ausgetreten" anzeigte — employees.status, das +// die SQL-Funktion beim Austritt gesetzt hat, sagte von Anfang an das +// Richtige. +// +// Ein abgeschlossener Austritt ist der stärkere Befund: er beendet das +// Verhältnis, gleichgültig ob der Eintritt schon war oder noch kommt. +// „Geplant" heißt danach genau das, was es heißen soll — ein Eintritt, der +// noch bevorsteht und nicht zurückgenommen wurde. +// +// lib/employee-status-filter.ts bildet dieselbe Reihenfolge in SQL ab; die +// beiden müssen Klausel für Klausel zusammenpassen. export function deriveStatusAsOf( e: { entry_date: string; exit_date: string | null; karenz_start_date: string | null; karenz_return_date: string | null }, asOf: string ): EmploymentStatus { - if (e.entry_date > asOf) return "Geplant"; if (e.exit_date && e.exit_date <= asOf) return "Ausgetreten"; + if (e.entry_date > asOf) return "Geplant"; if (e.karenz_start_date && e.karenz_start_date <= asOf && (!e.karenz_return_date || asOf < e.karenz_return_date)) return "Karenz"; return "Aktiv"; } diff --git a/public/brand/manner-logo-auf-rosa.svg b/public/brand/manner-logo-auf-rosa.svg deleted file mode 100644 index aa79859..0000000 --- a/public/brand/manner-logo-auf-rosa.svg +++ /dev/null @@ -1,13 +0,0 @@ - -AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYToxYWJmODI4OC1jZjYxLTQ5YWUtYWNhOC1lMGNmNjdkZGIxMDUAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaKn7G/FL2ABjmkAWE5gQvwEAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDplZmI3MzdkNi05ZmRkLTQ2YTktOGMzNy0zMTc1NjdiYWFmYmJscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNoFLuW9Pn2rm9K98G6dbECIAAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggRhLsAzLclgGyj5MXqmAbsHpJPvUUCPGGvKMnBkKgQ5ekZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaI8fKLnJujpJVNZYDI3AMTkAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRMAAAAAAAAAAAAAAAAZGhhc2hYILoDinW8CdwfcmMU16OU0qPw5bx92zi82okLedFjlFF7ZG5hbWVuanVtYmYgbWFuaWZlc3RqZXhjbHVzaW9uc4GiZXN0YXJ0GQEiZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjFhYmY4Mjg4LWNmNjEtNDlhZS1hY2E4LWUwY2Y2N2RkYjEwNS9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOjVjMDNlNGRmLTE1Y2MtNGUxZC05YTIyLTk2NzI1MDQ3MWUzZHJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCBGEuwDMtyWAbKPkxeqYBuwekk+9RQI8Ya8oycGQqBDl6JjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFggtFBCWM6RaYU6rHNFs6QluEtc+RhZZat47tDGI6BZYSCiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggf2y88SRQx7lSn0IRL3Rd0HobHb0nDs/7y6r42FZa0yN0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQOnfjlijUvc9D9MCxC6p7qTjUw5hJRb7MRWLsNcJDcjtCvEegW2+X+bwN+/KpaY75bXQe7UtoF+2LLHT2dFlbWs= - - - - - - - - - - - diff --git a/public/brand/manner-logo.png b/public/brand/manner-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a8186e0f884343cff6567ba94c4deb0e9eac2f3d GIT binary patch literal 54372 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Ʒ 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� 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/FL2ABjmkAWE5gQvwEAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDplZmI3MzdkNi05ZmRkLTQ2YTktOGMzNy0zMTc1NjdiYWFmYmJscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNoFLuW9Pn2rm9K98G6dbECIAAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggRhLsAzLclgGyj5MXqmAbsHpJPvUUCPGGvKMnBkKgQ5ekZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaI8fKLnJujpJVNZYDI3AMTkAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRMAAAAAAAAAAAAAAAAZGhhc2hYILoDinW8CdwfcmMU16OU0qPw5bx92zi82okLedFjlFF7ZG5hbWVuanVtYmYgbWFuaWZlc3RqZXhjbHVzaW9uc4GiZXN0YXJ0GQEiZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjFhYmY4Mjg4LWNmNjEtNDlhZS1hY2E4LWUwY2Y2N2RkYjEwNS9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOjVjMDNlNGRmLTE1Y2MtNGUxZC05YTIyLTk2NzI1MDQ3MWUzZHJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCBGEuwDMtyWAbKPkxeqYBuwekk+9RQI8Ya8oycGQqBDl6JjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFggtFBCWM6RaYU6rHNFs6QluEtc+RhZZat47tDGI6BZYSCiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggf2y88SRQx7lSn0IRL3Rd0HobHb0nDs/7y6r42FZa0yN0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQOnfjlijUvc9D9MCxC6p7qTjUw5hJRb7MRWLsNcJDcjtCvEegW2+X+bwN+/KpaY75bXQe7UtoF+2LLHT2dFlbWs= - - - - - - - - - - - - diff --git a/tests/unit/employee-status-filter.test.ts b/tests/unit/employee-status-filter.test.ts new file mode 100644 index 0000000..75c8afc --- /dev/null +++ b/tests/unit/employee-status-filter.test.ts @@ -0,0 +1,100 @@ +import { DummyDriver, Kysely, PostgresAdapter, PostgresIntrospector, PostgresQueryCompiler } from "kysely"; +import { describe, expect, it } from "vitest"; +import type { Schema } from "@/lib/db/schema"; +import { derivedStatusFilter } from "@/lib/employee-status-filter"; +import { deriveStatusAsOf } from "@/lib/reports"; +import type { EmploymentStatus } from "@/lib/types"; + +// Die Liste filtert in der Datenbank, weil sie dort auch blättert. Der Filter +// ist damit die einzige Stelle, an der der Status *nicht* von +// deriveStatusAsOf() kommt, sondern von einer zweiten Fassung derselben Regel +// in SQL. Zwei Fassungen driften, und diese hier taten es: „Geplant" fragte +// nur nach dem Eintrittsdatum und zählte die No-Shows mit — Leute mit einem +// Eintritt in der Zukunft, deren Austritt längst verbucht war. +// +// tests/integration/employee-status-filter.test.ts hält die beiden gegen eine +// echte Datenbank, läuft aber mangels Seed nicht in der CI. Deshalb hier +// zweierlei ohne Datenbank: die erzeugte Abfrage lesen, und die +// TypeScript-Ableitung an denselben Fällen prüfen. + +const db = new Kysely({ + dialect: { + createAdapter: () => new PostgresAdapter(), + createDriver: () => new DummyDriver(), + createIntrospector: (d) => new PostgresIntrospector(d), + createQueryCompiler: () => new PostgresQueryCompiler(), + }, +}); + +const STICHTAG = "2026-09-15"; + +/** Die where-Klausel, die für eine Statusauswahl herauskommt. */ +function bedingung(statuses: EmploymentStatus[]): string { + return db + .selectFrom("employees") + .select("id") + .where((eb) => derivedStatusFilter(eb, statuses, STICHTAG) ?? eb.val(true)) + .compile() + .sql.replace(/^.*? where /s, "") + .replace(/\s+/g, " "); +} + +describe("derivedStatusFilter — Geplant", () => { + it("fragt nach dem Eintritt in der Zukunft", () => { + expect(bedingung(["Geplant"])).toContain('"entry_date" >'); + }); + + // Die eigentliche Zusicherung: ohne diese Hälfte war der Filter falsch. + it("schliesst aus, wessen Austritt schon vollzogen ist", () => { + const sql = bedingung(["Geplant"]); + expect(sql).toContain('"exit_date" is null'); + expect(sql).toContain('"exit_date" >'); + }); +}); + +describe("derivedStatusFilter — Ausgetreten", () => { + it("verlangt ein Austrittsdatum, das erreicht ist", () => { + const sql = bedingung(["Ausgetreten"]); + expect(sql).toContain('"exit_date" is not null'); + expect(sql).toContain('"exit_date" <='); + }); +}); + +describe("derivedStatusFilter — nicht abgedeckte Auswahl", () => { + it("filtert lieber gar nicht als falsch", () => { + // Eine Mischung aus beschäftigt und nicht beschäftigt hat keinen Weg in + // der Oberfläche; geraten wird dafür nichts. + expect(derivedStatusFilter({} as never, ["Aktiv", "Ausgetreten"], STICHTAG)).toBeNull(); + expect(derivedStatusFilter({} as never, [], STICHTAG)).toBeNull(); + }); +}); + +// Dieselben Fälle noch einmal gegen die TypeScript-Ableitung: was der Filter +// findet und was die Liste daneben anzeigt, muss dieselbe Person meinen. +describe("Filter und Anzeige meinen dasselbe", () => { + const basis = { karenz_start_date: null, karenz_return_date: null }; + + const faelle: { was: string; e: Parameters[0]; erwartet: EmploymentStatus }[] = [ + { + was: "No-Show: Eintritt in der Zukunft, Austritt bereits vollzogen", + e: { ...basis, entry_date: "2026-10-01", exit_date: "2026-09-10" }, + erwartet: "Ausgetreten", + }, + { + was: "geplanter Eintritt ohne Austritt", + e: { ...basis, entry_date: "2026-10-01", exit_date: null }, + erwartet: "Geplant", + }, + { + was: "geplanter Eintritt mit Befristung, beides in der Zukunft", + e: { ...basis, entry_date: "2026-10-01", exit_date: "2026-12-31" }, + erwartet: "Geplant", + }, + ]; + + for (const { was, e, erwartet } of faelle) { + it(was, () => { + expect(deriveStatusAsOf(e, STICHTAG)).toBe(erwartet); + }); + } +}); diff --git a/tests/unit/reports.test.ts b/tests/unit/reports.test.ts index 94801e4..6b4fb6c 100644 --- a/tests/unit/reports.test.ts +++ b/tests/unit/reports.test.ts @@ -271,6 +271,27 @@ describe("deriveStatusAsOf", () => { expect(deriveStatusAsOf(onKarenz, "2023-07-01")).toBe("Aktiv"); expect(deriveStatusAsOf(onKarenz, "2022-12-31")).toBe("Aktiv"); }); + + // Der No-Show (Migration 20260814100000): eingestellt, nie erschienen, der + // Austritt wird noch vor dem Eintrittstag verbucht. Vorher gewann hier + // „Geplant", weil der Eintritt zuerst geprüft wurde — die Liste zeigte + // „Ausgetreten" und der Filter „Geplant" fand dieselbe Person trotzdem. + it("is Ausgetreten when the exit is done, even with the entry still ahead", () => { + const noShow = { ...base, entry_date: "2026-10-01", exit_date: "2026-09-10" }; + expect(deriveStatusAsOf(noShow, "2026-09-15")).toBe("Ausgetreten"); + }); + + it("stays Geplant while the entry is ahead and nothing has been taken back", () => { + expect(deriveStatusAsOf({ ...base, entry_date: "2026-10-01" }, "2026-09-15")).toBe("Geplant"); + }); + + // Ein Austritt, der selbst noch bevorsteht, nimmt den Eintritt nicht + // zurück: am Stichtag ist beides Zukunft, und geplant ist die Person + // weiterhin. + it("stays Geplant when both entry and exit are still ahead", () => { + const geplantMitEnde = { ...base, entry_date: "2026-10-01", exit_date: "2026-12-31" }; + expect(deriveStatusAsOf(geplantMitEnde, "2026-09-15")).toBe("Geplant"); + }); }); describe("aggregateEvents", () => {