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

# Listausten saatavuus

> Miten TWICE päättää, mitkä listaukset ovat saatavilla myyntikanavassa, ja miten saatavuutta haetaan sijainnin, keräilytavan ja varauspäivien mukaan.

## Määritelmä

**Saatavuus** vastaa yhteen kysymykseen — *mitkä listaukset asiakas voi saada tässä myyntikanavassa?* — ja sitä voi tarkentaa lisätiedoilla:

* *…tietyllä keräilytavalla*
* *…tietyssä sijainnissa*
* *…varattavaksi kahden päivämäärän välillä*

Sama saatavuuspalvelu ohjaa TWICEn omia myyntikanavia (verkkokauppa, POS, Admin), ja se on ulkoisten integraatioiden käytettävissä API:n kautta.

## Miten se toimii

Saatavuus **ei ole binäärinen** — listauksen saatavuus riippuu useista tekijöistä, jotka kerrostuvat sitä mukaa kuin lähtötietoja karttuu:

* **Listaus** — listaus on aktiivinen, näkyvissä kanavassa ja sillä on vähintään yksi kelvollinen ostotyyppi.
* **Varasto** — vähintään yhdessä sijainnissa on varastoa (varastoa seuraavilla tuotteilla).
* **Keräily** — jokin keräilytapa voi palvella asiakasta. **Noudossa toimipisteestä** listaus on *kelpoinen* sijainnissa vain, kun sitä myydään siellä **ja** kyseisen sijainnin [keräilysäännöt](/docs/fi/concepts/admin/locations) tarjoavat noudon toimipisteestä listauksen ostotyypille (vuokraus tai myynti).
* **Päivämäärät** — varauksissa pyydetty ajanjakso on kalenterissa vapaa.

Asiakas valitsee sijainnin ja päivämäärät yleensä vasta myöhään, joten saatavuus vastaa niillä tiedoilla, jotka sillä kulloinkin on, ja tarkentuu tietojen karttuessa:

| Lähtötiedot                     | Mitä voit kertoa asiakkaalle                                                                     |
| ------------------------------- | ------------------------------------------------------------------------------------------------ |
| Vain kanava                     | ”Saatavilla 3 sijainnissa” — tai varattavilla tuotteilla ”Valitse päivät nähdäksesi saatavuuden” |
| Kanava + sijainti               | ”Varastossa keskustassa — nouto ja keräily saatavilla”                                           |
| Kanava + sijainti + päivämäärät | ”Varattavissa 1.–7.7. hintaan 45 €/päivä”                                                        |

### Kelpoisuus vs. saatavuus

Kaksi näistä tekijöistä vastaa eri kysymyksiin, ja verkkokauppa ratkaisee ne järjestyksessä:

* **Kelpoisuus** on *määritysasia* — *voidaanko tämä listaus ylipäätään toimittaa tästä sijainnista?* Sijainti on listaukselle kelpoinen, kun listausta **myydään siellä** ja sijainti tarjoaa **keräilytavan listauksen ostotyypille**. Se ei riipu varastotasoista tai päivämääristä, joten sen voi laskea etukäteen — näyttämään ”saatavilla noudettavaksi näistä sijainneista” ja suodattamaan sijaintivalitsinta.
* **Saatavuus** lisää päälle **varaston ja päivämäärät** — *onko kelpoisissa sijainneissa tosiasiassa pyydettyjä tuotteita vapaana valitulle ajanjaksolle?* Sijainti voi olla kelpoinen mutta silti loppuunvarattu tietyllä aikavälillä tai määrällä.

Verkkokauppa rajaa ensin kelpoisiin sijainteihin ja ratkaisee sitten todellisen varaston ja päivämäärät asiakkaan valitsemalle sijainnille. Tuote, joka näkyy ”saatavilla noudettavaksi”, voi siis silti osoittautua loppuunvaratuksi, kun konkreettiset päivämäärät ja määrät otetaan huomioon — kelpoisuus kertoo *missä se voitaisiin toimittaa*, saatavuus vahvistaa *voidaanko se toimittaa juuri nyt*.

Usean toimipisteen verkkokaupoissa [toimipistevalitsin](/docs/fi/sales-channels/online-store/theme-editor/settings/store-selection) määrittää, minkä sijainnin varaston asiakas näkee. Ostoskorisivu täydentää tätä toimipistekohtaisella saatavuustarkistuksella — jokainen toimipiste merkitään joko ”Ostoskori saatavilla” tai ”Ostoskori ei saatavilla” sen mukaan, voiko se toimittaa kaikki korin tuotteet valituille päiville.

