> ## Documentation Index
> Fetch the complete documentation index at: https://www.twicecommerce.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Varastonseuranta

> TWICEn kaksi varastonseurantatapaa: sarjanumeroitu (määrä = 1) yksittäisten artikkelien seurantaan ja yhteisvarasto (määrä > 1) koottuun seurantaan.

export const pooledInventoryDefinition = "Yhteisvarasto (määrä > 1) ryhmittelee identtiset tuotteet yhden tuotekoodin alle ja kokoaa yhteen kaikki tulot, kulut ja aikajanan tapahtumat. Voit seurata kokonaismääriä, mutta yksittäisiä tapahtumia ei voi kohdistaa ryhmän yksittäisiin kappaleisiin.";

export const serializedInventoryDefinition = "Sarjanumeroitu varasto (määrä = 1) seuraa jokaista fyysistä tuotetta erikseen omalla yksilöllisellä tunnisteella, tuloilla, kuluilla, aikajanan tapahtumilla ja elinkaarella. Näin näet tarkasti, mitä kullekin yksittäiselle kappaleelle on tapahtunut.";

<Frame caption="Inventaario > Varastoartikkelit">
  <img src="https://mintcdn.com/twicecommerce/5ARkyCTk5wMAizBn/images/inventory-stock-items-list.webp?fit=max&auto=format&n=5ARkyCTk5wMAizBn&q=85&s=d2a1eceae6c8d7703ea1187be5aa336a" alt="Varastoartikkelien lista seurantasarakkeineen" width="1920" height="1080" data-path="images/inventory-stock-items-list.webp" />
</Frame>

## Määritelmä

TWICE Commerce tukee kahta varastonseurantatapaa. Valitset tavan varastoa rekisteröidessäsi: **Track individually** -valinta (`trackIndividually` luontipyynnössä) ratkaisee, saako jokainen fyysinen kappale oman varastoartikkelitietueensa vai kattaako yksi tietue koko määrän.

| Tapa               | Luodut tietueet                                  | Määrä tietuetta kohden |
| ------------------ | ------------------------------------------------ | ---------------------- |
| **Sarjanumeroitu** | Yksi varastoartikkeli fyysistä kappaletta kohden | 1                      |
| **Yhteisvarasto**  | Yksi varastoartikkeli koko joukolle              | N                      |

1. **Sarjanumeroitu varasto** — <Tooltip tip={serializedInventoryDefinition}>jokaista fyysistä kappaletta seurataan erikseen</Tooltip>. Jokainen kappale saa oman varastoartikkelitietueensa omine koodeineen, kuntoineen, tulo- ja kulumerkintöineen sekä tapahtuma-aikajanoineen.

2. **Yhteisvarasto** — <Tooltip tip={pooledInventoryDefinition}>useita identtisiä kappaleita ryhmitellään yhden varastoartikkelin alle</Tooltip>. Seuranta on koottua — tiedät joukon kokonaistulot, -kulut ja käyttöasteen, mutta et kappalekohtaisesti.

Valinnalla on suora vaikutus siihen, kuinka tarkkaa operatiivinen datasi on.

## Missä sitä käytetään?

Seurantatapa asetetaan varastoartikkelia **luotaessa** — **Register stock items** -dialogissa (**Track individually** -valintaruutu) tai API:n kautta (`trackIndividually` luontipyynnön rungossa; oletus `true`).

* **Track individually valittuna** + määrä `N` → luo `N` sarjanumeroitua varastoartikkelia, yhden kutakin kappaletta kohden.
* **Track individually valitsematta** + määrä `N` → luo yhden yhteisvaraston varastoartikkelin, joka kattaa `N` kappaletta.

`trackIndividually` on olemassa vain luontipyynnössä — se ohjaa, kuinka monta tietuetta lisätään. Sitä ei tallenneta eikä se näy Article-vastauksissa. Vastauksissa `quantity` on objekti, jossa on `total` ja sijainneittainen `byLocation`-erittely; sarjanumeroitu artikkeli raportoi `quantity.total = 1`, yhteisvarasto raportoi `quantity.total = N`.

Lue lisää: [Varastoartikkelien rekisteröinti](/docs/fi/inventory/overview).

## Pikavertailu

