# STAI-40 Ukrainian source and scoring audit Status: **frozen research artifact** Artifact date: **2026-07-11** Machine-readable source: [`stai-40-uk-source.json`](./stai-40-uk-source.json) Validator: [`validate-stai-40-source.mjs`](./validate-stai-40-source.mjs) This artifact freezes a Ukrainian 40-item Spielberger–Khanin questionnaire corpus and two independent 20-item scores: - `state`, items 1–20: ситуативна тривожність; - `trait`, items 21–40: особистісна тривожність. It is a documented collation of two Ukrainian military-methodology publications. It is **not** an assertion that this wording is the licensed STAI-Y form, and it is not a diagnostic instrument by itself. ## Source lock Research used Tavily regular search only. Tavily Research was not used. PDF bytes, page locations, transcribed wording, and adjudications are frozen in the JSON artifact. | ID | Publication and URL | Role | PDF SHA-256 | Relevant PDF pages | |---|---|---|---|---| | `ahaiev-2016` | Агаєв Н. А. та ін., *Збірник методик для діагностики негативних психічних станів військовослужбовців* (2016): [record](https://lib.iitta.gov.ua/id/eprint/107163), [PDF](https://lib.iitta.gov.ua/id/eprint/107163/1/%D0%9F%D0%BE%D1%81%D1%96%D0%B1%D0%BD%D0%B8%D0%BA%20%D0%9D%D0%9F%D0%A1_16.pdf) | Primary items and scoring | `3637bf4720b9f538c56247877ebf89540e84c2416c9594e3a7332367d38ca9b4` | 97: description/instruction; 98: state items; 99: trait items; 100: keys/bands | | `viknu-2013` | Балашова С. П., Васильєв С. П., Дубровинський Г. Р., *Практичний курс військової психології. Частина II* (2013): [PDF](https://viknu.mil.gov.ua/files/books/%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%BD%D0%B8%D0%B9%20%D0%BA%D1%83%D1%80%D1%81%20%D0%B2%D1%96%D0%B9%D1%81%D1%8C%D0%BA%D0%BE%D0%B2%D0%BE%D1%97%20%D0%BF%D1%81%D0%B8%D1%85%D0%BE%D0%BB%D0%BE%D0%B3%D1%96%D1%97.pdf) | Independent collation, trait labels, scoring | `277cfda104b4d2a4f5a622a80e4d6a6d25ff726f16f4a59dd9838f9366e4826a` | 119: state form; 120: trait form; 126: description; 127: keys/bands | Page numbers above are PDF page indices used during extraction. The PDFs contain 234 and 172 pages respectively. Reachability note (2026-07-11): the viknu.mil.gov.ua URL now serves an HTML challenge page instead of the PDF, so its frozen SHA-256 can no longer be re-verified from the live URL. Provenance stands on the frozen hash plus the fully re-verified primary source (lib.iitta.gov.ua PDF, hash re-confirmed 2026-07-11). If the secondary PDF resurfaces (e.g., a web.archive.org snapshot), re-verify against the frozen hash before citing it further. ### Adjudication policy 1. Use Ahaiev as the primary item source. 2. Use VIKNU where Ahaiev has a construct-changing defect or where VIKNU preserves a meaningful qualifier. 3. Repair visible truncation and normalize clear Russian-calque constructions without deliberately changing the construct. 4. Use VIKNU's trait frequency labels because Ahaiev page 99 mistakenly repeats the state agreement labels. 5. Accept scoring only where Ahaiev page 100 and VIKNU page 127 agree. Language normalization was checked with the Horokh references for [перебувати](https://goroh.pp.ua/%D0%A1%D0%BB%D0%BE%D0%B2%D0%BE%D0%B2%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F/%D0%BF%D0%B5%D1%80%D0%B5%D0%B1%D1%83%D0%B2%D0%B0%D1%82%D0%B8), [почуватися](https://goroh.pp.ua/%D0%A1%D0%BB%D0%BE%D0%B2%D0%BE%D0%B2%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F/%D0%BF%D0%BE%D1%87%D1%83%D0%B2%D0%B0%D1%94%D1%88), and the idiom [брати близько до серця](https://goroh.pp.ua/%D0%A4%D1%80%D0%B0%D0%B7%D0%B5%D0%BE%D0%BB%D0%BE%D0%B3%D1%96%D1%8F/%D0%BF%D1%80%D0%B8%D0%B9%D0%BC%D0%B0%D1%82%D0%B8%20%D0%B1%D0%BB%D0%B8%D0%B7%D1%8C%D0%BA%D0%BE%20%D0%B4%D0%BE%20%D1%81%D0%B5%D1%80%D1%86%D1%8F). ## Administration contract ### `state` Instruction: > Позначте відповідь залежно від того, як ви почуваєтеся зараз. Не замислюйтеся надовго: правильних чи неправильних відповідей немає. Exact response mapping: | Value | Label | |---:|---| | 1 | Ні | | 2 | Скоріш ні | | 3 | Скоріш так | | 4 | Так | ### `trait` Instruction: > Позначте відповідь залежно від того, як ви почуваєтеся зазвичай. Не замислюйтеся надовго: правильних чи неправильних відповідей немає. Exact response mapping: | Value | Label | |---:|---| | 1 | Майже ніколи | | 2 | Іноді | | 3 | Часто | | 4 | Майже завжди | Every section requires exactly 20 integer responses in `1..4`. An incomplete section must not be scored. Sex and age are **not required** for scoring or interpretation: neither source supplies sex- or age-specific norms. The feminine strings below are grammatical presentation variants only. Male, female, and unspecified presentation must produce identical scores for identical answers. ## Frozen approved corpus `D` means a direct-keyed item. `R` means a reverse-keyed item. A blank feminine cell means the default wording is already usable unchanged. | ID | Section | Key | Approved default wording | Feminine presentation variant | |---:|---|:---:|---|---| | 1 | state | R | Я спокійний. | Я спокійна. | | 2 | state | R | Мені ніщо не загрожує. | | | 3 | state | D | Я перебуваю у стані напруження. | | | 4 | state | D | Я відчуваю жаль. | | | 5 | state | R | Я почуваюся вільно. | | | 6 | state | D | Я засмучений. | Я засмучена. | | 7 | state | D | Мене хвилюють можливі невдачі. | | | 8 | state | R | Я почуваюся відпочилим. | Я почуваюся відпочилою. | | 9 | state | D | Я стурбований. | Я стурбована. | | 10 | state | R | Я відчуваю внутрішнє задоволення. | | | 11 | state | R | Я впевнений у собі. | Я впевнена у собі. | | 12 | state | D | Я нервую. | | | 13 | state | D | Я не знаходжу собі місця. | | | 14 | state | D | Я напружений. | Я напружена. | | 15 | state | R | Я не відчуваю скутості чи напруження. | | | 16 | state | R | Я задоволений. | Я задоволена. | | 17 | state | D | Я занепокоєний. | Я занепокоєна. | | 18 | state | D | Я надто збуджений, і мені не по собі. | Я надто збуджена, і мені не по собі. | | 19 | state | R | Мені радісно. | | | 20 | state | R | Мені приємно. | | | 21 | trait | R | Я відчуваю задоволення. | | | 22 | trait | D | Я дуже швидко втомлююся. | | | 23 | trait | D | Я легко можу заплакати. | | | 24 | trait | D | Я хотів би бути таким самим щасливим, як інші. | Я хотіла б бути такою самою щасливою, як інші. | | 25 | trait | D | Нерідко я програю через те, що недостатньо швидко ухвалюю рішення. | | | 26 | trait | R | Зазвичай я почуваюся бадьорим. | Зазвичай я почуваюся бадьорою. | | 27 | trait | R | Я спокійний, холоднокровний і зібраний. | Я спокійна, холоднокровна й зібрана. | | 28 | trait | D | Очікувані труднощі зазвичай дуже тривожать мене. | | | 29 | trait | D | Я надто переживаю через дрібниці. | | | 30 | trait | R | Я цілком щасливий. | Я цілком щаслива. | | 31 | trait | D | Я беру все надто близько до серця. | | | 32 | trait | D | Мені не вистачає впевненості в собі. | | | 33 | trait | R | Зазвичай я почуваюся в безпеці. | | | 34 | trait | D | Я намагаюся уникати критичних ситуацій і труднощів. | | | 35 | trait | D | Буває, що мене охоплює смуток. | | | 36 | trait | R | Я задоволений. | Я задоволена. | | 37 | trait | D | Будь-які дрібниці відволікають і хвилюють мене. | | | 38 | trait | D | Я так сильно переживаю свої розчарування, що потім довго не можу про них забути. | | | 39 | trait | R | Я врівноважена людина. | | | 40 | trait | D | Мене охоплює сильне занепокоєння, коли я думаю про свої справи й турботи. | | There are exactly 14 explicit feminine variants: `1, 6, 8, 9, 11, 14, 16, 17, 18, 24, 26, 27, 30, 36`. Item 39 intentionally has no variant: *людина* is grammatically feminine regardless of the respondent's sex. ## Scoring lock For each section, let `D` be the sum of raw direct-item responses and `R` the sum of raw reverse-item responses. | Section | Direct item IDs | Reverse item IDs | Source formula | |---|---|---|---| | `state` | 3, 4, 6, 7, 9, 12, 13, 14, 17, 18 | 1, 2, 5, 8, 10, 11, 15, 16, 19, 20 | `D − R + 50` | | `trait` | 22, 23, 24, 25, 28, 29, 31, 32, 34, 35, 37, 38, 40 | 21, 26, 27, 30, 33, 36, 39 | `D − R + 35` | An exactly equivalent implementation is: ```text sum(v for every direct item) + sum(5 - v for every reverse item) ``` Proof: `50 = 5 × 10` state reverse items and `35 = 5 × 7` trait reverse items, so `ΣD(v) − ΣR(v) + 5|R| = ΣD(v) + ΣR(5 − v)`. Each section has a theoretical score range of **20–80**. | Band ID | Ukrainian label | Effective score range | Source notation | |---|---|---:|---| | `low` | Низька | 20–30 | 0–30 | | `moderate` | Помірна | 31–45 | 31–45 | | `high` | Висока | 46–80 | >45 | The source's `0–30` low band is retained as provenance but only `20–30` is reachable with 20 responses in `1..4`. Do **not** report or interpret the VIKNU notation `РФМПА = РТ + ОТ` (`RFMPA`). The publication gives no validated interpretation bands for that sum, and adding the two independently interpreted section scores is not required by this implementation. ## Source disagreement and adjudication table The JSON preserves all 40 source transcriptions. Fourteen item rows differ lexically or substantively; nine are material (`6, 8, 9, 15, 23, 25, 35, 37, 38`). | ID | Ahaiev transcription | VIKNU transcription | Frozen decision | |---:|---|---|---| | 3 | Я знаходжуся в стані напруги | Я перебуваю у стані напруги | Use VIKNU syntax; normalize to *перебуваю у стані напруження*. | | 6 | Я засмучений | Я розстроєний | Keep idiomatic Ahaiev *засмучений*; avoid the calque. | | 8 | Я відчуваю себе відпочилим | Я відпочив | Preserve the state meaning and normalize to *почуваюся відпочилим*. | | 9 | Я собою не вдоволений | Я стурбований | Use VIKNU: Ahaiev changes the target construct to self-dissatisfaction. | | 15 | Я не почуваю скутості, напруженості | Я не почуваю скутості, | Preserve Ahaiev's two-part meaning; VIKNU is visibly truncated. | | 22 | Я дуже швидко втомлююся | Я дуже швидко стомлююся | Keep Ahaiev; lexical variant only. | | 23 | Я легко можу заплакати | Я легко можу засмутитися | Keep Ahaiev; crying and becoming upset are not equivalent behaviors. | | 24 | Я хотів би бути таким же щасливим, як і інші | Я хотів би бути таким же щасливим, як інші | Preserve shared meaning; normalize *таким самим*. | | 25 | Я програю від того, що недостатньо швидко приймаю рішення | Нерідко я програю через те, що недостатньо швидко приймаю рішення | Retain VIKNU's frequency qualifier; normalize *через те* and *ухвалюю*. | | 26 | Звичайно я почуваю себе бадьорим | Я звичайно почуваю себе бадьорим | Preserve shared meaning; normalize to *Зазвичай я почуваюся…*. | | 31 | Я приймаю все занадто близько до серця | Я приймаю усе занадто близько до серця | Use the normative idiom *беру все надто близько до серця*. | | 35 | У мене буває хандра | Буває, що мені нічого не хочеться | Use conservative affective bridge *Буває, що мене охоплює смуток.* Ahaiev uses a Russian lexical loan; VIKNU shifts toward motivation. | | 37 | Усякі дрібниці відволікають і хвилюють мене | Усякі дрібниці бентежать і хвилюють | Preserve Ahaiev's distraction and worry components; normalize *Будь-які*. | | 38 | Я так сильно переживаю свої розчарування, що потім довго не можу про них забути | Я так сильно переживаю свої розчарування, що потім довго не | Use complete Ahaiev text; VIKNU ends mid-sentence. | Non-item source defects are also frozen: - Ahaiev page 99 repeats state agreement labels on the trait frequency form; VIKNU's four frequency labels are used. - VIKNU page 119 has a `3.` response-column artifact for item 17; it does not alter the `1..4` domain. - VIKNU page 120 contains `почиваєте` in the instruction; the approved instruction uses `почуваєтеся`. - VIKNU items 15 and 38 are truncated, and item 37 omits part of Ahaiev's wording. - The publications call the middle band `помірний` and `середній`; their numeric boundaries agree. The artifact uses `Помірна`. ## Verification fixtures | Fixture | Construction | Expected score | Band | |---|---|---:|---| | `state-minimum` | every direct response 1; every reverse response 4 | 20 | low | | `state-maximum` | every direct response 4; every reverse response 1 | 80 | high | | `state-all-ones` | all 20 responses 1 | 50 | high | | `state-all-fours` | all 20 responses 4 | 50 | high | | `trait-minimum` | every direct response 1; every reverse response 4 | 20 | low | | `trait-maximum` | every direct response 4; every reverse response 1 | 80 | high | | `trait-all-ones` | all 20 responses 1 | 41 | moderate | | `trait-all-fours` | all 20 responses 4 | 59 | high | Band boundary fixtures lock `20/30 → low`, `31/45 → moderate`, and `46/80 → high`. Responses `0`, `5`, `2.5`, or a missing item must be rejected. Scores `19` and `81` must not receive a band. The validator also checks that the source formula and reverse-transform formula agree for every score fixture and theoretical endpoint. ## Psychometric limits - The two sources reproduce the method but do not document an independent Ukrainian standardization sample, reliability coefficients, or measurement invariance. - The three bands are orienting source conventions, not diagnostic thresholds. - Items 9, 23, 25, and 35 remain provenance-sensitive because the two publications differ materially. Their decisions are explicit so a stronger primary adaptation can replace them transparently. - This corpus must not be described as the commercial STAI-Y form. - A score describes self-reported anxiety now or usually. It does not establish a diagnosis and does not replace professional assessment. ## Integrity hashes Corpus serialization is UTF-8, one line per item: `id`, TAB, selected text, LF. The feminine-effective corpus substitutes its feminine string where one exists. | Locked object | SHA-256 | |---|---| | Approved default/male corpus | `5a9a08e3f988b94885a2ce56e0f984302f890e7c48d732b4cff9076dc83d5e43` | | Approved feminine-effective corpus | `35080112de48c378bfc928c29904be9828a4644159a5ad2546603cf81ae7f7e9` | | Normalized Ahaiev transcription corpus | `6c0df95ecb440b440f9b8ae49e848e29504b4032fadd602eefd5272cbda66f5a` | | Normalized VIKNU transcription corpus | `0d287048bb31d188f98ebd839b4b48e118ca0c856e8e43b1ff37349d6c6cf6c2` | | Complete JSON artifact | `c927bb1ede172baf44d46ed43d258af1b5bbc640e65570e4566c182895f33637` | Run the structural, score, boundary, provenance, and hash checks with: ```powershell node research/validate-stai-40-source.mjs ``` Expected output: ```text PASS stai-40-uk-source: 40 items, 14 female variants, 2 source/key collations, 8 score fixtures, locked corpus and artifact hashes ```