/**
 * This module was automatically generated by `ts-interface-builder`
 */
import * as t from "ts-interface-checker";
// tslint:disable:object-literal-key-quotes

export const PatientMgmtEventType = t.enumtype({
  "Patient": "patient",
  "Encounter": "encounter",
  "Appointment": "appointment",
  "Other": "other",
});

export const PatientMgmtCatalogType = t.enumtype({
  "UserHcw": "user_chw",
  "Patient": "patient",
});

export const HcwSiteCategory = t.enumtype({
  "Facility": "facility",
  "Community": "community",
  "PatientAddress": "patient_address",
  "Virtual": "virtual",
  "Other": "other",
});

export const AppointmentFollowupType = t.enumtype({
  "PhoneCall": "phone_call",
  "SMS": "sms",
  "WhatsApp": "whatsapp",
  "HouseVisit": "house_visit",
  "Other": "other",
});

export const AppointmentStatus = t.enumtype({
  "Upcoming": "upcoming",
  "Missed": "missed",
  "Attended": "attended",
  "Other": "other",
});

export const CounselingType = t.enumtype({
  "Lifestyle": "lifestyle",
  "Psychological": "psychological",
  "Other": "other",
});

export const DiagnosisCategory = t.enumtype({
  "Computed": "computed",
  "Given": "given",
  "Other": "other",
});

export const DiagnosisQuestionnaireCategory = t.enumtype({
  "MedicalReview": "medical_review",
  "Assessment": "assessment",
  "Diagnostic": "diagnostic",
  "Other": "other",
});

export const DiagnosisQuestionnaireOutcomeType = t.enumtype({
  "RiskStatus": "risk_status",
  "RiskScore": "risk_score",
  "Other": "other",
});

export const DiagnosisStatusValueType = t.enumtype({
  "Positive": "positive",
  "Negative": "negative",
  "Recovered": "recovered",
  "Unknown": "unknown",
  "NA": "n_a",
  "Other": "other",
});

export const DiagnosisStatusRiskType = t.enumtype({
  "Low": "low",
  "High": "high",
  "Unknown": "unknown",
  "NA": "n_a",
  "Other": "other",
});

export const DiagnosisSubType = t.enumtype({
  "Age": "age",
  "Gender": "gender",
  "Height": "height",
  "Weight": "weight",
  "Smoker": "smoker",
  "BloodPressure": "blood_pressure",
  "BloodPressureSystolic": "blood_pressure_systolic",
  "BloodPressureDiastolic": "blood_pressure_diastolic",
  "MUAC": "muac",
  "BloodGlucose": "blood_glucose",
  "HbA1c": "hbA1c",
  "Temperature": "temperature",
  "Bmi": "bmi",
  "Cvd": "cvd",
  "Phq4": "phq_4",
  "Phq9": "phq_9",
  "Gad7": "gad_7",
  "PregnancyStatus": "pregnancy_status",
  "PregnancyDangerSigns": "pregnancy_danger_signs",
  "SuicidalIdeation": "suicidal_ideation",
  "HighRiskPregnancy": "high_risk_pregnancy",
  "Other": "other",
});

export const DiagnosisSymptomType = t.enumtype({
  "Bio": "bio",
  "HIV": "hiv",
  "NCD": "ncd",
  "TB": "tb",
  "ECD": "ecd",
  "Diabetes": "diabetes",
  "Hypertension": "hypertension",
  "Pregnancy": "pregnancy",
  "MentalHealth": "mental_health",
  "SubstanceUseDisorder": "substance_use_disorder",
  "AdolescentHealth": "adolescent_health",
  "GeneralScreening": "general_screening",
  "Gynecologic": "gynecologic",
  "Antenatal": "antenatal",
  "Postnatal": "postnatal",
  "CervicalCancer": "cervical_cancer",
  "Lifestyle": "lifestyle",
  "Psychological": "psychological",
  "GenderBasedViolence": "gender_based_violence",
  "SexualBehaviour": "sexual_behaviour",
  "EconomicStrength": "economic_strengthening",
  "Other": "other",
});

