using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace YbTest.Models
{
    public class MedicalTransactionSystem
    {

        /// <summary>
        /// 医保交易业务对象(入参)
        /// </summary>
        public class MedicalTransaction
        {
            /// <summary>
            /// 交易编号(详见接口列表)
            /// </summary>
            [Required]
            [StringLength(4)]
            public string Infno { get; set; }

            /// <summary>
            /// 发送方报文ID(主键)
            /// 格式:定点医药机构编号(12)+时间(14)+顺序号(4)
            /// </summary>
            [Key]
            [StringLength(30)]
            [RegularExpression(@"^\d{12}\d{14}\d{4}$", ErrorMessage = "报文ID格式无效")]
            public string MsgId { get; set; }

            /// <summary>
            /// 就医地医保区划
            /// </summary>
            [Required]
            [StringLength(6)]
            public string MdtrtareaAdmvs { get; set; }

            /// <summary>
            /// 参保地医保区划(人员编号存在时必填)
            /// </summary>
            [StringLength(6)]
            public string InsuplcAdmdvs { get; set; }

            /// <summary>
            /// 接收方系统代码
            /// </summary>
            [Required]
            [StringLength(10)]
            public string RecerSysCode { get; set; }

            /// <summary>
            /// 设备编号
            /// </summary>
            [StringLength(100)]
            public string DevNo { get; set; }

            /// <summary>
            /// 设备安全信息(JSON/XML格式)
            /// </summary>
            [Column(TypeName = "text")]
            public string DevSafeInfo { get; set; }

            /// <summary>
            /// 数字签名信息(安全管理码)
            /// </summary>
            [Column(TypeName = "text")]
            public string Cainfo { get; set; }

            /// <summary>
            /// 签名类型
            /// </summary>
            [StringLength(10)]
            public SignType Signtype { get; set; }

            /// <summary>
            /// 接口版本号
            /// </summary>
            [Required]
            [StringLength(6)]
            public string Infver { get; set; }

            /// <summary>
            /// 经办人类别
            /// </summary>
            [Required]
            public OperatorType OpterType { get; set; }

            /// <summary>
            /// 经办人/终端编号
            /// </summary>
            [Required]
            [StringLength(30)]
            public string Opter { get; set; }

            /// <summary>
            /// 经办人姓名/终端名称
            /// </summary>
            [Required]
            [StringLength(50)]
            public string OpterName { get; set; }

            /// <summary>
            /// 交易时间
            /// </summary>
            [Required]
            public DateTime InfTime { get; set; }

            /// <summary>
            /// 定点医药机构编号
            /// </summary>
            [Required]
            [StringLength(12)]
            public string FixmedinsCode { get; set; }

            /// <summary>
            /// 定点医药机构名称
            /// </summary>
            [Required]
            [StringLength(20)]
            public string FixmedinsName { get; set; }

            /// <summary>
            /// 交易签到流水号(来自9001交易)
            /// </summary>
            [StringLength(30)]
            public string SignNo { get; set; }

            /// <summary>
            /// 交易输入(.NET对象序列化)
            /// </summary>
            [Required]
            [Column(TypeName = "text")]
            public string Input { get; set; }
        }

        /// <summary>
        /// 签名类型枚举
        /// </summary>
        public enum SignType
        {
            SM2,
            SM3
        }

        /// <summary>
        /// 经办人类别枚举
        /// </summary>
        public enum OperatorType
        {
            经办人 = 1,
            自助终端 = 2,
            移动终端 = 3
        }

    }
}