> ## 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.

# Varastokoodi (artikkelikoodi)

> Jokaiselle varastoartikkelille annettava yksilöivä tunniste, joka varmistaa tarkan seurannan ja datan yhtenäisyyden.

<Frame caption="Inventaario > Varastoartikkelit > [Artikkeli] > Yleiset">
  <img src="https://mintcdn.com/twicecommerce/lZhc_tO8u1u_bL0Q/images/stock-item-general-tab.webp?fit=max&auto=format&n=lZhc_tO8u1u_bL0Q&q=85&s=e0a29bba3d2126e9149d978d008e2a62" alt="Artikkelikoodi näkyy varastoartikkelilla" width="1920" height="1080" data-path="images/stock-item-general-tab.webp" />
</Frame>

## Määritelmä

<Snippet file="definitions/fi/stock-code-definition.mdx" />

**Varastokoodi** (myös **artikkelikoodi**) on tenantin sisällä yksilöllinen merkkijono, joka tunnistaa yhden varastoartikkelin. Varastoartikkelilla on `codes`-taulukko — siihen voi liittää **yhden tai useamman** koodin, minkä ansiosta yksi fyysinen artikkeli tukee useita skannausprosesseja samanaikaisesti (sisäinen omaisuuskoodi, painettu viivakoodi, valmistajan sarjanumero).

<Info>
  **Vertauskuva:** Varastokoodi on artikkelin henkilötunnus — se seuraa fyysistä esinettä koko sen elinkaaren ajan, ja sen kautta jokainen muu TWICEn tietue viittaa siihen.
</Info>

<Tip>
  **Useita koodeja artikkelia kohden.** TWICEn `codes`-kenttä on taulukko. Voit liittää samaan varastoartikkeliin valmistajan sarjanumeron, painetun omaisuustarran ja sisäisen koodin ja löytää artikkelin skannaamalla minkä tahansa niistä.
</Tip>

## Varastokoodi vs. SKU-koodi

Nämä ovat eri tason tunnisteita.

|               | Varastokoodi (artikkelikoodi) | SKU-koodi                |
| ------------- | ----------------------------- | ------------------------ |
| Kuuluu        | Yhdelle varastoartikkelille   | Yhdelle SKU:lle          |
| Lukumäärä     | 1–N artikkelia kohden         | 1 SKU:ta kohden          |
| Tunnistaa     | Fyysisen kappaleen            | Tuotetyypin              |
| API-kenttä    | `codes` resurssilla `Article` | `code` resurssilla `Sku` |
| Yksilöllisyys | Tenantin sisällä              | Tenantin sisällä         |
| Esimerkki     | `B-1`, `SN12345`, `LF93HXB1`  | `BIK-S`, `SKI-ATOM-170`  |

Pyörä `B-1` (varastokoodi) on yksi tietty kappale tuotetta `BIK-S` (SKU-koodi). Kaksikymmentä saman mallin pyörää = kaksikymmentä varastokoodia, jotka osoittavat yhteen SKU-koodiin.

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

Varastokoodeja käytetään koko TWICEssä:

* **Yksilöivä tunnistaminen** — viittaaminen tiettyihin artikkeleihin tilauksissa, raporteissa ja toiminnassa.
* **Viivakoodi- ja QR-skannaus** — fyysiset tarrat linkittyvät suoraan digitaaliseen tietueeseen.
* **Joukkokeräily** — artikkelien skannaus ulos ja sisään noudossa ja palautuksessa.
* **Datan eheys** — yksilöllisyysvaatimus estää päällekkäiset tietueet.
* **API-toiminnot** — ohjelmallinen työskentely tiettyjen varastoartikkelien kanssa.
* **Jäljitysketjut** — tilaushistoria ja tapahtumalokit viittaavat sillä hetkellä käytössä olleisiin koodeihin.

## Keskeiset ominaisuudet