export const DiagnosisType = t.enumtype({
  "Bio": "bio",
  "HIV": "hiv",
  "NCD": "ncd",
  "TB": "tb",
  "ECD": "ecd",
  "Diabetes": "diabetes",
  "Hypertension": "hypertension",
  "Pregnancy": "pregnancy",
  "MentalHealth": "mental_health",
  "SubstanceUseDisorder": "substance_use_disorder",
  "AdolescentHealth": "adolescent_health",
  "GeneralScreening": "general_screening",
  "Gynecologic": "gynecologic",
  "Antenatal": "antenatal",
  "Postnatal": "postnatal",
  "CervicalCancer": "cervical_cancer",
  "Lifestyle": "lifestyle",
  "Psychological": "psychological",
  "GenderBasedViolence": "gender_based_violence",
  "SexualBehaviour": "sexual_behaviour",
  "EconomicStrength": "economic_strengthening",
  "Other": "other",
});

export const EncounterType = t.enumtype({
  "Screening": "screening",
  "Assessment": "assessment",
  "Enrolment": "enrolment",
  "MedicalReview": "medical_review",
  "Counseling": "counseling",
  "Other": "other",
});

export const FrequencyType = t.enumtype({
  "Daily": "daily",
  "Days": "days",
  "Weeks": "weeks",
  "Months": "months",
  "Other": "other",
});

export const HcwItemAction = t.enumtype({
  "View": "view",
  "Add": "add",
  "Update": "update",
  "Remove": "remove",
  "Done": "done",
  "Other": "other",
});

export const PatientType = t.enumtype({
  "Triage": "triage",
  "Outpatient": "outpatient",
  "Inpatient": "inpatient",
  "Pharmacy": "pharmacy",
  "DoorToDoor": "door_to_door",
  "Camp": "camp",
  "Other": "other",
});

export const PrescriptionItemFrequency = t.enumtype({
  "AM": "AM",
  "PM": "PM",
  "OD": "OD",
  "BD": "BD",
  "TDS": "TDS",
  "QDS": "QDS",
  "OM": "OM",
  "ON": "ON",
  "CC": "CC",
  "PC": "PC",
  "AC": "AC",
  "PRN": "PRN",
  "Other": "other",
});

export const PrescriptionItemFormulationType = t.enumtype({
  "Tablet": "tablet",
  "Capsule": "capsule",
  "Syrup": "syrup",
  "Injection": "injection",
  "Insulin": "insulin",
  "Contraceptive": "contraceptive",
  "Other": "other",
});

export const ScheduleItemType = t.enumtype({
  "MedicalReview": "medical_review",
  "Assessment": "assessment",
  "Other": "other",
});

export const AppointmentItem = t.iface([], {
  "id": "string",
  "hcw_id": "string",
  "category": "HcwSiteCategory",
  "status": "AppointmentStatus",
  "time": "number",
  "is_time_sensitive": "boolean",
  "type_list": t.array("ScheduleItemType"),
  "sub_type_list": t.array("DiagnosisType"),
  "update": t.opt("AppointmentUpdateItem"),
  "missed": t.opt("AppointmentMissedItem"),
});

export const AppointmentUpdateItem = t.iface([], {
  "id": "string",
  "reason": "string",
  "prev_time": "number",
});

export const AppointmentMissedItem = t.iface([], {
  "id": "string",
  "type": "AppointmentFollowupType",
  "time": "number",
  "response": "string",
});

export const CounselingPlanItem = t.iface([], {
  "name": "string",
  "action": "HcwItemAction",
  "clinician_notes": t.opt("string"),
  "assessment_remarks": t.opt("string"),
  "counselor_notes": t.opt("string"),
  "referral_date": t.opt("number"),
  "assessment_date": t.opt("number"),
  "referred_by": t.opt("string"),
  "assessed_by": t.opt("string"),
  "remarks": t.opt("string"),
});

export const ImmunizationItem = t.iface([], {
  "id": "string",
  "action": "HcwItemAction",
  "type": "string",
  "dose": "number",
  "status": "boolean",
  "date": t.opt("number"),
  "remarks": t.opt("string"),
});

export const DiagnosisItem = t.iface([], {
  "type": "DiagnosisType",
  "sub_type": "DiagnosisSubType",
  "category": "DiagnosisCategory",
  "value": "any",
  "unit": "string",
  "observation_time": t.opt("number"),
  "remarks": t.opt("string"),
});