### Saatavuussignaali vs. tarkka varastotaso

Selausnäkymässä saatavuus on **signaali** — *saatavilla jossakin* — ei lukumäärä. Se kertoo asiakkaalle, voiko tuotteen ostaa ja kuinka monessa sijainnissa, **paljastamatta tarkkoja määriä**:

| Signaali      | Mitä asiakas näkee             |
| ------------- | ------------------------------ |
| Saatavilla    | ”Saatavilla 3 sijainnissa”     |
| Ei saatavilla | ”Ei tällä hetkellä saatavilla” |

Tarkat sijaintikohtaiset määrät palautetaan vasta kun tietty sijainti on valittu, ja vain jos kauppias haluaa näyttää ne — osa kauppiaista haluaa ”vain 2 jäljellä” -tyyppisen niukkuusvihjeen, toiset pitävät tarkkaa varastotasoa yksityisenä tietona.

**Varattavissa** olevilla tuotteilla saatavuus on luonteeltaan päivämääräsidonnaista: mitään merkityksellistä signaalia ei ole ennen kuin asiakas valitsee päivät.

<Note>
  Saatavuus heijastaa [varastoartikkelin tilaa](/docs/fi/concepts/inventory/stock-item-state) ja kaikkia [ajastettuja tapahtumia](/docs/fi/concepts/inventory/events) (varauksia ja muita pidätyksiä), jotka estävät tuotteen käytön tietyksi ajaksi. Tuote, joka on sidottu tilaukseen, varattu tai jonka tila ei ole **käytössä**, ei lasketa saatavuuteen kyseisellä aikavälillä. Myös [puskuriaika](/docs/fi/inventory/stock-items/fulfillment) laajentaa ei-saatavilla olevaa aikaikkunaa molempiin suuntiin — varausta edeltävä puskuri estää tuotteen käytön ennen varauksen alkua (ja toimii verkkokaupassa vähimmäisvarausaikana), kun taas varauksen jälkeinen puskuri estää sen käytön varauksen päätyttyä. Molemmat puskurijaksot lasketaan sidotuiksi, ja ne estävät tuotteen varaamisen kyseisinä aikoina.
</Note>

## Varauspäätös

Se, saako asiakas listauksen, on **JA**-ehto useiden kerrosten yli — jokaisen on täytyttävä, ja **ensimmäinen epäonnistuva kerros on syy** siihen, ettei tuotetta tarjota. Verkkokauppa arvioi ne kevyimmästä (pelkkä määritys) tarkimpaan (elävä varasto ja päivämäärät):

```mermaid theme={null}
flowchart TD
  S{"Onko listaus myytävissä?<br/>aktiivinen · kanavassa · hinnoiteltu"} -->|ei| X[Ei tarjota]
  S -->|kyllä| E{"Onko sijainti kelpoinen?<br/>myydään siellä · tarjoaa tämän keräilytavan ostotyypille"}
  E -->|ei| X
  E -->|kyllä| K{"Onko varastoa?<br/>vain seuratut tuotteet"}
  K -->|ei| X
  K -->|kyllä| D{"Sopivatko päivät ja määrä?<br/>vain varaukset"}
  D -->|ei| X
  D -->|kyllä| OD{"Onko tilausmääräaika täytetty?<br/>varaukset ja kestotilaukset"}
  OD -->|ei| X
  OD -->|kyllä| Y[Tarjotaan asiakkaalle]
```