| Ominaisuus                    | Tyyppi                     | Kuvaus                                                                                                           |
| ----------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `codes`                       | string\[]                  | Yhteen varastoartikkeliin liitettyjen koodien taulukko. Jokaisen koodin on oltava yksilöllinen tenantin sisällä. |
| Yksilöllisyyden laajuus       | Tenantin sisällä           | Sama koodi voi olla käytössä eri tenanteilla mutta ei omassasi kahdesti.                                         |
| Automaattinen luonti          | Kyllä (kun kenttä puuttuu) | Jos luot artikkelin ilman `codes`-kenttää, TWICE luo 8-merkkisen tunnuksen.                                      |
| Muokattavissa luonnin jälkeen | Kyllä                      | Koodeja voi lisätä tai poistaa. Tunnisteiden muutokset kirjataan `identifiers_changed`-tapahtumina.              |
| Pakollinen luonnissa          | Ei                         | Jos koodia ei anneta, sellainen luodaan.                                                                         |

## Järjestelmän luomat vs. omat koodit

Koodit voi asettaa kolmella tavalla:

### Automaattisesti luotu

Jätä `codes` pois artikkelia luodessasi. TWICE luo 8-merkkisen satunnaisen tunnuksen (esim. `LF93HXB1`). Hyvä nopeaan käyttöönottoon, kun tarkoilla arvoilla ei ole väliä.

### Käsin syötetty

Anna `codes` luonnissa tai päivityksessä. Käytä mitä tahansa toimintaasi sopivaa muotoa — lyhyitä omaisuustarroja (`B-1`), sarjanumeroita (`SN-2024-00123`) tai sijaintietuliitteellisiä koodeja (`HEL-BIK-001`). Tarkista ennen tallennusta kutsulla `POST /articles/validate-code` tai eränä kutsulla `POST /articles/validate-codes`.

### Joukkorekisteröinti kaavalla

Hallinnan **Register stock items** -dialogissa voit luoda automaattisesti sarjan (`B-1`, `B-2`, ..., `B-N`), kun luot useita kappaleita kerralla. Tämä on tavallisin tapa vastaanottaa uusi erä identtisiä kappaleita.

## Useita koodeja artikkelia kohden

Yhdellä varastoartikkelilla voi olla useita arvoja `codes`-taulukossaan. Tämä on tarkoituksellista ja tukee käytännön skannausprosesseja:

```json theme={null}
{
  "id": "art_xyz789",
  "name": "Atomic Race Ski 170cm",
  "codes": ["SKI-001", "SN240501234", "9783161484100"]
}
```

* `SKI-001` — sisäinen omaisuustarra, joka on painettu tarraan.
* `SN240501234` — valmistajan sarjanumero, joka on painettu sukseen.
* `9783161484100` — alkuperäispakkauksen viivakoodi.

**Minkä tahansa** näistä skannaus johtaa samaan varastoartikkeliin. Kaikki kolme pysyvät synkronissa, joten yhden poistaminen tai korvaaminen ei riko muita.

## Koodien muotosäännöt

* **Tyyppi:** merkkijono. Pituusrajaa ei valvota; automaattisesti luodun koodin oletuspituus on 8.
* **Merkit:** mitkä tahansa tulostuvat merkit. Useimmat pitäytyvät kirjaimissa, numeroissa, väliviivoissa ja alaviivoissa, jotta koodit toimivat tarratulostimissa ja viivakoodinlukijoissa.
* **Yksilöllisyys:** tenantin sisällä. Tarkistetaan luonnissa ja päivityksessä.
* **Kirjainkoko:** koodit tallennetaan kirjainkoko huomioiden, mutta useimmat skannausprosessit käsittelevät niitä kirjainkoosta riippumatta — valitse yksi käytäntö ja pitäydy siinä.
* **Välilyönnit:** poista alku- ja loppuvälilyönnit ennen tallennusta. Sisällä olevat välilyönnit toimivat mutta tekevät skannauksesta epävarmaa.

Hyviä käytäntöjä:

| Kaava                      | Esimerkki         | Käyttötapaus                      |
| -------------------------- | ----------------- | --------------------------------- |
| Pelkkä juokseva numerointi | `B-1`, `B-2`, ... | Nopea käyttöönotto                |
| SKU-etuliite               | `BIK-S-001`       | Helppo lukea yhdellä silmäyksellä |
| Sijaintietuliite           | `HEL-BIK-001`     | Monen sijainnin toiminta          |
| Vuosietuliite              | `2025-BIK-001`    | Hankintaerän seuranta             |
| Sarjanumero                | `SN12345`         | Valmistajan antama                |