export const DiagnosisOutcomeItem = t.iface([], {
  "type": "DiagnosisQuestionnaireOutcomeType",
  "sub_type": t.opt("string"),
  "value": "any",
  "remarks": t.opt("string"),
});

export const DiagnosisQuestionnaireObject = t.iface([], {
  "type": "DiagnosisType",
  "sub_type": "DiagnosisSubType",
  "category": "DiagnosisQuestionnaireCategory",
  "question_list": t.array("DiagnosisQuestionItem"),
  "outcome_list": t.array("DiagnosisOutcomeItem"),
  "remarks": t.opt("string"),
});

export const DiagnosisStatusItem = t.iface([], {
  "type": "DiagnosisType",
  "sub_type": t.opt("string"),
  "action": "HcwItemAction",
  "status": "DiagnosisStatusValueType",
  "risk": "DiagnosisStatusRiskType",
  "diagnosis_date": "number",
  "is_confirmed": t.opt("boolean"),
  "remarks": t.opt("string"),
  "stage": t.opt("string"),
  "treatment_status": t.opt("string"),
});

export const DiagnosisSymptomItem = t.iface([], {
  "type": "DiagnosisSymptomType",
  "symptoms_list": t.array("string"),
  "remarks": t.opt("string"),
});

export const DiagnosticElementItem = t.iface([], {
  "id": "string",
  "investigation_list": t.array("InvestigationItem"),
  "biometric_list": t.array("DiagnosisItem"),
  "sign_symptom_list": t.array("DiagnosisSymptomItem"),
  "treatment_adherence_list": t.array("TreatmentAdherenceItem"),
  "health_questionnaire_list": t.array("DiagnosisQuestionnaireObject"),
});

export const EncounterSummaryObject = t.iface([], {
  "id": "string",
  "appointment_id": t.opt("string"),
  "encounter_time": "number",
  "hcw_id_list": t.array("string"),
  "prev_diagnosis_status_list": t.array("DiagnosisStatusItem"),
  "diagnosis_status_list": t.array("DiagnosisStatusItem"),
  "prev_treatment_plan": t.opt("TreatmentPlanItem"),
  "treatment_plan": t.opt("TreatmentPlanItem"),
  "main_complaints_list": t.array("string"),
  "diagnostic_elements": t.opt("DiagnosticElementItem"),
  "pregnancy_details": t.opt("PregnancyDetailObject"),
  "counseling_list": t.opt(t.array("CounselingPlanItem")),
  "immunization_list": t.opt(t.array("ImmunizationItem")),
  "remarks": t.opt("string"),
  "is_followup_id": t.opt("string"),
  "is_referral_id": t.opt("string"),
  "has_followup": t.opt("boolean"),
  "has_referral": t.opt("boolean"),
});

export const InvestigationItem = t.iface([], {
  "name": "string",
  "test_value": "string",
  "test_unit": "string",
  "ordered_date": "number",
  "tested_date": "number",
  "action": "HcwItemAction",
  "remarks": "string",
});

export const PregnancyDetailObject = t.iface([], {
  "pregnancy_status": "boolean",
  "last_menstrual_period": t.opt("number"),
  "high_risk": "boolean",
  "gravida": t.opt("number"),
  "parity": t.opt("number"),
  "n_fetus": t.opt("number"),
  "neonatal_outcome": t.opt("string"),
  "maternal_outcome": t.opt("string"),
});

export const PrescriptionItem = t.iface([], {
  "id": "string",
  "name": "string",
  "dosage_value": t.opt("number"),
  "dosage_unit": "string",
  "formulation": "PrescriptionItemFormulationType",
  "type": "DiagnosisType",
  "frequency": "PrescriptionItemFrequency",
  "prescribed_days": t.opt("number"),
  "dispensed_days": t.opt("number"),
  "prescription_date": t.opt("number"),
  "action": "HcwItemAction",
  "remarks": t.opt("string"),
});

export const ScheduleItem = t.iface([], {
  "type": "ScheduleItemType",
  "sub_type": "DiagnosisType",
  "value": "number",
  "frequency": "FrequencyType",
  "action": "HcwItemAction",
  "remarks": t.opt("string"),
  "start_date": t.opt("number"),
  "end_date": t.opt("number"),
});