<Steps>
  <Step title="Listaus on myytävissä">
    * Tila on **aktiivinen** — luonnos- ja pohjatilassa olevia [listauksia](/docs/fi/concepts/catalog/listings) ei koskaan tarjota.
    * Käytössä asiakkaan **myyntikanavassa** (`salesChannelOnline` verkkokaupassa).
    * Vähintään yhdellä ostotyypillä on rivi liitetyssä [hintataulukossa](/docs/fi/concepts/catalog/price-tables): käytössä oleva, voimassa oleva **varausrivi** vuokrauksille tai **myyntirivi** ostoille.
  </Step>

  <Step title="Jokin sijainti voi toimittaa sen — *kelpoisuus*">
    * Listausta **myydään** kyseisessä [sijainnissa](/docs/fi/concepts/admin/locations) (liitetty), ja sijainti on aktiivinen ja kanava käytössä.
    * Sijainnin [keräilysäännöt](/docs/fi/concepts/admin/locations) tarjoavat pyydetyn **keräilytavan** (esimerkiksi noudon toimipisteestä) **kyseiselle ostotyypille**. Toimipiste, joka tarjoaa noudon myynneille mutta ei vuokrauksille, tekee vuokrauksesta siellä *kelpaamattoman* — vaikka varastoa olisi.

    Tämä kerros on pelkkää määritystä: varastoa tai päivämääriä ei vielä katsota, joten sen voi ratkaista etukäteen sijaintivalitsimen suodattamiseksi.
  </Step>

  <Step title="Varastoa on — *saatavuus*">
    Varastoa seuraavilla tuotteilla kelpoisessa sijainnissa on oltava vähintään yksi käyttökelpoinen [varastoartikkeli](/docs/fi/concepts/inventory/stock-item-state) — tilassa *käytössä* eikä sidottuna tilaukseen, varattuna tai muuten pidätettynä. Listaukset, joilla on rajoittamaton saatavuus, ohittavat tämän kerroksen.
  </Step>

  <Step title="Päivämäärät ja määrä sopivat (varaukset)">
    Kun asiakas on valinnut ajanjakson:

    * **Varausrivin** on katettava kesto ja noudatettava sen `weekdays`- ja `timeOfDayRange`-arvoja, taulukon päivämääräväliä sekä listauksen vähimmäis- ja enimmäisvarauskestoa — muuten **hintaa ei ole**, joten varattavaa vaihtoehtoa ei ole.
    * Sijainnin **[keräilyaikojen](/docs/fi/concepts/admin/locations)** on sallittava valitut nouto- ja palautusajat. Noutoajat rajaavat varauksen alkua, palautusajat sen loppua. Sijainnit, joilla ei ole mukautettuja keräilyaikoja, käyttävät aukioloaikoja.
    * Jokaisen tarvittavan kappaleen on oltava **vapaa [päällekkäisyyksistä](/docs/fi/concepts/orders/stock-item-conflicts)** **koko aikavälin** ajan — pyydetty **määrä** ei voi ylittää kyseisenä aikana käytettävissä olevien kappaleiden määrää. [Puskuriaika](/docs/fi/inventory/stock-items/fulfillment) laajentaa päällekkäisyysikkunaa molempiin suuntiin — alkupuskuri estää tuotteen käytön ennen varauksen alkua ja loppupuskuri sen jälkeen. Tuote, jolla on 1 tunnin alkupuskuri ja 2 tunnin loppupuskuri, ei ole saatavilla tunti ennen noutoa eikä kahteen tuntiin palautuksen jälkeen. Yksi varaus jätetään tästä tarkistuksesta pois: se, jonka muokkaamasi rivitieto pitää hallussaan — katso muokattavan rivitiedon käsittely jäljempänä.
    * Varastoartikkelin **alkupuskuri** asettaa verkkokaupassa myös vähimmäisvarausajan: varaus, joka alkaa aikaisemmin kuin puskuri sallii, näytetään ei-saatavilla olevana. Admin-henkilökuntaa rajoitus ei koske.
  </Step>

  <Step title="Tilausmääräaika ei ole umpeutunut (varaukset ja kestotilaukset)">
    Jos listauksella on [tilausmääräaika](/docs/fi/catalog/listings/limits), asiakkaan on tehtävä tilaus ennen rajaa:

    * **Tietty aika ennen** — alkamisaika miinus kiinteä aikaväli (esimerkiksi 2 tuntia ennen alkua).
    * **Kellonajan mukaan** — kellonaikaan sidottu raja aiempana päivänä, palvelusijainnin aikavyöhykkeen mukaan (esimerkiksi klo 18.00 mennessä, päivää ennen alkua).

    Määräajan ylittäneet alkamisajat näkyvät verkkokaupan kalenterissa ei-saatavilla olevina. Jos asiakkaalla on tuote ostoskorissa ja määräaika umpeutuu ennen kassalle siirtymistä, ostoskori merkitsee tuotteen `order_deadline`-ilmoituksella. Admin-käyttäjiä rajoitus ei koske — henkilökunta voi luoda tilauksia määräajan jälkeen.
  </Step>
</Steps>

Asiakkaalle näkyvä vastaus heijastaa syvintä saavutettua kerrosta: *”Saatavilla 3 sijainnissa”* ennen sijainnin valintaa, *”Ei saatavilla tästä sijainnista”*, kun kelpoisuus ei täyty, *”Ei vapaita päiviä”*, kun mikään päivä ei kelpaa, ja kappalemäärä kuten *”Vain 1 jäljellä”*, kun määrä on esteenä.

