# Universal Review Taxonomy (URT) v5.1 Reference

## Overview

The Universal Review Taxonomy (URT) is a classification system for customer feedback. It provides a structured approach to categorizing, annotating, and analyzing review content across any industry.

### Key Characteristics

- **Four Profiles**: Lite, Core, Standard, Full (increasing detail)
- **Seven Domains**: Covering all aspects of customer experience
- **Tier-3 Canonical Codes**: Format `X#.##` (e.g., J1.02, P2.15)
- **Dimensional Annotation**: Valence, intensity, specificity, and more
- **Causal Analysis**: Root cause chains (Full profile)

---

## Domain Codes

URT organizes feedback into seven domains, each identified by a single letter.

| Domain | Letter | Description |
|--------|--------|-------------|
| Offering | O | Product/service quality |
| Price | P | Value, pricing, promotions |
| Journey | J | Customer experience, timing, process |
| Environment | E | Physical/digital space |
| Attitude | A | Staff behavior, service attitude |
| Voice | V | Brand, communication, marketing |
| Relationship | R | Loyalty, trust, long-term relationship |

### Tier-3 Code Format

```
Pattern: [OPJEAVR][1-4]\.[0-9]{2}
```

Examples:
- `J1.02` - Journey domain, category 1, subcategory 02
- `P2.15` - Price domain, category 2, subcategory 15
- `A3.01` - Attitude domain, category 3, subcategory 01

---

## Dimension Codes

### Valence

Indicates the sentiment direction of the feedback.

| Code | Meaning |
|------|---------|
| V+ | Positive |
| V- | Negative |
| V0 | Neutral |
| V± | Mixed |

### Intensity

Indicates the strength of the expressed sentiment.

| Code | Meaning |
|------|---------|
| I1 | Low intensity |
| I2 | Moderate intensity |
| I3 | High intensity |

### Specificity (Standard+)

Indicates how detailed the feedback is.

| Code | Meaning |
|------|---------|
| S1 | Low - vague, general |
| S2 | Medium - some detail |
| S3 | High - specific, precise |

### Actionability (Standard+)

Indicates whether clear actions can be derived from the feedback.

| Code | Meaning |
|------|---------|
| A1 | None - no clear action |
| A2 | Unclear - possible actions |
| A3 | Clear - specific actionable |

### Temporal (Standard+)

Indicates the time frame referenced in the feedback.

| Code | Meaning | Markers |
|------|---------|---------|
| TC | Current - this visit | "today", "this time", "yesterday" |
| TR | Recent - last few visits | "lately", "recently", "again" |
| TH | Historical - long-standing | "for years", "always", "historically" |
| TF | Future - expectations | "I won't come back", "next time" |

**Default**: TC when no temporal language exists.

### Evidence (Standard+)

Indicates how the information was obtained from the text.

| Code | Meaning | Example |
|------|---------|---------|
| ES | Stated - explicit in text | "Waited 45 minutes" |
| EI | Inferred - logically entailed | "Took 3 weeks to reply" → slow response |
| EC | Contextual - depends on context | "That happened again" |

**Default**: ES. Use EI/EC only when needed.

### Comparative

Indicates whether the feedback compares to alternatives.

| Code | Meaning |
|------|---------|
| CR-N | No comparison |
| CR-B | Better than alternatives |
| CR-W | Worse than alternatives |
| CR-S | Same as alternatives |

---

## USN (URT String Notation)

USN is a compact string encoding for URT annotations.

### Grammar

```
Lite:     URT:L:{domain}:{V}{I}
Core:     URT:C:{category}:{V}{I}
Standard: URT:S:{subcode}[+{sec}]:{V}{I}:{S}{A}{T}.{E}.{CR}
Full:     URT:F:{subcode}[+{sec}]:{V}{I}:{S}{A}{T}.{E}.{CR}[:{causal}]
```

### Encoding Rules

**Valence**:
- `+` for V+
- `-` for V-
- `0` for V0
- `±` for V±

**Intensity**:
- `1` for I1
- `2` for I2
- `3` for I3

### Examples

**Standard Profile**:
```
URT:S:J1.03:-2:22TC.ES.N
```
Decoded:
- Profile: Standard
- Code: J1.03
- Valence: V- (negative)
- Intensity: I2
- Specificity: S2
- Actionability: A2
- Temporal: TC
- Evidence: ES
- Comparative: CR-N

