VM Wolf — Projekto Žemėlapis
OpenWolf žinių valdymo sistema
🕸 Grafas ← Grįžti į VM
Paskutinis atnaujinimas: ← skaityti faile

VM Projekto Cerebrum — Gyvas Žinių Žemėlapis

> [!info] Apie šį failą

> Tai gyvas projekto žinių žemėlapis. Kiekvieną sesiją Claude automatiškai atnaujina šį failą.

> Skaityti prieš rašant bet kokį kodą. Žr. [[anatomy]] failų struktūrai.

Paskutinis atnaujinimas: 2026-06-19

---

1. PROJEKTO ESMĖ

VM (buvęs TMA MES) — gamybos valdymo sistema Daily Spoon (DS) maisto gamybai.

  • Maistiniai papildai (paketeliai, pouchai, stickai)
  • Receptūrų, LOT numerių ir EXP datų sekimas
  • Gamybos kortelių kūrimas ir valdymas
  • Spausdinimas (važtaraščiai, gamybos kortelės PDF)
  • Pakuočių tipai (pakuotes_tipas)

    VertėUI pavadinimasFizinis tipasGamybos būdas |
    |-------|---------------|---------------|---------------|
    'plevele'PaketeliaiSachet — plokščia maža pakuotėPlėvelė ritinyje → staklinė formuoja ir užpildo |
    'pouch'PauchaiPouch — didelė stovinčio maiši pakuotėMišinys pilamas į jau pagamintą maišą iš tiekėjo |
    'stick'StickaiStick — pailga siaura pakuotėPlėvelė ritinyje → staklinė formuoja stick formą |

    > Esminis skirtumas:

    > - plevele + stick → pakuotė formuojama iš plėvelės rulono staklinėje (LOT/EXP ant rulono)

    > - pouch → pakuotė jau pagaminta tiekėjo, gaunama gatava — mišinys tik įpilamas (LOT/EXP ant maišo)

    ---

    2b. GAMYBOS DETALĖS PAGAL TIPĄ

    🎞 Paketeliai (Sachet) — 'plevele'

    Mašinos:

  • Turpack — horizontalaus arba vertikalaus pakavimo
  • x2 = vieno kanalo (1 eilutė), x4 = dviejų kanalų (2 eilutės vienu metu)
  • Plėvelės formatas priklauso nuo staklinės tipo (horizontali/vertikali) ir kanalų skaičiaus
  • Rekomenduojama mašina saugoma recepto lygyje (pvz. "šis produktas byra ant x2, gaminti x4")
  • LOT sistema:

  • Formatas: [Raidė][DDMMYY] → pvz. A260617, B260617
  • Raidė = eilės numeris sąskaitoje (A = pirmoji plėvelė, B = antroji...)
  • Data = gavimo data
  • Vienas LOT = visas gautas kiekis (ne per ruloną)
  • Gamybos eiga:

    1. Plėvelė registruojama gavimo dieną → LOT priskiriamas automatiškai

    2. Staklinė gamina → paketeliai krenta į dėžes → dėžės į paletę → pakavimas

    3. Palaidi variantas: dalis arba visas kiekis — transportinės dėžės (be retail dėžučių)

    4. Svoris tikrinamas pasirinktinai gamyboje, brokas atrenkami pakavime

    Pakavimo info: recepto lygmenyje (kiek vnt. į dėžutę, dėžučių į kartoną ir pan.)

    ---

    🥢 Stickai (Stick) — 'stick'

    Mašinos: Kinų gamybos staklinės (ne Turpack)

    LOT sistema: Tokia pati kaip paketelių ([Raidė][DDMMYY])

    Gamybos eiga: Analogiška paketelių — gali eiti į retail dėžutes arba palaidi transportinėse

    Šiuo metu: nėra specifinių gamybos sunkumų

    ---

    🥤 Pouchai (Pouch) — 'pouch'

    Pildymas:

  • Dalis produktų — rankiniu būdu (dėl byrejimo)
  • Kiti — per aparatą, svoris patikrinamas ant svarstyklių
  • Po pildymo: zip užspaudžiamas → praleidžiamas per heat sealer (viršūnė užklijuojama)
  • LOT/EXP: Nurodo užsakovas (serija + galiojimas). Šiuo metu stampuojama ant kiekvieno poucho. Ateityje — gali ateiti jau su data iš tiekėjo.

    Gamybos kortelė: Užsakovas pasako kiekį + seriją + galiojimą → įvedama ranka sistemoje. Ateityje — failo importas.

    Kokybė: Šiuo metu kiekvienas pouchas pasveramas.

    Pakavimas: Tik transportinės dėžės (didelė gramai → retail dėžučių nėra). Ant dėžių klijuojamos atspausdintos etiketės.

    DS specifika: Užsakovo serija netaikoma — tik EXP data ir kiekis.

    Pouch gamybos kortelės UI pertvarka (Session 4):

  • DĖŽĖS blokas: Pašalintas įprastas retail pakavimo baras. Vietoje jo atvaizduojamas žalias, neinteraktyvus DĖŽĖS blokas, kuris automatiškai skaičiuoja pilnų dėžių skaičių ($\lfloor\text{kiekis} / \text{pak\_dezeje}\rfloor$) bei nepilnos dėžės likutį.
  • PILDYMAS blokas: Gamybos (staklių) baras pervadintas į PILDYMAS (oranžinė spalva, naudoja droplets piktogramą). Jį paspaudus registruojamas pagamintas kiekis.
  • allDone logika: Pouchams užbaigti kortelę pakanka tik staklių pabaigos požymio: allDone = card.stakles_baigtos (vietoj abiejų staklių ir pakavimo baigimo tikrinimo).
  • Kortelių vizualinis stilius UI:

  • Šoninė linija: Vykdomų kortelių šoninė linija/apvadas pakeistas iš mėlynos į oranžinę (laukiančių gamybos kortelių išlieka mėlyna).
  • Spalvų paryškinimas: Info barų (progress blocks) spalvos ir užpildai buvo paryškinti siekiant didesnio kontrasto šviesiojoje temoje. Pažymėjus gamybą arba pakavimą kaip baigtus, atitinkamas blokas tampa žalias su žyma .
  • Kortelės regionai: Multi-region (combo) kortelėse informacija apie atskirus regionus dabar išskleidžiama naudojant display:grid maketą.
  • ---

    2. TECH STACK

    ``

    Backend: Node.js + Express (server.js, --watch hot-reload)

    Frontend: Vanilla HTML/CSS/JS (BEZ TailwindCSS, BEZ frameworks)

    DB: SQLite pb_data/data.db (node:sqlite, DatabaseSync, ES module)

    Alt DB: PocketBase :8090 (kai kurioms kolekcijoms)

    Serveris: localhost:3000

    `

    > [!warning] Svarbu

    > pb_data/data.db — VIENINTELIS DB šaltinis šiame kompiuteryje.

    > S:\ serveris — NELIESTI be aiškaus vartotojo leidimo.

    ---

    3. DB SCHEMA

    gamybos_korteles — pagrindinė lentelė

    `sql

    id TEXT PRIMARY KEY

    receptas_id TEXT -- FK → receptai.id

    recepto_pavadinimas TEXT -- denormalizuotas pavadinimas

    lot TEXT -- LOT numeris

    exp TEXT -- Galiojimo data (YYYY-MM-DD)

    pleveles_statusas TEXT -- 'Gauta' | 'Laukiama' | NULL

    planuojamas_kiekis INTEGER -- Pouchams: kiek maišų; plėvelei: kiek kg/vnt

    sumaisytas_kiekis REAL -- Kiek kg mišinio jau sumaišyta

    pagaminta_viso REAL -- Kiek iš viso pagaminta

    pakuotes_tipas TEXT -- 'plevele' | 'pouch' | 'stick'

    kliento_serija TEXT -- gamintojo serija etiketėms

    gamyba_pradeta INTEGER -- 0=planavimas, 1=aktyvi gamyba

    busena TEXT -- 'vykdoma' | 'baigta' | 'archyvuota'

    created TEXT, updated TEXT

    `

    receptai — receptūros

    `sql

    id TEXT PRIMARY KEY

    pavadinimas TEXT

    pakuotes_tipas TEXT

    svoris REAL -- Pakuotės svoris (g)

    pak_dezuteje INTEGER -- vnt. dėžutėje

    dez_dezeje INTEGER -- dėžučių dėžėje

    pak_dezeje INTEGER -- viso vnt. dėžėje (computed)

    klientas TEXT -- kliento kodas

    palaidi INTEGER -- 1 = palaidi (be retail dėžučių)

    korteles_tipas TEXT -- gamybos kortelės tipas

    combo_dalybos TEXT -- JSON: dalinimo koeficientai

    pastabos TEXT -- pirkimo pastabos

    uzsakovo_zaliavos INTEGER -- 1 = naudoja kliento žaliavas

    stakliu_rekomendacija TEXT -- rekomenduojama staklinė *(pridėta 2026-06-17)*

    gamybos_pastabos TEXT -- laisvas gamybos komentaras *(pridėta 2026-06-17)*

    -- ⚠️ receptai NETURI 'kodas' kolonos!

    `

    pakuociu_sandelis — pouch sandėlis *(pridėta 2026-06-17)*

    `sql

    id TEXT PRIMARY KEY

    receptas_id TEXT NOT NULL -- FK → receptai.id (pouch tipo)

    kiekis INTEGER NOT NULL -- kiek vienetų gauta

    data TEXT -- gavimo data (YYYY-MM-DD)

    pastabos TEXT -- pvz. "DN92197 — Alpi Eesti"

    created TEXT, updated TEXT

    `

    gamybos_zurnalas — žurnalas

    `sql

    id TEXT PRIMARY KEY

    data TEXT NOT NULL

    pavadinimas TEXT

    veiksmas TEXT

    kiekis REAL

    batch TEXT

    created TEXT, updated TEXT

    `

    darbo_laikas — darbuotojų darbo laiko apskaita

    `sql

    id TEXT PRIMARY KEY

    data TEXT NOT NULL -- darbo diena (YYYY-MM-DD)

    vardas TEXT NOT NULL -- darbuotojo vardas

    virsvalandziai TEXT NOT NULL -- valandų skaičius (tekstu)

    tipas TEXT -- DARBAS / ATOSTOGOS / TEVADIENIS

    created TEXT, updated TEXT

    `

    gamybos_dosje — kortelių istorinis archyvas / dosje

    `sql

    id TEXT PRIMARY KEY

    uzsakymo_id TEXT NOT NULL -- susijusio užsakymo ID

    produkto_id TEXT NOT NULL -- produkto/recepto ID

    pavadinimas TEXT NOT NULL -- produkto pavadinimas

    lot TEXT NOT NULL -- gamybos LOT

    galiojimas TEXT NOT NULL -- EXP data

    planas REAL NOT NULL -- planuotas gamybos kiekis

    plevele REAL NOT NULL -- sunaudota plėvelė (kg)

    dezutes REAL NOT NULL -- sunaudotos dėžutės (vnt)

    pradeta TEXT NOT NULL -- gamybos pradžios laikas

    baigta TEXT NOT NULL -- gamybos pabaigos laikas

    stakles REAL NOT NULL -- staklių pagamintas kiekis

    supakuota REAL NOT NULL -- supakuotas kiekis

    isvezta REAL NOT NULL -- išvežtas kiekis

    archyvuota TEXT NOT NULL -- archyvavimo požymis/laikas

    pakuotes_tipas TEXT NOT NULL -- pakuotės tipas

    dosje TEXT NOT NULL -- pilnas dosje tekstas / ataskaita

    html_kortele TEXT NOT NULL -- sugeneruotas kortelės HTML

    created TEXT, updated TEXT

    `

    ingredientai — recepto sudėtis (žaliavos)

    `sql

    id TEXT PRIMARY KEY

    receptas_id TEXT NOT NULL -- FK → receptai.id

    zaliava_id TEXT NOT NULL -- FK → zaliavos.id

    kiekis_vienai_porcijai REAL NOT NULL -- žaliavos svoris kg vienam maišymui

    created TEXT, updated TEXT

    `

    isvezimai — prekių išvežimo pagal važtaraščius registras

    `sql

    id TEXT PRIMARY KEY

    vaztarascio_id TEXT NOT NULL -- FK → vaztarasciai.id

    korteles_id TEXT NOT NULL -- FK → gamybos_korteles.id

    kiekis REAL NOT NULL -- išvežtas prekių kiekis (vnt)

    prekes_pavadinimas TEXT NOT NULL

    lot TEXT NOT NULL

    created TEXT, updated TEXT

    `

    klientai — partneriai / klientai

    `sql

    id TEXT PRIMARY KEY

    kodas TEXT NOT NULL -- unikalus kliento kodas (pvz. EV, BENU)

    pavadinimas TEXT NOT NULL -- pilnas pavadinimas

    adresas TEXT NOT NULL

    email TEXT NOT NULL

    phone TEXT NOT NULL

    papildomi TEXT NOT NULL -- papildoma info (JSON / tekstas)

    created TEXT, updated TEXT

    `

    korteles_regionai — gamybos kortelės paskirstymas regionams (combo)

    `sql

    id TEXT PRIMARY KEY

    kortele_id TEXT NOT NULL -- FK → gamybos_korteles.id

    regionas TEXT NOT NULL -- regiono kodas/pavadinimas

    dezutes_kiekis INTEGER -- planuojamas dėžučių kiekis

    dezutes_exp TEXT -- regiono galiojimo data

    dezutes_gauta TEXT

    pak_dezeje INTEGER -- paketų dėžėje

    pak_dezuteje INTEGER -- paketų dėžutėje

    dez_dezeje INTEGER -- dėžučių transportinėje dėžėje

    supakuota_kiekis REAL -- supakuotas kiekis tam regionui

    isvezta_kiekis REAL -- išvežtas kiekis tam regionui

    statusas TEXT -- regiono būsena

    eilutes_nr INTEGER -- rikiavimo eilės numeris

    created TEXT, updated TEXT

    `

    nurasymai — gamybos metu nurašytų žaliavų registras

    `sql

    id TEXT PRIMARY KEY

    korteles_id TEXT NOT NULL -- FK → gamybos_korteles.id

    zaliava_id TEXT NOT NULL -- FK → zaliavos.id

    panaudotas_kiekis REAL NOT NULL -- nurašytas kiekis (kg)

    created TEXT, updated TEXT

    `

    recepto_sudetis — recepto sudėties lentelė (gali dubliuoti/pakeisti ingredientai)

    `sql

    id TEXT PRIMARY KEY

    receptas_id TEXT NOT NULL -- FK → receptai.id

    zaliava_id TEXT NOT NULL -- FK → zaliavos.id

    kiekis_vienai_porcijai REAL NOT NULL

    created TEXT, updated TEXT

    `

    vaztarasciai — prekių išvežimo važtaraščiai

    `sql

    id TEXT PRIMARY KEY

    numeris TEXT NOT NULL -- važtaraščio numeris

    kliento_pavadinimas TEXT NOT NULL

    data TEXT NOT NULL -- išrašymo data

    siuntejas TEXT NOT NULL -- atsakingas asmuo / siuntėjas

    palečių_kiekis INTEGER NOT NULL -- palečių skaičius

    viso_vnt INTEGER NOT NULL -- bendras prekių vnt kiekis

    viso_deziu INTEGER NOT NULL -- bendras dėžių kiekis

    payload TEXT NOT NULL -- papildomi išvežimo duomenys (JSON)

    statusas TEXT NOT NULL -- važtaraščio būsena

    created TEXT, updated TEXT

    `

    zaliavos — žaliavų sandėlio likučiai

    `sql

    id TEXT PRIMARY KEY

    pavadinimas TEXT NOT NULL -- žaliavos pavadinimas

    likutis REAL NOT NULL -- esamas likutis kg

    vienetas TEXT NOT NULL -- matavimo vienetas (dažniausiai 'kg')

    klientas_id TEXT -- FK → klientai.id (jei žaliava nuosava)

    created TEXT, updated TEXT

    `

    zaliavu_gavimai — žaliavų gavimo iš tiekėjų žurnalas

    `sql

    id TEXT PRIMARY KEY

    data TEXT NOT NULL -- gavimo data

    siuntejas TEXT NOT NULL -- tiekėjas / siuntėjas

    zaliava_id TEXT NOT NULL -- FK → zaliavos.id

    zaliava_pavadinimas_raw TEXT NOT NULL -- žaliavos pavadinimas iš dokumentų

    serijos_nr TEXT NOT NULL -- tiekėjo LOT / serija

    galiojimas TEXT NOT NULL -- tiekėjo EXP data

    kiekis REAL NOT NULL -- gautas kiekis (kg)

    busena TEXT NOT NULL -- gavimo būsena

    created TEXT, updated TEXT

    `

    ---

    4. GAMYBOS CIKLAS

    `

    1. PLANAVIMAS gamyba_pradeta=0 → Gamybos langas

    2. AKTYVI GAMYBA gamyba_pradeta=1 → Pagrindinis langas

    3. BAIGTA busena='baigta' → Istorija

    4. ARCHYVUOTA busena='archyvuota' → Archyvas

    `

    Pouchų workflow

    `

    Gavimas iš tiekėjo → pakuociu_sandelis

    Sandėlio kortelė: gauta / rezervuota / laisva

    Vartotojas įveda LOT + EXP + kiekį

    Sukuriama gamybos_kortele (pleveles_statusas='Gauta' auto)

    Gamybos langas → Maisomi tab

    `

    ---

    5. API ENDPOINT'AI

    🕸️ Sistemos žemėlapis (Wolf)

  • GET /wolf — projekto žemėlapis naršyklėje (tekstinė versija)
  • GET /wolf/graph — interaktyvus D3.js tinklo grafas
  • 📋 Gamybos kortelės (Planavimas ir gamybos eiga)

  • GET /api/gamybos-korteles — gauti visas korteles (aktyvias, planuojamas)
  • POST /api/gamybos-korteles — sukurti naują gamybos kortelę
  • PATCH /api/gamybos-korteles/:id — atnaujinti kortelės duomenis
  • DELETE /api/gamybos-korteles/:id — ištrinti gamybos kortelę
  • POST /api/gamybos-korteles/:id/toggle-pill — įjungti/išjungti gamybos statuso mygtuką
  • POST /api/gamybos-korteles/:id/update-status — pakeisti kortelės būseną
  • POST /api/gamybos-korteles/:id/pradeti-gamyba — pradėti aktyvią gamybą (perkelti iš planavimo)
  • POST /api/gamybos-korteles/:id/registruoti-maisyma — užregistruoti atliktą maišymą (kg)
  • POST /api/gamybos-korteles/:id/registruoti-gamyba — užregistruoti staklių gamybą
  • POST /api/gamybos-korteles/:id/registruoti-supakavima — užregistruoti supakuotą kiekį dėžutėmis
  • POST /api/gamybos-korteles/:id/registruoti-pouch — užregistruoti užpildytus pouch maišelius
  • POST /api/gamybos-korteles/:id/registruoti-pagaminta — tiesiogiai užfiksuoti pagamintą kiekį
  • POST /api/gamybos-korteles/:id/baigti-stakles — pažymėti, kad gamyba staklėmis baigta
  • POST /api/gamybos-korteles/:id/baigti-pakavima — pažymėti, kad pakavimas baigtas
  • POST /api/gamybos-korteles/:id/archyvuoti — perkelti baigtą kortelę į archyvą
  • GET /api/gamybos-korteles/skaidres — gauti duomenis skaidrių / monitoriaus režimui
  • GET /api/gamybos-korteles/:id/atsekamumas — gauti LOT/EXP atsekamumo duomenis
  • GET /api/gamybos-korteles/:id/patikrinti-atsargas — patikrinti, ar pakanka žaliavų sandėlyje
  • GET /api/gamybos-korteles/:id/kortele-html — gauti kortelės spausdinimo HTML ataskaitą
  • GET /api/gamybos-korteles/:id/dosje-html — gauti gražiai suformatuotą A4 portrait formato Gamybos dosjė HTML spausdinimui
  • GET /api/istorija — gauti įvykdytų (baigtų) kortelių sąrašą
  • GET /api/dosje/:id — gauti istorinės kortelės dosje informaciją
  • GET /api/debug/korteles-count — gauti bendrą kortelių kiekį (debug)
  • 🥣 Receptūros ir sudėtis

  • GET /api/receptai — gauti visus receptus
  • GET /api/receptai-list — gauti supaprastintą receptų sąrašą
  • GET /api/receptai-detalus — gauti receptus su papildomais staklių/komentarų laukais
  • GET /api/receptai-gamybai — gauti receptus, paruoštus kortelių kūrimui
  • POST /api/receptai — sukurti naują receptą
  • PUT /api/receptai/:id — atnaujinti recepto pagrindinius/papildomus laukus
  • DELETE /api/receptai/:id — ištrinti receptą
  • POST /api/recepto-sudetis — pridėti žaliavą į recepto sudėtį
  • PUT /api/recepto-sudetis/:id — koreguoti žaliavos kiekį recepto sudėtyje
  • DELETE /api/recepto-sudetis/:id — pašalinti žaliavą iš recepto sudėties
  • 🧪 Žaliavų sandėlis (Likučiai ir nurašymai)

  • GET /api/zaliavos — gauti žaliavų sąrašą su esamais likučiais
  • POST /api/zaliavos — pridėti naują žaliavą į sistemą
  • PUT /api/zaliavos/:id — atnaujinti žaliavos kortelę
  • DELETE /api/zaliavos/:id — ištrinti žaliavą
  • GET /api/zaliavos/:id/panaudojimas — gauti žaliavos nurašymų/panaudojimo istoriją
  • GET /api/zaliavos/:id/gavimai — gauti šios žaliavos gavimų žurnalą
  • GET /api/nurasymai — gauti visų žaliavų nurašymų sąrašą
  • POST /api/papildyti-zaliava/:id — koreguoti žaliavos sandėlio likutį (+/- kg)
  • 🎞️ Medžiagų ir žaliavų gavimai (Pajamavimas)

  • GET /api/gavimai — gauti visus gavimo įrašus
  • PUT /api/gavimai/:id — redaguoti gavimo įrašą
  • DELETE /api/gavimai/:id — pašalinti gavimo įrašą
  • POST /api/registruoti-gavima — užregistruoti žaliavos gavimą iš tiekėjo
  • POST /api/gavimai/bulk — plėvelių rulonų priėmimas (auto-generuoja LOT kodus)
  • POST /api/priimti-medziagas — užregistruoti pakuotės medžiagų sunaudojimą gamybos kortelei
  • GET /api/pakuociu-gavimai — gauti plėvelių ir dėžučių gavimo suvestinę raw formatu
  • 🛍️ Pakuočių sandėlis (Pouch)

  • GET /api/pakuociu-sandelis — gauti pouch pakuočių sandėlio likučius
  • POST /api/pakuociu-sandelis — įvesti naują pouch gavimą iš tiekėjo
  • DELETE /api/pakuociu-sandelis/:id — ištrinti pouch sandėlio gavimo įrašą
  • GET /api/pouch-sandelys — gauti bendrą pakuočių ataskaitą
  • 📦 Važtaraščiai ir išvežimai

  • GET /api/vaztarasciai — gauti visus važtaraščius
  • GET /api/vaztarasciai/:id/html — sugeneruoti važtaraščio HTML peržiūrą
  • DELETE /api/vaztarasciai/:id — ištrinti važtaraštį
  • GET /api/vaztarastis-duomenys — pagalbiniai duomenys naujo važtaraščio kūrimui
  • GET /api/next-vaztarascio-numeris — sugeneruoti sekantį važtaraščio numerį
  • POST /api/greitas-issiuntimas — tiesioginis prekių išsiuntimas nenaudojant gamybos kortelės
  • POST /api/nurasyti-vaztarasti — užfiksuoti žaliavų nurašymą pagal išsiųstas prekes
  • GET /api/isvezimai — gauti prekių išvežimo įrašus pagal važtaraščius
  • GET /api/kpi-isvezta — gauti išvežtos produkcijos KPI ataskaitą
  • 🗺️ Multi-region (Kortelės regionai)

  • GET /api/gamybos-korteles/:id/regionai — gauti kortelės combo regionų paskirstymus
  • POST /api/gamybos-korteles/:id/regionai — pridėti naują regioną kortelei
  • PUT /api/gamybos-korteles/:id/regionai/:rid — koreguoti regiono pakavimo/EXP duomenis
  • DELETE /api/gamybos-korteles/:id/regionai/:rid — pašalinti regioną iš kortelės
  • POST /api/gamybos-korteles/:id/regionai/:rid/registruoti-supakavima — užregistruoti supakuotą kiekį konkrečiam regionui
  • ⏱️ Darbo laikas ir darbuotojai

  • GET /api/darbuotojai — gauti darbuotojų sąrašą
  • POST /api/darbuotojai — pridėti naują darbuotoją į sąrašą
  • GET /api/darbo-laikas — gauti darbo laiko žurnalą
  • POST /api/darbo-laikas — užregistruoti dirbtą laiką / viršvalandžius / atostogas / tėvadienį
  • PUT /api/darbo-laikas/:id — redaguoti darbo laiko įrašą
  • DELETE /api/darbo-laikas/:id — pašalinti darbo laiko įrašą
  • 📖 Gamybos žurnalas

  • GET /api/gamybos-zurnalas — gauti žurnalo įrašus
  • POST /api/gamybos-zurnalas — sukurti rankinį žurnalo įrašą
  • PUT /api/gamybos-zurnalas/:id — redaguoti žurnalo įrašą
  • DELETE /api/gamybos-zurnalas/:id — pašalinti žurnalo įrašą
  • 👥 Klientai

  • GET /api/klientai — gauti klientų sąrašą
  • POST /api/klientai — sukurti naują klientą
  • PUT /api/klientai/:id — redaguoti kliento kortelę
  • DELETE /api/klientai/:id — pašalinti klientą
  • 🖨️ Spausdinimas ir PDF generavimas

  • GET /api/debug/printeriai — gauti sistemoje įdiegtų spausdintuvų sąrašą (Zebra)
  • POST /api/spausdinti-hydraw — išsiųsti ZPL etiketės kodą į Zebra spausdintuvą
  • POST /api/generuoti-pdf — sugeneruoti PDF dokumentą iš HTML šablono
  • 📱 Mobilioji sąsaja

  • GET /mobile — mobiliosios aplikacijos nukreipimas
  • POST /api/mobilus/priimti — priimti ir apdoroti duomenis iš mobiliojo įrenginio
  • ⚙️ Administravimas, importas ir DB priežiūra

  • GET /api/sync-cloud — sinchronizuoti duomenis su debesimi (PocketBase)
  • GET /api/recalc-stats — perskaičiuoti gamybos kortelių rodiklius ir KPI
  • GET /api/dedup-journal — išvalyti besidubliuojančius žurnalo įrašus
  • GET /api/debug/indexes — gauti DB indeksų sąrašą (debug)
  • GET /api/restart-terminal — paleisti iš naujo mobiliojo terminalo tarybą
  • POST /api/admin/restart-pb — perkrauti PocketBase procesą
  • POST /api/admin/sukurti-atsargine-kopija — sukurti atsarginę DB kopiją
  • GET /api/admin/atsargines-kopijos — gauti atsarginių kopijų sąrašą
  • POST /api/admin/db-recovery — atstatyti duomenų bazę iš atsarginės kopijos
  • POST /api/admin/sinchronizuoti-isvezimus — sinchronizuoti išvežimus su išorine sistema
  • POST /api/importuoti-istorija — importuoti istorinius gamybos įrašus
  • POST /api/admin/importuoti-istorija-archyvas — importuoti archyvinius įrašus
  • POST /api/admin/importuoti-vaztarasciai — importuoti važtaraščius iš XLSX failo
  • POST /api/admin/importuoti-gavimus — importuoti gavimus iš XLSX failo
  • POST /api/admin/importuoti-nurasymus — importuoti nurašymus iš XLSX failo
  • POST /api/admin/importuoti-receptu-sudetis — importuoti receptų sudėtis iš XLSX failo
  • POST /api/admin/importuoti-hf-20mb — importuoti didelį žaliavų failą (HF 20MB)
  • POST /api/admin/migruoti-istorija-xlsx — konvertuoti ir migruoti istoriją
  • POST /api/admin/deduplikuoti-nurasymus — išvalyti pasikartojančius žaliavų nurašymus
  • POST /api/admin/trinti-zurnalas-dublikatus — išvalyti besidubliuojančius žurnalo įrašus
  • POST /api/admin/sukurti-gavima — administratoriaus teise sukurti gavimą
  • POST /api/admin/zurnalas-irasas — sukurti naują žurnalo įrašą iš admin pulto
  • PATCH /api/admin/zurnalas-irasas/:id — redaguoti žurnalo įrašą admin pulte
  • DELETE /api/admin/nurasymas/:id — pašalinti nurašymą admin pulte
  • DELETE /api/admin/ingredientai-receptas/:receptas_id — išvalyti recepto sudėtį
  • POST /api/admin/susieti-kortele-receptu — susieti gamybos korteles su atitinkamu receptu
  • POST /api/admin/susieti-receptus — automatiškai susieti receptus
  • POST /api/admin/fix-recepto-sudetis-schema — pataisyti sugadintą recepto sudėties schemą
  • POST /api/admin/repair-recepto-sudetis — pataisyti sugadintus recepto sudėties duomenis
  • GET /api/ataskaita/biofarmacija — gauti Biofarmacijos klientų ataskaitą
  • ---

    6. UI STRUKTŪRA

    Pagrindiniai tabs (activeSidebarTab)

    `

    'gaminama' → Pagrindinis langas (aktyvi gamyba, gamyba_pradeta=1)

    'gamyba' → Gamybos langas (planavimas, gamyba_pradeta=0)

    'vaztarastis'→ Važtaraščiai

    'klientai' → Klientai

    'zaliavos' → Žaliavų sandėlis

    'receptai' → Receptūros

    'kpi' → KPI Ataskaitos (pakeitė seną žurnalo tab)

    'istorija' → Istorija (baigtos kortelės)

    `

    Gamybos lango sub-tabs (_gamybaLangasTab)

    `

    'maisomi' ← DEFAULT — kortelės su sumaisytas_kiekis > 0

    'paketeliai' — plevele tipo

    'pauchai' — pakuočių sandėlio vaizdas

    'stickai' — stick tipo

    'gavimai' — plėvelių ir dėžučių gavimų suvestinė viena bendra eilute pagal produktą

    `

    Svarbūs state kintamieji

    `javascript

    let _gamybaLangasTab = 'maisomi'; // default tab

    let _pakuociuSandelisData = null; // null = reload, {} = cache

    let _gamybaCardId = null; // aktyvi kortelė

    let allZurnalasLogs = []; // žurnalo cache

    let activeSidebarTab = 'gaminama'; // aktyvus pagrindinis tab

    `

    ---

    7. ŽINOMOS SUBTILYBĖS / SPĄSTAI

    > [!danger] Kritinės klaidos

    > - receptai lentelė NETURI kodas kolonos

    > - DB failas: C:\VM\pb_data\data.db (NE vm-darbas.db — senas pavadinimas)

    > - Naudoti node:sqlite ES module (NE better-sqlite3)

    > - NIEKADA TailwindCSS — tik vanilla CSS

    Žinomos klaidos ir sprendimai

    KlaidaSprendimas |
    |--------|-----------|
    r.kodas column not foundreceptai neturi kodas kolonos — pašalinti iš SQL |
    Pouchai kaip tuščios kortelėsNeteisingas workflow. Naudoti pakuociu_sandelis |

    ---

    8. PASKUTINIAI PAKEITIMAI

    2026-06-17 — sesija 1 (rytas)

  • pakuociu_sandelis lentelė sukurta
  • /api/pakuociu-sandelis GET/POST/DELETE
  • ✅ Pauchai tab → sandėlio vaizdas
  • ✅ Maisomi tab — naujas DEFAULT tab Gamybos lange
  • ✅ Pagrindinis langas — ⚗ badge clickable pouchams
  • ✅ DN92197 gavimas užregistruotas (5 produktai, Alpi Eesti)
  • 2026-06-17 — sesija 2 (vakaras)

  • OpenWolf sistema sukurta — .wolf/ direktorija su 8 failais
  • /wolf route — projekto žemėlapis naršyklėje (tekstas su tabs)
  • /wolf/graph route — interaktyvus D3.js tinklo grafas (8 mazgai, 22 ryšiai)
  • Viršvalandžių ekrane🕸 Grafas + 🐺 Tekstas mygtukai
  • self-improving-agent hook aktyvuotas (.claude/settings.json)
  • Obsidian instaliuotas (C:\Users\justa\AppData\Local\Programs\obsidian\)
  • Desktop shortcut sukurtas (VM Wolf.lnk) — atidaroma su vault'u
  • readdirSync pridėtas prie server.js importų
  • CLAUDE.md atnaujintas — sesijos pabaigos rutina + teisingas DB pavadinimas
  • agy-uzduotis.md atnaujintas — sesijos pradžios rutina Agy agentui
  • Obsidian vault failai: HOME, db-schema, workflow, pakuotes, klaidos
  • 2026-06-17 — sesija 3 (vėlyvas vakaras)

  • Antigravity Awesome Skills įdiegti ir aktyvuoti: nodejs-backend-patterns, nodejs-best-practices, sql-optimization-patterns.
  • POST /api/gavimai/bulk endpoint'as sukurtas plėvelių rulonų priėmimui su auto-generuojamu LOT kodu [Raidė][YYMMDD].
  • Desktop UI pajamavimo modalo išplėtimas — sukurtas „Multi-plėvelės” tab'as su dinamišku eilučių pridėjimu/pašalinimu bei LOT peržiūra.
  • Mobile UI pajamavimo modalo išplėtimas — sukurtas „Bulk Plėv.” tipas su supaprastinta multi-entry forma rulonų registravimui.
  • Dokumentacija — atnaujinta API schema [cerebrum.md](file:///C:/VM/.wolf/cerebrum.md) ir [agy-uzduotis.md](file:///C:/VM/agy-uzduotis.md) užduočių registras.
  • 2026-06-18 — sesija 7 (Agy)

  • Gamybos Dosjė patobulinimai (server.js): atnaujintas dosje_tekstas generavimas archyvavimo metu, pridedant išsamų žaliavų LOT/EXP atsekamumą su nurašymų ir gavimų lentelių palyginimu, maišymų suvestinę iš gamybos žurnalo, kliento informaciją su kliento serija etiketėms ir bendro sumaišyto kiekio rodymą.
  • A4 portrait spausdinimo endpoint'as (GET /api/gamybos-korteles/:id/dosje-html): sukurtas naujas endpoint'as, kuris grąžina profesionalų, A4 portrait formatui ir spausdinimui pritaikytą HTML su Daily Spoon logotipu, suvestinėmis ir parašo laukais.
  • UI patobulinimai (public/index.html): pridėti „🖨 Dosje“ mygtukai istorijos kortelės valdyme bei modaliniame lange, atidarantys naująjį spausdinimo puslapį naujame lange.
  • 2026-06-18 — sesija 6 (Agy)

  • Portuotas pilnas Telegram botas (telegram-bot.js) – 100% atstatytas visų funkcijų veikimas (monitorius, maišymai, trūkstamų žaliavų planavimas, UUID-saugus žurnalo ir HR įrašų redagavimas/trynimas, priėmimas, naujų narių admin patvirtinimai).
  • Sintaksės klaidų ištaisymas – pašalinta dubliuota userStates deklaracija ir suderinta SQLite su Express /api/priimti-medziagas API.
  • Dokumentacijos atnaujinimas – Wolf vault schema, workflow ir pakuotės pritaikytos naujiems laukams bei maršrutams.
  • 2026-06-18 — sesija 5

  • Naujas klientas AC (UAB Aconitum) — receptas, žaliavos, LOT/EXP, gamybos kortelės
  • Pouch kortelės UI — SUPAKUOTA → DĖŽĖS blokas (auto-skaičiuojamas)
  • Maišymo progresas — mini violetinis baras su % po pavadinimo
  • Kortelių stilius — mėlynas fonas, izoliuoti info barai, paryškintos spalvos
  • kliento_serija — naujas laukas, etiketėse gamintojo serija, važtaraščiuose mūsų LOT
  • IŠSIŲSTA baras — rodo sandėlio likutį (supakuota - išsiųsta)
  • Gamybos langas — užsakovo filtras, Maisomi rodo pradėtas korteles
  • Maišymo kortelė — landscape spausdinimas, pataisyta 1 maišymui formulė
  • OpenWolf — Agy atliko pilną projekto analizę, atnaujino visus .wolf/ failus
  • Auto-maišymo logika — receptas su ≤1 ingredientu automatiškai praleidžia maišymo etapą
  • kliento_serija kolona gamybos_korteles — etiketėse gamintojo serija, važtaraščiuose mūsų LOT
  • 2026-06-17 — sesija 4 (naktis)

  • Recepto tabs — 3 tab'ai recepto detalių panelėje: 📋 Sudėtis | ⚙️ Staklinė | 📝 Pastabos
  • _saveReceptasExtra(id) — saugo stakliu_rekomendacija + gamybos_pastabos per PUT
  • Gamybos kortelių pertvarkagamyba-row iš grid → viena flex eilutė su:
  • - gr-name-stack (180px): pavadinimas / LOT / EXP stacked vertikaliai

    - gr-mix-mini (88px): mini maišymo progress baras su ⚗ etikete ir procentu

    - 3× progress-block (flex:1 kiekvienas): PAGAMINTA / SUPAKUOTA / IŠSIŲSTA — originalaus dydžio

    - 🗑 mygtukas dešinėje + žalias „Arch.” kai allDone

  • Pašalinti ! statusas ir 🔍 atsekamumas mygtukai iš kortelės (per daug triukšmo)
  • Modal toggles — „⚙ Gamyba baigta” checkbox gamybos registracijos modale; „▣ Pakavimas baigtas” supakavimo modale
  • Baigtos būsenos — PAGAMINTA blokas tampa žalias + „BAIGTA ✓” kai stakles_baigtos; SUPAKUOTA lygiai taip pat kai pakavimas_baigtas
  • Multi-region kortele — gauna display:grid per inline style (nesulaužyta)
  • Agy kintamųjų pavadinimų klaidos prevencija — taisyklės instructions.md, agy-uzduotis.md, klaidos.md
  • #### ⚠️ Rytojui: Pouch kortelės tobulinimas

  • Pouch lange nereikalingas pakavimo baras (staklinė tiesiogiai pila į pakelius → dėžės)
  • Rodyti: pagamintas kiekis dėžėmis + likusių paketų skaičius
  • Išsiuntimas: tik dėžėmis
  • 2026-06-18 — sesija 1 (rytas - Agy)

  • Cerebrum.md atnaujinimas — pilnai dokumentuotos visos 15+ SQLite lentelių schemos ir visi 114 API endpoint'ų sugrupuoti pagal sritis.
  • Mobile UI plėvelių pajamavimas („Bulk Plėv.”) — atlikti patobulinimai:
  • - Receptų dropdown'e filtruojami tik plėvelės/stick tipai (paslėpti pouch receptai).

    - Pridėtas sėkmingo pajamavimo suvestinės konteineris (mBulkResultNotice), rodantis sugeneruotus LOT ir papildomus duomenis.

    - Perkelta inicializavimo logika į renderGavimas pabaigą, išsprendžiant tuščio vaizdo bug'ą perpiešiant (renderView()).

    - Sutvarkyta, kad formos laukai išsivalytų po sėkmingo išsaugojimo.

  • Dokumentacija — atnaujintas bendras agentų užduočių sąrašas [agent-tasks.md](file:///C:/VM/agent-tasks.md) ir užduočių žurnalas [agy-uzduotis.md](file:///C:/VM/agy-uzduotis.md).
  • 2026-06-19 — sesija 1 (Agy)

  • Telegram bot isvezta_kiekis pataisymas (telegram-bot.js) — išspręsta klaida, kai botas naudojo neegzistuojančią c.isvezta_kiekis koloną iš gamybos_korteles. Sukurtas getIsvezta(lot, recPav) helperis dinamiškai sumuoti išsiuntimus iš gamybos_zurnalas.
  • ---

    9. TOOLS / SKILLS

    Aktyvūs

  • /si:remember — išsaugoti žinojimą į atmintį
  • /si:review — atminties sveikatos patikrinimas
  • /wolf — projekto žemėlapis naršyklėje (http://localhost:3000/wolf)
  • Obsidian — šis failas kaip vault (C:\VM\.wolf\)
  • Telegram Botas — integracinis botas (telegram-bot.js), startuojamas kartu su Express serveriu.
  • Atmintis

  • ~/.claude/projects/C--VM/memory/MEMORY.md — automatinė Claude atmintis
  • .wolf/cerebrum.md` — rankinis žinių žemėlapis (šis failas)
  • VM Projekto Failų Anatomija

    > [!info] Naudojimas

    > Šis failas — failų žemėlapis. Patikrink prieš atidarant bet kokį failą.

    > Pilna projekto logika → [[cerebrum]]

    Atnaujinta: 2026-06-19

    ---

    Šaknis C:\VM\

    ``

    C:\VM\

    ├── server.js ← PAGRINDINIS BACKEND (Express, SQLite, visos API)

    ├── CLAUDE.md ← Claude instrukcijos (OpenWolf + projekto taisyklės)

    ├── agy-uzduotis.md ← Agy ↔ Claude komunikacijos kanalas

    ├── agent-tasks.md ← Bendrų agentų užduočių sąrašas

    ├── .env.example ← Aplinkos kintamųjų šablonas

    ├── start-background.ps1 ← Windows auto-start skriptas

    ├── terminal-server.js ← Web terminalas (port 3001) — mobiliems

    ├── gamybos_ciklas.js ← Gamybos ciklo logikos modulis

    ├── gamybos_langas.js ← Gamybos lango UI logikos modulis

    ├── faktinis_sunaudojimas.js ← Faktinio sunaudojimo skaičiavimai

    ├── telegram-bot.js ← Telegram botas (integruotas ir valdomas iš server.js)

    ├── darbuotojai.json ← Darbuotojų sąrašas (vietinis registras)

    ├── public/

    │ ├── index.html ← DESKTOP UI (~15k eilučių)

    │ └── mobile.html ← MOBILE UI (pajamavimas iš telefono)

    ├── pb_data/

    │ └── data.db ← VIENINTELIS DB ŠALTINIS (SQLite)

    ├── .wolf/ ← OpenWolf sistema

    │ ├── OPENWOLF.md ← Sistemos taisyklės

    │ ├── cerebrum.md ← Projekto smegenys [[cerebrum]]

    │ ├── anatomy.md ← Šis failas

    │ ├── HOME.md ← Obsidian pradinis puslapis

    │ ├── db-schema.md ← DB lentelės detaliai

    │ ├── workflow.md ← Gamybos ciklas žingsnis po žingsnio

    │ ├── pakuotes.md ← Pakuočių tipai ir sandėlis

    │ ├── klaidos.md ← Žinomos klaidos ir sprendimai

    │ ├── Atidaryti-Obsidian.bat ← Greitas Obsidian paleidimas

    │ └── .obsidian/ ← Obsidian konfigūracija

    ├── .claude/

    │ ├── settings.json ← self-improving-agent hook

    │ └── settings.local.json← Vietiniai leidimai

    ├── failai/ ← Įkelti failai (Excel, PDF importui)

    ├── logs/ ← Serverio žurnalai

    └── node_modules/ ← NPM pakuotės (neredaguoti)

    `

    ---

    Svarbiausi failai pagal darbą

    🔧 API keitimas

    server.js

    🖥️ Desktop UI keitimas

    public/index.html (~15k eilučių — labai didelis, naudoti Grep prieš Read)

    📱 Mobile UI keitimas

    public/mobile.html

    🗄️ DB schema tikrinimas

    pb_data/data.db + server.js migracijų sekcija viršuje

    ⚙️ Gamybos ciklo logika

    gamybos_ciklas.js + gamybos_langas.js

    📨 Agy agento užduotys

    agy-uzduotis.md

    🧠 Projekto kontekstas

    .wolf/cerebrum.md` ([[cerebrum]])