> ## Documentation Index
> Fetch the complete documentation index at: https://api-documentation.kare-app.fr/llms.txt
> Use this file to discover all available pages before exploring further.

# QR codes : provisioning & redirection

Généralise le QR code équipement (voir [Équipement (+ Qrcode)](/product/equipement-qrcode))
à **plusieurs types de cibles** et introduit un **provisioning par lot/plage**
attribué à une organisation, ainsi qu'une **page de scan** où l'utilisateur
choisit l'association.

## Cibles possibles

Un QR code peut être associé à un seul élément parmi :

* une **unité** (patrimoine / arborescence)
* un **bâtiment**
* un **équipement**
* un **plan** ou un **élément de plan** (plan-item)

Le type de cible détermine la page de destination au scan (`endpointType`).
Un QR code non encore associé pointe vers une page « à configurer ».

## Provisioning (génération par lot)

Les QR codes sont **pré-imprimés puis provisionnés** : on génère un lot
(`QrCodeGeneration`) de stock vierge numéroté, puis on **attribue une plage de
numéros à une organisation** (ex. les QR codes 2 à 120 pour l'organisation X).
Tant qu'ils ne sont pas attribués, ils n'appartiennent à aucune organisation.

* chaque QR code porte un **numéro de série** imprimé sur le sticker
* attribution d'une **plage** (`2..120`) de QR codes à une organisation
* l'`organizationId` est posé à l'**attribution** et reste la source de vérité
  (il n'est pas déduit de la cible et survit au détachement)
* un QR code attribué mais non associé est « en attente d'association »

## Scan & redirection

Le scan (`GET /qrcodes/v1/scan/:slug`, route **publique**) renvoie l'**état** du
QR code ; le front affiche la page correspondante :

1. **Non attribué / supprimé** → page neutre (à configurer / indisponible).
2. **Attribué mais sans cible** → page de **choix d'association** : l'org est déjà
   connue (via l'attribution), donc la liste des cibles proposées est scopée à
   cette org. La consultation peut être **authentifiée ou non**, mais
   l'association elle-même exige un **utilisateur authentifié**.
3. **Associé** → page de la cible (équipement, unité, plan…).

L'`endpointType` est **dérivé côté backend** de la cible choisie ;
l'`organizationId` vient de l'attribution, jamais reçu du front.

## Cycle de vie

* `activatedAt` / `firstAssociationAt` : activation à la première association.
* association modifiable (réaffectation d'une cible à une autre) ; le
  détachement conserve l'org attribuée.
* soft-delete (retrait d'un QR code).

> Piste future : gestion RFID en alternative au QR code.
