> ## 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.

# Konsol Entegrasyonu

> Plato Konsolu PC yazıcı sürücüsüyle nasıl konuşur?

# Konsol Entegrasyonu

Plato Konsolu, PC yazıcı sürücüsü için `WIN_DRIVER` yazıcı adaptörünü kullanır.

## Yazıcı Kaydı

Konsol, yazıcıları `printer-database` adlı IndexedDB veritabanında saklar.

Yazıcı kayıtları şunları içerir:

* yazıcı türü
* durum
* son hata
* yapılandırma
* kağıt genişliği
* kategoriler
* sipariş türleri
* logo

İlgili tür:

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

## Sürücü URL

`WIN_DRIVER` adaptörü, URL tabanını yazıcı yapılandırmasından oluşturur:

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

`driverPort` boşsa adaptör bağlantı noktasını atlar. Bu, `443` bağlantı noktasındaki HTTPS için kullanışlıdır.

## Yazıcı Hedefi

Adaptör, fiziksel yazıcı hedefini URL sürücüsünden ayrı olarak gönderir.

| Yapılandırma Alanı | Talep Alanı          | Notlar                                            |
| ------------------ | -------------------- | ------------------------------------------------- |
| `driverIpAddress`  | URL ana bilgisayar   | `plato-printer.exe` çalıştıran makine.            |
| `driverPort`       | URL bağlantı noktası | Sürücü HTTP/HTTPS bağlantı noktası.               |
| `driverUseHttps`   | URL protokolü        | Doğru olduğunda `https`'yi kullanır.              |
| `ipAddress`        | `ip_address`         | Fiziksel yazıcı IP'si.                            |
| `port`             | `port`               | Fiziksel yazıcı TCP bağlantı noktası.             |
| `vendor`           | `vendor_id`          | Eşlenen satıcı kimliği.                           |
| `productId`        | `product_id`         | Uyumluluk için gönderildi.                        |
| `beep`             | `beep`               | Yazdırma sonrası bip sesi sırasını etkinleştirir. |

Yazıcı IP'si eksikse veya `192.168.0.0`'ye eşitse bağdaştırıcı `ip_address: null` ve `port: null`'yi gönderir ve mevcut sürücü bunları `Missing printer address` ile reddeder.

## Satıcı Kimlikleri

Adaptör satıcıları eşleştirir:

| Satıcı    | Satıcı Kimliği |
| --------- | -------------- |
| `EPSON`   | `0x04b8`       |
| `BIRCH`   | `0x1fc9`       |
| `PHILIPS` | `0x0471`       |
| `SUNMI`   | `0x04b8`       |
| `OSCAR`   | `0x04b8`       |

## Baskı Hazırlığı

Konsol yazdırma akışı:

1. DOM'u PNG bloğuna dönüştürün.
2. Blobu tuvale yükleyin.
3. Tuval piksellerini siyah/beyaz tarama satırlarına dönüştürün.
4. Raster satırlarını 128 satırlık parçalara bölün.
5. Her parçayı ESC/POS tarama baytları olarak kodlayın.
6. Base64 her bayt parçasını kodlar.
7. `POST /print`'yi gönderin.

Sürücü hiçbir zaman HTML almaz. Yazdırılabilir ESC/POS parçalarını alır.

## Tarayıcı Sırası

Konsolun, istekler bilgisayar sürücüsüne ulaşmadan önce yerel bir tarayıcı kuyruğu vardır.

* İşler IndexedDB'de saklanır.
* İşler `pending`'den `printing`'ye taşınır.
* Başarısız olan işler `failed` olarak işaretlenir.
* Eski bir `printing` işi 60 saniye sonra kurtarılır.
* Zamanlanmış işler her 30 saniyede bir kontrol edilir.
* Başarısız olan işler her 60 saniyede bir yeniden denenir.

HTTP isteği kabul edildikten sonra PC yazıcı sürücüsünün kendi Redis kuyruğu vardır. Bu, iki kuyruğun olduğu anlamına gelir:

| Sıra             | Konum                         | Amaç                                                          |
| ---------------- | ----------------------------- | ------------------------------------------------------------- |
| Tarayıcı kuyruğu | Plato Konsol Dizine AlınmışDB | POS tarafı yazdırma işlerini sürücü kabul edene kadar saklar. |
| Sürücü kuyruğu   | Redis/BullMQ                  | Kabul edilen işleri fiziksel yazıcı alana kadar saklar.       |

## Durum Eşleme

Konsol `POST /status`'yi çağırır.

* HTTP hatası `OFFLINE` değerini döndürür.
* `ok: true` ve `status` ile yanıt, `offline` değil, `ONLINE` değerini döndürür.
* Diğer sürücü yanıtları `lastError` olarak saklanır.

## Para Çekmecesi

Konsol, kasa çekmecesi ile yapılandırılmış her çevrimiçi yazıcı için `POST /cash-drawer`'yi çağırır.
