package bcbsimodel

import (
	"encoding/xml"
)

type EnvelopeResponse struct {
	XMLName xml.Name             `xml:"Envelope"`
	Body    EnvelopeBodyResponse `xml:"Body"`
}

type EnvelopeBodyResponse struct {
	MemberEligibilityResponse MemberEligibilityResponse `xml:"MemberEligibilityResponse"`
}

type MemberEligibilityResponse struct {
	Version     Version     `xml:"version" json:"-"`
	QueryResult QueryResult `xml:"eligibility-benefits-query-results" json:"results"`
}

type QueryResult struct {
	HIPPA271           HIPAA271           `xml:"vcml-271" json:"raw"`
	QueryResultSummary QueryResultSummary `xml:"query-result-summary" json:"summary"`
}

type HIPAA271 struct {
	T271 string `xml:"t271" json:"t271"`
}

type QueryResultSummary struct {
	BenefitsFound  bool           `xml:"benefits-found" json:"benefits_found"`
	ProcessingInfo ProcessingInfo `xml:"processing-info" json:"-"`
}

type ProcessingInfo struct {
	Message string `xml:"message" json:"-"`
}

type EntityResponse struct {
	EntityID int64  `json:"entity_id"`
	ID       string `json:"id"`
	Name     string `json:"name"`
	Status   bool   `json:"status"`
}

type Interchange271 struct {
	XMLName  xml.Name    `json:"-" xml:"Interchange"`
	Isa      ISA271      `json:"isa,omitempty" xml:"ISA"`
	Division Division271 `json:"division,omitempty" xml:"Division"`
	IEA      IEA271      `json:"iea,omitempty" xml:"IEA"`
}

type IEA271 struct {
	IEA01 string `json:"iea01,omitempty" xml:"IEA01"`
	IEA02 string `json:"iea02,omitempty" xml:"IEA02"`
}

type ISA271 struct {
	Isa01 string `json:"isa01,omitempty" xml:"ISA01"`
	Isa02 string `json:"isa02,omitempty" xml:"ISA02"`
	Isa03 string `json:"isa03,omitempty" xml:"ISA03"`
	Isa04 string `json:"isa04,omitempty" xml:"ISA04"`
	Isa05 string `json:"isa05,omitempty" xml:"ISA05"`
	Isa06 string `json:"isa06,omitempty" xml:"ISA06"`
	Isa07 string `json:"isa07,omitempty" xml:"ISA07"`
	Isa08 string `json:"isa08,omitempty" xml:"ISA08"`
	Isa09 string `json:"isa09,omitempty" xml:"ISA09"`
	Isa10 string `json:"isa10,omitempty" xml:"ISA10"`
	Isa11 string `json:"isa11,omitempty" xml:"ISA11"`
	Isa12 string `json:"isa12,omitempty" xml:"ISA12"`
	Isa13 string `json:"isa13,omitempty" xml:"ISA13"`
	Isa14 string `json:"isa14,omitempty" xml:"ISA14"`
	Isa15 string `json:"isa15,omitempty" xml:"ISA15"`
	Isa16 string `json:"isa16,omitempty" xml:"ISA16"`
}

type Division271 struct {
	GS                            GS271                                   `json:"gs,omitempty" xml:"GS"`
	HealthCareEligibilityResponse HealthCareEligibilityBenefitResponse271 `json:"eligibility_response,omitempty" xml:"Health_Care_Eligibility_Benefit_Response"`
	GE                            GE271                                   `json:"ge,omitempty" xml:"GE"`
}

type GS271 struct {
	GS01 string `json:"gs01,omitempty" xml:"GS01"`
	GS02 string `json:"gs02,omitempty" xml:"GS02"`
	GS03 string `json:"gs03,omitempty" xml:"GS03"`
	GS04 string `json:"gs04,omitempty" xml:"GS04"`
	GS05 string `json:"gs05,omitempty" xml:"GS05"`
	GS06 string `json:"gs06,omitempty" xml:"GS06"`
	GS07 string `json:"gs07,omitempty" xml:"GS07"`
	GS08 string `json:"gs08,omitempty" xml:"GS08"`
}

type GE271 struct {
	GE01 string `json:"ge01,omitempty" xml:"GE01"`
	GE02 string `json:"ge02,omitempty" xml:"GE02"`
}

type HealthCareEligibilityBenefitResponse271 struct {
	ST0010     ST              `json:"st0010,omitempty" xml:"ST_0010"`
	BHT0020    BHT             `json:"bht0020,omitempty" xml:"BHT_0020"`
	LoopHL0030 []LoopHL0030271 `json:"hl0030,omitempty" xml:"Loop_HL_0030"`
}