## QR-koodit ja viivakoodien skannaus

Varastokoodit on suunniteltu koodattaviksi fyysisiin tarroihin. Yleisiä käyttötapoja:

* **Tulosta vastaanotossa.** Kun uutta varastoa saapuu, rekisteröi varastoartikkelit automaattisesti luoduilla tai käsin syötetyillä koodeilla ja tulosta tarrat suoraan hallinnasta.
* **Skannaa noudossa.** Työntekijä skannaa artikkelin koodin kohdistaessaan sen vuokratilaukselle — TWICE tarkistaa koodin, löytää artikkelin ja liittää sen tilausriville.
* **Skannaa palautuksessa.** Sama skannaus toimii toiseen suuntaan: artikkelit merkitään palautetuiksi ja tila vaihtuu arvosta **Out** arvoon **In**.
* **Skannaa haussa.** Nopea haku hallinnassa: skannaa koodi ja siirry suoraan artikkelin tietoihin.

Koska `codes` on taulukko, artikkelin voi skannata kummasta tarrasta tahansa, jos sillä on sekä sisäinen omaisuustarra että valmistajan viivakoodi. Työntekijän ei tarvitse tietää, kumpaa hän katsoo.

## Yksilöllisyyden laajuus

Yksilöllisyysvaatimus on **tenantkohtainen** (TWICE Commerce -tilisi). Kahdella eri tenantilla voi kummallakin olla varastoartikkeli `B-1`. Tenantin sisällä:

* Jokaisen artikkelin `codes`-taulukossa olevan koodin on oltava yksilöllinen **kaikkien** varastoartikkelien kesken.
* Tarkistus tehdään palvelimella luonnissa ja päivityksessä `articleCodes`-taulun avulla.
* Käytä kutsua `POST /articles/validate-code` (yksi) tai `POST /articles/validate-codes` (erä) ennen lähetystä, jotta virhe havaitaan heti selkeästi.

## Suhteet

```mermaid theme={null}
flowchart LR
    SKU["SKU<br/>code: BIK-S"]
    Article1["Varastoartikkeli<br/>codes: B-1, SN001"]
    Article2["Varastoartikkeli<br/>codes: B-2, SN002"]
    Article3["Varastoartikkeli<br/>codes: B-3"]
    Label1["Tarra B-1"]
    Label2["Viivakoodi SN001"]
    SKU --> Article1
    SKU --> Article2
    SKU --> Article3
    Label1 -.->|skannaus johtaa| Article1
    Label2 -.->|skannaus johtaa| Article1
```

## Elinkaari

<Steps>
  <Step title="Luonti">
    Koodit annetaan varastoartikkelin luonnissa.

    <AccordionGroup>
      <Accordion title="Miten koodit luodaan?">
        Jos lähetät `codes: ["..."]`, arvoja käytetään sellaisenaan. Jos jätät `codes`-kentän pois, TWICE luo 8-merkkisen satunnaisen koodin. Myös **Register stock items** -joukkodialogi voi luoda sarjan.
      </Accordion>

      <Accordion title="Voinko tarkistaa koodit ennen luontia?">
        Kyllä. `POST /articles/validate-code` arvolla `{ code }` palauttaa `{ isUnique }`. `POST /articles/validate-codes` arvolla `{ codes: [...] }` palauttaa listan virheellisistä koodeista ja niiden syyn (`existing`).
      </Accordion>
    </AccordionGroup>
  </Step>

  <Step title="Käyttö">
    Koodit ovat varastoartikkelin arkinen käyttökahva.

    <AccordionGroup>
      <Accordion title="Missä koodit näkyvät?">
        Varastoartikkelin tiedoissa, taulukon sarakkeessa, artikkelin sisältävissä tilauksissa, tulostamissasi tarroissa, skannausprosesseissa ja jokaisessa API-vastauksessa, joka sisältää Article-resurssin.
      </Accordion>

      <Accordion title="Voinko hakea koodilla?">
        Kyllä. Varastoartikkelitaulukon haku ja hallinnan yleishaku löytävät koodia vastaavan varastoartikkelin. API tukee `filters.code`-suodatinta täsmälliseen ja osittaiseen hakuun.
      </Accordion>
    </AccordionGroup>
  </Step>

  <Step title="Muokkaus">
    Koodeja voi lisätä, poistaa tai korvata.

    <AccordionGroup>
      <Accordion title="Miten lisään koodin?">
        Muokkaa artikkelia ja lisää arvo `codes`-taulukkoon tai kutsu `PUT /articles/:id` uudella täydellä taulukolla. Muutos kirjataan `identifiers_changed`-tapahtumana, jossa näkyvät edellinen ja uusi taulukko.
      </Accordion>

      <Accordion title="Voinko muuttaa koodin?">
        Kyllä — korvaa taulukko uudella arvolla. Vanha koodi irrotetaan ja se vapautuu välittömästi käytettäväksi toisella artikkelilla.
      </Accordion>

      <Accordion title="Mitä tapahtuu vanhoille viittauksille?">
        Tilausrivit ja reskontramerkinnät viittaavat varastoartikkeliin sen `id`-kentällä, eivät koodilla. Koodin muuttaminen tai poistaminen ei riko aiempia linkkejä.
      </Accordion>
    </AccordionGroup>
  </Step>
