diff --git a/README.md b/README.md
index 40eb1c9..3bb5c33 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,110 @@
-# Barcode GLPI plugin
+# Barcode Plugin for GLPI 11
-To use it, go in computer list, check the computers and in massive action, you have 2 possibilities :
+> **Migration to GLPI 11.x** by [Dawing S.A.S.](https://dawing.com.co) — original plugin by [David DURIEUX / pluginsGLPI](https://github.com/pluginsGLPI/barcode)
-* print a bar code
-* print a QRcode
+## What this plugin does
-## Translations
+| Feature | Description |
+|---|---|
+| **Linear barcodes** | Generates Code39, Code128, EAN13, INT25, Postnet, UPC-A from the asset inventory number (`otherserial`) |
+| **QR codes** | Generates QR codes with configurable content: serial number, inventory number, ID, UUID, name, URL, date |
+| **PDF export** | Automatic grid layout, multiple codes per page |
+| **Massive action** | Available from any GLPI asset list: "Print barcodes" and "Print QRcodes" |
+| **Per-type config** | Margins, page size, orientation, max code dimensions, text size |
+| **Company logo** | Upload a PNG logo that appears above each code in the PDF |
-If you want Tag to be available in your native language and have a little time , you can help us :
+## Requirements
-Join us on [Transifex](https://www.transifex.com/pluginsGLPI/glpi_barcode/)
+| Component | Minimum version |
+|---|---|
+| GLPI | 11.0.0 |
+| PHP | 8.1 (tested on 8.4) |
+| PHP extensions | `gd`, `mbstring`, `xml`, `curl`, `zip` |
+| Composer | 2.x |
-## Contributing
+## Installation
-* Open a ticket for each bug/feature so it can be discussed
-* Follow [development guidelines](http://glpi-developer-documentation.readthedocs.io/en/latest/plugins/index.html)
-* Refer to [GitFlow](http://git-flow.readthedocs.io/) process for branching
-* Work on a new branch on your own fork
-* Open a PR that will be reviewed by a developer
+```bash
+# 1. Place plugin in GLPI plugins directory
+cp -r barcode/ /var/www/glpi/plugins/
+
+# 2. Install dependencies
+cd /var/www/glpi/plugins/barcode
+composer install --no-dev --optimize-autoloader
+
+# 3. Set permissions (Rocky Linux / CentOS / AlmaLinux)
+chown -R apache:apache /var/www/glpi/plugins/barcode
+mkdir -p /var/www/glpi/files/_plugins/barcode
+chown -R apache:apache /var/www/glpi/files/_plugins/barcode
+
+# 4. SELinux (if enforcing)
+semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/glpi/plugins/barcode(/.*)?"
+semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/glpi/files/_plugins/barcode(/.*)?"
+restorecon -Rv /var/www/glpi/plugins/barcode
+restorecon -Rv /var/www/glpi/files/_plugins/barcode
+```
+
+Then go to **Setup → Plugins → Barcode → Install → Enable**
+
+## Changes from v2.7.1 (GLPI 10) to v3.0.0 (GLPI 11)
+
+| File | Issue | Fix |
+|---|---|---|
+| `setup.php` | Version bound `10.0.99` blocked install on GLPI 11 | Updated to `11.0.0–11.0.99` |
+| `setup.php` | `csrf_compliant` hook removed in GLPI 11 | Removed |
+| `setup.php` | `Plugin::getWebDir()` deprecated in GLPI 11 | Replaced with direct paths `/plugins/barcode/...` |
+| `hook.php` | `$DB->query() or die()` forbidden in GLPI 11 | Replaced with `$DB->doQueryOrDie()` |
+| `hook.php` | `PRIMARY KEY (ID)` uppercase bug (MariaDB strict) | Fixed to lowercase `id` |
+| `inc/qrcode.class.php` | Special chars (tildes, ñ) broken in QR content | Removed `__()` from QR embedded text |
+| `inc/qrcode.class.php` | Massive action UI column purpose was unclear | Added descriptive labels explaining each column |
+| `inc/config.class.php` | `array_keys()[0]` deprecated pattern | Updated to `array_key_first()` |
+| `inc/config.class.php` | Raw `` | Replaced with `Html::submit()` |
+| `front/*.php` | `include('../../../inc/includes.php')` broken path | Fixed for GLPI 11 router |
+| `front/send.php` | No filename validation | Added strict PDF-only validation |
+| `front/document.send.php` | No MIME validation on logo | Added `finfo` MIME type check |
+| `front/checkItemByInv.php` | No itemtype class validation | Added `is_subclass_of(CommonDBTM)` check |
+| `composer.json` | PHP platform forced to `7.4` | Updated to `>=8.1` |
+
+## Tested environment
+
+- **GLPI** 11.0.6
+- **Rocky Linux** 10
+- **PHP** 8.4.19 (Remi repository)
+- **MariaDB** (centralized server)
+- **Apache** 2.4.63
+
+## Usage
+
+### From asset lists (Massive action)
+
+1. Go to any asset list (Computers, Monitors, Printers, etc.)
+2. Select one or more assets
+3. In the massive action bar: **Barcode – Print barcodes** or **Barcode – Print QRcodes**
+4. Configure options — left column = include in QR data, right column = show as visible label under the code
+5. Click **Create** → download link for the generated PDF appears
+
+### QR code content
+
+The QR code embeds plain ASCII text (no special characters) to ensure maximum scanner compatibility:
+
+```
+Serial number = ABC123
+Inventory number = IM00001
+ID = 42
+Name = LAPTOP-001
+URL = https://glpi.example.com/plugins/barcode/front/checkItemByInv.php?inventoryNumber=IM00001&itemtype=Computer
+QRcode date = 2026-03-30
+```
+
+### Company logo
+
+Go to **Setup → Plugins → Barcode config** and upload a PNG logo (recommended: 300×60px, transparent background).
+
+## License
+
+[AGPL v3+](LICENSE)
+
+## Credits
+
+- Original plugin: [David DURIEUX](mailto:d.durieux@siprossii.com) and contributors
+- GLPI 11 migration: [Cristian David Baquero / Dawing S.A.S.](https://dawing.com.co)
diff --git a/README_MIGRACION.md b/README_MIGRACION.md
new file mode 100644
index 0000000..16fe1fd
--- /dev/null
+++ b/README_MIGRACION.md
@@ -0,0 +1,183 @@
+# Plugin Barcode para GLPI 11
+## Migrado a GLPI 11.x por Dawing S.A.S.
+
+---
+
+## ¿Qué hace este plugin?
+
+| Función | Descripción |
+|---|---|
+| **Barcodes lineales** | Genera Code39, Code128, EAN13, INT25, Postnet, UPC-A a partir del número de inventario (`otherserial`) del activo |
+| **QR codes** | Genera QR codes con contenido configurable: número de serie, inventario, ID, UUID, nombre, URL y fecha |
+| **Exportación PDF** | Grilla de códigos exportada a PDF con layout automático (múltiples por página) |
+| **Acción masiva** | Disponible desde cualquier listado de activos GLPI: "Print barcodes" y "Print QRcodes" |
+| **Configuración por tipo** | Márgenes, tamaño de página, orientación, dimensiones máximas de código, tamaño de texto |
+| **Logo corporativo** | Permite subir un logo PNG que aparece sobre cada código en el PDF |
+
+---
+
+## Cambios realizados para compatibilidad con GLPI 11
+
+### setup.php
+- Versión mínima/máxima actualizada a `11.0.0` / `11.0.99`
+- Eliminado `$PLUGIN_HOOKS['csrf_compliant']` (deprecado y eliminado en GLPI 11)
+- Eliminado `Plugin::getWebDir()` (deprecado en GLPI 11) → reemplazado por rutas absolutas `/plugins/barcode/...`
+
+### hook.php
+- `$DB->query(...) or die(...)` → reemplazado por `$DB->doQueryOrDie(...)` (API GLPI 11)
+- Bug heredado: `PRIMARY KEY (ID)` (mayúscula) → corregido a `PRIMARY KEY (id)` (minúscula, compatible con MariaDB estricto)
+- `$DB->request('tabla', $cond)` → actualizado a sintaxis con array estructurado
+
+### inc/barcode.class.php / inc/qrcode.class.php
+- `Plugin::getWebDir()` → rutas `/plugins/barcode/front/...`
+- `count()` sobre valores que pueden ser null → protegido con `is_array()`
+- `key($ma->items)` → comparación mejorada con `is_a()` para detectar tipos ITIL
+
+### inc/config.class.php
+- `array_keys($obj->find(...))[0]` → `array_key_first($obj->find(...))` (PHP 7.3+, disponible en PHP 8.x)
+
+### front/*.php
+- Validación de seguridad mejorada en `send.php` (solo permite archivos PDF propios del plugin)
+- `document.send.php`: validación de MIME type y restricción solo a `barcode/logo.png`
+- `checkItemByInv.php`: validación de que el itemtype es subclase de `CommonDBTM`
+- Confirmaciones con `Session::checkRight()` en todos los controladores
+
+### composer.json
+- `platform.php` actualizado de `7.4.0` a `8.1.0`
+- Añadido autoload `classmap` para el directorio `inc/`
+
+---
+
+## Requisitos del servidor
+
+| Componente | Versión mínima |
+|---|---|
+| GLPI | 11.0.0 |
+| PHP | 8.1 |
+| Extensiones PHP | `gd`, `mbstring`, `xml`, `curl` |
+| Composer | 2.x |
+
+---
+
+## Instalación
+
+### Paso 1 – Copiar el plugin
+
+```bash
+# Desde el directorio raíz de GLPI
+cp -r /ruta/a/barcode /var/www/glpi/plugins/barcode
+# O usando marketplace
+cp -r /ruta/a/barcode /var/www/glpi/marketplace/barcode
+```
+
+### Paso 2 – Instalar dependencias con Composer
+
+```bash
+cd /var/www/glpi/plugins/barcode
+composer install --no-dev --optimize-autoloader
+```
+
+> **Nota:** Si el servidor no tiene acceso a internet, ejecuta Composer en tu equipo local
+> y sube la carpeta `vendor/` completa al servidor.
+
+### Paso 3 – Verificar permisos
+
+```bash
+# El usuario del servidor web (apache/nginx/www-data) debe poder escribir en:
+chown -R www-data:www-data /var/www/glpi/plugins/barcode
+chmod -R 755 /var/www/glpi/plugins/barcode
+
+# Y también en el directorio de documentos del plugin:
+mkdir -p /var/www/glpi/files/_plugins/barcode
+chown -R www-data:www-data /var/www/glpi/files/_plugins/barcode
+chmod -R 750 /var/www/glpi/files/_plugins/barcode
+```
+
+### Paso 4 – Instalar en GLPI
+
+1. Entrar a GLPI como super-administrador
+2. Ir a **Configuración → Plugins** (o **Setup → Plugins**)
+3. Localizar **Barcode** en la lista
+4. Hacer clic en **Instalar** (ícono de engranaje)
+5. Hacer clic en **Activar**
+
+### Paso 5 – Configurar derechos
+
+1. Ir a **Administración → Perfiles**
+2. Editar los perfiles que necesiten usar el plugin
+3. En la pestaña **Barcode** configurar:
+ - `Manage configuration` (UPDATE) → para administradores
+ - `Generation of barcode` (CREATE) → para técnicos
+
+---
+
+## Uso
+
+### Generación manual
+
+Ir a **Herramientas → Barcode** y escribir el código a generar.
+
+### Generación desde activos (acción masiva)
+
+1. Ir a cualquier listado de activos (Equipos, Monitores, Impresoras, etc.)
+2. Seleccionar uno o más activos con los checkboxes
+3. En la barra de acciones masivas: **Barcode – Print barcodes** o **Barcode – Print QRcodes**
+4. Configurar opciones (tipo, tamaño, orientación, campos a incluir en QR)
+5. Hacer clic en **Create** → aparecerá un enlace para descargar el PDF
+
+### Logo corporativo
+
+1. Ir a **Configuración → Plugins → Barcode**
+2. En la sección **Company logo**, subir un archivo PNG
+3. El logo aparecerá sobre cada código en los PDFs generados
+
+---
+
+## Estructura de archivos
+
+```
+barcode/
+├── setup.php ← Bootstrap e inicialización de hooks
+├── hook.php ← Funciones de instalación/desinstalación/acciones masivas
+├── barcode.xml ← Metadatos del plugin
+├── composer.json ← Dependencias PHP
+├── inc/
+│ ├── barcode.class.php ← Clase principal: generación de códigos lineales + PDF
+│ ├── qrcode.class.php ← Clase QR code
+│ ├── config.class.php ← Clase de configuración general
+│ ├── config_type.class.php ← Clase de configuración por tipo
+│ └── profile.class.php ← Clase de gestión de perfiles/derechos
+├── front/
+│ ├── barcode.php ← Listado/formulario de generación manual
+│ ├── barcode.form.php ← Procesador POST de generación manual
+│ ├── config.php ← Página de configuración
+│ ├── config.form.php ← Procesador POST de configuración general
+│ ├── config_type.form.php ← Procesador POST de configuración por tipo
+│ ├── send.php ← Descarga del PDF generado
+│ ├── document.send.php ← Sirve el logo de la empresa
+│ └── checkItemByInv.php ← Búsqueda de activo por número de inventario
+├── locales/ ← Archivos de traducción (.po/.mo)
+├── patch/
+│ └── fix-pear-image-barcode.patch ← Patch de compatibilidad PHP 8.x para PEAR Image_Barcode
+└── vendor/ ← Dependencias Composer (generadas por composer install)
+```
+
+---
+
+## Notas de compatibilidad
+
+- Esta versión (3.0.0) es **exclusivamente compatible con GLPI 11.0.x**
+- Para GLPI 10.0.x usar la versión 2.7.1 del plugin original
+- Las tablas de base de datos son compatibles hacia atrás (mismo esquema)
+- Los archivos PDF e imágenes generados previamente en `files/_plugins/barcode/` siguen siendo válidos
+
+---
+
+## Soporte
+
+Para soporte técnico relacionado con esta migración:
+- **Dawing S.A.S.** – https://dawing.com.co
+- soporte@dawing.com.co
+
+Para el plugin original:
+- https://github.com/pluginsGLPI/barcode
diff --git a/barcode.xml b/barcode.xml
index 136ff8f..32f4808 100644
--- a/barcode.xml
+++ b/barcode.xml
@@ -1,160 +1,61 @@