| Ominaisuus                        | Sarjanumeroitu (määrä = 1)                    | Yhteisvarasto (määrä > 1)                     |
| --------------------------------- | --------------------------------------------- | --------------------------------------------- |
| Yksilöivä tunniste                | Jokaisella kappaleella omat artikkelikoodinsa | Yksi varastoartikkelitietue, yksi koodijoukko |
| Tulojen seuranta (Tulot ja kulut) | Kappalekohtainen                              | Koottu koko joukolle                          |
| Kulujen seuranta (Tulot ja kulut) | Kappalekohtainen                              | Koottu koko joukolle                          |
| Kannattavuus                      | Kappalekohtainen                              | Vain joukon kokonaisuus                       |
| Tila (In / Out)                   | Kappalekohtainen                              | Lukumäärä, montako kappaletta on In tai Out   |
| Status                            | Kappalekohtainen                              | Yksi status koko joukolle                     |
| Tapahtumaloki                     | Kappalekohtainen                              | Joukkokohtainen, lukumäärän muutoksina        |
| Ajastetut tapahtumat              | Liitetään yhteen kappaleeseen                 | Liitetään joukkoon, kuluttavat `N` kappaletta |
| Keräily                           | Skannaa tietty kappale                        | Määritä kulutettava kappalemäärä              |
| Raportoinnin tarkkuus             | Artikkelitaso                                 | Joukkotason yhteenveto                        |
| Kunnon seuranta                   | Kappalekohtainen                              | Yksi kunto koko joukolle                      |
| Huoltohistoria                    | Kappalekohtainen                              | Vain joukkotasolla                            |

## Milloin kumpaakin tapaa käytetään

### Käytä sarjanumeroitua (määrä = 1), kun

<AccordionGroup>
  <Accordion title="Arvokkaat artikkelit">
    Pyörät, sukset, laudat, sähköpotkulaudat, kamerat, dronet, hissijärjestelmät. Kaikki, joiden tuottokysymys on kiinnostava kappaletasolla eikä vain koko joukon osalta.
  </Accordion>

  <Accordion title="Vuokrattavat artikkelit">
    Kaikki, mikä lähtee asiakkaan mukaan ja palaa takaisin. In/Out-tilamalli ja `handed_out` / `returned` -tapahtumat tuottavat täyden hyödyn vain, kun jokainen kappale on oma tietueensa.
  </Accordion>

  <Accordion title="Ainutlaatuiset artikkelit">
    Ainutkertaiset kohteet: vintage-välineet, käytetty varasto eri hintapisteissä, räätälöidyt tuotteet.
  </Accordion>

  <Accordion title="Takuu- ja huoltoseuranta">
    Artikkelikohtainen huoltohistoria, poistot ja takuujaksot.
  </Accordion>

  <Accordion title="Kunnon vaihtelu">
    Kunnostetut tai uudelleenmyytävät artikkelit, joiden kunto vaihtelee kappaleittain.
  </Accordion>

  <Accordion title="Vaatimustenmukaisuus ja tarkastukset">
    Viranomaisvaatimukset yksittäisten kappaleiden jäljitettävyydelle.
  </Accordion>
</AccordionGroup>

### Käytä yhteisvarastoa (määrä > 1), kun

<AccordionGroup>
  <Accordion title="Identtiset, edulliset ja keskenään vaihdettavat artikkelit">
    Kypärät, lukot, kaulanauhat, nippusiteet, yleiset lisävarusteet. Asiakkaalle riittää, että hän saa *jonkin* kypärän — ei ole väliä, *minkä*.
  </Accordion>

  <Accordion title="Kulutustavarat">
    Artikkelit, jotka kuluvat loppuun ja korvataan sen sijaan, että ne vuokrattaisiin ja palautettaisiin: pakkaukset, polttoainekanisterit, kertakäyttöiset hissiliput.
  </Accordion>

  <Accordion title="Vain myytävä varasto">
    Tuotteet, joita myyt etkä vuokraa ja joilla ei tarvitse seurata kappalekohtaista elinkaarta.
  </Accordion>

  <Accordion title="Yksinkertaisempi toiminta">
    Vähentää datakohinaa, kun artikkelikohtainen historia ei tuo lisäarvoa. 200 karabiinin laatikko ei tarvitse 200 tietuetta.
  </Accordion>
