# Flujo de Procesamiento — Datos Maestros de Artículos
## Arquitectura General
```mermaid
graph TB
subgraph "Frontend React (sap-frontend)"
RT[Router App.tsx]
LIST[ItemsList.tsx]
LIST_TMPL[ListViewTemplate.tsx]
VISTA[Items.tsx]
FORM[ItemForm.tsx]
UI_FF[FormattedField.tsx]
UI_SEL[SelectField.tsx]
UI_TABLE[DenseTable.tsx]
API[api.ts]
ENUMS[enums.ts]
TYPES[types/sapItems.ts]
end
subgraph "Backend FastAPI (mini-backend)"
ROUTER[routers/items.py<br/>make_crud_router]
CORE[core/crud_router.py]
SAPCORE[core/sap.py<br/>forward_to_sapb1]
end
subgraph "SAP Business One"
SL[Service Layer<br/>Items / ItemGroups]
end
RT --> LIST
RT --> VISTA
LIST --> LIST_TMPL
LIST_TMPL --> UI_TABLE
LIST_TMPL --> API
VISTA --> FORM
FORM --> UI_FF
FORM --> UI_SEL
FORM --> API
FORM --> ENUMS
FORM --> TYPES
API -->|GET/POST/PATCH| ROUTER
ROUTER --> CORE
CORE --> SAPCORE
SAPCORE -->|B1SESSION| SL
```
**Diferencia clave respecto al flujo de Lotes:**`ItemForm.tsx` no hace mapeo de nombres SAP→amigable (no existe un `mapSapToFriendly`). El estado del formulario (`SapItem`, en `types/sapItems.ts`) usa directamente los nombres de campo de SAP (`ItemCode`, `ItemName`, `ItemsGroupCode`, etc.), tanto para mostrar como para enviar al backend. Tampoco hay tabla de mapeo de nombres en esta sección por ese motivo.
En el backend, `routers/items.py` no tiene lógica propia: es una instancia de la factory genérica `make_crud_router("Items", key_field="ItemCode", key_quoted=True)` definida en `core/crud_router.py` (ver `mini-backend/docs/architecture.md`), que arma las cuatro rutas CRUD y reenvía a SAP vía `core/sap.py`.
## Flujo Vista de Lista → Editar/Crear Artículo
```mermaid
sequenceDiagram
actor User as Usuario
participant Router as App.tsx
participant ListView as ItemsList
participant LVT as ListViewTemplate
participant DTable as DenseTable
participant DetailView as Items
participant Form as ItemForm
participant API as api.ts
participant Backend as backend items.py
participant SAP as SAP Service Layer
User->>Router: /inventario/articulos
Router->>ListView: render
ListView->>API: GET /api/ItemGroups (para mapear ItemsGroupCode → nombre en la columna "Grupo")
El label de cada campo muestra el nombre técnico SAP en un tooltip (ícono ⓘ, prop `dbField`) en vez de mostrarlo dentro del propio texto del label — ver `FieldTooltip.tsx` y la misma convención en `flujo-lotes.md`.