export const TreatmentAdherenceItem = t.iface([], {
  "type": "string",
  "medication_adherence": "string",
  "lack_adherence_reason": t.opt("string"),
  "remarks": t.opt("string"),
});

export const TreatmentPlanItem = t.iface([], {
  "followup_list": t.array("ScheduleItem"),
  "prescription_list": t.array("PrescriptionItem"),
  "investigation_list": t.array("InvestigationItem"),
});

export const PatientProperties = t.iface([], {
  "patient_id": "string",
  "site_id": "string",
  "action": "HcwItemAction",
  "is_from_gho": "boolean",
  "category": "HcwSiteCategory",
  "type": "PatientType",
  "sub_type": t.opt("string"),
  "biometric_list": t.opt(t.array("DiagnosisItem")),
  "pregnancy_details": t.opt("PregnancyDetailObject"),
  "registration_date": t.opt("number"),
  "meta": t.opt("any"),
});

export const EncounterProperties = t.iface([], {
  "patient_id": "string",
  "site_id": "string",
  "action": "HcwItemAction",
  "category": "HcwSiteCategory",
  "type": "EncounterType",
  "sub_type": "DiagnosisType",
  "encounter_summary": "EncounterSummaryObject",
  "meta": t.opt("any"),
});

export const AppointmentProperties = t.iface([], {
  "patient_id": "string",
  "site_id": "string",
  "action": "HcwItemAction",
  "appointment": "AppointmentItem",
  "meta": t.opt("any"),
});

export const HcwCatalogModel = t.iface([], {
  "id": "string",
  "name": t.opt("string"),
  "role": t.opt("string"),
  "site_id_list": t.opt(t.array("string")),
  "supervisor_id_list": t.opt(t.array("string")),
});

export const PatientCatalogModel = t.iface([], {
  "id": "string",
  "country": t.opt("Country"),
  "region_state": t.opt("string"),
  "city": t.opt("string"),
  "profession": t.opt("string"),
  "education_level": t.opt("string"),
  "site_id_list": t.opt(t.array("string")),
  "insurance_id": t.opt("string"),
  "insurance_type": t.opt("string"),
  "insurance_status": t.opt("boolean"),
  "landmark": t.opt("string"),
  "phone_number_category": t.opt("string"),
  "program_id": t.opt("string"),
  "family_id": t.opt("string"),
  "hw_id_list": t.opt(t.array("string")),
  "buddy_id_list": t.opt(t.array("string")),
  "transport_mode": t.opt("string"),
  "marital_status": t.opt("string"),
  "employment_status": t.opt("string"),
  "nationality": t.opt("string"),
  "has_whatsapp": t.opt("boolean"),
  "has_email": t.opt("boolean"),
});

const exportedTypeSuite: t.ITypeSuite = {
  PatientMgmtEventType,
  PatientMgmtCatalogType,
  HcwSiteCategory,
  AppointmentFollowupType,
  AppointmentStatus,
  CounselingType,
  DiagnosisCategory,
  DiagnosisQuestionnaireCategory,
  DiagnosisQuestionnaireOutcomeType,
  DiagnosisStatusValueType,
  DiagnosisStatusRiskType,
  DiagnosisSubType,
  DiagnosisSymptomType,
  DiagnosisType,
  EncounterType,
  FrequencyType,
  HcwItemAction,
  PatientType,
  PrescriptionItemFrequency,
  PrescriptionItemFormulationType,
  ScheduleItemType,
  AppointmentItem,
  AppointmentUpdateItem,
  AppointmentMissedItem,
  CounselingPlanItem,
  ImmunizationItem,
  DiagnosisItem,
  DiagnosisOutcomeItem,
  DiagnosisQuestionnaireObject,
  DiagnosisStatusItem,
  DiagnosisSymptomItem,
  DiagnosticElementItem,
  EncounterSummaryObject,
  InvestigationItem,
  PregnancyDetailObject,
  PrescriptionItem,
  ScheduleItem,
  TreatmentAdherenceItem,
  TreatmentPlanItem,
  PatientProperties,
  EncounterProperties,
  AppointmentProperties,
  HcwCatalogModel,
  PatientCatalogModel,
};
export default exportedTypeSuite;
