Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

package gov.va.med.pbm.ampl.asset.mock;

import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.Collection;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import gov.va.med.pbm.ampl.constant.MockDataConstants;
import gov.va.med.pbm.ampl.controller.EnvironmentInternalController;
import gov.va.med.pbm.ampl.model.ProgressNote;
import gov.va.med.pbm.ampl.model.Signature;
import gov.va.med.pbm.ampl.utility.CollectionUtility;
import gov.va.med.pbm.ampl.utility.DateUtility;
import gov.va.med.pbm.ampl.utility.NumberUtility;

/**
* This class generates mock data for the {@link EnvironmentInternalController} end points .
*
* @author Ian Meinert
* @author Pavani Mukthipudi
*
* @since 1.0
*/
public class ProgressNoteData {

private String patientId;

/**
* The application logger.
*/
static final Logger LOGGER = LoggerFactory.getLogger(ProgressNoteData.class);

/**
* Single parameter constructor.
*
* @param patientId {@link Long}
*/
public ProgressNoteData(String patientId) {
this.patientId = patientId;
}

/**
* Generates a {@link ProgressNote} {@link Collection} used in mock cases.
*
* @param c the count of {@link ProgressNote} objects to create
* @return a {@link Collection} of {@link ProgressNote} with mock data
*/
public Collection<ProgressNote> testProgressNotesForPatient(int c) {
Collection<ProgressNote> pc = new ArrayList<ProgressNote>();
FacilityData f = new FacilityData();
SignatureData sig = new SignatureData();

// for some fields generate mock data that is specific to a single progress note
// also generate mock data that is common across multiple progress notes that can be used for sorting data
for (int i = 1; i <= c; i++) {
String s = ProgressNote.class.getSimpleName().toUpperCase() + i;
int k = NumberUtility.randomBetween(MockDataConstants.ZERO, MockDataConstants.SEVEN);
OffsetDateTime dt = DateUtility.randomOffsetDateTime(MockDataConstants.TWO_K, MockDataConstants.TWO_K_EIGHTTEEN);
ProgressNote pn = new ProgressNote();

String[] cwads = { "PN", "DS", "CR", "CP", "SR", "RA", "LR", "C", "W", "A", "D", new String() };

pn.setAuthor("author_" + k);
pn.setEntryDate(dt.plusMinutes(NumberUtility.randomBetween(1, MockDataConstants.FIFTEEN)));
pn.setExpCosigner("ExpCosigner_" + k);
pn.setExpSigner("ExpSigner_" + k);
pn.setFacility(f.testFacilityForPatient(k));
pn.setHospitalLocation("hospitalLocation_" + k);
pn.setLocalTitle("localTitle_" + s);
pn.setNoteDate(dt);
pn.setPatientId(this.patientId);
pn.setReportText("noteText_" + s);
pn.setSignature(sig.generateSignature(k,
dt.plusMinutes(NumberUtility.randomBetween(MockDataConstants.FIFTEEN, MockDataConstants.ONE_TWENTY))));
pn.setStandardTitle("stdTitle_" + s);
pn.setStatus("status_" + k);
pn.setUrgency("urgency_" + k);
pn.setDocType((String) CollectionUtility.getRandom(cwads));

// the following data is optional for a progress note
if (k % 2 == 0) {
pn.setCosignature(sig.generateSignature(k,
dt.plusMinutes(NumberUtility.randomBetween(MockDataConstants.ONE_TWENTY, MockDataConstants.TWO_FOURTY))));
pn.setAmendmentSignature(sig.generateSignature(k,
dt.plusDays(NumberUtility.randomBetween(MockDataConstants.SEVEN, MockDataConstants.THREE_HUNDRED))));
pn.setAddendums(this.generateAddendums(dt));
}

pc.add(pn);
}

return pc;
}

/**
* Creates a collection of addendums to a {@link ProgressNote} with mock data. The method will generate between 1 and 7
* addendums. Only the {@link ProgressNote} class fields required for an addendum are generated.
*
* @param date - Used to create more realistic {@link Signature} dates. Each addendum will have a date between 1 and 500
* days after the provided date parameter.
* @return {@link Collection} of addendums to a {@link ProgressNote}
*/
private Collection<ProgressNote> generateAddendums(OffsetDateTime date) {
Collection<ProgressNote> ac = new ArrayList<ProgressNote>();
SignatureData s = new SignatureData();

int k = NumberUtility.randomBetween(1, MockDataConstants.SEVEN);

for (int i = 1; i <= k; i++) {
ProgressNote pn = new ProgressNote();

pn.setAuthor("author_" + k);
pn.setReportText("noteText_Addendum" + k);
pn.setSignature(
s.generateSignature(k, date.plusDays(NumberUtility.randomBetween(1, MockDataConstants.FIVE_HUNDRED))));

ac.add(pn);
}

return ac;
}
}