move sync logic to base FHIR401 class.
This commit is contained in:
parent
6b5ef7f71e
commit
8531a028c9
|
@ -12,6 +12,8 @@ import (
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/bluebutton"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/bluebutton"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/cerner"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/cerner"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/cigna"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/cigna"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/epic"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/healthit"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/logica"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/logica"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/manual"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/manual"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
||||||
|
@ -37,6 +39,10 @@ func NewClient(sourceType pkg.SourceType, ctx context.Context, appConfig config.
|
||||||
sourceClient, updatedSource, err = cerner.NewClient(ctx, appConfig, globalLogger, credentials, testHttpClient...)
|
sourceClient, updatedSource, err = cerner.NewClient(ctx, appConfig, globalLogger, credentials, testHttpClient...)
|
||||||
case pkg.SourceTypeCigna:
|
case pkg.SourceTypeCigna:
|
||||||
sourceClient, updatedSource, err = cigna.NewClient(ctx, appConfig, globalLogger, credentials, testHttpClient...)
|
sourceClient, updatedSource, err = cigna.NewClient(ctx, appConfig, globalLogger, credentials, testHttpClient...)
|
||||||
|
case pkg.SourceTypeEpic:
|
||||||
|
sourceClient, updatedSource, err = epic.NewClient(ctx, appConfig, globalLogger, credentials, testHttpClient...)
|
||||||
|
case pkg.SourceTypeHealthIT:
|
||||||
|
sourceClient, updatedSource, err = healthit.NewClient(ctx, appConfig, globalLogger, credentials, testHttpClient...)
|
||||||
case pkg.SourceTypeLogica:
|
case pkg.SourceTypeLogica:
|
||||||
sourceClient, updatedSource, err = logica.NewClient(ctx, appConfig, globalLogger, credentials, testHttpClient...)
|
sourceClient, updatedSource, err = logica.NewClient(ctx, appConfig, globalLogger, credentials, testHttpClient...)
|
||||||
case pkg.SourceTypeManual:
|
case pkg.SourceTypeManual:
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/database"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
||||||
"github.com/fastenhealth/gofhir-models/fhir401"
|
"github.com/fastenhealth/gofhir-models/fhir401"
|
||||||
fhirutils "github.com/fastenhealth/gofhir-models/fhir401/utils"
|
fhirutils "github.com/fastenhealth/gofhir-models/fhir401/utils"
|
||||||
|
@ -24,6 +25,32 @@ func NewFHIR401Client(ctx context.Context, appConfig config.Interface, globalLog
|
||||||
}, updatedSource, err
|
}, updatedSource, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Sync
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
func (c *FHIR401Client) SyncAll(db database.DatabaseRepository) error {
|
||||||
|
|
||||||
|
bundle, err := c.GetPatientBundle(c.Source.PatientId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
wrappedResourceModels, err := c.ProcessBundle(bundle)
|
||||||
|
if err != nil {
|
||||||
|
c.Logger.Infof("An error occurred while processing patient bundle %s", c.Source.PatientId)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//todo, create the resources in dependency order
|
||||||
|
|
||||||
|
for _, apiModel := range wrappedResourceModels {
|
||||||
|
err = db.UpsertResource(context.Background(), apiModel)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// FHIR
|
// FHIR
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -3,7 +3,6 @@ package bluebutton
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/database"
|
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/base"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/base"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
@ -20,26 +19,3 @@ func NewClient(ctx context.Context, appConfig config.Interface, globalLogger log
|
||||||
baseClient,
|
baseClient,
|
||||||
}, updatedSource, err
|
}, updatedSource, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c BlueButtonClient) SyncAll(db database.DatabaseRepository) error {
|
|
||||||
|
|
||||||
bundle, err := c.GetPatientBundle(c.Source.PatientId)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
wrappedResourceModels, err := c.ProcessBundle(bundle)
|
|
||||||
if err != nil {
|
|
||||||
c.Logger.Infof("An error occurred while processing patient bundle %s", c.Source.PatientId)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
//todo, create the resources in dependency order
|
|
||||||
|
|
||||||
for _, apiModel := range wrappedResourceModels {
|
|
||||||
err = db.UpsertResource(context.Background(), apiModel)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ type CernerClient struct {
|
||||||
|
|
||||||
func NewClient(ctx context.Context, appConfig config.Interface, globalLogger logrus.FieldLogger, source models.Source, testHttpClient ...*http.Client) (base.Client, *models.Source, error) {
|
func NewClient(ctx context.Context, appConfig config.Interface, globalLogger logrus.FieldLogger, source models.Source, testHttpClient ...*http.Client) (base.Client, *models.Source, error) {
|
||||||
baseClient, updatedSource, err := base.NewFHIR401Client(ctx, appConfig, globalLogger, source, testHttpClient...)
|
baseClient, updatedSource, err := base.NewFHIR401Client(ctx, appConfig, globalLogger, source, testHttpClient...)
|
||||||
|
baseClient.Headers["Accept"] = "application/json+fhir"
|
||||||
return CernerClient{
|
return CernerClient{
|
||||||
baseClient,
|
baseClient,
|
||||||
}, updatedSource, err
|
}, updatedSource, err
|
||||||
|
|
|
@ -3,7 +3,6 @@ package cigna
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/database"
|
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/base"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/base"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
@ -20,26 +19,3 @@ func NewClient(ctx context.Context, appConfig config.Interface, globalLogger log
|
||||||
baseClient,
|
baseClient,
|
||||||
}, updatedSource, err
|
}, updatedSource, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c CignaClient) SyncAll(db database.DatabaseRepository) error {
|
|
||||||
|
|
||||||
bundle, err := c.GetPatientBundle(c.Source.PatientId)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
wrappedResourceModels, err := c.ProcessBundle(bundle)
|
|
||||||
if err != nil {
|
|
||||||
c.Logger.Infof("An error occurred while processing patient bundle %s", c.Source.PatientId)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
//todo, create the resources in dependency order
|
|
||||||
|
|
||||||
for _, apiModel := range wrappedResourceModels {
|
|
||||||
err = db.UpsertResource(context.Background(), apiModel)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package epic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/base"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type EpicClient struct {
|
||||||
|
*base.FHIR401Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient(ctx context.Context, appConfig config.Interface, globalLogger logrus.FieldLogger, source models.Source, testHttpClient ...*http.Client) (base.Client, *models.Source, error) {
|
||||||
|
baseClient, updatedSource, err := base.NewFHIR401Client(ctx, appConfig, globalLogger, source, testHttpClient...)
|
||||||
|
baseClient.Headers["Accept"] = "application/json+fhir"
|
||||||
|
|
||||||
|
return EpicClient{
|
||||||
|
baseClient,
|
||||||
|
}, updatedSource, err
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package healthit
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/base"
|
||||||
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HealthItClient struct {
|
||||||
|
*base.FHIR401Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient(ctx context.Context, appConfig config.Interface, globalLogger logrus.FieldLogger, source models.Source, testHttpClient ...*http.Client) (base.Client, *models.Source, error) {
|
||||||
|
baseClient, updatedSource, err := base.NewFHIR401Client(ctx, appConfig, globalLogger, source, testHttpClient...)
|
||||||
|
baseClient.Headers["Accept"] = "application/json+fhir"
|
||||||
|
|
||||||
|
return HealthItClient{
|
||||||
|
baseClient,
|
||||||
|
}, updatedSource, err
|
||||||
|
}
|
|
@ -3,7 +3,6 @@ package logica
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/config"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/database"
|
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/base"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/hub/internal/fhir/base"
|
||||||
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
"github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
@ -20,26 +19,3 @@ func NewClient(ctx context.Context, appConfig config.Interface, globalLogger log
|
||||||
baseClient,
|
baseClient,
|
||||||
}, updatedSource, err
|
}, updatedSource, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c LogicaClient) SyncAll(db database.DatabaseRepository) error {
|
|
||||||
|
|
||||||
bundle, err := c.GetPatientBundle(c.Source.PatientId)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
wrappedResourceModels, err := c.ProcessBundle(bundle)
|
|
||||||
if err != nil {
|
|
||||||
c.Logger.Infof("An error occurred while processing patient bundle %s", c.Source.PatientId)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
//todo, create the resources in dependency order
|
|
||||||
|
|
||||||
for _, apiModel := range wrappedResourceModels {
|
|
||||||
err = db.UpsertResource(context.Background(), apiModel)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -21,10 +21,10 @@ func GetMetadataSource(c *gin.Context) {
|
||||||
//TODO: infinite pagination for Encounters??
|
//TODO: infinite pagination for Encounters??
|
||||||
string(pkg.SourceTypeCerner): {Display: "Cerner (Sandbox)", SourceType: pkg.SourceTypeCerner, Category: []string{"Sandbox"}, Supported: true},
|
string(pkg.SourceTypeCerner): {Display: "Cerner (Sandbox)", SourceType: pkg.SourceTypeCerner, Category: []string{"Sandbox"}, Supported: true},
|
||||||
|
|
||||||
//does not support PKCE/Public Clients
|
//TODO: does not support $everything endpoint.
|
||||||
string(pkg.SourceTypeBlueButtonMedicare): {Display: "Medicare/VA Health (BlueButton)", SourceType: pkg.SourceTypeBlueButtonMedicare, Category: []string{"Hospital"}, Supported: false},
|
string(pkg.SourceTypeBlueButtonMedicare): {Display: "Medicare/VA Health (BlueButton)", SourceType: pkg.SourceTypeBlueButtonMedicare, Category: []string{"Hospital"}, Supported: true},
|
||||||
string(pkg.SourceTypeEpic): {Display: "Epic (Sandbox)", SourceType: pkg.SourceTypeEpic, Category: []string{"Sandbox"}, Supported: false},
|
string(pkg.SourceTypeEpic): {Display: "Epic (Sandbox)", SourceType: pkg.SourceTypeEpic, Category: []string{"Sandbox"}, Supported: true},
|
||||||
string(pkg.SourceTypeCareEvolution): {Display: "CareEvolution (Sandbox)", SourceType: pkg.SourceTypeCareEvolution, Category: []string{"Sandbox"}, Supported: false},
|
string(pkg.SourceTypeCareEvolution): {Display: "CareEvolution (Sandbox)", SourceType: pkg.SourceTypeCareEvolution, Category: []string{"Sandbox"}, Supported: true},
|
||||||
|
|
||||||
// pending
|
// pending
|
||||||
string(pkg.SourceTypeAnthem): {Display: "Anthem", SourceType: pkg.SourceTypeAnthem, Category: []string{"Insurance"}},
|
string(pkg.SourceTypeAnthem): {Display: "Anthem", SourceType: pkg.SourceTypeAnthem, Category: []string{"Insurance"}},
|
||||||
|
|
Loading…
Reference in New Issue