Skip to content
UGP v1.0 is a public comment draft. Comments close November 23, 2026. The A–D defect counts are provisional.Public comment draft · until November 23, 2026Comment on this draftComment →
UGPUniversal Grading Protocol
ResultsNormative§12

Core code

PDF

The compact, machine-readable string that encodes one UGP record: grammar, regular expression and examples.

12.1 Grammar

text
core_code = "U" major "-" class "-C" cos "-F" func "-B" bat "-L" lock "-R" op "-D" data "-P" parts "-K" kit [ "~" ext *( "," ext ) ]
class = PHN | TAB | WCH | BUD | LAP | DSK | CON | CNH | CNX | CTL | VRH | GLS | TRK
cos   = "S" | "O" | ("A" | "B" | "C" | "D") ["0"] | "K" | "E" | "N"
func  = "F" | "M" | "J" | "K" | "X"                 ; FF, FM, FJ, FK, FX
bat   = (2DIGIT | "100") ("M" | "D") | "NA" | "UN" | "CP" | "CF"
lock  = "C" | "E" | "U" | "N"
op    = "U" | "L" | "V" | "N"
data  = "V" | "W" | "X" | "U" | "N"
parts = "G" | "D" | "M" | "U" | "N"
kit   = "F" | "P" | "H"
ext   = key ":" value                                ; profile extensions, sorted by key

An extension key is a lower-case identifier ([a-z][a-z0-9_.-]*); a value is one or more of A–Z a–z 0–9 _ . + % / -, so it never contains , ~ : or a space. v1.0 defines one extension: src:supplier, carried by a supplier-mapped grade (§13.6), as in U1UGP version · UGP version 1 §18.2-PHNDevice class · Phone §16-CCCosmetic · Within the Good tolerance §5.3-FFFunctional · Fully functional §7.3-B80DBattery · 80% health or more, declared §8-LCAccount and management locks · Clear §9.1-RUCarrier lock · Unlocked §9.2-DWData · Sanitised, declared §10.1-PUParts · Parts not verified §10.2-KFKit · Full: every required component, original §10.4~src:supplierProfile extensions · src = supplier §12.1.

12.2 Regular expression (without extensions)

text
^U\d+-(PHN|TAB|WCH|BUD|LAP|DSK|CON|CNH|CNX|CTL|VRH|GLS|TRK)-C(S|O|[ABCD]0?|K|E|N)-F[FMJKX]-B((\d{2}|100)[MD]|NA|UN|CP|CF)-L[CEUN]-R[ULVN]-D[VWXUN]-P[GDMUN]-K[FPH]$

12.3 Not-applicable axes

An axis that does not apply is encoded as not-applicable, never omitted. Every code has the same shape.

12.4 Reading the grade and Premium

The grade and the Premium designation can be read from the code: grade = the cosmetic letter when every other axis is READY-compatible. Status PROHIBITED, and NOT GRADED for want of a lost/stolen check or declaration, depend on the identity axis, which the code does not carry. A supplier-mapped grade can be read from the code by its ~src:supplier extension. A core code therefore shall always travel with its record, or with a statement that the lost/stolen check was performed or the declaration made.

12.5 Examples

text
U1-PHN-CA0-FF-B93M-LC-RU-DV-PG-KF   → Like New · Premium
U1-PHN-CB-FF-B80D-LC-RU-DW-PU-KH    → Very Good · battery declared ≥80% · parts not verified · unit only
U1-PHN-CS-FX-BNA-LN-RU-DN-PN-KF     → New Sealed
U1-PHN-CO-FF-B100M-LC-RU-DV-PG-KH   → New Open Box · Handset only
U1-PHN-CD-FF-B84M-LC-RL-DV-PM-KF    → Acceptable · carrier-locked (disclosed) · non-genuine part (disclosed)
U1-PHN-CK-FF-B91M-LC-RU-DV-PG-KF    → no grade · status REPAIR (reason: K, cracked back glass)
U1-TAB-CA-FF-B95M-LE-RN-DV-PG-KP    → no grade · status ENCUMBERED (reason: MDM)