### Olemassa olevan rivitiedon muokkaus

Kun saatavuus lasketaan **muokattavana olevalle** rivitiedolle, kyseisen rivitiedon oma varaus jätetään tarkistuksen ulkopuolelle yhdessä siihen liitettyjen lisäosien varausten kanssa. Poikkeus kattaa koko varatun jalanjäljen — [puskuri-ikkunat](/docs/fi/inventory/stock-items/fulfillment) mukaan lukien — jottei rivitieto koskaan estä omaa muokkaustaan.

Ilman tätä tuotteen oma puskuri kääntyisi sitä vastaan: varastoartikkeli, jolla on 2 tunnin loppupuskuri, kieltäytyisi sen vuokra-ajan tunnin pidennyksestä, joka puskurin alun perin loi.

**Myydyn** varastoartikkelin jättäminen tarkistuksen ulkopuolelle vapauttaa myynnin kuluttaman kapasiteetin samalla tavalla, joten myynnin uudelleenpäivääminen näkee oman kappaleensa jälleen saatavilla olevana.

Sääntö pätee kaikkialla, missä olemassa olevaa rivitietoa päivätään tai valitaan uudelleen — Adminin [rivitietojen](/docs/fi/orders/order-tabs/line-items) editorissa ja verkkokaupan ostoskorin muokkauksessa. Se ei ulotu saman tilauksen *muihin* rivitietoihin: ne pitävät varauksensa normaalisti, ja niiden kanssa törmäävä muokkaus raportoidaan ei-saatavilla olevaksi.

### Ostoskorissa jo olevat tuotteet

Ostoskorin tuotteet tarkistetaan ikään kuin ne olisi jo varattu, puskureineen kaikkineen. Saman varastoartikkelin toista vuokrausta, joka alkaa ensimmäisen loppupuskurin sisällä, ei tarjota, vaikka itse vuokra-ajat eivät menisi päällekkäin.

Sama koskee ostoskorisivun toimipistekohtaista tarkistusta: toimipiste lasketaan ”Ostoskori saatavilla” -tilaan vain, kun se pystyy pitämään hallussaan kaikki korin tuotteet puskuri-ikkunoineen yhtä aikaa.

### Esimerkkejä

<AccordionGroup>
  <Accordion title="Vuokraus toimipisteessä, joka tarjoaa noudon vain myynneille">
    Listaus on aktiivinen ja varastossa toimipisteessä, mutta toimipisteen keräilysäännöt sallivat noudon toimipisteestä vain **myynneille**. Vuokraus on siellä **kelpaamaton**, joten verkkokauppa näyttää *”Ei saatavilla tästä sijainnista”* — vaikka kappaleita on. Se voi silti olla varattavissa toisessa toimipisteessä, joka tarjoaa vuokrausnoudon.
  </Accordion>

  <Accordion title="Varastossa, mutta valitut päivät ovat päällekkäisiä">
    Tuote on kelpoinen ja kappaleita on, mutta jokainen valitun sijainnin kappale on jo sidottu osaksi pyydettyä ajanjaksoa. Selaussignaalissa se näkyy *saatavilla olevana*, mutta kalenteri ei palauta **yhtään varattavaa aikaväliä** juuri noille päiville — toiset päivät tai toinen sijainti ratkaisevat asian.
  </Accordion>

  <Accordion title="Vuokrauksen pidennys, jonka oma puskuri on tiellä">
    Varastoartikkelilla on 2 tunnin loppupuskuri, ja asiakas soittaa pidentääkseen vuokraustaan tunnilla. Ylimääräinen tunti osuu puskuriin, jonka vuokraus itse loi. Koska muokattava rivitieto jätetään tarkistuksen ulkopuolelle, tunti näkyy vapaana ja uudet päivämäärät tallentuvat. Toisen asiakkaan varaus samassa ikkunassa estäisi sen edelleen.
  </Accordion>

  <Accordion title="Varattavissa, mutta ei pyydettynä viikonpäivänä tai kestona">
    Ainoa varausrivi on rajattu ma–pe (`weekdays`) kahden päivän vähimmäiskestolla. Lauantain alku tai yhden päivän varaus ei vastaa **yhtäkään riviä** — ei hintaa, joten valintaa ei voi varata, vaikka varastoa olisi vapaana.

    Verkkokauppa kertoo tämän ennen kuin asiakas sitoutuu: varaustyökalun **Booking options** -pudotusvalikossa vaihtoehto, joka ei voi alkaa valittuna päivänä, näkyy harmaana ja kertoo seuraavan mahdollisen päivän — *”Ei saatavilla valituille päiville — seuraava vapaa ma 18.8.”*. Sen valinta siirtää alkamispäivän kyseiselle päivälle. Katso [Verkkokauppa](/docs/fi/concepts/sales-channels/online-store).
  </Accordion>

  <Accordion title="Määrä ylittää yhden sijainnin varaston">
    Asiakas haluaa 3 kappaletta; valitussa sijainnissa on 1 vapaana aikavälillä ja toisessa 2. Kumpikaan ei voi toimittaa kaikkia 3 yksin, joten tuote näkyy kokonaisuutena *saatavilla olevana*, mutta valitussa sijainnissa enimmäismäärä on 1. Määrän pienentäminen — tai riittävän varaston omaavan sijainnin valitseminen — ratkaisee asian.
  </Accordion>

  <Accordion title="Myyntituote ilman varastonseurantaa">
    Tilauksesta valmistettava myyntilistaus, jolla on rajoittamaton saatavuus, ohittaa varasto- ja päällekkäisyyskerrokset kokonaan: kunhan se on aktiivinen, kanavassa ja myynnissä kelpoisessa sijainnissa, se on ostettavissa ilman määrän ylärajaa.
  </Accordion>

  <Accordion title="Tilausmääräaika umpeutuu tuotteen ollessa ostoskorissa">
    Listauksella on tilausmääräaika ”2 tuntia ennen alkua”. Asiakas lisää klo 14.00 alkavan varauksen ostoskoriinsa klo 11.30, mutta siirtyy kassalle vasta klo 12.15. Ostoskori merkitsee tuotteen — määräaika oli klo 12.00, eikä tilausta voi enää tehdä kyseiselle alkamisajalle. Asiakas voi valita myöhemmän alkamisajan tai poistaa tuotteen.
  </Accordion>
