Como imaginará, la tabla `products` es el corazón donde se almacenen todos y cada uno de sus productos disponibles en el sistema.

Un producto determinado debe pertenecer a un Catálogo de productos y puede estar en cero, una o más categorías de productos.

A continuación se detallan las columnas que tiene la tabla de Productos (`products`)

| **Columna** | **Tipo**                    | **Nulable** | **Descripción**                                                                                                                                                                        |
| :--- |:----------------------------|:------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `id` | Bigint                      | ---         | ID único del producto *(usado por WillyLabs)*                                                                                                                                          |
| `catalog_id` | Bigint                      | No          | ID del catálogo de productos al que pertenece                                                                                                                                          |
| `sku` | String(100)                 | No          | SKU único del producto                                                                                                                                                                 |
| `barcode` | String(100)                 | Sí          | Código de barras único para el producto                                                                                                                                                |
| `name` | String(255)                 | No          | Nombre del producto                                                                                                                                                                    |
| `description` | Text                        | Sí          | Descripción del producto                                                                                                                                                               |
| `type` | [ProductType](#producttype) | No          | Tipo de producto, definido por ProductType. *Por defecto: `simple`*                                                                                                                    |
| `is_perishable` | Boolean                     | No          | Especifica si el producto es perecible o no. *Por defecto: `false`*                                                                                                                    |
| `shelf_life_days` | Integer                     | *Depende*   | Especifica el tiempo de vida en días de un producto. Obligatorio si `is_perishable` es `true`                                                                                          |
| `unit` | [UnitType](#unittype)       | No          | Define la unidad de venta del producto. *Por defecto: `unit`*                                                                                                                          |
| `average_cost` | Numeric(15,4)               | Sí          | Costo promedio del producto                                                                                                                                                            |
| `sale_price` | Numeric(15,4)               | No          | Precio de venta del producto                                                                                                                                                           |
| `tax_percentage` | Numeric(5,2)                | No          | Porcentaje de impuesto que se le aplica al producto. *Por defecto: `19.00`*                                                                                                            |
| `is_tax_applied`| Boolean | No          | Especifica si el porcentaje ya está aplicado al `sale_price`, si es `false` y `tax_percentage` es mayor a `0` se agregará al sale_price el porcentaje adicional. *Por defecto: `true`* |
| `stock_min` | Numeric(15,3) | Sí          | Establece la cantidad mínima de stock para el producto                                                                                                                                 |
| `stock_control` | Boolean | No | Define si el sistema se preocupa del control de stock para este producto. *Por defecto: `true`*                                                                                        |
| `pos_settings` | Json | Sí | Establece la configuración del producto en WillyPOS                                                                                                                                    |
| `tags` | Text[] | Sí | Lista de textos que describen al producto                                                                                                                                              |
| `metadata` | Json | Sí | Lista de Clave/Valor que describen al producto                                                                                                                                         |
| `is_active` | Boolean | No | Define si el producto está activo. *Por defecto: `true`* |
| `deleted_at` | Timestamp | Sí | Establece la fecha y hora de eliminación del producto |
| `deleted_by` | Bigint | Sí | Especifica el ID del usuario que eliminó el producto |
| `updated_at` | Timestamp | No | Fecha y hora de la última modificación del producto |
| `updated_by` | Bigint | No | ID del último usuario que realizó una modificación en el producto |
| `created_at` | Timestamo | No | Almacena la fecha y hora en que se creó el producto |
| `created_by` | Bigint | No | ID del usuario que creó el producto |
| `updated_summary` | Json | No | JSON que proporciona la información histórica de modificaciones del producto |