interface DataType {
  id: string;
  posLevels: any;
  posTypeName: string;
  posTypeRank: number;
  posTypeShortName?: string;
}

interface DataLevel {
  id: string;
  posLevelAuthority: string | null;
  posLevelName: string;
  posLevelRank: number;
}

interface DataPerson {
  avatar?: string;
  avatarName?: string;
  citizenId: string;
  firstName: string;
  id: string;
  lastName: string;
  posLevelId: string;
  posTypeId: string;
  position: string;
  prefix: string;
  rank?: string;
}

interface DataRequest {
  createdAt: string | Date;
  createdFullName?: string;
  detail: string;
  fullname: string;
  id: string;
  lastUpdateFullName?: string;
  lastUpdatedAt?: string;
  remark?: string;
  status: string;
  topic: string;
  profileId?: string;
  citizenId: string;
}

interface DataProfile {
  avatar: string;
  avatarName: string;
  birthDate: string;
  bloodGroup: string;
  citizenId: string;
  createdAt: string;
  createdFullName: string;
  createdUserId: string;
  currentAddress: string;
  currentDistrictId: string;
  currentProvinceId: string;
  currentSubDistrictId: string;
  currentZipCode: string;
  dateAppoint: string;
  dateLeave: string;
  dateRetire: string;
  dateRetireLaw: string;
  dateStart: string;
  dutyTimeEffectiveDate: string;
  dutyTimeId: string;
  email: string;
  ethnicity: string;
  firstName: string;
  gender: string;
  govAgeAbsent: number;
  govAgePlus: number;
  id: string;
  isLeave: boolean;
  isProbation: boolean;
  keycloak: string;
  lastName: string;
  lastUpdateFullName: string;
  lastUpdateUserId: string;
  lastUpdatedAt: string;
  leaveReason: string;
  nationality: string;
  posLevelId: string;
  phone: string;
  posTypeId: string;
  position: string;
  prefix: string;
  rank: string;
  reasonSameDate: null;
  registrationAddress: string;
  registrationDistrictId: string;
  registrationProvinceId: string;
  registrationSubDistrictId: string;
  registrationZipCode: string;
  relationship: string;
  religion: string;
  telephoneNumber: string;
  posLevel: {
    createdAt: string;
    createdFullName: string;
    createdUserId: string;
    id: string;
    lastUpdateFullName: string;
    lastUpdateUserId: string;
    lastUpdatedAt: string;
    posLevelAuthority: string;
    posLevelName: string;
    posLevelRank: number;
    posTypeId: string;
  };
  posType: {
    createdAt: string;
    createdFullName: string;
    createdUserId: string;
    id: string;
    lastUpdateFullName: string;
    lastUpdateUserId: string;
    lastUpdatedAt: string;
    posTypeName: string;
    posTypeRank: number;
  };
  prefixMain: string;
}

interface DataLeave {
  createdAt: string;
  createdFullName: string;
  createdUserId: string;
  dateLeaveEnd: string;
  dateLeaveStart: string;
  id: string;
  lastUpdateFullName: string;
  lastUpdateUserId: string;
  lastUpdatedAt: string;
  leaveCount: number;
  leaveDays: number;
  leaveType: DataLeaveType;
  leaveTypeId: string;
  profileEmployeeId: string;
  profileId: string;
  reason: string;
  status: string;
  totalLeave: number;
  typeLeaveId: string;
}

interface DataLeaveType {
  code: string;
  createdAt: string;
  createdUserId: string;
  id: string;
  lastUpdateFullName: string;
  lastUpdateUserId: string;
  lastUpdatedAt: string;
  limit: number;
  name: string;
  refCommandDate: string;
}

interface DataListsIDP {
  createdAt: string;
  createdFullName: string;
  createdUserId: string;
  developmentReport: string;
  developmentResults: string;
  developmentTarget: string;
  id: string;
  isDevelopment10: boolean;
  isDevelopment20: boolean;
  isDevelopment70: boolean;
  lastUpdateFullName: string;
  lastUpdateUserId: string;
  lastUpdatedAt: string;
  name: string;
  profileEmployeeId: string;
  profileId: string;
  reason: string;
  reasonDevelopment10: string;
  reasonDevelopment20: string;
  reasonDevelopment70: string;
  status: string;
}

export type {
  DataType,
  DataLevel,
  DataPerson,
  DataRequest,
  DataProfile,
  DataLeave,
  DataLeaveType,
  DataListsIDP,
};
