# @siop/mobile — l'app du technicien (R4)

Expo (SDK 57), offline-first, périmètre fermé : **Ma journée, scan, préventif, synchro** —
la gestion reste web, le demandeur reste sur le portail QR public. Maquettes validées :
`docs/02-design/maquettes/maquette-r4.html` (+ décisions D1-D5 au journal du 17/07/2026).

## Lancer

```bash
# API locale d'abord (apps/api : pnpm dev), puis :
pnpm --filter @siop/mobile start          # QR Expo Go (téléphone sur le MÊME réseau)
EXPO_PUBLIC_API_URL=http://192.168.x.y:3000 pnpm --filter @siop/mobile start
```

- `EXPO_PUBLIC_API_URL` : URL de l'API vue **depuis le téléphone** (IP LAN, pas localhost).
  Défaut : `http://localhost:3000` (suffisant pour `expo start --web`).
- Vérification navigateur : `expo start --web` + `CORS_ORIGINS=http://localhost:8081`
  côté API (les apps natives n'envoient pas d'Origin — CORS ne concerne que le web).

## Ce que porte R4.1 (socle)

- Connexion e-mail/mot de passe + **sélecteur démo** (ADR-002 : n'existe que si l'API l'expose).
- Coquille tabbar (onglets à venir marqués R4.2/R4.3) + **Ma journée** : OT triés
  priorité puis échéance (`src/lib/journee.ts`, testé), urgence en tête, pastille de synchro.
- **Lecture hors-ligne (D1)** : cache TanStack persisté dans AsyncStorage (7 jours),
  NetInfo pilote `onlineManager` + bandeau. L'écriture en file arrive en R4.3.
- Client typé généré depuis `docs/openapi.json` (`pnpm generate:client`) — règle d'or ADR-001.
- Jeton dans SecureStore (trousseau) ; AsyncStorage en repli web de dev.

## Tests

`pnpm --filter @siop/mobile test` (jest-expo — logique pure : tri, tokens) ;
`typecheck` et le lint racine s'appliquent (job CI `mobile`).