type ST struct {
	ST01 string `json:"st01,omitempty" xml:"ST01"`
	ST02 string `json:"st02,omitempty" xml:"ST02"`
	ST03 string `json:"st03,omitempty" xml:"ST03"`
	ST04 string `json:"st04,omitempty" xml:"ST04"`
	ST05 string `json:"st05,omitempty" xml:"ST05"`
	ST06 string `json:"st06,omitempty" xml:"ST06"`
	ST07 string `json:"st07,omitempty" xml:"ST07"`
	ST08 string `json:"st08,omitempty" xml:"ST08"`
	ST09 string `json:"st09,omitempty" xml:"ST09"`
	ST10 string `json:"st10,omitempty" xml:"ST10"`
	ST11 string `json:"st11,omitempty" xml:"ST11"`
	ST12 string `json:"st12,omitempty" xml:"ST12"`
	ST13 string `json:"st13,omitempty" xml:"ST13"`
	ST14 string `json:"st14,omitempty" xml:"ST14"`
	ST15 string `json:"st15,omitempty" xml:"ST15"`
	ST16 string `json:"st16,omitempty" xml:"ST16"`
}

type BHT struct {
	BHT01 string `json:"bht01,omitempty" xml:"BHT01"`
	BHT02 string `json:"bht02,omitempty" xml:"BHT02"`
	BHT03 string `json:"bht03,omitempty" xml:"BHT03"`
	BHT04 string `json:"bht04,omitempty" xml:"BHT04"`
	BHT05 string `json:"bht05,omitempty" xml:"BHT05"`
	BHT06 string `json:"bht06,omitempty" xml:"BHT06"`
	BHT07 string `json:"bht07,omitempty" xml:"BHT07"`
	BHT08 string `json:"bht08,omitempty" xml:"BHT08"`
	BHT09 string `json:"bht09,omitempty" xml:"BHT09"`
	BHT10 string `json:"bht10,omitempty" xml:"BHT10"`
	BHT11 string `json:"bht11,omitempty" xml:"BHT11"`
	BHT12 string `json:"bht12,omitempty" xml:"BHT12"`
	BHT13 string `json:"bht13,omitempty" xml:"BHT13"`
	BHT14 string `json:"bht14,omitempty" xml:"BHT14"`
	BHT15 string `json:"bht15,omitempty" xml:"BHT15"`
	BHT16 string `json:"bht16,omitempty" xml:"BHT16"`
}

type LoopHL0030271 struct {
	HL_0030  HL            `json:"hl_0030,omitempty" xml:"HL_0030"`
	NM1_0060 []LoopNM10060 `json:"nm1_0060,omitempty" xml:"Loop_NM1_0060"`
	HL_0460  []LoopHL0460  `json:"hl_0460,omitempty" xml:"Loop_HL_0460"`
}

type LoopHL0460 struct {
	HL_0460  HL            `json:"hl_0460,omitempty" xml:"HL_0460"`
	NM1_0490 []LoopNM10490 `json:"nm1_0490,omitempty" xml:"Loop_NM1_0490"`
	HL_0890  []LoopHL0890  `json:"hl_0890,omitempty" xml:"Loop_HL_0890"`
}

type LoopNM10490 struct {
	NM1_0490 NM1 `json:"nm1_0490,omitempty" xml:"NM1_0490"`
}

type LoopHL0890 struct {
	HL_0890  HL            `json:"hl_0890,omitempty" xml:"HL_0890"`
	TRN_0900 TRN           `json:"trn_0900,omitempty" xml:"TRN_0900"`
	NM1_0920 []LoopNM10920 `json:"nm1_0920,omitempty" xml:"Loop_NM1_0920"`
}

type REF struct {
	REF01 string `json:"ref01,omitempty" xml:"REF01"`
	REF02 string `json:"ref02,omitempty" xml:"REF02"`
	REF03 string `json:"ref03,omitempty" xml:"REF03"`
	REF04 string `json:"ref04,omitempty" xml:"REF04"`
	REF05 string `json:"ref05,omitempty" xml:"REF05"`
	REF06 string `json:"ref06,omitempty" xml:"REF06"`
	REF07 string `json:"ref07,omitempty" xml:"REF07"`
	REF08 string `json:"ref08,omitempty" xml:"REF08"`
	REF09 string `json:"ref09,omitempty" xml:"REF09"`
	REF10 string `json:"ref10,omitempty" xml:"REF10"`
	REF11 string `json:"ref11,omitempty" xml:"REF11"`
	REF12 string `json:"ref12,omitempty" xml:"REF12"`
	REF13 string `json:"ref13,omitempty" xml:"REF13"`
	REF14 string `json:"ref14,omitempty" xml:"REF14"`
	REF15 string `json:"ref15,omitempty" xml:"REF15"`
	REF16 string `json:"ref16,omitempty" xml:"REF16"`
}

