Upstream sync
This commit is contained in:
@@ -42,3 +42,287 @@ type EntityResponse struct {
|
||||
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"`
|
||||
}
|
||||
|
||||
@@ -5,7 +5,9 @@ import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"encoding/xml"
|
||||
"errors"
|
||||
"fmt"
|
||||
"html"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
@@ -72,14 +74,37 @@ func (s bxeService) GetPayerDetails(subscriberID string) ([]bcbsimodel.EntityRes
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s bxeService) CheckEligibility(eligibility viewmodel.Eligibility) (bcbsimodel.MemberEligibilityResponse, error) {
|
||||
payer, err := s.GetPayerDetails(eligibility.Subscriber.SubscriberID)
|
||||
func (s bxeService) Get271(eligibility viewmodel.Eligibility) (bcbsimodel.Interchange271, error) {
|
||||
resp, err := s.CheckEligibility(eligibility)
|
||||
if err != nil {
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
return bcbsimodel.Interchange271{}, err
|
||||
}
|
||||
|
||||
eligibility.Payer.PayerID = payer[0].ID
|
||||
eligibility.Payer.PayerName = payer[0].Name
|
||||
if resp.QueryResult.HIPPA271.T271 != "" {
|
||||
xmlString := html.UnescapeString(resp.QueryResult.HIPPA271.T271)
|
||||
xmlReader := strings.NewReader(xmlString)
|
||||
|
||||
var f bcbsimodel.Interchange271
|
||||
err = xml.NewDecoder(xmlReader).Decode(&f)
|
||||
if err != nil {
|
||||
fmt.Println("Error to unmarshal: ", err.Error())
|
||||
return bcbsimodel.Interchange271{}, err
|
||||
}
|
||||
|
||||
return f, nil
|
||||
} else {
|
||||
return bcbsimodel.Interchange271{}, errors.New("No 271 response")
|
||||
}
|
||||
}
|
||||
|
||||
func (s bxeService) CheckEligibility(eligibility viewmodel.Eligibility) (bcbsimodel.MemberEligibilityResponse, error) {
|
||||
// payer, err := s.GetPayerDetails(eligibility.Subscriber.SubscriberID)
|
||||
// if err != nil {
|
||||
// return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
// }
|
||||
|
||||
eligibility.Payer.PayerID = "621"
|
||||
eligibility.Payer.PayerName = "blue_cross_blue_shield_il"
|
||||
|
||||
envelope := bcbsimodel.GetEnvelope(eligibility)
|
||||
apiKey := s.cfg.BXE.APIKey
|
||||
@@ -99,14 +124,14 @@ func (s bxeService) CheckEligibility(eligibility viewmodel.Eligibility) (bcbsimo
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
fmt.Println("Error WebService: ", err)
|
||||
fmt.Println("Error WebService Request: ", err)
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
bReturn, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Println("Error WebService: ", err)
|
||||
fmt.Println("Error WebService getting byte: ", err)
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
}
|
||||
|
||||
@@ -118,7 +143,7 @@ func (s bxeService) CheckEligibility(eligibility viewmodel.Eligibility) (bcbsimo
|
||||
var result bcbsimodel.EnvelopeResponse
|
||||
err = xml.Unmarshal([]byte(sResponse), &result)
|
||||
if err != nil {
|
||||
fmt.Println("Error WebService: ", err)
|
||||
fmt.Println("Error WebService getting object: ", err)
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package viewmodel
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -53,3 +54,287 @@ type ServiceInfo struct {
|
||||
DateOfService time.Time `json:"date_of_service,omitempty"`
|
||||
ServiceTypeCodes []string `json:"service_type_codes,omitempty"`
|
||||
}
|
||||
|
||||
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"`
|
||||
}
|
||||
|
||||
@@ -74,8 +74,8 @@ user-uuid = "11a49fa4-fbc7-4fe9-87fe-52a5bc3b71f8"
|
||||
|
||||
[bxe]
|
||||
url = "https://api-pve.bcbs.com/BXDirectConnect/V30"
|
||||
key = "dacg7jtsmb6ajr3z553jbczg"
|
||||
secret = "vFhNeWE8JdJpbDZQtcm6AHjX"
|
||||
key = "c63z7gv9a5qz2zgx7zcm3253"
|
||||
secret = "hK4Yc9jtBrxaZTr4UU2VsfX9"
|
||||
|
||||
[blue365]
|
||||
url = "https://api-cloud.bcbs.com/blue365deals-stg/v1/validatePrefix/"
|
||||
|
||||
@@ -74,8 +74,8 @@ user-uuid = "11a49fa4-fbc7-4fe9-87fe-52a5bc3b71f8"
|
||||
|
||||
[bxe]
|
||||
url = "https://api-pve.bcbs.com/BXDirectConnect/V30"
|
||||
key = "dacg7jtsmb6ajr3z553jbczg"
|
||||
secret = "vFhNeWE8JdJpbDZQtcm6AHjX"
|
||||
key = "c63z7gv9a5qz2zgx7zcm3253"
|
||||
secret = "hK4Yc9jtBrxaZTr4UU2VsfX9"
|
||||
|
||||
[blue365]
|
||||
url = "https://api-cloud.bcbs.com/blue365deals-stg/v1/validatePrefix/"
|
||||
|
||||
1602
returnExample.xml
Normal file
1602
returnExample.xml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,14 @@ func isSameOrganization(organizationA viewmodel.Organization, organizationB view
|
||||
}
|
||||
|
||||
func grabOrgFromUser(user viewmodel.User) (viewmodel.Organization, error) {
|
||||
if len(user.Profiles) < 1 {
|
||||
return viewmodel.Organization{}, fmt.Errorf("User has no organizations %v", user)
|
||||
}
|
||||
|
||||
return user.Profiles[0].Organization, nil
|
||||
}
|
||||
|
||||
func grabOrgFromUserDirectly(user viewmodel.User) (viewmodel.Organization, error) {
|
||||
if len(user.Organizations) < 1 {
|
||||
return viewmodel.Organization{}, fmt.Errorf("User has no organizations %v", user)
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ func CanCreateUser(currentUser viewmodel.User, updatingUser viewmodel.User) bool
|
||||
return false
|
||||
}
|
||||
|
||||
updatingUserOrganization, err := grabOrgFromUser(updatingUser)
|
||||
updatingUserOrganization, err := grabOrgFromUserDirectly(updatingUser)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
package eligibilityroute
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"html"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/applicationservice"
|
||||
@@ -42,8 +46,22 @@ func (c *controller) handleEligibility(ctx echo.Context) error {
|
||||
|
||||
ret, err := c.bcbsi.BXE.CheckEligibility(eligibility)
|
||||
if err != nil {
|
||||
fmt.Println("Error Here: ", err.Error())
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
if ret.QueryResult.HIPPA271.T271 != "" {
|
||||
xmlString := html.UnescapeString(ret.QueryResult.HIPPA271.T271)
|
||||
xmlReader := strings.NewReader(xmlString)
|
||||
|
||||
var f viewmodel.Interchange271
|
||||
err = xml.NewDecoder(xmlReader).Decode(&f)
|
||||
if err != nil {
|
||||
fmt.Println("Error to unmarshal: ", err.Error())
|
||||
}
|
||||
|
||||
return ctx.JSON(200, f)
|
||||
} else {
|
||||
return routeutils.ResponseAPIOK(ctx, ret)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,14 +8,18 @@ import (
|
||||
"time"
|
||||
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/applicationservice"
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/third/eligibility/bcbsi"
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
|
||||
"bitbucket.org/nemt/nemt-portal-api/domain"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/auth"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/cache"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/config"
|
||||
"bitbucket.org/nemt/nemt-portal-api/server/authorization"
|
||||
"bitbucket.org/nemt/nemt-portal-api/server/validation"
|
||||
"bitbucket.org/nemt/nemt-portal-api/server/router/routeutils"
|
||||
"github.com/labstack/echo"
|
||||
"golang.org/x/net/context"
|
||||
"googlemaps.github.io/maps"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -26,6 +30,7 @@ var (
|
||||
type controller struct {
|
||||
svc *applicationservice.Service
|
||||
cfg *config.Config
|
||||
bcbsi *bcbsi.Service
|
||||
}
|
||||
|
||||
func controllerInstance(svc *applicationservice.Service, cfg *config.Config) *controller {
|
||||
@@ -33,6 +38,7 @@ func controllerInstance(svc *applicationservice.Service, cfg *config.Config) *co
|
||||
instance = &controller{
|
||||
svc: svc,
|
||||
cfg: cfg,
|
||||
bcbsi: bcbsi.New(cfg),
|
||||
}
|
||||
})
|
||||
return instance
|
||||
@@ -381,6 +387,59 @@ func (c *controller) handleMember(ctx echo.Context) error {
|
||||
return routeutils.HandleAPIError(ctx, err)
|
||||
}
|
||||
|
||||
eligibility := viewmodel.Eligibility{}
|
||||
eligibility.Provider.ProviderNPI = "1699849786"
|
||||
eligibility.Provider.ProviderName = "LITHOLINK CORPORATION"
|
||||
eligibility.TrackingID = user.ID
|
||||
eligibility.Subscriber.SubscriberID = *user.Member
|
||||
eligibility.Subscriber.PatientType = "S"
|
||||
eligibility.Subscriber.Name.First = user.First
|
||||
eligibility.Subscriber.Name.Last = user.Last
|
||||
eligibility.Subscriber.DemographicInfo.DateOfBirth = *user.BirthDate
|
||||
eligibility.Subscriber.DemographicInfo.Gender = *user.Gender
|
||||
eligibility.ServiceInfo.DateOfService = time.Now()
|
||||
eligibility.ServiceInfo.ServiceTypeCodes = []string{"30"}
|
||||
|
||||
resp, err := c.bcbsi.BXE.Get271(eligibility)
|
||||
if err != nil {
|
||||
fmt.Println("Eligibility Not Found or Error: ", err.Error())
|
||||
} else {
|
||||
address := viewmodel.Address{}
|
||||
header := resp.Division.HealthCareEligibilityResponse.LoopHL0030[0].HL_0460[0].HL_0890[0].NM1_0920[0].N3_0950
|
||||
body := resp.Division.HealthCareEligibilityResponse.LoopHL0030[0].HL_0460[0].HL_0890[0].NM1_0920[0].N4_0960
|
||||
|
||||
address.AddressTypeName = "Home"
|
||||
address.AddressType = "home"
|
||||
address.Name = fmt.Sprintf("%s, %s", header.N301, body.N401)
|
||||
address.Address = fmt.Sprintf("%s, %s", header.N301, body.N401)
|
||||
address.CreatedUserUUID = authUser.ID
|
||||
address.User = user
|
||||
|
||||
googleMapsAPI, err := maps.NewClient(maps.WithClientIDAndSignature("gme-bluecrossandblue1", "msqgD-jdqCyR0M_1u5C1HION5iI="))
|
||||
if err != nil {
|
||||
fmt.Println("Error to instantiate googles api: ", err.Error())
|
||||
}
|
||||
|
||||
r := &maps.GeocodingRequest{
|
||||
Address: address.Address + " " + body.N402 + ", " + body.N403,
|
||||
}
|
||||
|
||||
result, err := googleMapsAPI.Geocode(context.Background(), r)
|
||||
if err != nil {
|
||||
fmt.Println("Error to instantiate googles api: ", err.Error())
|
||||
}
|
||||
|
||||
if len(result) > 0 {
|
||||
address.Latitude = result[0].Geometry.Location.Lat
|
||||
address.Longitude = result[0].Geometry.Location.Lng
|
||||
|
||||
_, err := c.svc.Users.SaveAddress(address)
|
||||
if err != nil {
|
||||
fmt.Println("Error to save address: ", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return routeutils.ResponseAPIOK(ctx, user)
|
||||
}
|
||||
|
||||
@@ -472,6 +531,10 @@ func (c *controller) handlePortal(ctx echo.Context) error {
|
||||
}
|
||||
user.Pass = string(pass)
|
||||
|
||||
if passwordValidationErrors := validation.ValidatePassword(&user) ; len(passwordValidationErrors) > 0 {
|
||||
return routeutils.ResponseAPICustomValidationError(ctx, "Password not strong enough", passwordValidationErrors)
|
||||
}
|
||||
|
||||
if len(user.Name) == 0 && len(user.First) == 0 && len(user.Last) == 0 {
|
||||
return routeutils.ResponseAPIAuthError(ctx, "name is required", false)
|
||||
}
|
||||
|
||||
67
server/validation/user.go
Normal file
67
server/validation/user.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package validation
|
||||
|
||||
import (
|
||||
|
||||
"strings"
|
||||
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/errors"
|
||||
|
||||
)
|
||||
|
||||
func characterIsUpperCase(character rune) bool {
|
||||
return (character >= 65) && (character <= 90)
|
||||
}
|
||||
|
||||
func characterIsLowerCase(character rune) bool {
|
||||
return (character >= 97) && (character <= 122)
|
||||
}
|
||||
|
||||
func characterIsNumber(character rune) bool {
|
||||
return (character >= 48) && (character <= 57)
|
||||
}
|
||||
|
||||
func ValidatePassword(user *viewmodel.User) []errors.ValidationError {
|
||||
var result []errors.ValidationError
|
||||
|
||||
userOrganizationName := ""
|
||||
if len(user.Organizations) > 0{
|
||||
userOrganizationName = user.Organizations[0].Name
|
||||
}
|
||||
|
||||
if (len(user.Pass) < 8) {
|
||||
result = append(result, errors.ValidationError{Field : "password", Message : "Password must be at least 8 characters."})
|
||||
}
|
||||
|
||||
if (strings.Contains(user.Pass, user.First)){
|
||||
result = append(result, errors.ValidationError{Field : "password", Message : "Password cannot include your First Name."})
|
||||
}
|
||||
|
||||
if (strings.Contains(user.Pass, user.Last)){
|
||||
result = append(result, errors.ValidationError{Field : "password", Message : "Password cannot include your Last Name."})
|
||||
}
|
||||
|
||||
if (strings.Contains(user.Pass, userOrganizationName)){
|
||||
result = append(result, errors.ValidationError{Field : "password", Message : "Password cannot include your Organization Name."})
|
||||
}
|
||||
|
||||
containsUpperCaseLetter := false;
|
||||
containsLowerCaseLetter := false;
|
||||
containsNumber := false;
|
||||
|
||||
for _, character := range user.Pass {
|
||||
containsUpperCaseLetter = containsUpperCaseLetter || characterIsUpperCase(character)
|
||||
containsLowerCaseLetter = containsLowerCaseLetter || characterIsLowerCase(character)
|
||||
containsNumber = containsNumber || characterIsNumber(character)
|
||||
}
|
||||
|
||||
if !containsUpperCaseLetter || !containsLowerCaseLetter || !containsNumber {
|
||||
result = append(result, errors.ValidationError{Field : "password", Message : "Password must contain one of EACH :"})
|
||||
result = append(result, errors.ValidationError{Field : "password-tab", Message : "an uppercase letter"})
|
||||
result = append(result, errors.ValidationError{Field : "password-tab", Message : "a lowercase letter"})
|
||||
result = append(result, errors.ValidationError{Field : "password-tab", Message : "a number"})
|
||||
}
|
||||
|
||||
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user