# Strategi Dependency ESC/POS

## Keputusan

Strategi yang dipakai adalah **local-path-package**.

- Sumber library ESC/POS: `libs/python-escpos/escpos`
- Namespace runtime: `escpos`
- Instalasi dependency dilakukan dari path lokal `./libs/python-escpos` di `requirements.txt`

## Lock Version

Versi vendor yang dikunci:

- package: `escpos`
- version: `3.1`
- lock policy code: `pypos/core/utils/vendor_dependency_policy.py`

Saat startup, aplikasi memvalidasi versi vendor terhadap lock.

## Aturan Implementasi

- Gunakan import:
  - `from escpos.printer import ...`
- Jangan gunakan import:
  - `from pypos.vendors.escpos.printer import ...`
- Jangan menambahkan `python-escpos==...` dari PyPI ketika strategi local-path masih dipakai.

## Build

Build menggunakan spec:

- `app.spec` atau `app_.spec`

Build profile:

- `minimal` (default)
- `full`

Sumber profile:

1. env `POSAPP_BUILD_PROFILE` (jika ada)
2. `app_settings.json` (`build_profile`)
3. fallback `minimal`

## Prosedur Upgrade Vendor ESC/POS

1. Update isi `libs/python-escpos/escpos`.
2. Ubah lock di `pypos/core/utils/vendor_dependency_policy.py`.
3. Jalankan:
   - `python -m unittest discover -s tests -p "test_*.py"`
   - `.\.venv\Scripts\python.exe -m PyInstaller -y app.spec`
4. Verifikasi warning build dan test print USB/LAN.
