working pattern for displaying resource data.
This commit is contained in:
parent
f15bd76831
commit
96a7a394ab
|
@ -17,6 +17,7 @@
|
||||||
"build": {
|
"build": {
|
||||||
"builder": "@angular-devkit/build-angular:browser",
|
"builder": "@angular-devkit/build-angular:browser",
|
||||||
"options": {
|
"options": {
|
||||||
|
"sourceMap": true,
|
||||||
"outputPath": "dist/fastenhealth",
|
"outputPath": "dist/fastenhealth",
|
||||||
"index": "src/index.html",
|
"index": "src/index.html",
|
||||||
"main": "src/main.ts",
|
"main": "src/main.ts",
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<p>list-care-plan works!</p>
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ListCarePlanComponent } from './list-care-plan.component';
|
||||||
|
|
||||||
|
describe('ListCarePlanComponent', () => {
|
||||||
|
let component: ListCarePlanComponent;
|
||||||
|
let fixture: ComponentFixture<ListCarePlanComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ ListCarePlanComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(ListCarePlanComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list-care-plan',
|
||||||
|
templateUrl: './list-care-plan.component.html',
|
||||||
|
styleUrls: ['./list-care-plan.component.scss']
|
||||||
|
})
|
||||||
|
export class ListCarePlanComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
<p class="mg-b-20">A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.</p>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-bordered mg-b-0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Condition</th>
|
||||||
|
<th>Clinical Status</th>
|
||||||
|
<th>Verification Status</th>
|
||||||
|
<th>Onset Date</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr *ngFor="let condition of conditionList">
|
||||||
|
<td>
|
||||||
|
{{condition.name}}
|
||||||
|
<small class="text-muted pull-right">
|
||||||
|
{{ condition.nameCode}} {{ condition.nameCodeSystem }}
|
||||||
|
</small>
|
||||||
|
</td>
|
||||||
|
<td>{{condition.clinicalStatus}}</td>
|
||||||
|
<td>{{condition.verificationStatus}}</td>
|
||||||
|
<td>{{condition.onset}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ListConditionComponent } from './list-condition.component';
|
||||||
|
|
||||||
|
describe('ListConditionComponent', () => {
|
||||||
|
let component: ListConditionComponent;
|
||||||
|
let fixture: ComponentFixture<ListConditionComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ ListConditionComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(ListConditionComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,75 @@
|
||||||
|
import {Component, Input, OnInit} from '@angular/core';
|
||||||
|
import {getCodeOrConcept} from '../../fhir/utils';
|
||||||
|
import {CODE_SYSTEMS} from '../../fhir/constants';
|
||||||
|
import {ResourceFhir} from '../../models/fasten/resource_fhir';
|
||||||
|
|
||||||
|
|
||||||
|
export class Condition {
|
||||||
|
name: string
|
||||||
|
nameCode: string
|
||||||
|
nameCodeSystem: string
|
||||||
|
clinicalStatus: string
|
||||||
|
verificationStatus: string
|
||||||
|
onset: string
|
||||||
|
|
||||||
|
constructor(resourcePayload: any) {
|
||||||
|
this.populateConditionName(resourcePayload)
|
||||||
|
this.clinicalStatus = getCodeOrConcept(resourcePayload.clinicalStatus)
|
||||||
|
this.verificationStatus = getCodeOrConcept(resourcePayload.verificationStatus)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
populateConditionName(resourePayload: any){
|
||||||
|
if (resourePayload.code) {
|
||||||
|
if (resourePayload.code.text) {
|
||||||
|
this.name = resourePayload.code.text;
|
||||||
|
}
|
||||||
|
if (Array.isArray(resourePayload.code.coding) && resourePayload.code.coding.length) {
|
||||||
|
let c = resourePayload.code.coding[0]
|
||||||
|
|
||||||
|
this.nameCodeSystem = c.system
|
||||||
|
for (let key in CODE_SYSTEMS) {
|
||||||
|
if (CODE_SYSTEMS[key].url === c.system) {
|
||||||
|
this.nameCodeSystem = `(${key})`;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c.display) {
|
||||||
|
this.name = c.display
|
||||||
|
}
|
||||||
|
if (c.code) {
|
||||||
|
this.nameCode = c.code
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list-condition',
|
||||||
|
templateUrl: './list-condition.component.html',
|
||||||
|
styleUrls: ['./list-condition.component.scss']
|
||||||
|
})
|
||||||
|
export class ListConditionComponent implements OnInit {
|
||||||
|
|
||||||
|
@Input() resourceList: ResourceFhir[] = []
|
||||||
|
|
||||||
|
conditionList: Condition[] = []
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
console.log("INSIDE LIST CONDIDITION", this.resourceList)
|
||||||
|
let _conditions = this.conditionList
|
||||||
|
this.resourceList.forEach((resource) => {
|
||||||
|
let cond = new Condition(resource.payload)
|
||||||
|
_conditions.push(cond)
|
||||||
|
console.log("PARSED CONDITITION", cond)
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log("COMPLETED", this.conditionList)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
<p>list-encounter works!</p>
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ListEncounterComponent } from './list-encounter.component';
|
||||||
|
|
||||||
|
describe('ListEncounterComponent', () => {
|
||||||
|
let component: ListEncounterComponent;
|
||||||
|
let fixture: ComponentFixture<ListEncounterComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ ListEncounterComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(ListEncounterComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list-encounter',
|
||||||
|
templateUrl: './list-encounter.component.html',
|
||||||
|
styleUrls: ['./list-encounter.component.scss']
|
||||||
|
})
|
||||||
|
export class ListEncounterComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
<p>list-explanation-of-benefit works!</p>
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ListExplanationOfBenefitComponent } from './list-explanation-of-benefit.component';
|
||||||
|
|
||||||
|
describe('ListExplanationOfBenefitComponent', () => {
|
||||||
|
let component: ListExplanationOfBenefitComponent;
|
||||||
|
let fixture: ComponentFixture<ListExplanationOfBenefitComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ ListExplanationOfBenefitComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(ListExplanationOfBenefitComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list-explanation-of-benefit',
|
||||||
|
templateUrl: './list-explanation-of-benefit.component.html',
|
||||||
|
styleUrls: ['./list-explanation-of-benefit.component.scss']
|
||||||
|
})
|
||||||
|
export class ListExplanationOfBenefitComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
<p>list-immunization works!</p>
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ListImmunizationComponent } from './list-immunization.component';
|
||||||
|
|
||||||
|
describe('ListImmunizationComponent', () => {
|
||||||
|
let component: ListImmunizationComponent;
|
||||||
|
let fixture: ComponentFixture<ListImmunizationComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ ListImmunizationComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(ListImmunizationComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list-immunization',
|
||||||
|
templateUrl: './list-immunization.component.html',
|
||||||
|
styleUrls: ['./list-immunization.component.scss']
|
||||||
|
})
|
||||||
|
export class ListImmunizationComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
<p>list-observation works!</p>
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ListObservationComponent } from './list-observation.component';
|
||||||
|
|
||||||
|
describe('ListObservationComponent', () => {
|
||||||
|
let component: ListObservationComponent;
|
||||||
|
let fixture: ComponentFixture<ListObservationComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ ListObservationComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(ListObservationComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list-observation',
|
||||||
|
templateUrl: './list-observation.component.html',
|
||||||
|
styleUrls: ['./list-observation.component.scss']
|
||||||
|
})
|
||||||
|
export class ListObservationComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
<p>list-patient works!</p>
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ListPatientComponent } from './list-patient.component';
|
||||||
|
|
||||||
|
describe('ListPatientComponent', () => {
|
||||||
|
let component: ListPatientComponent;
|
||||||
|
let fixture: ComponentFixture<ListPatientComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ ListPatientComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(ListPatientComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list-patient',
|
||||||
|
templateUrl: './list-patient.component.html',
|
||||||
|
styleUrls: ['./list-patient.component.scss']
|
||||||
|
})
|
||||||
|
export class ListPatientComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,19 +2,36 @@ import { NgModule } from '@angular/core';
|
||||||
import { ComponentsSidebarComponent } from './components-sidebar/components-sidebar.component';
|
import { ComponentsSidebarComponent } from './components-sidebar/components-sidebar.component';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
import { UtilitiesSidebarComponent } from './utilities-sidebar/utilities-sidebar.component';
|
import { UtilitiesSidebarComponent } from './utilities-sidebar/utilities-sidebar.component';
|
||||||
|
import { ListPatientComponent } from './list-patient/list-patient.component';
|
||||||
|
import { ListObservationComponent } from './list-observation/list-observation.component';
|
||||||
|
import { ListExplanationOfBenefitComponent } from './list-explanation-of-benefit/list-explanation-of-benefit.component';
|
||||||
|
import { ListImmunizationComponent } from './list-immunization/list-immunization.component';
|
||||||
|
import { ListEncounterComponent } from './list-encounter/list-encounter.component';
|
||||||
|
import { ListConditionComponent } from './list-condition/list-condition.component';
|
||||||
|
import { ListCarePlanComponent } from './list-care-plan/list-care-plan.component';
|
||||||
|
import {BrowserModule} from '@angular/platform-browser';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
RouterModule
|
RouterModule,
|
||||||
|
BrowserModule,
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
ComponentsSidebarComponent,
|
ComponentsSidebarComponent,
|
||||||
UtilitiesSidebarComponent
|
UtilitiesSidebarComponent,
|
||||||
|
ListPatientComponent,
|
||||||
|
ListObservationComponent,
|
||||||
|
ListExplanationOfBenefitComponent,
|
||||||
|
ListImmunizationComponent,
|
||||||
|
ListEncounterComponent,
|
||||||
|
ListConditionComponent,
|
||||||
|
ListCarePlanComponent
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
ComponentsSidebarComponent,
|
ComponentsSidebarComponent,
|
||||||
UtilitiesSidebarComponent
|
UtilitiesSidebarComponent,
|
||||||
]
|
ListConditionComponent
|
||||||
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
export class SharedModule { }
|
export class SharedModule { }
|
|
@ -1,42 +0,0 @@
|
||||||
import {
|
|
||||||
getPatientAge,
|
|
||||||
getPatientEmail,
|
|
||||||
getPatientHomeAddress,
|
|
||||||
getPatientImageUri,
|
|
||||||
getPatientMRN,
|
|
||||||
getPatientName,
|
|
||||||
getPatientPhone
|
|
||||||
} from '../../fhir/utils';
|
|
||||||
|
|
||||||
export class Patient {
|
|
||||||
//fields
|
|
||||||
source_type: string
|
|
||||||
patient_id: string
|
|
||||||
|
|
||||||
age: string
|
|
||||||
name: string
|
|
||||||
phone: string
|
|
||||||
email: string
|
|
||||||
homeAddress: string
|
|
||||||
deceasedBoolean: boolean
|
|
||||||
deceasedDateTime: Date
|
|
||||||
gender: string
|
|
||||||
birthDate: Date
|
|
||||||
patientImageUri: string
|
|
||||||
mrn: string
|
|
||||||
|
|
||||||
//this is a fhir patient resource
|
|
||||||
constructor(fhirPatientResource: any) {
|
|
||||||
this.age = getPatientAge(fhirPatientResource)
|
|
||||||
this.name = getPatientName(fhirPatientResource)
|
|
||||||
this.phone = getPatientPhone(fhirPatientResource)
|
|
||||||
this.email = getPatientEmail(fhirPatientResource)
|
|
||||||
this.homeAddress = getPatientHomeAddress(fhirPatientResource)
|
|
||||||
this.deceasedBoolean = fhirPatientResource.deceasedBoolean
|
|
||||||
this.deceasedDateTime = fhirPatientResource.deceasedDateTime
|
|
||||||
this.gender = fhirPatientResource.gender
|
|
||||||
this.birthDate = fhirPatientResource.birthDate
|
|
||||||
this.patientImageUri = getPatientImageUri(fhirPatientResource)
|
|
||||||
this.mrn = getPatientMRN(fhirPatientResource)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import {FastenApiService} from '../../services/fasten-api.service';
|
import {FastenApiService} from '../../services/fasten-api.service';
|
||||||
import {LighthouseSource} from '../../models/lighthouse/lighthouse-source';
|
import {LighthouseSource} from '../../models/lighthouse/lighthouse-source';
|
||||||
import {Patient} from '../../models/display/patient';
|
|
||||||
import {Source} from '../../models/fasten/source';
|
import {Source} from '../../models/fasten/source';
|
||||||
import {Router} from '@angular/router';
|
import {Router} from '@angular/router';
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,7 @@
|
||||||
|
|
||||||
<h2 class="az-content-title mg-t-40">{{selectedResourceType}}</h2>
|
<h2 class="az-content-title mg-t-40">{{selectedResourceType}}</h2>
|
||||||
|
|
||||||
<div class="az-content-label mg-b-5">Insurance Companies</div>
|
<app-list-condition *ngIf="selectedResourceType == 'Condition'" [resourceList]="selectedResources"></app-list-condition>
|
||||||
<p class="mg-b-20">The following medical insurance companies have API's which Fasten can use to retrieve your medical history.
|
|
||||||
Please click the logos below to initiate the connection.</p>
|
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-bordered mg-b-0">
|
<table class="table table-bordered mg-b-0">
|
||||||
|
|
Loading…
Reference in New Issue