**Full Profile with Causal Chain**:
```
URT:F:J1.01+A1.04:-3:23TR.EI.S:CD.O,MG.O
```
Decoded:
- Profile: Full
- Codes: J1.01, A1.04
- Valence: V- (negative)
- Intensity: I3
- Specificity: S2
- Actionability: A3
- Temporal: TR
- Evidence: EI
- Comparative: CR-S
- Causal: CD.O (Conditions-Operational), MG.O (Management-Oversight)

---

## Causal Chain (Full Profile Only)

The causal chain identifies root causes across three layers, ordered from immediate to systemic.

### Layers

| Layer | Codes | Scope |
|-------|-------|-------|
| conditions | CD-S, CD-T, CD-E, CD-F, CD-O | Staff State, Team Dynamics, Equipment, Facility, Operational |
| management | MG-P, MG-T, MG-O, MG-R, MG-C | Planning, Training, Oversight, Resources, Communication |
| systemic | SY-R, SY-P, SY-C, SY-S, SY-H, SY-X | Resource Decisions, Policy, Culture, Standards, Human Capital, External |

### Code Reference

**Conditions Layer**:
- `CD-S` - Staff State
- `CD-T` - Team Dynamics
- `CD-E` - Equipment
- `CD-F` - Facility
- `CD-O` - Operational

**Management Layer**:
- `MG-P` - Planning
- `MG-T` - Training
- `MG-O` - Oversight
- `MG-R` - Resources
- `MG-C` - Communication

**Systemic Layer**:
- `SY-R` - Resource Decisions
- `SY-P` - Policy
- `SY-C` - Culture
- `SY-S` - Standards
- `SY-H` - Human Capital
- `SY-X` - External

### JSONB Schema

```json
[
  {"layer": "conditions", "code": "CD-O", "evidence": "ES"},
  {"layer": "management", "code": "MG-P", "evidence": "EI"}
]
```

### Constraints

- Maximum 3 entries (one per layer)
- Only include when text explicitly supports it
- Order: conditions → management → systemic

---

## Span Boundary Detection Rules

Spans are detected at the clause/topic level, not sentence level.

### Split Rules (in priority order)

1. **Split on contrasting conjunctions**: but, however, although, despite, yet
2. **Split when subject/target changes** (topic shift)
3. **Split when valence changes** (positive ↔ negative)
4. **Split when domain changes** (O/P/J/E/A/V/R)
5. **Keep together** for cause→effect within same feedback unit

### Guidelines

- **Maximum**: ~3 spans per sentence
- **Validation**: If 4+ spans detected, re-check for over-splitting

### Example

**Input**:
> "The food was great but the service was slow and the bathroom was dirty."

**Output**: 3 spans
1. "The food was great" (Offering, positive)
2. "the service was slow" (Journey/Attitude, negative)
3. "the bathroom was dirty" (Environment, negative)

**Reasoning**: Topic shift + domain shift at each boundary.

---

## Primary Span Selection

When a review contains multiple spans, select the primary span using these criteria in order:

### Selection Priority

1. **Highest intensity** (I3 > I2 > I1)
2. **Tie-break**: Negative over positive (V- > V± > V0 > V+)
3. **Tie-break**: Earliest span_index

### Example

Given spans:
- Span 0: I2, V+
- Span 1: I3, V+
- Span 2: I3, V-

**Primary**: Span 2 (highest intensity I3, negative valence wins tie-break)

---

## Secondary Codes Rules

Secondary codes capture additional topics mentioned in a span.

### Constraints

- **Maximum**: 2 secondary codes
- **Format**: Must be Tier-3 (X#.##)
- **Recommendation**: Should be different domain from primary

### Example

Primary: `J1.03` (Journey)
Secondary: `A2.01`, `E1.05` (Attitude, Environment)

---

## Quick Reference Card

### Profiles

| Profile | Dimensions | Causal Chain |
|---------|------------|--------------|
| Core | V, I | No |
| Standard | V, I, S, A, T, E, CR | No |
| Full | V, I, S, A, T, E, CR | Yes |

### USN Quick Format

```
URT:{S|F}:{tier3_codes}:{valence}{intensity}:{SAT}.{E}.{CR}[:{causal}]
```

### Domain Letters

```
O P J E A V R
│ │ │ │ │ │ └─ Relationship
│ │ │ │ │ └─── Voice
│ │ │ │ └───── Attitude
│ │ │ └─────── Environment
│ │ └───────── Journey
│ └─────────── Price
└───────────── Offering
```
