Skip to content

Commit 01d6099

Browse files
authored
fix(person): correct phone type mapping and exclude inactive cell phones (#785)
1 parent 9d81795 commit 01d6099

19 files changed

Lines changed: 667 additions & 71 deletions

File tree

liquibase-service/src/main/resources/db/005-rdb_modern/routines/052-sp_provider_event-001.sql

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,7 @@ BEGIN
102102
FOR json path, INCLUDE_NULL_VALUES) AS address) AS address,
103103
-- person phone
104104
(SELECT (
105-
SELECT ph_tl_uid, ph_elp_cd, ph_elp_use_cd, telephoneNbr, extensionTxt, phone_comments
106-
FROM (SELECT tl.tele_locator_uid AS [ph_tl_uid],
105+
SELECT tl.tele_locator_uid AS [ph_tl_uid],
107106
elp.cd AS [ph_elp_cd],
108107
elp.use_cd AS [ph_elp_use_cd],
109108
REPLACE(tl.phone_nbr_txt, ' ', '') telephoneNbr,
@@ -114,23 +113,9 @@ BEGIN
114113
ON elp.locator_uid = tl.tele_locator_uid
115114
WHERE elp.entity_uid = p.person_uid
116115
AND elp.CLASS_CD = 'TELE'
117-
AND elp.CD IN ('O')
118116
AND elp.RECORD_STATUS_CD = 'ACTIVE'
119117
AND tl.phone_nbr_txt IS NOT NULL
120-
UNION ALL
121-
SELECT tl.tele_locator_uid AS [ph_tl_uid],
122-
elp.cd AS [ph_elp_cd],
123-
elp.use_cd AS [ph_elp_use_cd],
124-
REPLACE(tl.phone_nbr_txt, ' ', '') telephoneNbr,
125-
tl.extension_txt extensionTxt,
126-
elp.locator_desc_txt phone_comments
127-
FROM nbs_odse.dbo.Entity_locator_participation elp WITH (NOLOCK)
128-
JOIN nbs_odse.dbo.Tele_locator tl WITH (NOLOCK)
129-
ON elp.locator_uid = tl.tele_locator_uid
130-
WHERE elp.entity_uid = p.person_uid
131-
AND elp.CLASS_CD = 'TELE'
132-
AND elp.CD IN ('CP')
133-
AND tl.phone_nbr_txt IS NOT NULL ) t
118+
AND (elp.USE_CD = 'WP' OR elp.CD = 'CP')
134119
FOR json path, INCLUDE_NULL_VALUES) AS phone) AS phone,
135120
-- person email
136121
(SELECT (SELECT tl.tele_locator_uid AS [email_tl_uid],

liquibase-service/src/main/resources/db/005-rdb_modern/routines/330-sp_covid_lab_datamart_postprocessing-001.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,8 @@ BEGIN
379379
COALESCE(d_provider_order.PROVIDER_STATE_CODE,provider_order.state_code) AS Ordering_Provider_State_Cd,
380380
COALESCE(dim_state_provider_order.state_NM, nrt_state_provider_order.state_NM) AS Ordering_Provider_State,
381381
COALESCE(d_provider_order.PROVIDER_ZIP,provider_order.zip) AS Ordering_Provider_Zip_Cd,
382-
COALESCE(d_provider_order.PROVIDER_PHONE_WORK,provider_order.phone_work) AS Ordering_Provider_Phone_Nbr,
383-
COALESCE(COALESCE(d_provider_order.PROVIDER_PHONE_EXT_WORK,provider_order.phone_ext_work), '') AS Ordering_Provider_Phone_Ext,
382+
provider_order.phone_work_phone AS Ordering_Provider_Phone_Nbr,
383+
provider_order.phone_ext_work_phone AS Ordering_Provider_Phone_Ext,
384384
provider_order.provider_npi AS ORDERING_PROVIDER_ID
385385
INTO #COVID_LAB_ENTITIES_DATA
386386
FROM #COVID_LAB_CORE_DATA o

liquibase-service/src/main/resources/db/005-rdb_modern/tables/003-create_nrt_provider-001.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ CREATE TABLE dbo.nrt_provider
2828
address_comments varchar(2000) null,
2929
phone_work varchar(50) null,
3030
phone_ext_work varchar(50) null,
31-
email_work varchar(50) null,
3231
phone_comments varchar(2000) null,
32+
phone_work_phone varchar(50) null,
33+
phone_ext_work_phone varchar(50) null,
34+
email_work varchar(50) null,
3335
phone_cell varchar(50) null,
3436
entry_method varchar(50) null,
3537
add_user_id bigint null,

reporting-pipeline-service/src/main/java/gov/cdc/nbs/report/pipeline/person/model/dto/PersonExtendedProps.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ default void setPhoneExtHome(String phoneExtHome) {}
7171

7272
default void setPhoneCell(String phoneCell) {}
7373

74+
default void setPhoneWorkPhone(String phoneWorkPhone) {}
75+
76+
default void setPhoneExtWorkPhone(String phoneExtWorkPhone) {}
77+
7478
default void setPhElpCd(String phElpCd) {}
7579

7680
default void setPhElpUseCd(String phElpUseCd) {}

reporting-pipeline-service/src/main/java/gov/cdc/nbs/report/pipeline/person/model/dto/persondetail/Phone.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import com.fasterxml.jackson.annotation.JsonProperty;
55
import gov.cdc.nbs.report.pipeline.person.model.dto.PersonExtendedProps;
6+
import gov.cdc.nbs.report.pipeline.person.model.dto.provider.ProviderElasticSearch;
7+
import gov.cdc.nbs.report.pipeline.person.model.dto.provider.ProviderReporting;
68
import lombok.AllArgsConstructor;
79
import lombok.Builder;
810
import lombok.Data;
@@ -35,10 +37,23 @@ public <T extends PersonExtendedProps> T updatePerson(T personFull) {
3537
personFull.setPhTlUid(teleLocatorUid);
3638

3739
if (useCd.equalsIgnoreCase("WP")) {
38-
personFull.setPhoneWork(telephoneNbr);
39-
personFull.setPhoneExtWork(extensionTxt);
40-
personFull.setPhoneComments(phoneComments);
41-
} else if (useCd.equalsIgnoreCase("H")) {
40+
// work phone fields applied differently for providers and patients
41+
if (personFull instanceof ProviderReporting || personFull instanceof ProviderElasticSearch) {
42+
if (cd.equalsIgnoreCase("PH")) {
43+
personFull.setPhoneWorkPhone(telephoneNbr);
44+
personFull.setPhoneExtWorkPhone(extensionTxt);
45+
} else if (cd.equalsIgnoreCase("O")) {
46+
personFull.setPhoneWork(telephoneNbr);
47+
personFull.setPhoneExtWork(extensionTxt);
48+
personFull.setPhoneComments(phoneComments);
49+
}
50+
} else {
51+
if (cd.equalsIgnoreCase("PH")) {
52+
personFull.setPhoneWork(telephoneNbr);
53+
personFull.setPhoneExtWork(extensionTxt);
54+
}
55+
}
56+
} else if (useCd.equalsIgnoreCase("H") && cd.equalsIgnoreCase("PH")) {
4257
personFull.setPhoneHome(telephoneNbr);
4358
personFull.setPhoneExtHome(extensionTxt);
4459
}

reporting-pipeline-service/src/main/java/gov/cdc/nbs/report/pipeline/person/model/dto/provider/ProviderReporting.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,16 @@ public class ProviderReporting implements PersonExtendedProps {
6666
private String countryCode;
6767
private String addressComments;
6868

69-
// Phone
69+
// Telephone - Primary Workplace Office type
7070
private String phoneWork;
7171
private String phoneExtWork;
7272
private String phoneComments;
73+
74+
// Telephone - Primary Workplace Phone type
75+
private String phoneWorkPhone;
76+
private String phoneExtWorkPhone;
77+
78+
// Telephone - Cellular phone type
7379
private String phoneCell;
7480

7581
// Email

reporting-pipeline-service/src/main/java/gov/cdc/nbs/report/pipeline/person/transformer/DataPostProcessor.java

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import gov.cdc.nbs.report.pipeline.person.model.dto.provider.ProviderElasticSearch;
1313
import gov.cdc.nbs.report.pipeline.person.model.dto.provider.ProviderReporting;
1414
import java.util.*;
15+
import java.util.function.Consumer;
1516
import java.util.function.Function;
1617
import java.util.function.Predicate;
1718
import lombok.NoArgsConstructor;
@@ -118,45 +119,24 @@ public <T extends PersonExtendedProps> void processPersonTelephone(String teleph
118119
// Deserialize once
119120
Phone[] allData = requireNonNull(deserializePayload(telephone, Phone[].class));
120121

121-
// --- Special work phone logic for ProviderReporting / ProviderElasticSearch ---
122-
if (pf instanceof ProviderReporting || pf instanceof ProviderElasticSearch) {
123-
Phone workPhone =
124-
Arrays.stream(allData)
125-
.filter(p -> "WP".equalsIgnoreCase(p.getUseCd()) && "O".equalsIgnoreCase(p.getCd()))
126-
.max(Comparator.comparing(Phone::getTeleLocatorUid))
127-
.orElse(null);
128-
129-
if (workPhone == null) {
130-
workPhone =
131-
Arrays.stream(allData)
132-
.filter(p -> "WP".equalsIgnoreCase(p.getUseCd()))
133-
.max(Comparator.comparing(Phone::getTeleLocatorUid))
134-
.orElse(null);
135-
}
136-
137-
if (workPhone != null) {
138-
workPhone.updatePerson(pf); // delegate update
139-
}
140-
} else {
141-
Arrays.stream(allData)
142-
.filter(p -> "WP".equalsIgnoreCase(p.getUseCd()))
143-
.max(Comparator.comparing(Phone::getTeleLocatorUid))
144-
.ifPresent(p -> p.updatePerson(pf)); // delegate update
145-
}
146-
147-
Function<Predicate<? super Phone>, T> personPhoneFn =
122+
Consumer<Predicate<? super Phone>> maxPhoneFn =
148123
p ->
149124
Arrays.stream(allData)
150125
.filter(p)
151126
.max(Comparator.comparing(Phone::getTeleLocatorUid))
152-
.map(n -> n.updatePerson(pf))
153-
.orElse(null);
127+
.ifPresent(n -> n.updatePerson(pf));
128+
129+
// Work place phone
130+
maxPhoneFn.accept(p -> "WP".equalsIgnoreCase(p.getUseCd()) && "PH".equalsIgnoreCase(p.getCd()));
131+
132+
// Work place office phone
133+
maxPhoneFn.accept(p -> "WP".equalsIgnoreCase(p.getUseCd()) && "O".equalsIgnoreCase(p.getCd()));
154134

155-
// --- Home phone ---
156-
personPhoneFn.apply(p -> "H".equalsIgnoreCase(p.getUseCd()));
135+
// Home phone
136+
maxPhoneFn.accept(p -> "H".equalsIgnoreCase(p.getUseCd()) && "PH".equalsIgnoreCase(p.getCd()));
157137

158-
// --- Cell phone ---
159-
personPhoneFn.apply(p -> "CP".equalsIgnoreCase(p.getCd()));
138+
// Cell phone
139+
maxPhoneFn.accept(p -> "CP".equalsIgnoreCase(p.getCd()));
160140
}
161141

162142
public <T extends PersonExtendedProps> void processPersonEntityData(String entityData, T pf) {

reporting-pipeline-service/src/test/resources/rawDataFiles/patient/PatientReporting.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -508,8 +508,8 @@
508508
"within_city_limits": "Y",
509509
"birth_country": "Canada",
510510
"census_tract": "3389.45",
511-
"phone_work": "2323252423",
512-
"phone_ext_work": "",
511+
"phone_work": "2323222422",
512+
"phone_ext_work": "232",
513513
"phone_home": "4562323222",
514514
"phone_ext_home": "211",
515515
"phone_cell": "2823252423",

reporting-pipeline-service/src/test/resources/rawDataFiles/person/PersonTelephone2.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,6 @@
1919
"ph_elp_use_cd": "WP",
2020
"ph_elp_cd": "PH",
2121
"ph_tl_uid": 10000011,
22-
"phone_comments": "work phone comment ignored"
23-
},
24-
{
25-
"telephoneNbr": "2323222422",
26-
"extensionTxt": "232",
27-
"ph_elp_use_cd": "WP",
28-
"ph_elp_cd": "PH",
29-
"ph_tl_uid": 10000012,
3022
"phone_comments": "work phone comment"
3123
},
3224
{

reporting-pipeline-service/src/test/resources/rawDataFiles/person/PersonTelephone3.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"ph_elp_use_cd": "WP",
4343
"ph_elp_cd": "CP",
4444
"ph_tl_uid": 10000016,
45-
"phone_comments": "work phone office comment"
45+
"phone_comments": "work phone cell comment"
4646
},
4747
{
4848
"telephoneNbr": "2223335555",

0 commit comments

Comments
 (0)