type N3 struct {
	N301 string `json:"n301,omitempty" xml:"N301"`
	N302 string `json:"n302,omitempty" xml:"N302"`
	N303 string `json:"n303,omitempty" xml:"N303"`
	N304 string `json:"n304,omitempty" xml:"N304"`
	N305 string `json:"n305,omitempty" xml:"N305"`
	N306 string `json:"n306,omitempty" xml:"N306"`
	N307 string `json:"n307,omitempty" xml:"N307"`
	N308 string `json:"n308,omitempty" xml:"N308"`
	N309 string `json:"n309,omitempty" xml:"N309"`
	N310 string `json:"n310,omitempty" xml:"N310"`
	N311 string `json:"n311,omitempty" xml:"N311"`
	N312 string `json:"n312,omitempty" xml:"N312"`
	N313 string `json:"n313,omitempty" xml:"N313"`
	N314 string `json:"n314,omitempty" xml:"N314"`
	N315 string `json:"n315,omitempty" xml:"N315"`
	N316 string `json:"n316,omitempty" xml:"N316"`
}

type N4 struct {
	N401 string `json:"n401,omitempty" xml:"N401"`
	N402 string `json:"n402,omitempty" xml:"N402"`
	N403 string `json:"n403,omitempty" xml:"N403"`
	N404 string `json:"n404,omitempty" xml:"N404"`
	N405 string `json:"n405,omitempty" xml:"N405"`
	N406 string `json:"n406,omitempty" xml:"N406"`
	N407 string `json:"n407,omitempty" xml:"N407"`
	N408 string `json:"n408,omitempty" xml:"N408"`
	N409 string `json:"n409,omitempty" xml:"N409"`
	N410 string `json:"n410,omitempty" xml:"N410"`
	N411 string `json:"n411,omitempty" xml:"N411"`
	N412 string `json:"n412,omitempty" xml:"N412"`
	N413 string `json:"n413,omitempty" xml:"N413"`
	N414 string `json:"n414,omitempty" xml:"N414"`
	N415 string `json:"n415,omitempty" xml:"N415"`
	N416 string `json:"n416,omitempty" xml:"N416"`
}

type LoopNM10920 struct {
	NM1_0920 NM1   `json:"nm1_0920,omitempty" xml:"NM1_0920"`
	REF_0930 []REF `json:"ref_0930,omitempty" xml:"REF_0930"`
	N3_0950  N3    `json:"n3_0950,omitempty" xml:"N3_0950"`
	N4_0960  N4    `json:"n4_0960,omitempty" xml:"N4_0960"`
	DMG_1000 DMG   `json:"dmg_1000,omitempty" xml:"DMG_1000"`
	INS_1010 INS   `json:"ins_1010,omitempty" xml:"INS_1010"`
}

type DMG struct {
	DMG01 string `json:"dmg01,omitempty" xml:"DMG01"`
	DMG02 string `json:"dmg02,omitempty" xml:"DMG02"`
	DMG03 string `json:"dmg03,omitempty" xml:"DMG03"`
	DMG04 string `json:"dmg04,omitempty" xml:"DMG04"`
	DMG05 string `json:"dmg05,omitempty" xml:"DMG05"`
	DMG06 string `json:"dmg06,omitempty" xml:"DMG06"`
	DMG07 string `json:"dmg07,omitempty" xml:"DMG07"`
	DMG08 string `json:"dmg08,omitempty" xml:"DMG08"`
	DMG09 string `json:"dmg09,omitempty" xml:"DMG09"`
	DMG10 string `json:"dmg10,omitempty" xml:"DMG10"`
	DMG11 string `json:"dmg11,omitempty" xml:"DMG11"`
	DMG12 string `json:"dmg12,omitempty" xml:"DMG12"`
	DMG13 string `json:"dmg13,omitempty" xml:"DMG13"`
	DMG14 string `json:"dmg14,omitempty" xml:"DMG14"`
	DMG15 string `json:"dmg15,omitempty" xml:"DMG15"`
	DMG16 string `json:"dmg16,omitempty" xml:"DMG16"`
}

