{
  "lexicon": 1,
  "id": "tools.ozone.report.defs",
  "defs": {
    "reasonType": {
      "type": "string",
      "knownValues": [
        "tools.ozone.report.defs#reasonAppeal",
        "tools.ozone.report.defs#reasonOther",

        "tools.ozone.report.defs#reasonViolenceAnimal",
        "tools.ozone.report.defs#reasonViolenceThreats",
        "tools.ozone.report.defs#reasonViolenceGraphicContent",
        "tools.ozone.report.defs#reasonViolenceGlorification",
        "tools.ozone.report.defs#reasonViolenceExtremistContent",
        "tools.ozone.report.defs#reasonViolenceTrafficking",
        "tools.ozone.report.defs#reasonViolenceOther",

        "tools.ozone.report.defs#reasonSexualAbuseContent",
        "tools.ozone.report.defs#reasonSexualNCII",
        "tools.ozone.report.defs#reasonSexualDeepfake",
        "tools.ozone.report.defs#reasonSexualAnimal",
        "tools.ozone.report.defs#reasonSexualUnlabeled",
        "tools.ozone.report.defs#reasonSexualOther",

        "tools.ozone.report.defs#reasonChildSafetyCSAM",
        "tools.ozone.report.defs#reasonChildSafetyGroom",
        "tools.ozone.report.defs#reasonChildSafetyPrivacy",
        "tools.ozone.report.defs#reasonChildSafetyHarassment",
        "tools.ozone.report.defs#reasonChildSafetyOther",

        "tools.ozone.report.defs#reasonHarassmentTroll",
        "tools.ozone.report.defs#reasonHarassmentTargeted",
        "tools.ozone.report.defs#reasonHarassmentHateSpeech",
        "tools.ozone.report.defs#reasonHarassmentDoxxing",
        "tools.ozone.report.defs#reasonHarassmentOther",

        "tools.ozone.report.defs#reasonMisleadingBot",
        "tools.ozone.report.defs#reasonMisleadingImpersonation",
        "tools.ozone.report.defs#reasonMisleadingSpam",
        "tools.ozone.report.defs#reasonMisleadingScam",
        "tools.ozone.report.defs#reasonMisleadingElections",
        "tools.ozone.report.defs#reasonMisleadingOther",

        "tools.ozone.report.defs#reasonRuleSiteSecurity",
        "tools.ozone.report.defs#reasonRuleProhibitedSales",
        "tools.ozone.report.defs#reasonRuleBanEvasion",
        "tools.ozone.report.defs#reasonRuleOther",

        "tools.ozone.report.defs#reasonSelfHarmContent",
        "tools.ozone.report.defs#reasonSelfHarmED",
        "tools.ozone.report.defs#reasonSelfHarmStunts",
        "tools.ozone.report.defs#reasonSelfHarmSubstances",
        "tools.ozone.report.defs#reasonSelfHarmOther"
      ]
    },
    "reasonAppeal": {
      "type": "token",
      "description": "Appeal a previously taken moderation action"
    },
    "reasonOther": {
      "type": "token",
      "description": "An issue not included in these options"
    },
    "reasonViolenceAnimal": {
      "type": "token",
      "description": "Animal welfare violations"
    },
    "reasonViolenceThreats": {
      "type": "token",
      "description": "Threats or incitement"
    },
    "reasonViolenceGraphicContent": {
      "type": "token",
      "description": "Graphic violent content"
    },
    "reasonViolenceGlorification": {
      "type": "token",
      "description": "Glorification of violence"
    },
    "reasonViolenceExtremistContent": {
      "type": "token",
      "description": "Extremist content. These reports will be sent only be sent to the application's Moderation Authority."
    },
    "reasonViolenceTrafficking": {
      "type": "token",
      "description": "Human trafficking"
    },
    "reasonViolenceOther": {
      "type": "token",
      "description": "Other violent content"
    },

    "reasonSexualAbuseContent": {
      "type": "token",
      "description": "Adult sexual abuse content"
    },
    "reasonSexualNCII": {
      "type": "token",
      "description": "Non-consensual intimate imagery"
    },
    "reasonSexualDeepfake": {
      "type": "token",
      "description": "Deepfake adult content"
    },
    "reasonSexualAnimal": {
      "type": "token",
      "description": "Animal sexual abuse"
    },
    "reasonSexualUnlabeled": {
      "type": "token",
      "description": "Unlabelled adult content"
    },
    "reasonSexualOther": {
      "type": "token",
      "description": "Other sexual violence content"
    },

    "reasonChildSafetyCSAM": {
      "type": "token",
      "description": "Child sexual abuse material (CSAM). These reports will be sent only be sent to the application's Moderation Authority."
    },
    "reasonChildSafetyGroom": {
      "type": "token",
      "description": "Grooming or predatory behavior. These reports will be sent only be sent to the application's Moderation Authority."
    },
    "reasonChildSafetyPrivacy": {
      "type": "token",
      "description": "Privacy violation involving a minor"
    },
    "reasonChildSafetyHarassment": {
      "type": "token",
      "description": "Harassment or bullying of minors"
    },
    "reasonChildSafetyOther": {
      "type": "token",
      "description": "Other child safety. These reports will be sent only be sent to the application's Moderation Authority."
    },

    "reasonHarassmentTroll": {
      "type": "token",
      "description": "Trolling"
    },
    "reasonHarassmentTargeted": {
      "type": "token",
      "description": "Targeted harassment"
    },
    "reasonHarassmentHateSpeech": {
      "type": "token",
      "description": "Hate speech"
    },
    "reasonHarassmentDoxxing": {
      "type": "token",
      "description": "Doxxing"
    },
    "reasonHarassmentOther": {
      "type": "token",
      "description": "Other harassing or hateful content"
    },

    "reasonMisleadingBot": {
      "type": "token",
      "description": "Fake account or bot"
    },
    "reasonMisleadingImpersonation": {
      "type": "token",
      "description": "Impersonation"
    },
    "reasonMisleadingSpam": {
      "type": "token",
      "description": "Spam"
    },
    "reasonMisleadingScam": {
      "type": "token",
      "description": "Scam"
    },
    "reasonMisleadingElections": {
      "type": "token",
      "description": "False information about elections"
    },
    "reasonMisleadingOther": {
      "type": "token",
      "description": "Other misleading content"
    },

    "reasonRuleSiteSecurity": {
      "type": "token",
      "description": "Hacking or system attacks"
    },
    "reasonRuleProhibitedSales": {
      "type": "token",
      "description": "Promoting or selling prohibited items or services"
    },
    "reasonRuleBanEvasion": {
      "type": "token",
      "description": "Banned user returning"
    },
    "reasonRuleOther": {
      "type": "token",
      "description": "Other"
    },
    "reasonSelfHarmContent": {
      "type": "token",
      "description": "Content promoting or depicting self-harm"
    },
    "reasonSelfHarmED": {
      "type": "token",
      "description": "Eating disorders"
    },
    "reasonSelfHarmStunts": {
      "type": "token",
      "description": "Dangerous challenges or activities"
    },
    "reasonSelfHarmSubstances": {
      "type": "token",
      "description": "Dangerous substances or drug abuse"
    },
    "reasonSelfHarmOther": {
      "type": "token",
      "description": "Other dangerous content"
    },
    "reportAssignment": {
      "type": "object",
      "description": "Information about the moderator currently assigned to a report.",
      "required": ["did", "assignedAt"],
      "properties": {
        "did": {
          "type": "string",
          "format": "did",
          "description": "DID of the assigned moderator"
        },
        "moderator": {
          "type": "ref",
          "ref": "tools.ozone.team.defs#member",
          "description": "Full member record of the assigned moderator"
        },
        "assignedAt": {
          "type": "string",
          "format": "datetime",
          "description": "When the report was assigned"
        }
      }
    },
    "reportView": {
      "type": "object",
      "required": [
        "id",
        "eventId",
        "status",
        "subject",
        "reportType",
        "reportedBy",
        "reporter",
        "createdAt"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "description": "Report ID"
        },
        "eventId": {
          "type": "integer",
          "description": "ID of the moderation event that created this report"
        },
        "status": {
          "type": "string",
          "knownValues": ["open", "closed", "escalated", "queued", "assigned"],
          "description": "Current status of the report"
        },
        "subject": {
          "type": "ref",
          "ref": "tools.ozone.moderation.defs#subjectView",
          "description": "The subject that was reported with full details"
        },
        "reportType": {
          "type": "ref",
          "ref": "com.atproto.moderation.defs#reasonType",
          "description": "Type of report"
        },
        "reportedBy": {
          "type": "string",
          "format": "did",
          "description": "DID of the user who made the report"
        },
        "reporter": {
          "type": "ref",
          "ref": "tools.ozone.moderation.defs#subjectView",
          "description": "Full subject view of the reporter account"
        },
        "comment": {
          "type": "string",
          "description": "Comment provided by the reporter"
        },
        "createdAt": {
          "type": "string",
          "format": "datetime",
          "description": "When the report was created"
        },
        "updatedAt": {
          "type": "string",
          "format": "datetime",
          "description": "When the report was last updated"
        },
        "queuedAt": {
          "type": "string",
          "format": "datetime",
          "description": "When the report was assigned to its current queue"
        },
        "actionEventIds": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "description": "Array of moderation event IDs representing actions taken on this report (sorted DESC, most recent first)"
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "ref",
            "ref": "tools.ozone.moderation.defs#modEventView"
          },
          "description": "Optional: expanded action events"
        },
        "actionNote": {
          "type": "string",
          "description": "Note sent to reporter when report was actioned"
        },
        "subjectStatus": {
          "type": "ref",
          "ref": "tools.ozone.moderation.defs#subjectStatusView",
          "description": "Current status of the reported subject"
        },
        "relatedReportCount": {
          "type": "integer",
          "description": "Number of other pending reports on the same subject"
        },
        "assignment": {
          "type": "ref",
          "ref": "#reportAssignment",
          "description": "Information about moderator currently assigned to this report (if any)"
        },
        "queue": {
          "type": "ref",
          "ref": "tools.ozone.queue.defs#queueView",
          "description": "The queue this report is assigned to (if any)"
        },
        "isMuted": {
          "type": "boolean",
          "description": "Whether this report is muted. A report is muted if the reporter was muted or the subject was muted at the time the report was created."
        }
      }
    },
    "queueActivity": {
      "type": "object",
      "description": "Activity recording a report being routed to a queue.",
      "properties": {
        "previousStatus": {
          "type": "string",
          "knownValues": ["open", "closed", "escalated", "queued", "assigned"],
          "description": "The report's status before this activity. Populated automatically from the report row; not required in input."
        }
      }
    },
    "assignmentActivity": {
      "type": "object",
      "description": "Activity recording a moderator being assigned to a report.",
      "properties": {
        "previousStatus": {
          "type": "string",
          "knownValues": ["open", "closed", "escalated", "queued", "assigned"],
          "description": "The report's status before this activity. Populated automatically from the report row; not required in input."
        }
      }
    },
    "escalationActivity": {
      "type": "object",
      "description": "Activity recording a report being escalated.",
      "properties": {
        "previousStatus": {
          "type": "string",
          "knownValues": ["open", "closed", "escalated", "queued", "assigned"],
          "description": "The report's status before this activity. Populated automatically from the report row; not required in input."
        }
      }
    },
    "closeActivity": {
      "type": "object",
      "description": "Activity recording a report being closed.",
      "properties": {
        "previousStatus": {
          "type": "string",
          "knownValues": ["open", "closed", "escalated", "queued", "assigned"],
          "description": "The report's status before this activity. Populated automatically from the report row; not required in input."
        }
      }
    },
    "reopenActivity": {
      "type": "object",
      "description": "Activity recording a closed report being reopened. Only valid when the report is in 'closed' status.",
      "properties": {
        "previousStatus": {
          "type": "string",
          "knownValues": ["open", "closed", "escalated", "queued", "assigned"],
          "description": "The report's status before this activity. Populated automatically from the report row; not required in input."
        }
      }
    },
    "noteActivity": {
      "type": "object",
      "description": "Activity recording a note on a report. Use internalNote for moderator-only notes or publicNote for reporter-visible notes (or both).",
      "properties": {}
    },
    "reportActivityView": {
      "type": "object",
      "description": "A single activity entry on a report.",
      "required": [
        "id",
        "reportId",
        "activity",
        "isAutomated",
        "createdBy",
        "createdAt"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "description": "Activity ID"
        },
        "reportId": {
          "type": "integer",
          "description": "ID of the report this activity belongs to"
        },
        "activity": {
          "type": "union",
          "refs": [
            "#queueActivity",
            "#assignmentActivity",
            "#escalationActivity",
            "#closeActivity",
            "#reopenActivity",
            "#noteActivity"
          ],
          "description": "The typed activity object describing what occurred."
        },
        "internalNote": {
          "type": "string",
          "description": "Optional moderator-only note. Not visible to reporters."
        },
        "publicNote": {
          "type": "string",
          "description": "Optional public note, potentially visible to the reporter."
        },
        "meta": {
          "type": "unknown",
          "description": "Extensible JSON payload for loose activity-specific metadata (e.g. assignmentId)."
        },
        "isAutomated": {
          "type": "boolean",
          "description": "True if this activity was created by an automated process (e.g. queue router) rather than a direct human action."
        },
        "createdBy": {
          "type": "string",
          "format": "did",
          "description": "DID of the actor who created this activity, or the service DID for automated activities."
        },
        "moderator": {
          "type": "ref",
          "ref": "tools.ozone.team.defs#member",
          "description": "Full member record of the moderator who created this activity"
        },
        "createdAt": {
          "type": "string",
          "format": "datetime",
          "description": "When this activity was created"
        }
      }
    },
    "liveStats": {
      "description": "Live statistics for reports for the current calendar day, filterable by queue, moderator, or report type.",
      "type": "object",
      "properties": {
        "pendingCount": {
          "type": "integer",
          "description": "Number of reports currently not closed."
        },
        "actionedCount": {
          "type": "integer",
          "description": "Number of reports closed today."
        },
        "escalatedCount": {
          "type": "integer",
          "description": "Number of reports escalated today."
        },
        "inboundCount": {
          "type": "integer",
          "description": "Reports received today."
        },
        "actionRate": {
          "type": "integer",
          "description": "Percentage of reports actioned (actionedCount / inboundCount * 100), rounded to nearest integer."
        },
        "avgHandlingTimeSec": {
          "type": "integer",
          "description": "Average time in seconds from report creation (or moderator assignment) to close."
        },
        "lastUpdated": {
          "type": "string",
          "format": "datetime",
          "description": "When these statistics were last computed."
        }
      }
    },
    "historicalStats": {
      "description": "A single daily snapshot of report statistics for a calendar date.",
      "type": "object",
      "required": ["date"],
      "properties": {
        "date": {
          "type": "string",
          "description": "The calendar date this snapshot covers (YYYY-MM-DD)."
        },
        "computedAt": {
          "type": "string",
          "format": "datetime",
          "description": "When this snapshot was last computed."
        },
        "pendingCount": {
          "type": "integer",
          "description": "Number of reports not closed at time of computation."
        },
        "actionedCount": {
          "type": "integer",
          "description": "Number of reports closed during this day."
        },
        "escalatedCount": {
          "type": "integer",
          "description": "Number of reports escalated during this day."
        },
        "inboundCount": {
          "type": "integer",
          "description": "Reports received during this day."
        },
        "actionRate": {
          "type": "integer",
          "description": "Percentage of reports actioned (actionedCount / inboundCount * 100), rounded to nearest integer."
        },
        "avgHandlingTimeSec": {
          "type": "integer",
          "description": "Average time in seconds from report creation (or moderator assignment) to close."
        }
      }
    },
    "assignmentView": {
      "type": "object",
      "required": ["id", "did", "reportId", "startAt"],
      "properties": {
        "id": {
          "type": "integer"
        },
        "did": {
          "type": "string",
          "format": "did"
        },
        "moderator": {
          "type": "ref",
          "ref": "tools.ozone.team.defs#member",
          "description": "The moderator assigned to this report"
        },
        "queue": {
          "type": "ref",
          "ref": "tools.ozone.queue.defs#queueView"
        },
        "reportId": {
          "type": "integer"
        },
        "startAt": {
          "type": "string",
          "format": "datetime"
        },
        "endAt": {
          "type": "string",
          "format": "datetime"
        }
      }
    }
  }
}