</AccordionGroup>

## Saatavuuden hakeminen API:n kautta

Todenna `X-API-KEY`-otsakkeella (katso [API-avaimet](/docs/fi/concepts/integrations/api-keys)). Keskeiset päätepisteet:

| Päätepiste                                          | Tarkoitus                                                                         |
| --------------------------------------------------- | --------------------------------------------------------------------------------- |
| `GET /internal/availability/{catalogItemId}/period` | Laskettu saatavuus päivämääräväliltä sekä siihen vaikuttaneet rajoitteet          |
| `GET /internal/availability/{catalogItemId}/range`  | Saatavuus aikavälillä osaväleihin jaettuna                                        |
| `GET /internal/catalog/{id}/quantity`               | Listauksen saatavilla oleva määrä, valinnaisesti sijainnin ja päivämäärien mukaan |
| `GET /internal/articles/available`                  | Saatavilla olevat varastoartikkelit aikavälille ja suodattimille                  |

Yleisiä kyselyparametreja ovat `from` / `to` (päivämääräväli), `serviceLocationIds` ja `variantValueIds`. Verkkokaupan vastineet löytyvät poluista `/storefront/catalog/products/{productId}/availability/period` ja `/range`.

Katso täydet parametrit ja vastausskeemat [API-referenssistä](https://server.twicecommerce.com/api/internal) — se muodostetaan suoraan käytössä olevasta API:sta, joten se vastaa aina nykyisiä kenttiä.

## Aiheeseen liittyvää

<CardGroup cols={2}>
  <Card title="Listaukset" icon="list" href="/docs/fi/concepts/catalog/listings">
    Asiakkaille näkyvä katalogikohde, jolle saatavuus lasketaan.
  </Card>

  <Card title="Varastoartikkelin tila" icon="boxes-stacked" href="/docs/fi/concepts/inventory/stock-item-state">
    Sisään- ja ulossitoumukset, jotka ohjaavat saatavuutta.
  </Card>

  <Card title="Ajastetut tapahtumat" icon="calendar" href="/docs/fi/concepts/inventory/events">
    Varaukset ja pidätykset, jotka estävät saatavuuden tietyksi ajaksi.
  </Card>

  <Card title="Hintataulukot" icon="table" href="/docs/fi/concepts/catalog/price-tables">
    Varausten yhteydessä saatavuuden rinnalla palautettava hinnoittelu.
  </Card>

  <Card title="Sijainnit" icon="location-dot" href="/docs/fi/concepts/admin/locations">
    Missä listauksia myydään ja mitkä keräilysäännöt ohjaavat noudon kelpoisuutta.
  </Card>
</CardGroup>
