Adviser Screen (Care Module)
9-domain risk screening with talent/genius flags — list, stats, and nested latest record on Student
Adviser Screening
Adviser screening classifies each student across 9 risk domains (STUDY, HEALTH, FINANCIAL, SECURITY, DRUG, VIOLENCE, SEXUAL, GAME, ELECTRONIC), each with a NORMAL / RISK / PROBLEM state, plus talent/genius/activity flags. Both domain names and states return with Thai labels (nameText, stateText).
All queries require authentication and are school-scoped. The surface is read-only — this API exposes only screening reads. Screenings are captured through the care application.
Overall Classification
Every student resolves to one of these top-level values, computed from the combination of flags and domain states:
| Value | Rule |
|---|---|
NOT_SCREENED | No screening record exists for the student in scope |
SPECIAL | isGenius is true |
PROBLEM | Any domain is in PROBLEM state |
RISK | Any domain is in RISK state (and no PROBLEM) |
TALENT | No PROBLEM / RISK but isAcademicSpecial or isActivity |
NORMAL | All domains are NORMAL and no talent flags |
List Students
Deduped per student (prefers the latest screened record when multiple semesters match).
query {
adviserScreens(classroomId: 42, status: "problem", limit: 50) {
studentId
code
title
firstname
lastname
classroomName
orderNumber
screenId
screenedAt
overall
}
}Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
academicYearId | Int | active year | Scope to a specific academic year |
semesterId | Int | — | Scope to a single semester (overrides academicYearId) |
classroomId | Int | — | Filter to one classroom |
status | String | all | special | talent | problem | risk | normal | not_screened | all |
limit | Int | 50 | Maximum rows |
offset | Int | 0 | Skip rows |
Aggregate Stats
Counts per-school, per-domain. Useful for dashboard tiles.
query {
adviserScreenStats {
totalSpecial
totalNormal
totalRisk
totalProblem
totalGenius
totalAcademicSpecial
totalActivitySpecial
totalNotScreened
domains {
domain # STUDY | HEALTH | FINANCIAL | …
domainText # "ด้านการเรียน" | "ด้านสุขภาพ" | …
normal
risk
problem
}
}
}Latest Screening (nested on Student)
query {
student(id: 12345) {
id
fullName
classroomName
adviserScreen {
id
overall
screenedAt
createdAt
updatedAt
remark
specialFlags {
isGenius
geniusDetail
isAcademicSpecial
mathDetail
thaiDetail
englishDetail
scienceDetail
socialDetail
isActivity
sportDetail
musicDetail
danceDetail
artDetail
}
domains {
name
nameText # "ด้านการเรียน" | "ด้านสุขภาพ" | …
state
stateText # "ปกติ" | "เสี่ยง" | "มีปัญหา"
riskTags
problemTags
}
}
}
}Student.adviserScreen
| Argument | Type | Description |
|---|---|---|
semesterId | Int | Optional. When omitted, returns the most recent screening across all semesters. |
Returns AdviserScreen (nullable) — null if the student has never been screened. The domains field always contains all 9 entries in the stable order STUDY, HEALTH, FINANCIAL, SECURITY, DRUG, VIOLENCE, SEXUAL, GAME, ELECTRONIC.
Errors
| Code | Cause |
|---|---|
UNAUTHENTICATED | No valid JWT or API key |
FORBIDDEN | JWT has no schoolId |
NOT_FOUND | Student not found in your school |