# Átadás-memó — felhasználókezelés design-kör

**Kör dátuma:** 2026-08-03
**Feldolgozott spec:** `apps/manager/spec/20_felhasznalokezeles.md` — **v2.0** (Státusz: design-körben (v1), fejléc-egyezés ellenőrizve a kör elején)
**Design-inkremens:** beváltó-oldal (új publikus képernyő, 5 állapot a spec 4.5 táblája szerint) · meghívó-dialógus v2 (4.3) · lista- és adatlap-delta a meglévő A8-képernyőkön (4.2/4.4) · **kör-bővítés:** tranzakciós e-mail-keret + E-1/E-2 meghívó-levelek (3.7, bemenet 7.1–7.2)

## Hogyan dolgozz a csomaggal

A vizuális export a `manager-system/preview/screens/` alatt hordozza a kör képernyőit:

| Képernyő | Fájl | Spec-szakasz |
|---|---|---|
| Meghívó-beváltó (ÚJ, publikus) | `a8-meghivo-bevalto.html` | 3.4 + 4.5 + 4.7 |
| Meghívó-dialógus v2 | `a8-meghivo-dialog.html` (organism: `organisms/user-invite-dialog.jsx`) | 3.3 + 4.3 |
| Felhasználó-lista v2-delta | `a8-beallitasok-felhasznalok-lista.html` | 3.2 + 4.2 |
| Felhasználó-adatlap v2-delta | `a8-beallitasok-felhasznalok-adatlap.html` | 3.6 + 4.4 |
| Tranzakciós e-mailek (keret + E-1 + E-2) | `a8-email-sablonok.html` | 3.7 + bemenet 7.1–7.2 |

**Kötött (jóváhagyott UX-tény):** az öt beváltó-állapot és ágazásuk (4.5 tábla), a jelszó-mentesség minden ponton (SD-127/128 — jelszó-mező sehol, az E-1 jelszó-mondata kihagyva), a 4.7 i18n-szövegek szó szerinti használata, a három 409-es terelő-hiba dialóguson belüli (banner + akció-gomb) megjelenítése, a Meghívva-sor zárolt szerkesztése (422 invitee_pending) és a csak-olvasható e-mail-mező (SD-134); a leveleken a KJ-5 hangnem („Kedves + teljes név”, főnévi CTA, zéró marketing-zaj) és a 3.7 változó-készlet.
**Szabad (a Spec-projekt / backend döntése):** a lenti igény-tételek backend-alakja (mezőnév, DTO-forma), és minden, amit a tételek javaslatként jelölnek.

## Tételes igény-lista

### PA-01 — hiány · MVP-hangolható
A meghívó-dialógus három terelő-hibája (`409 already_member / member_disabled / invite_pending`) akció-gombbal terel (Adatlap megnyitása / Meghívó újraküldése), de a 3.3 szerinti 409-válasz csak `reason`-kódot hordoz — **a cél-sor azonosítója nélkül a közvetlen navigáció nem megoldható**. *Javaslat (nem döntés):* a 409-body hordozza az érintett `TenantUser` id-t (pl. `conflictingUserId`). *Fallback a design-oldalon:* e-mail-szűrős lista-navigáció — működik, de gyengébb élmény. *Provenance:* `a8-meghivo-dialog.html` 3–5. artboard (terelő-CTA-k).

### PA-02 — hiány · MVP-hangolható
A meglévő-fiókos út két lépése egyetlen gomb-kulcson osztozik: az `invite.accept.confirmButton` („Belépés és megerősítés") a belépés-**előtti** CTA-n él; a friss belépés **utáni** megerősítő képernyő accept-gombjára nincs kulcs. *Javaslat:* új kulcs, pl. `invite.accept.confirmFinal` = „Megerősítés". A design ezt a feliratot mutatja. *Provenance:* `a8-meghivo-bevalto.html` 5. artboard (megerosito-accept).

### PA-03 — fedett (jelezzük, mire építünk)
A lista minden meghívó-jelvénye („Érvényes …-ig" / „Hamarosan lejár" &lt;48 h / „Lejárt") és a Meghívva-sor Szerepkörök-oszlopa **kizárólag** az `inviteExpiresAt`/`inviteRoles` tükör-mezőkből számolódik (SD-132, AC-G3) — a design Core-lekérésre sehol nem épít. A tükör-karbantartás (invite/resend állít, revoke/accept nulláz) a lista-vizuál helyességének előfeltétele.

### PA-04 — fedett (jelezzük, mire építünk)
A beváltó-oldal mind az öt állapota az `InvitationPreviewDto` meglévő mezőiből (`tenantName`, `displayName`, `roles`, `accountExists`, `email`) kirajzolható; tenant-logóra, címer-asszetre a design szándékosan nem épít (D-4 — a beváltó Urbino-brand oldal, a város neve szövegként jelenik meg).

### PA-05 — hiány · MVP-hangolható
A letiltás destruktív akciójához nincs megerősítő-szöveg a 4.7-ben (a visszavonásnak van: `users.action.revokeConfirm`). A design megerősítő dialógust mutat javasolt copy-val: „Biztosan letiltod … hozzáférését? A belépése perceken belül megszűnik.” + „A szerepkörei megmaradnak — a feloldással ugyanazokkal kapja vissza a hozzáférést.” *Javaslat:* új kulcsok (pl. `users.action.deactivateConfirm`). *Provenance:* `a8-beallitasok-felhasznalok-lista.html` 7. artboard.

### PA-06 — hiány · MVP-hangolható
A beváltás közbeni Zitadel-hiba (502, AC-B6 — újrapróbálható) felhasználói szövegére nincs 4.7-kulcs. A design javasolt copy-t mutat: „Nem sikerült létrehozni a fiókodat — próbáld újra néhány perc múlva. A meghívó-linked érvényes marad.” *Javaslat:* új kulcs (pl. `invite.error.acceptFailed`). *Provenance:* `a8-meghivo-bevalto.html` 10. artboard.

### PA-07 — fedett (jelezzük, mire építünk)
Az E-1/E-2 levelek és a keret **hiánytalanul kirajzolhatók a 3.7 hat változójából** (`inviteeName`, `inviterName`, `tenantName`, `roleNames`, `acceptUrl`, `expiresAtText`) — új adat-slot igénye nincs. A tárgy-javaslat: „Meghívó — {{tenantName}}, Urbino manager felület” (mindkét levélre — AC-A5). Két statikus sablon-elem a fejlesztés döntési körében marad (FK-felh-9): a feladó-cím és a support-sor címe (a mock illusztratívan support@urbino.io-t mutat). Az E-1 illusztratív szövegének jelszó-mondata az SD-128 szerint kimaradt — ez a VF-felh-2 jelzéssel konzisztens.

## Függelék — a képernyők döntés-hivatkozásai
Beváltó: SD-127/128 (jelszó-mentes), SD-129 (kötés beváltáskor), SZ-6/7/8 (egységes 410, accepted→login, identitás-kapu). Dialógus: SD-132 (csoport-írás), SZ-1/2/3 (terelők), K-025 (szerepkör-multi). Lista: SD-132/133, SD-38. Adatlap: SD-130 (Letiltás/Feloldás grant-hatály), SD-134 (admin-only e-mail), 3.6 (invitee_pending).