</Steps>

## Usein kysytyt kysymykset

<AccordionGroup>
  <Accordion title="Voinko muuttaa varastokoodia luonnin jälkeen?">
    Kyllä. Koodit eivät ole muuttumattomia — voit lisätä, poistaa tai korvata niitä milloin tahansa. Muutos kirjataan tapahtumalokiin nimellä `identifiers_changed`. Aiemmat tilaukset ja reskontramerkinnät linkittyvät artikkelin tunnuksella eivätkä koodilla, joten ne pysyvät voimassa.
  </Accordion>

  <Accordion title="Mitä eroa on varastokoodilla ja artikkelikoodilla?">
    Ne ovat sama asia. ”Varastokoodi” korostaa varastonseurantaa; ”artikkelikoodi” korostaa, että se tunnistaa tietyn fyysisen artikkelin. API:ssa kenttä on `codes` resurssilla `Article`.
  </Accordion>

  <Accordion title="Voiko kahdella artikkelilla olla sama koodi?">
    Ei — koodit ovat yksilöllisiä kaikkien tenantin varastoartikkelien kesken. Jos yrität luoda tai päivittää päällekkäisellä koodilla, toiminto epäonnistuu ja tarkistuksen syyksi tulee `existing`.
  </Accordion>

  <Accordion title="Voiko yhdellä artikkelilla olla useita koodeja?">
    Kyllä. `codes`-kenttä on taulukko. Voit liittää samaan varastoartikkeliin sisäisen koodin, valmistajan sarjanumeron ja pakkauksen viivakoodin — minkä tahansa niistä skannaus johtaa kyseiseen artikkeliin.
  </Accordion>

  <Accordion title="Mitä muotoa kannattaa käyttää?">
    Sitä, mikä sopii toimintaasi. Useimmat käyttävät kirjaimia ja numeroita väliviivojen tai alaviivojen kanssa, jotta koodit toimivat tarratulostimissa ja viivakoodinlukijoissa. Järjestelmä luo 8-merkkisiä satunnaisia koodeja, kun arvo jätetään antamatta.
  </Accordion>

  <Accordion title="Onko yksilöllisyys globaali vai sijaintikohtainen?">
    Tenantkohtainen. Koodi on yksilöllinen koko tililläsi, ei vain yhden palvelusijainnin sisällä. Kahdella saman TWICE-tenantin sijainnilla ei voi kummallakin olla koodia `B-1`.
  </Accordion>
</AccordionGroup>

## Kehittäjän viitetiedot

Varastokoodeja hallitaan `articles`-päätepisteillä. Tarkista yksilöllisyys ennen luontia kutsulla `validate-code`.

<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">
    Tietueet, jotka koodit tunnistavat
  </Card>

  <Card title="SKU:t" icon="layer-group" href="/docs/fi/concepts/inventory/skus">
    SKU-koodi vs. artikkelikoodi
  </Card>

  <Card title="Varastonseuranta" icon="boxes-stacked" href="/docs/fi/concepts/inventory/inventory-tracking">
    Koodit toimivat eri tavoin sarjanumeroidussa ja yhteisvarastossa
  </Card>
</CardGroup>
