Skip to content

Commit c94bf5b

Browse files
committed
[27053][27421] Cleanup FHIR Invoice aspects, enhance test data, invoice
1 parent 8a7f1c1 commit c94bf5b

File tree

8 files changed

+172
-33
lines changed

8 files changed

+172
-33
lines changed

bundles/es.core.connector.elexis/src/info/elexis/server/core/connector/elexis/locking/SystemAgentUser.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,16 @@ public boolean isInternal() {
143143
public void setRoles(List<IRole> roles) {
144144
}
145145

146+
@Override
147+
public String getAssociatedContactId() {
148+
// TODO Auto-generated method stub
149+
return null;
150+
}
151+
152+
@Override
153+
public List<String> getRoleIds() {
154+
// TODO Auto-generated method stub
155+
return null;
156+
}
157+
146158
}

bundles/es.core/src/info/elexis/server/core/internal/service/ContextService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ public void releaseContext(String name) {
7474

7575
@Override
7676
public void postEvent(String eventTopic, Object object, Map<String, Object> additionalProperties) {
77-
throw new UnsupportedOperationException();
77+
// ignore
78+
// throw new UnsupportedOperationException();
7879
}
7980

8081
@Override

bundles/es.fhir.rest.core/src/es/fhir/rest/core/resources/InvoiceResourceProvider.java

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import org.hl7.fhir.instance.model.api.IBaseResource;
77
import org.hl7.fhir.r4.model.Invoice;
8+
import org.osgi.service.component.annotations.Activate;
89
import org.osgi.service.component.annotations.Component;
910
import org.osgi.service.component.annotations.Reference;
1011

@@ -19,48 +20,55 @@
1920
import ch.elexis.core.model.IInvoice;
2021
import ch.elexis.core.services.IModelService;
2122

22-
@Component
23-
public class InvoiceResourceProvider implements IFhirResourceProvider<Invoice, IInvoice> {
24-
23+
@Component(service = IFhirResourceProvider.class)
24+
public class InvoiceResourceProvider extends AbstractFhirCrudResourceProvider<Invoice, IInvoice> {
25+
2526
@Reference(target = "(" + IModelService.SERVICEMODELNAME + "=ch.elexis.core.model)")
2627
private IModelService coreModelService;
27-
28+
2829
@Reference
2930
private IFhirTransformerRegistry transformerRegistry;
30-
31+
32+
public InvoiceResourceProvider() {
33+
super(IInvoice.class);
34+
}
35+
3136
@Override
32-
public Class<? extends IBaseResource> getResourceType(){
37+
public Class<? extends IBaseResource> getResourceType() {
3338
return Invoice.class;
3439
}
35-
40+
41+
@Activate
42+
public void activate() {
43+
super.setModelService(coreModelService);
44+
super.setLocalLockService(localLockService);
45+
}
46+
3647
@Override
37-
public IFhirTransformer<Invoice, IInvoice> getTransformer(){
38-
return (IFhirTransformer<Invoice, IInvoice>) transformerRegistry
39-
.getTransformerFor(Invoice.class, IInvoice.class);
48+
public IFhirTransformer<Invoice, IInvoice> getTransformer() {
49+
return (IFhirTransformer<Invoice, IInvoice>) transformerRegistry.getTransformerFor(Invoice.class,
50+
IInvoice.class);
4051
}
41-
52+
4253
@Search(queryName = "by-encounter")
43-
public Invoice searchByEncounter(
44-
@RequiredParam(name = "encounter") ReferenceParam encounterParam, @IncludeParam(allow = {
45-
"Invoice.lineItem.chargeItem"
46-
}) Set<Include> theIncludes){
47-
48-
IFhirTransformer<Invoice, IEncounter> encounterInvoiceTransformer =
49-
(IFhirTransformer<Invoice, IEncounter>) transformerRegistry
54+
public Invoice searchByEncounter(@RequiredParam(name = "encounter") ReferenceParam encounterParam,
55+
@IncludeParam(allow = { "Invoice.lineItem.chargeItem" }) Set<Include> theIncludes) {
56+
57+
IFhirTransformer<Invoice, IEncounter> encounterInvoiceTransformer = (IFhirTransformer<Invoice, IEncounter>) transformerRegistry
5058
.getTransformerFor(Invoice.class, IEncounter.class);
51-
59+
5260
String encounterId = encounterParam.getIdPart();
53-
61+
5462
Optional<IEncounter> encounter = coreModelService.load(encounterId, IEncounter.class);
5563
if (encounter.isPresent()) {
56-
Optional<Invoice> fhirObject =
57-
encounterInvoiceTransformer.getFhirObject(encounter.get(), null, theIncludes);
64+
Optional<Invoice> fhirObject = encounterInvoiceTransformer.getFhirObject(encounter.get(), null,
65+
theIncludes);
5866
if (fhirObject.isPresent()) {
5967
return fhirObject.get();
6068
}
6169
}
62-
70+
6371
return null;
6472
}
65-
73+
6674
}

tests/es.fhir.rest.core.test/src/info/elexis/server/fhir/rest/core/resources/AllResourceTests.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import org.junit.runners.Suite.SuiteClasses;
66

77
@RunWith(Suite.class)
8-
@SuiteClasses({ AllergyIntoleranceTest.class, PersonResourceProviderTest.class, PatientResourceProviderTest.class,
9-
OrganizationResourceProviderTest.class, AppointmentResourceProviderTest.class, CoverageTest.class, ScheduleResourceProviderTest.class,
10-
PractitionerRoleTest.class, ConditionResourceProviderTest.class, ObservationResourceProviderTest.class, FamilyMemberHistoryTest.class,
11-
EncounterResourceProviderTest.class, ServiceRequestTest.class, MedicationRequestResourceProviderTest.class, ClaimTest.class,
12-
DocumentReferenceResourceProviderTest.class, SubscriptionResourceTest.class, PlainResourceProviderTest.class,
13-
ImmunizationTest.class, TaskResourceTest.class, CareTeamTest.class, MedicationTest.class })
8+
@SuiteClasses({ AppointmentResourceProviderTest.class, AllergyIntoleranceTest.class, CareTeamTest.class,
9+
ConditionResourceProviderTest.class, ClaimTest.class, CoverageTest.class,
10+
DocumentReferenceResourceProviderTest.class, EncounterResourceProviderTest.class, FamilyMemberHistoryTest.class,
11+
ImmunizationTest.class, InvoiceResourceProviderTest.class, MedicationResourceProviderTest.class,
12+
MedicationRequestResourceProviderTest.class, ObservationResourceProviderTest.class,
13+
OrganizationResourceProviderTest.class, PersonResourceProviderTest.class, PatientResourceProviderTest.class,
14+
PlainResourceProviderTest.class, PractitionerRoleTest.class, ScheduleResourceProviderTest.class,
15+
ServiceRequestTest.class, SubscriptionResourceTest.class, TaskResourceTest.class })
1416
public class AllResourceTests {
1517

1618
}

tests/es.fhir.rest.core.test/src/info/elexis/server/fhir/rest/core/resources/ImmunizationTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class ImmunizationTest {
4444
@BeforeClass
4545
public static void setupClass() throws IOException, SQLException{
4646
AllTests.getTestDatabaseInitializer().initializePatient();
47+
AllTests.getTestDatabaseInitializer().initializePrescription();
4748

4849

4950
client = FhirUtil.getGenericClient("http://localhost:8380/fhir");
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package info.elexis.server.fhir.rest.core.resources;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
5+
import static org.junit.Assert.assertNotNull;
6+
import static org.junit.Assert.assertTrue;
7+
8+
import java.io.IOException;
9+
import java.math.BigDecimal;
10+
import java.sql.SQLException;
11+
import java.util.Collections;
12+
import java.util.List;
13+
14+
import org.hl7.fhir.r4.model.Bundle;
15+
import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent;
16+
import org.hl7.fhir.r4.model.Invoice;
17+
import org.hl7.fhir.r4.model.Invoice.InvoiceStatus;
18+
import org.hl7.fhir.r4.model.Money;
19+
import org.junit.BeforeClass;
20+
import org.junit.Test;
21+
22+
import ca.uhn.fhir.rest.client.api.IGenericClient;
23+
import ch.elexis.core.constants.Preferences;
24+
import ch.elexis.core.model.IArticle;
25+
import ch.elexis.core.model.IBilled;
26+
import ch.elexis.core.model.IEncounter;
27+
import ch.elexis.core.model.IFreeTextDiagnosis;
28+
import ch.elexis.core.model.IInvoice;
29+
import ch.elexis.core.services.IBillingService;
30+
import ch.elexis.core.services.IContextService;
31+
import ch.elexis.core.services.IInvoiceService;
32+
import ch.elexis.core.services.holder.ConfigServiceHolder;
33+
import ch.elexis.core.time.TimeUtil;
34+
import ch.elexis.core.utils.OsgiServiceUtil;
35+
import ch.rgw.tools.Result;
36+
import info.elexis.server.fhir.rest.core.test.AllTests;
37+
import info.elexis.server.fhir.rest.core.test.FhirUtil;
38+
39+
public class InvoiceResourceProviderTest {
40+
41+
private static IGenericClient client;
42+
43+
@BeforeClass
44+
public static void setupClass() throws IOException, SQLException {
45+
AllTests.getTestDatabaseInitializer().initializeBehandlung();
46+
AllTests.getTestDatabaseInitializer().initializePrescription();
47+
IContextService contextService = OsgiServiceUtil.getService(IContextService.class).orElseThrow();
48+
contextService.setActiveMandator(AllTests.getTestDatabaseInitializer().getMandant());
49+
contextService.setActiveUser(AllTests.getTestDatabaseInitializer().getUser());
50+
51+
ConfigServiceHolder.setUser(Preferences.LEISTUNGSCODES_BILLING_STRICT, false);
52+
53+
client = FhirUtil.getGenericClient("http://localhost:8380/fhir");
54+
assertNotNull(client);
55+
}
56+
57+
@SuppressWarnings("unchecked")
58+
@Test
59+
public void getInvoiceById() {
60+
IBillingService billingService = OsgiServiceUtil.getService(IBillingService.class).orElseThrow();
61+
IInvoiceService invoiceService = OsgiServiceUtil.getService(IInvoiceService.class).orElseThrow();
62+
63+
// create testdata
64+
Object[] testSet = AllTests.getTestDatabaseInitializer().createTestMandantPatientFallBehandlung();
65+
IArticle article = AllTests.getTestDatabaseInitializer().getArticle();
66+
Result<IBilled> result = billingService.bill(article, (IEncounter) testSet[3], 5);
67+
assertTrue(result.getMessages().toString(), result.isOK());
68+
69+
IFreeTextDiagnosis diagnosis = AllTests.getModelService().create(IFreeTextDiagnosis.class);
70+
diagnosis.setDescription("test");
71+
diagnosis.setText("testText");
72+
AllTests.getModelService().save(diagnosis);
73+
((IEncounter) testSet[3]).addDiagnosis(diagnosis);
74+
75+
Result<IInvoice> invoice = invoiceService.invoice(Collections.singletonList((IEncounter) testSet[3]));
76+
assertTrue(invoice.getMessages().toString(), invoice.isOK());
77+
78+
// read from fhir endpoint
79+
Invoice readInvoice = client.read().resource(Invoice.class).withId(invoice.get().getId()).execute();
80+
81+
assertEquals(InvoiceStatus.ISSUED, readInvoice.getStatus());
82+
assertEquals(readInvoice.getDate(), TimeUtil.toDate(invoice.get().getDate()));
83+
assertEquals(BigDecimal.valueOf(7.5), readInvoice.getTotalGross().getValue());
84+
assertEquals("CHF", readInvoice.getLineItem().get(0).getPriceComponent().get(0).getAmount().getCurrency());
85+
System.out.println(FhirUtil.serializeToString(readInvoice));
86+
}
87+
88+
@Test
89+
public void getInvoiceForEncounter() {
90+
IBillingService billingService = OsgiServiceUtil.getService(IBillingService.class).orElseThrow();
91+
92+
IArticle article = AllTests.getTestDatabaseInitializer().getArticle();
93+
assertNotNull(article);
94+
Result result = billingService.bill(article, AllTests.getTestDatabaseInitializer().getBehandlung(), 5);
95+
assertTrue(result.getMessages().toString(), result.isOK());
96+
97+
String searchUrl = "Invoice?_query=by-encounter&encounter=Encounter/"
98+
+ AllTests.getTestDatabaseInitializer().getBehandlung().getId();
99+
100+
Bundle results = client.search().byUrl(searchUrl).returnBundle(Bundle.class).execute();
101+
assertNotNull(results);
102+
103+
List<BundleEntryComponent> entries = results.getEntry();
104+
assertFalse(entries.isEmpty());
105+
Invoice invoice = (Invoice) entries.get(0).getResource();
106+
assertEquals(InvoiceStatus.DRAFT, invoice.getStatus());
107+
assertEquals("Patient/" + AllTests.getTestDatabaseInitializer().getPatient().getId(),
108+
invoice.getSubject().getReference());
109+
assertEquals(1, invoice.getLineItem().size());
110+
assertEquals(BigDecimal.valueOf(7.5), invoice.getTotalGross().getValue());
111+
112+
System.out.println(FhirUtil.serializeToString(results));
113+
}
114+
115+
}

tests/es.fhir.rest.core.test/src/info/elexis/server/fhir/rest/core/resources/MedicationTest.java renamed to tests/es.fhir.rest.core.test/src/info/elexis/server/fhir/rest/core/resources/MedicationResourceProviderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import info.elexis.server.fhir.rest.core.test.AllTests;
2525
import info.elexis.server.fhir.rest.core.test.FhirUtil;
2626

27-
public class MedicationTest {
27+
public class MedicationResourceProviderTest {
2828

2929
private static IGenericClient client;
3030

tests/es.fhir.rest.core.test/src/info/elexis/server/fhir/rest/core/resources/SlotResourceTest.java renamed to tests/es.fhir.rest.core.test/src/info/elexis/server/fhir/rest/core/resources/SlotResourceProviderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import info.elexis.server.fhir.rest.core.test.AllTests;
2222
import info.elexis.server.fhir.rest.core.test.FhirUtil;
2323

24-
public class SlotResourceTest {
24+
public class SlotResourceProviderTest {
2525

2626
private static IGenericClient client;
2727

0 commit comments

Comments
 (0)