Stockroom — magazzino e inventario
L'inventario che sta in un file: giacenze, soglie minime e valore del magazzino, con gli avvisi sotto scorta sempre in vista.
spazio dati «stockroom» — il collante della suite: sul tuo dispositivo, multi-utente con un invito (link o QR), cifrato end-to-end.
oppure aprila come app unica
Cosa registra
- Articolo
- Categoria...
- Giacenza attuale
- Stockroom minima
- Prezzo unitario (€)
Composta da 3 micro app
Un compito ciascuna, sugli stessi dati: ogni micro app legge e scrive lo spazio dati condiviso «stockroom» (col tuo consenso, chiesto alla prima apertura). Tutto resta sul tuo dispositivo — e con un solo invito l'intera suite diventa multi-utente, cifrata end-to-end.
Come funziona
Questa è un'app Reactive: un semplice documento di testo che il browser trasforma in un'app funzionante — moduli, dati dal vivo, tabelle, statistiche e persino grafici, senza installare né configurare nulla.
- Usala subito. Premi «Usa questa app»: si apre subito nel tuo browser, già pronta, con i dati salvati solo sul tuo dispositivo.
- I tuoi dati restano tuoi. Tutto è memorizzato in locale sul dispositivo, separato per ogni app: niente account, niente server, niente da configurare.
- Rendila tua. Il testo qui sotto è l'app per intero: copialo, cambia campi, viste e parole, e le modifiche diventano subito interattive.
- Condividila come file. Un'app è un semplice file: salvalo, esportalo o condividilo con un link; e con la collaborazione cifrata più persone modificano gli stessi dati in tempo reale.
Il testo dell'app
# 📦 Stockroom
L'inventario che sta in un file: giacenze, soglie minime e valore del magazzino, con gli avvisi sotto scorta sempre in vista.
:::::page{title="Articoli" icon="📦"}
## Anagrafica articoli
Registra ogni articolo con giacenza, soglia minima e prezzo unitario. La
matita in tabella modifica giacenze e prezzi; le colonne si ordinano col clic
e i pulsanti CSV importano/esportano l'inventario.
::::form{path="articoli" id="fart"}
::input{form="fart" field="nome" placeholder="Articolo" required="true"}
:::select{form="fart" field="categoria" placeholder="Categoria..."}
- Prodotti finiti
- Materie prime
- Consumabili
- Ricambi
:::
::input{form="fart" field="quantita" type="number" placeholder="Giacenza attuale" required="true"}
::input{form="fart" field="minimo" type="number" placeholder="Stockroom minima"}
::input{form="fart" field="prezzo" type="number" placeholder="Prezzo unitario (€)"}
::add-form{form="fart" path="articoli" label="Aggiungi articolo"}
::::
:::table{path="articoli" headers="Articolo,Categoria,Giacenza,Minimo,Prezzo,Valore" deletable="true" editform="fart"}
**{nome}** | {categoria} | {quantita} | {minimo} | € {prezzo} | € {quantita*prezzo}
:::
:::::
:::::page{title="Sotto scorta" icon="⚠️"}
## Articoli da riordinare
Il controllo gira da solo a ogni modifica: qui compaiono gli articoli con
giacenza pari o sotto la soglia minima.
:::python{data="articoli"}
```
rows = data.get("articoli", [])
if not rows:
print("Nessun articolo in magazzino.")
else:
low = [r for r in rows
if float(r.get("quantita", 0) or 0) <= float(r.get("minimo", 0) or 0)
and (r.get("minimo") or "") != ""]
if not low:
print("✅ Tutto ok: nessun articolo sotto scorta.")
else:
print(f"⚠️ {len(low)} articoli da riordinare:\n")
for r in low:
print(f" • {r.get('nome','?')} — giacenza {r.get('quantita')}, minimo {r.get('minimo')}")
```
:::
:::::
:::::page{title="Valore" icon="💶"}
## Quanto vale il magazzino
:::grid{cols="2"}
**Articoli a catalogo**
:count[nart]{path="articoli"}
---
**Valore totale (€)**
:sum[vtot]{path="articoli" field="quantita*prezzo"}
:::
## Per categoria
:::group-by{path="articoli" field="categoria" as="table" headers="Articolo,Giacenza,Valore"}
{nome} | {quantita} | € {quantita*prezzo}
:::
:::::