</AccordionGroup>

## Vaikutukset dataan

### Mitä saat sarjanumeroidulla seurannalla

* **Tarkka kohdistus** — tiedät Tulot ja kulut -merkinnöistä tarkalleen, mikä kappale tuotti tietyn tulon tai aiheutti tietyn kulun.
* **Kappalekohtaiset elinkaaret** — täysi jäljitysloki kappaleittain: milloin se ostettiin, missä se on ollut, kuka sitä on käyttänyt ja milloin se on huollettu.
* **Yksityiskohtainen aikajana** — jokainen tilaus, varaus ja muistiinpano kiinnittyy tiettyyn kappaleeseen.
* **Artikkelitason tuotto** — saat kappalekohtaisen kannattavuuden ja tunnistat heikot kappaleet poistettaviksi tai kunnostettaviksi.
* **Huoltohistoria** — huoltotapahtumat sidottuina siihen kappaleeseen, jota ne koskevat.
* **Valmis uudelleenmyyntiin** — kun lopulta myyt kappaleen, koko historia on liitettynä siihen.

### Mitä menetät yhteisvarastolla

* **Ei kappalekohtaista kohdistusta** — et voi sanoa, *mikä* joukon kypärä tuotti minkäkin liikevaihdon tai vaati minkäkin korjauksen.
* **Koottu aikajana** — tapahtumat kirjaavat lukumäärän muutoksia (”3 kappaletta luovutettu”), eivät yksilömuutoksia.
* **Vain joukkotason tuotto** — voit laskea keskimääräisen tuoton kappaletta kohden mutta et yksilökohtaisesti.
* **Ei kappalekohtaista kunnon seurantaa** — yksi kuntoarvo koko joukolle.

### Esimerkit rinnakkain

**Sarjanumeroitu.** Varastoartikkeli `art_bike_1234` (määrä 1):

* Koodit: `BIKE-1234`, `SN240501234`.
* Tulot ja kulut: `+500 €` vuokratuloa; `-150 €` korjaus 10.1.
* Tapahtumaloki: 15 `handed_out`- ja 15 `returned`-tapahtumaa.
* `profitability`: `350 €`. Tiedät, että juuri tämä kappale tuotti sen.

**Yhteisvarasto.** Varastoartikkeli `art_helmet_pool` (määrä 50):

* Koodit: `HELMET-POOL`.
* Tulot ja kulut: `+5 000 €` kypärien vuokratuloa yhteensä; `-300 €` ostetuista korvaavista kypäristä.
* Tapahtumaloki: lukumäärän muutokset (esim. ”10 kappaletta ulkona”, ”9 palautettu, 1 kadonnut”).
* `profitability`: `4 700 €` koko joukolle. Tiedät, mitä joukko teki, mutta et mitä kypärä numero 17 teki.

## Oikean tavan valinta luontivaiheessa

Tapa päätetään luontivaiheessa. Muunnosta tavasta toiseen paikallaan ei tueta — jos tarvitset muutoksen, luo uudet tietueet haluamallasi tavalla ja siirrä tiedot.

Siksi valinta on tärkeä jo alussa. Käytä tätä tarkistuslistaa:

* Onko artikkeli vuokrattava? → **Sarjanumeroitu**.
* Onko sillä sarjanumero, jolla on sinulle merkitystä? → **Sarjanumeroitu**.
* Poistuuko sen arvo tai vaatiiko se huoltoa kappalekohtaisesti? → **Sarjanumeroitu**.
* Onko se yksi 50 identtisestä edullisesta kulutustavarasta? → **Yhteisvarasto**.
* Riittääkö sinulle joukkotason tuottotieto? → **Yhteisvarasto**.

Useimmat TWICE-kauppiaat käyttävät molempia: sarjanumeroitua vuokrakalustolle ja yhteisvarastoa lisävarusteille ja kulutustavaroille.

## Siirtymä tavasta toiseen

Paikallaan tehtävää muunnosta ei ole. Vaihto tehdään näin:

* **Sarjanumeroitu → yhteisvarasto.** Luo uusi yhteisvaraston varastoartikkeli halutulla määrällä ja poista olemassa olevat sarjanumeroidut artikkelit käytöstä asettamalla niiden statukseksi **Ei aktiivinen**. Aiemmat tulo- ja kulumerkinnät säilyvät poistettujen tietueiden yhteydessä ja näkyvät edelleen raporteissa.
* **Yhteisvarasto → sarjanumeroitu.** Luo uudet sarjanumeroidut varastoartikkelit (yksi fyysistä kappaletta kohden) samalla SKU:lla. Pienennä yhteisvaraston määrää kutsulla `POST /articles/:id/decrease-quantity`, kun uudet tietueet ovat olemassa.

Molemmissa suunnissa vanhojen tietueiden tulo- ja kulumerkinnät sekä tapahtumat säilyvät. Raportointityökalut laskevat yhteen kaikki samaa SKU:ta käyttävät tietueet, joten historiadata näkyy edelleen SKU-tason tuloksissa.

## Vaikutus saatavuuslaskentaan

Molemmat tavat syöttävät samaa ATS-moottoria, mutta eri tavoin.

* **Sarjanumeroitu.** ATS laskee, montako yksittäistä varastoartikkelia sijainnissa on statuksella **Aktiivinen** eikä ole sidottu (tilauksella tai varauksella) päällekkäisiin jaksoihin.
* **Yhteisvarasto.** ATS lukee joukon kokonaismäärän (`quantity.total`), vähentää siitä parhaillaan sidottujen kappaleiden määrän (joukosta kuluttavat tilaukset tai joukkoon kohdistuvat varaukset), ja jäljelle jäävä osuus on saatavilla.

Sarjanumeroitujen artikkelien varaukset kiinnittävät **tietyn** kappaleen; yhteisvaraston varaukset kiinnittävät **tietyn määrän** kappaleita. Käytä sarjanumeroituja artikkeleita, jos työprosessi vaatii tietyn fyysisen artikkelin takaamista — yhteisvaraston kappaleet voi vaihtaa joukon sisällä vapaasti.

## Vaikutus raportointiin

Raportit, jotka ryhmittelevät varastoartikkeleittain, näyttävät yhden rivin sarjanumeroitua kappaletta kohden mutta vain yhden rivin koko joukolle. Näin saat tavat vertailukelpoisiksi:

* Ryhmittele SKU:n mukaan — sekä sarjanumeroidut artikkelit että joukot summautuvat SKU:nsa alle.
* Suodata `quantity`-kentän perusteella, kun tarvitset nimenomaan yhtä tapaa — joukoilla määrä on suurempi kuin 1.
* Jos tarvitset kappalekohtaista tietoa yhteisvarastosta, sinun on yleensä siirryttävä ensin sarjanumeroituun seurantaan.

## Suhteet

```mermaid theme={null}
%%{init: {'flowchart': {'nodeSpacing': 20, 'rankSpacing': 20}}}%%
flowchart TB
    SKU["SKU"]
    subgraph Serialized[" "]
        S1["Sarjanumeroitu varastoartikkeli<br/>määrä = 1"]
        S2["Sarjanumeroitu varastoartikkeli<br/>määrä = 1"]
        S3["Sarjanumeroitu varastoartikkeli<br/>määrä = 1"]
    end
    subgraph Pooled[" "]
        P["Yhteisvaraston varastoartikkeli<br/>määrä = N"]
    end
    SKU --> S1
    SKU --> S2
    SKU --> S3
    SKU --> P
    style SKU fill:#3b82f633,stroke:#3b82f6,stroke-width:3px,font-weight:bold
    style S1 fill:#10b98133,stroke:#10b981,stroke-width:2px
    style S2 fill:#10b98133,stroke:#10b981,stroke-width:2px
    style S3 fill:#10b98133,stroke:#10b981,stroke-width:2px
    style P fill:#f59e0b33,stroke:#f59e0b,stroke-width:2px
    style Serialized fill:#0000000d,stroke:#888,stroke-width:1px
    style Pooled fill:#0000000d,stroke:#888,stroke-width:1px
```

## Usein kysytyt kysymykset

