# plugin-inventory

`@fayz-ai/plugin-inventory` · beta · Capability parcial

Inventory is the universal organ — a salon counts product, a restaurant counts ingredients, a clinic counts supplies. plugin-inventory is that organ as a plugin: a product catalog, stock entry/exit/history, optional recipes (bill of materials), and a dashboard that surfaces stock value and what's running low. It's scope: universal, so it snaps into any vertical.

## Visão geral

Estoque e catálogo: entradas e saídas, histórico, saldo por local e fichas técnicas (receitas). Monta a página `/inventory` e widgets de dashboard. Os módulos `recipes`, `stockLocations` e `batchTracking` (opt-in) são ligáveis por config; os tipos de produto padrão são insumo, para venda, intermediário e ativo.

Sobre dados, **os produtos são o arquétipo** `saas_core.products`; o plugin acrescenta tabelas de extensão em `public` — `stock_locations`, `stock_movements`, `stock_positions`, `recipes`, `recipe_ingredients`, `measurement_units` e `product_categories` — em quatro migrations (renomeação de prefixo, base, receitas, unidades de medida). Provider Supabase com fallback mock.

Para IA, expõe `getLowStock` (produtos abaixo do mínimo). Status **beta / capability parcial**.

## Quando usar

- Controlar entradas, saídas e saldo de estoque por local.
- Modelar receitas ou fichas técnicas que consomem insumos.
- Receber alertas de estoque baixo, inclusive via IA.

## Ficha técnica

- **Pacote:** `@fayz-ai/plugin-inventory`
- **Versão:** 0.1.7
- **Status:** beta
- **Capability:** Capability parcial
- **Tipo de produto:** Gestão (Admin/SaaS), E-commerce, Restaurante / food
- **Canal stable:** `^0.1.7`
- **Migrations:** 4 migration(s)
- **Factory:** `createInventoryPlugin()`

## Modelo de dados

Tabelas instaladas (convenção `plg_` · `tenant_id` + RLS):

- `plg_inventory_product_categories` — name, parent_id, is_active
- `plg_inventory_stock_locations` — name, description, is_active, unit_id
- `plg_inventory_stock_movements` — product_id, quantity, movement_type, unit_cost, total_cost, stock_location_id
- `plg_inventory_stock_positions` — product_id, quantity, unit_cost, stock_location_id, batch_number, expiration_date
- `plg_inventory_recipes` — name, description, product_id, yield_quantity, yield_unit_id, preparation_time_minutes
- `plg_inventory_recipe_ingredients` — recipe_id, product_id, quantity, unit_id, display_order, notes
- `plg_inventory_measurement_units` — name, abbreviation, is_active

## Tools de IA

| id | modo | descrição |
| --- | --- | --- |
| `inventory.low-stock` | read | Lists products with stock below minimum threshold. |

## Integrações

Sem conector hospedado — provedores externos via spine de conectores (`@fayz-ai/core`).

## Integrar

Adicione o plugin em `surfaces.admin.plugins` do `app.manifest.json` e rode o doctor:

```json
{ "surfaces": { "admin": { "plugins": [ { "id": "inventory", "enabled": true } ] } } }
```

```bash
npx fayz doctor
```
