{
  "title": "MetaSoul EPU MDAD channel map",
  "indexBase": 0,
  "currentEPU4Guide": {
    "publicationDate": "2026-10-19",
    "valueCount": 120,
    "source": "EPU SDK - API Integration Guide, pages 3-4",
    "caution": "This guide documents 120-value MDAD payloads, not guaranteed 124-value payloads."
  },
  "emotionChannelLayout": {
    "source": "EPU-III Brochure, pages 14-15; used by the MetaSoul interactive dashboard",
    "apexFormula": "4 + 10 * emotionIndex (emotionIndex = 0..11)",
    "eachGroup": "Nine wave channels, followed by one associated feeling channel",
    "apexChannels": [
      {
        "emotion": "Excite",
        "channel": 4
      },
      {
        "emotion": "Confident",
        "channel": 14
      },
      {
        "emotion": "Happy",
        "channel": 24
      },
      {
        "emotion": "Trust",
        "channel": 34
      },
      {
        "emotion": "Desire",
        "channel": 44
      },
      {
        "emotion": "Fear",
        "channel": 54
      },
      {
        "emotion": "Surprise",
        "channel": 64
      },
      {
        "emotion": "Inattention",
        "channel": 74
      },
      {
        "emotion": "Sad",
        "channel": 84
      },
      {
        "emotion": "Nostalgia",
        "channel": 94
      },
      {
        "emotion": "Disgust",
        "channel": 104
      },
      {
        "emotion": "Anger",
        "channel": 114
      }
    ],
    "specialFeeling": {
      "name": "Optimistic",
      "channel": 9,
      "description": "Feeling associated with the first emotion group (distinct from Excite apex, channel 4)"
    }
  },
  "additionalLegacyChannels": [
    {
      "name": "Pulse speed",
      "channel": 120,
      "interpretation": "0 slower; 50 normal; 100 faster"
    },
    {
      "name": "Frustration / Satisfaction",
      "channel": 121,
      "interpretation": "0 maximum satisfaction / relief of frustration; 50 neutral; 100 maximum frustration",
      "validRange": [0, 100],
      "polarityNote": "Operator-reported current EPU4 behavior reverses the 121 polarity shown in the older EPU-III brochure; verify against the deployed firmware. Values below 50 indicate relief of frustration."
    },
    {
      "name": "Pain / Pleasure",
      "channel": 122,
      "interpretation": "0 maximum pleasure / relief of pain; 50 neutral; 100 maximum pain",
      "validRange": [0, 100],
      "polarityNote": "Values below 50 indicate relief of pain / pleasure."
    },
    {
      "name": "Temperature",
      "channel": 123,
      "interpretation": "EPU-III brochure lists a range of -40 to +85 °C"
    }
  ],
  "availability": "The October 19 source guide documented 120 values. A live October 31 EPU4 REST read returned 123 (indexes 0-122), including the first three historical extra channels but not index 123. Verify EPU4 semantics and length per response; never fill absent channels with zero.",
  "validationRule": "Check the payload is a numeric array with at least 120 elements before reading all twelve emotion apexes. For the twelve APEX readings (indexes 4,14,...,114), Optimistic (9), and optional 121 and 122 when present, accept only finite values from 0 through 100 as interpreted levels. Preserve raw out-of-range readings (including 255) for diagnosis, flag them invalid, and do not use them as valid emotional levels. Do not clamp or wrap raw MDAD values. Do not apply this range to every MDAD index (for example, the historical temperature at 123 has different units).",
  "liveEPU4Observation": {
    "date": "2026-10-31",
    "endpoint": "GET /mdad",
    "receivedValueCount": 123,
    "availableExtraIndexes": [
      120,
      121,
      122
    ],
    "missingLegacyIndex": 123,
    "extraChannelMeaningsVerifiedForEPU4": false,
    "note": "One live REST observation; do not assume all devices or transports return this length."
  }
}