<AccordionGroup>
  <Accordion title="Voinko muuntaa sarjanumeroidut artikkelit yhteisvarastoksi tai toisin päin?">
    Et paikallaan. `trackIndividually` on luontivaiheen valinta, ei tallennettu kenttä, jota voisi muokata. Vaihda tapaa luomalla uudet tietueet halutulla tavalla ja poistamalla alkuperäiset käytöstä statusmuutoksilla. Historiadata säilyy poistetuissa tietueissa.
  </Accordion>

  <Accordion title="Kumpi tapa sopii liiketoiminnalleni paremmin?">
    Valitse **sarjanumeroitu** kaikille vuokrattaville, seurattaville tai arvokkaille artikkeleille — ja kaikelle, mitä saatat haluta analysoida kappaleittain. Valitse **yhteisvarasto** identtisille, keskenään vaihdettaville ja edullisille artikkeleille, joissa joukkotason data riittää. Useimmat TWICE-kauppiaat käyttävät molempia.
  </Accordion>

  <Accordion title="Tukeeko yhteisvarasto varauksia?">
    Kyllä. Joukkoon kohdistuva varaus kuluttaa **N kappaletta** sen sijaan, että se kiinnittäisi tietyn kappaleen. Joukon ATS laskee varausjakson ajaksi `N` kappaletta alaspäin.
  </Accordion>

  <Accordion title="Miten tämä vaikuttaa API-integraatioihini?">
    Molemmat tavat käyttävät samaa Article-resurssia — mikään vastauksen kenttä ei kerro tapaa. Lue `quantity`-objekti: sarjanumeroidut artikkelit raportoivat `quantity.total = 1`, yhteisvarastot `quantity.total > 1`, ja sijainneittainen erittely on kentässä `quantity.byLocation`. `codes`-taulukko toimii molemmissa. Varaukset ohjautuvat artikkelin sisältävistä tilauksista; yhteisvaraston tapauksessa jokainen varaava tilaus kuluttaa joukosta tietyn määrän kappaleita.
  </Accordion>

  <Accordion title="Voinko käyttää molempia tapoja samassa liiketoiminnassa?">
    Kyllä — se on tavallisin tilanne. Käytä sarjanumeroitua kalustolle, jota haluat seurata kappaleittain, ja yhteisvarastoa lisävarusteille tai tarvikkeille.
  </Accordion>

  <Accordion title="Vaikuttaako seurantatapa SKU:hun?">
    Ei. Yhdellä SKU:lla voi olla sekä sarjanumeroituja että yhteisvaraston varastoartikkeleita — esimerkiksi `HELMET-MD`-SKU:lla voi olla yksi yhteisvaraston varastoartikkeli, jonka `quantity = 50`, ja muutama sarjanumeroitu artikkeli premium-kypärille, joita haluat seurata kappaleittain. SKU-tason koosteet summaavat molemmat.
  </Accordion>

  <Accordion title="Entä yhteisvaraston määrän kasvattaminen tai vähentäminen?">
    Lisää kappaleita kutsulla `POST /articles/:id/increase-quantity` (halutessasi `fromDate`-parametrilla) ja poista niitä kutsulla `POST /articles/:id/decrease-quantity`. Kutsu vähennettäessä aina ensin `GET /articles/:id/plan-quantity-change` — se palauttaa arvot `blockingUnavailabilities`, `moves` ja `removedSlotIds`, joten tiedät muutoksen vaikutukset ennen kuin vahvistat sen.
  </Accordion>
</AccordionGroup>

## Kehittäjän viitetiedot

Seurantatapa asetetaan luonnissa `articles`-päätepisteiden `trackIndividually`-kentällä.

<Card title="API: Articles" icon="code" href="https://server.twicecommerce.com/api/internal">
  Avaa päätepiste API-viitteessä.
</Card>

## Aiheeseen liittyvät käsitteet

<CardGroup cols={2}>
  <Card title="Varastoartikkelit" icon="box" href="/docs/fi/concepts/inventory/stock-items">
    Varastoartikkelin koko malli ja elinkaari
  </Card>

  <Card title="Varastoartikkelin tapahtumat" icon="clock-rotate-left" href="/docs/fi/concepts/inventory/events">
    Aikajana toimii eri tavoin kummassakin tavassa
  </Card>

  <Card title="Varastokoodit" icon="barcode" href="/docs/fi/concepts/inventory/stock-codes">
    Koodit sarjanumeroiduissa ja yhteisvaraston artikkeleissa
  </Card>
</CardGroup>
