package cn.nianxx.thhotel.workflows.reservation.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;

/**
 * Reservation AI 过渡实体。保存单条 AI item 原始 JSON、映射类型和任务创建冗余字段。
 */
@TableName("workflow_reservation_ai_transition")
public class ReservationAiTransitionEntity {

    /** AI 过渡记录 ID。 */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    /** 酒店或业务上下文 ID。 */
    private String hotelId;
    /** AI 任务结果接收批次 ID。 */
    private Long batchId;
    /** 关联 SourceMessage Inbox ID。 */
    private Long sourceMessageId;
    /** AI current 事件序号。 */
    private Integer sourceEventIndex;
    /** AI 返回列表中的顺序，从 1 开始。 */
    private Integer arrayIndex;
    /** 映射到订单任务队列的初始顺序。 */
    private Integer executionOrder;
    /** Skill 目录代码。 */
    private String catalogCode;
    /** Skill 标识。 */
    private String skillId;
    /** AI 结果类型。 */
    private String resultType;
    /** AI 原始任务类型。 */
    private String aiTaskType;
    /** M002 V3 派生路由码，S10/S99 使用外部 route_code，业务事件使用系统稳定路由码。 */
    private String routeCode;
    /** 系统处理分类，区分业务任务、来源邮件通知、未处理意图和契约错误。 */
    private String systemProcessCategory;
    /** 系统主任务类型。 */
    private String systemTaskType;
    /** 任务卡类型。 */
    private String taskCardType;
    /** 业务动作 subtype。 */
    private String taskSubtype;
    /** 当前或历史标识。 */
    private String currentOrHistory;
    /** Group Code 候选。 */
    private String groupCode;
    /** Confirmation Number 候选。 */
    private String confirmationNumber;
    /** 单个 AI item JSON SHA-256。 */
    private String itemPayloadSha256;
    /** 系统生成 item 幂等键。 */
    private String itemIdempotencyKey;
    /** manual_review 原因码。 */
    private String manualReasonCode;
    /** 父任务事件序号。 */
    private Integer parentSourceEventIndex;
    /** 联动任务组 ID。 */
    private String linkedTaskGroupId;
    /** 是否等待父任务完成。 */
    private Boolean blockedUntilParentCompleted;
    /** AI 原始 item JSON，禁止被用户覆盖。 */
    private String aiPayloadJson;
    /** 订单候选键 JSON。 */
    private String caseKeysJson;
    /** AI 抽取业务字段 JSON。 */
    private String extractedFieldsJson;
    /** 人工复核 JSON。 */
    private String manualReviewJson;
    /** 信息提醒 JSON。 */
    private String informationalMessageJson;
    /** 附件和文件引用 JSON。 */
    private String attachmentsJson;
    /** AI 使用上下文 JSON。 */
    private String contextUsedJson;
    /** Adapter 契约错误代码，仅在当前 event 不建业务任务时保存。 */
    private String adapterErrorCode;
    /** Adapter 契约错误说明，仅保存安全摘要，不写入客户敏感原文。 */
    private String adapterErrorMessage;
    /** 记录创建 UTC 时间。 */
    private LocalDateTime createdAt;
    /** 记录更新 UTC 时间。 */
    private LocalDateTime updatedAt;

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getHotelId() { return hotelId; }
    public void setHotelId(String hotelId) { this.hotelId = hotelId; }
    public Long getBatchId() { return batchId; }
    public void setBatchId(Long batchId) { this.batchId = batchId; }
    public Long getSourceMessageId() { return sourceMessageId; }
    public void setSourceMessageId(Long sourceMessageId) { this.sourceMessageId = sourceMessageId; }
    public Integer getSourceEventIndex() { return sourceEventIndex; }
    public void setSourceEventIndex(Integer sourceEventIndex) { this.sourceEventIndex = sourceEventIndex; }
    public Integer getArrayIndex() { return arrayIndex; }
    public void setArrayIndex(Integer arrayIndex) { this.arrayIndex = arrayIndex; }
    public Integer getExecutionOrder() { return executionOrder; }
    public void setExecutionOrder(Integer executionOrder) { this.executionOrder = executionOrder; }
    public String getCatalogCode() { return catalogCode; }
    public void setCatalogCode(String catalogCode) { this.catalogCode = catalogCode; }
    public String getSkillId() { return skillId; }
    public void setSkillId(String skillId) { this.skillId = skillId; }
    public String getResultType() { return resultType; }
    public void setResultType(String resultType) { this.resultType = resultType; }
    public String getAiTaskType() { return aiTaskType; }
    public void setAiTaskType(String aiTaskType) { this.aiTaskType = aiTaskType; }
    public String getRouteCode() { return routeCode; }
    public void setRouteCode(String routeCode) { this.routeCode = routeCode; }
    public String getSystemProcessCategory() { return systemProcessCategory; }
    public void setSystemProcessCategory(String systemProcessCategory) { this.systemProcessCategory = systemProcessCategory; }
    public String getSystemTaskType() { return systemTaskType; }
    public void setSystemTaskType(String systemTaskType) { this.systemTaskType = systemTaskType; }
    public String getTaskCardType() { return taskCardType; }
    public void setTaskCardType(String taskCardType) { this.taskCardType = taskCardType; }
    public String getTaskSubtype() { return taskSubtype; }
    public void setTaskSubtype(String taskSubtype) { this.taskSubtype = taskSubtype; }
    public String getCurrentOrHistory() { return currentOrHistory; }
    public void setCurrentOrHistory(String currentOrHistory) { this.currentOrHistory = currentOrHistory; }
    public String getGroupCode() { return groupCode; }
    public void setGroupCode(String groupCode) { this.groupCode = groupCode; }
    public String getConfirmationNumber() { return confirmationNumber; }
    public void setConfirmationNumber(String confirmationNumber) { this.confirmationNumber = confirmationNumber; }
    public String getItemPayloadSha256() { return itemPayloadSha256; }
    public void setItemPayloadSha256(String itemPayloadSha256) { this.itemPayloadSha256 = itemPayloadSha256; }
    public String getItemIdempotencyKey() { return itemIdempotencyKey; }
    public void setItemIdempotencyKey(String itemIdempotencyKey) { this.itemIdempotencyKey = itemIdempotencyKey; }
    public String getManualReasonCode() { return manualReasonCode; }
    public void setManualReasonCode(String manualReasonCode) { this.manualReasonCode = manualReasonCode; }
    public Integer getParentSourceEventIndex() { return parentSourceEventIndex; }
    public void setParentSourceEventIndex(Integer parentSourceEventIndex) { this.parentSourceEventIndex = parentSourceEventIndex; }
    public String getLinkedTaskGroupId() { return linkedTaskGroupId; }
    public void setLinkedTaskGroupId(String linkedTaskGroupId) { this.linkedTaskGroupId = linkedTaskGroupId; }
    public Boolean getBlockedUntilParentCompleted() { return blockedUntilParentCompleted; }
    public void setBlockedUntilParentCompleted(Boolean blockedUntilParentCompleted) { this.blockedUntilParentCompleted = blockedUntilParentCompleted; }
    public String getAiPayloadJson() { return aiPayloadJson; }
    public void setAiPayloadJson(String aiPayloadJson) { this.aiPayloadJson = aiPayloadJson; }
    public String getCaseKeysJson() { return caseKeysJson; }
    public void setCaseKeysJson(String caseKeysJson) { this.caseKeysJson = caseKeysJson; }
    public String getExtractedFieldsJson() { return extractedFieldsJson; }
    public void setExtractedFieldsJson(String extractedFieldsJson) { this.extractedFieldsJson = extractedFieldsJson; }
    public String getManualReviewJson() { return manualReviewJson; }
    public void setManualReviewJson(String manualReviewJson) { this.manualReviewJson = manualReviewJson; }
    public String getInformationalMessageJson() { return informationalMessageJson; }
    public void setInformationalMessageJson(String informationalMessageJson) { this.informationalMessageJson = informationalMessageJson; }
    public String getAttachmentsJson() { return attachmentsJson; }
    public void setAttachmentsJson(String attachmentsJson) { this.attachmentsJson = attachmentsJson; }
    public String getContextUsedJson() { return contextUsedJson; }
    public void setContextUsedJson(String contextUsedJson) { this.contextUsedJson = contextUsedJson; }
    public String getAdapterErrorCode() { return adapterErrorCode; }
    public void setAdapterErrorCode(String adapterErrorCode) { this.adapterErrorCode = adapterErrorCode; }
    public String getAdapterErrorMessage() { return adapterErrorMessage; }
    public void setAdapterErrorMessage(String adapterErrorMessage) { this.adapterErrorMessage = adapterErrorMessage; }
    public LocalDateTime getCreatedAt() { return createdAt; }
    public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
    public LocalDateTime getUpdatedAt() { return updatedAt; }
    public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }
}