type INS struct {
	INS01 string `json:"ins01,omitempty" xml:"INS01"`
	INS02 string `json:"ins02,omitempty" xml:"INS02"`
	INS03 string `json:"ins03,omitempty" xml:"INS03"`
	INS04 string `json:"ins04,omitempty" xml:"INS04"`
	INS05 string `json:"ins05,omitempty" xml:"INS05"`
	INS06 string `json:"ins06,omitempty" xml:"INS06"`
	INS07 string `json:"ins07,omitempty" xml:"INS07"`
	INS08 string `json:"ins08,omitempty" xml:"INS08"`
	INS09 string `json:"ins09,omitempty" xml:"INS09"`
	INS10 string `json:"ins10,omitempty" xml:"INS10"`
	INS11 string `json:"ins11,omitempty" xml:"INS11"`
	INS12 string `json:"ins12,omitempty" xml:"INS12"`
	INS13 string `json:"ins13,omitempty" xml:"INS13"`
	INS14 string `json:"ins14,omitempty" xml:"INS14"`
	INS15 string `json:"ins15,omitempty" xml:"INS15"`
	INS16 string `json:"ins16,omitempty" xml:"INS16"`
}

type TRN struct {
	TRN01 string `json:"trn01,omitempty" xml:"TRN01"`
	TRN02 string `json:"trn02,omitempty" xml:"TRN02"`
	TRN03 string `json:"trn03,omitempty" xml:"TRN03"`
	TRN04 string `json:"trn04,omitempty" xml:"TRN04"`
	TRN05 string `json:"trn05,omitempty" xml:"TRN05"`
	TRN06 string `json:"trn06,omitempty" xml:"TRN06"`
	TRN07 string `json:"trn07,omitempty" xml:"TRN07"`
	TRN08 string `json:"trn08,omitempty" xml:"TRN08"`
	TRN09 string `json:"trn09,omitempty" xml:"TRN09"`
	TRN10 string `json:"trn10,omitempty" xml:"TRN10"`
	TRN11 string `json:"trn11,omitempty" xml:"TRN11"`
	TRN12 string `json:"trn12,omitempty" xml:"TRN12"`
	TRN13 string `json:"trn13,omitempty" xml:"TRN13"`
	TRN14 string `json:"trn14,omitempty" xml:"TRN14"`
	TRN15 string `json:"trn15,omitempty" xml:"TRN15"`
	TRN16 string `json:"trn16,omitempty" xml:"TRN16"`
}

type HL struct {
	HL01 string `json:"hl01,omitempty" xml:"HL01"`
	HL02 string `json:"hl02,omitempty" xml:"HL02"`
	HL03 string `json:"hl03,omitempty" xml:"HL03"`
	HL04 string `json:"hl04,omitempty" xml:"HL04"`
	HL05 string `json:"hl05,omitempty" xml:"HL05"`
	HL06 string `json:"hl06,omitempty" xml:"HL06"`
	HL07 string `json:"hl07,omitempty" xml:"HL07"`
	HL08 string `json:"hl08,omitempty" xml:"HL08"`
	HL09 string `json:"hl09,omitempty" xml:"HL09"`
	HL10 string `json:"hl10,omitempty" xml:"HL10"`
	HL11 string `json:"hl11,omitempty" xml:"HL11"`
	HL12 string `json:"hl12,omitempty" xml:"HL12"`
	HL13 string `json:"hl13,omitempty" xml:"HL13"`
	HL14 string `json:"hl14,omitempty" xml:"HL14"`
	HL15 string `json:"hl15,omitempty" xml:"HL15"`
	HL16 string `json:"hl16,omitempty" xml:"HL16"`
}

type LoopNM10060 struct {
	NM10060 NM1 `json:"nm1_0060,omitempty" xml:"NM1_0060"`
}

type NM1 struct {
	NM101 string `json:"nm101,omitempty" xml:"NM101"`
	NM102 string `json:"nm102,omitempty" xml:"NM102"`
	NM103 string `json:"nm103,omitempty" xml:"NM103"`
	NM104 string `json:"nm104,omitempty" xml:"NM104"`
	NM105 string `json:"nm105,omitempty" xml:"NM105"`
	NM106 string `json:"nm106,omitempty" xml:"NM106"`
	NM107 string `json:"nm107,omitempty" xml:"NM107"`
	NM108 string `json:"nm108,omitempty" xml:"NM108"`
	NM109 string `json:"nm109,omitempty" xml:"NM109"`
	NM110 string `json:"nm110,omitempty" xml:"NM110"`
	NM111 string `json:"nm111,omitempty" xml:"NM111"`
	NM112 string `json:"nm112,omitempty" xml:"NM112"`
	NM113 string `json:"nm113,omitempty" xml:"NM113"`
	NM114 string `json:"nm114,omitempty" xml:"NM114"`
	NM115 string `json:"nm115,omitempty" xml:"NM115"`
	NM116 string `json:"nm116,omitempty" xml:"NM116"`
}
