> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plato.ae/llms.txt
> Use this file to discover all available pages before exploring further.

# Intégration de la console

> Comment la console Plato communique avec le pilote d'imprimante du PC.

# Intégration de la console

La console Plato utilise l'adaptateur d'imprimante `WIN_DRIVER` pour le pilote d'imprimante PC.

## Enregistrement de l'imprimante

La console stocke les imprimantes dans une base de données IndexedDB nommée `printer-database`.

Les enregistrements de l'imprimante comprennent :

* type d'imprimante
* statut
* dernière erreur
* configuration
* largeur du papier
* catégories
* types de commandes
* logo

Type pertinent :

```ts theme={null}
type PrinterType =
  | "EPSON"
  | "WIN_DRIVER"
  | "USB"
  | "BUILT_IN"
  | "ANDROID_DRIVER"
  | "SUNMI";
```

## Pilote URL

L'adaptateur `WIN_DRIVER` construit sa base URL à partir de la configuration de l'imprimante :

```txt theme={null}
http://<driverIpAddress>:<driverPort>
https://<driverIpAddress>:<driverPort>
```

Si `driverPort` est vide, l'adaptateur omet le port. Ceci est utile pour HTTPS sur le port `443`.

## Cible de l'imprimante

L'adaptateur envoie la cible de l'imprimante physique séparément du pilote URL.

| Champ de configuration | Champ de demande | Remarques                                   |
| ---------------------- | ---------------- | ------------------------------------------- |
| `driverIpAddress`      | Hôte URL         | Machine en marche `plato-printer.exe`.      |
| `driverPort`           | Port URL         | Port du pilote HTTP/HTTPS.                  |
| `driverUseHttps`       | Protocole URL    | Utilise `https` lorsque vrai.               |
| `ipAddress`            | `ip_address`     | IP de l’imprimante physique.                |
| `port`                 | `port`           | Port TCP de l’imprimante physique.          |
| `vendor`               | `vendor_id`      | ID du fournisseur mappé.                    |
| `productId`            | `product_id`     | Envoyé pour compatibilité.                  |
| `beep`                 | `beep`           | Active la séquence de bips post-impression. |

Si l'adresse IP de l'imprimante est manquante ou égale à `192.168.0.0`, l'adaptateur envoie `ip_address: null` et `port: null`, que le pilote actuel rejette avec `Missing printer address`.

## ID des fournisseurs

L'adaptateur mappe les fournisseurs :

| Fournisseuse | Identifiant du fournisseur |
| ------------ | -------------------------- |
| `EPSON`      | `0x04b8`                   |
| `BIRCH`      | `0x1fc9`                   |
| `PHILIPS`    | `0x0471`                   |
| `SUNMI`      | `0x04b8`                   |
| `OSCAR`      | `0x04b8`                   |

## Préparation de l'impression

Flux d'impression de la console :

1. Rendre le DOM en blob PNG.
2. Chargez le blob dans le canevas.
3. Convertissez les pixels du canevas en lignes raster noir/blanc.
4. Divisez les lignes raster en morceaux de 128 lignes.
5. Encodez chaque morceau en octets raster ESC/POS.
6. Base64 encode chaque bloc d'octets.
7. Envoyez `POST /print`.

Le pilote ne reçoit jamais de HTML. Il reçoit des morceaux ESC/POS imprimables.

## File d'attente du navigateur

La console dispose d'une file d'attente de navigateur locale avant que les requêtes n'atteignent le pilote du PC.

* Les travaux sont stockés dans IndexedDB.
* Les travaux passent de `pending` à `printing`.
* Les tâches ayant échoué sont marquées `failed`.
* Un travail `printing` obsolète est récupéré après 60 secondes.
* Les tâches planifiées sont vérifiées toutes les 30 secondes.
* Les tâches ayant échoué sont réessayées toutes les 60 secondes.

Le pilote d'imprimante PC possède sa propre file d'attente Redis une fois la demande HTTP acceptée. Cela signifie qu'il y a deux files d'attente :

| File d'attente               | Emplacement             | But                                                                             |
| ---------------------------- | ----------------------- | ------------------------------------------------------------------------------- |
| File d'attente du navigateur | Plato Console IndexedDB | Conserve les travaux d'impression côté POS jusqu'à ce qu'un pilote les accepte. |
| File d'attente des pilotes   | Redis/BullMQ            | Conserve les travaux acceptés jusqu'à ce que l'imprimante physique les reçoive. |

## Cartographie des statuts

La console appelle `POST /status`.

* L'échec de HTTP renvoie `OFFLINE`.
* La réponse avec `ok: true` et `status` et non `offline` renvoie `ONLINE`.
* Les autres réponses du pilote sont stockées sous `lastError`.

## Tiroir-caisse

La console appelle `POST /cash-drawer` pour chaque imprimante en ligne configurée avec un tiroir-caisse.
