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

/*
* SeocObjectGenerator.java
* Copyright (c) 2017 Veterans Affairs.
*/
package gov.va.oneconsult.seoc.api.controller;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.http.MediaType;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import gov.va.oneconsult.seoc.api.model.BillingCode;
import gov.va.oneconsult.seoc.api.model.CategoryOfCare;
import gov.va.oneconsult.seoc.api.model.ChangeLog;
import gov.va.oneconsult.seoc.api.model.ClinicalService;
import gov.va.oneconsult.seoc.api.model.Event;
import gov.va.oneconsult.seoc.api.model.Hptc;
import gov.va.oneconsult.seoc.api.model.PayableService;
import gov.va.oneconsult.seoc.api.model.Qasp;
import gov.va.oneconsult.seoc.api.model.Seoc;
import gov.va.oneconsult.seoc.api.model.SeocConfig;
import gov.va.oneconsult.seoc.api.model.ServiceHptc;
import gov.va.oneconsult.seoc.api.model.ServiceHptcId;
import gov.va.oneconsult.seoc.api.model.ServiceLine;
import gov.va.oneconsult.seoc.api.model.Status;
import gov.va.oneconsult.seoc.api.model.User;
import gov.va.oneconsult.seoc.api.util.ApiUtil;
import gov.va.oneconsult.seoc.api.util.Constants;

/**
* Description: Object Generator to Test features of Seoc and Lookup Controllers
*
* @author AbleVets
*/
public class SeocObjectGenerator
{

public static final MediaType APPLICATION_JSON_UTF8 = new MediaType(
MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(),
Charset.forName("utf8"));

public static final ClinicalService cs1;
public static final ClinicalService cs2;
public static final ClinicalService cs3;
public static final ClinicalService cs4;
public static final Set<ClinicalService> cs1Set;
public static final Set<ClinicalService> cs2Set;
public static final Set<ClinicalService> cs12Set;
public static final Set<ClinicalService> cs4Set;

public static final CategoryOfCare cc1;
public static final CategoryOfCare cc2;
public static final CategoryOfCare cc3;
public static final CategoryOfCare cc4;

public static final ServiceLine sl1;
public static final ServiceLine sl2;
public static final ServiceLine sl3;
public static final ServiceLine sl4;

public static final Status draft;
public static final Status active;
public static final Status discontinue;
public static final Status inprogress;
public static final Status datehold;

public static final Qasp qasp1;
public static final Qasp qasp2;
public static final Qasp qasp3;

public static final BillingCode bc1;
public static final BillingCode bc2;
public static final BillingCode bc3;
public static final BillingCode bc4;
public static final BillingCode bc5;
public static final Set<BillingCode> bc5Set;
public static final Set<BillingCode> bc1234Set;
public static final Set<BillingCode> bc234Set;
public static final Set<BillingCode> bc2345Set;

public static final Event saveEvent;

public static final User systemUser;

public static final Hptc hptc1;
public static final Hptc hptc2;

public static final ServiceHptc serviceHptc1;
public static final ServiceHptc serviceHptc2;

static
{
cs1 = getClinicalService(11, "12-pulmonary");
cs2 = getClinicalService(12, "13-optometry");
cs3 = getClinicalService(13, "15-optometry");
cs4 = getClinicalService(14, "16-optometry");
cs4.setDiscontinued(true);

cs1Set = new HashSet<ClinicalService>();
cs1Set.add(cs1);

cs2Set = new HashSet<ClinicalService>();
cs2Set.add(cs2);

cs12Set = new HashSet<ClinicalService>();
cs12Set.add(cs1);
cs12Set.add(cs2);

cs4Set = new HashSet<ClinicalService>();
cs4Set.add(cs1);
cs4Set.add(cs2);
cs4Set.add(cs4);

cc1 = getCategoryOfCare(34, "Optometry");
cc2 = getCategoryOfCare(35, "Optometry1");
cc3 = getCategoryOfCare(36, "Optometry2");
cc4 = getCategoryOfCare(37, "Optometry3");
cc4.setDiscontinued(true);

sl1 = getServiceLine(1, "Physical Rehabilitation", "PHR");
sl2 = getServiceLine(2, "Physical Medicine & Rehabilitation", "PMR");
sl3 = getServiceLine(3, "Discontinued Service Line", "DSL");
sl3.setDiscontinued(true);

sl4 = getServiceLine(4, "Active Service Line Discontinued Category of Care", "DCC");

inprogress = getStatus(2, Constants.STATUS_INPROGRESS);
datehold = getStatus(1, Constants.STATUS_DATEHOLD);
active = getStatus(1, Constants.STATUS_ACTIVE);
discontinue = getStatus(1, Constants.STATUS_DISCONTINUED);
draft = getStatus(1, Constants.STATUS_DRAFT);
qasp1 = getQasp(1, "QASP1");
qasp2 = getQasp(2, "QASP2");
qasp3 = getQasp(3, "QASP3");
qasp3.setDiscontinued(true);

bc1 = getBillingCode(1, "1111", "CPT", "Desc1111", true);
bc2 = getBillingCode(2, "2222", "CPT", "Desc2222", false);
bc3 = getBillingCode(3, "3333", "CPT", "Desc3333", true);
bc4 = getBillingCode(4, "4444", "CPT", "Desc4444", false);
bc5 = getBillingCode(5, "5555", "CPT", "Desc5555", false);
bc5.setDeactivated(true);

bc5Set = new HashSet<BillingCode>();
bc5Set.add(bc1);
bc5Set.add(bc2);
bc5Set.add(bc3);
bc5Set.add(bc4);
bc5Set.add(bc5);

bc1234Set = new HashSet<BillingCode>();
bc1234Set.add(bc1);
bc1234Set.add(bc2);
bc1234Set.add(bc3);
bc1234Set.add(bc4);

bc234Set = new HashSet<BillingCode>();
bc234Set.add(bc2);
bc234Set.add(bc3);
bc234Set.add(bc4);

bc2345Set = new HashSet<BillingCode>();
bc2345Set.add(bc2);
bc2345Set.add(bc3);
bc2345Set.add(bc4);
bc2345Set.add(bc5);

serviceHptc1 = getServiceHptc("hptccode101","12");
serviceHptc2 = getServiceHptc("hptccode102","13");

saveEvent = getEvent(1, "Save",
"Save draft SEOC (new or revised) from VA Community Care: SEOC");

systemUser = getUser(1, "System","System","DAV", null, null, null, null);

// Establishing relation between sl1 and cc1
Set<CategoryOfCare> coc = new HashSet<CategoryOfCare>();
coc.add(cc1);
cc1.setServiceLine(sl1);

// Establishing relation between sl2 and cc2
coc = new HashSet<CategoryOfCare>();
coc.add(cc2);
cc2.setServiceLine(sl2);

// Establishing relation between sl3 and cc3
coc = new HashSet<CategoryOfCare>();
coc.add(cc3);
cc3.setServiceLine(sl3);

// Establishing relation between sl4 and cc4
coc = new HashSet<CategoryOfCare>();
coc.add(cc4);
cc4.setServiceLine(sl4);

hptc1 = getHptc("hptccode101", "Classification1", "spec1", "group1");
hptc2 = getHptc("hptccode102", "Classification2", "spec2", "group2");

}

/**
* Description: Convert Any object to Json Bytes
*
* @param object
* @return
* @throws IOException
*/
public static byte[] convertObjectToJsonBytes(Object object) throws IOException
{
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return mapper.writeValueAsBytes(object);
}

/**
* Description:
*
* @param obj
* @return
*/
public static String asJsonString(final Object obj)
{
try
{
final ObjectMapper mapper = new ObjectMapper();
final String jsonContent = mapper.writeValueAsString(obj);
return jsonContent;
} catch (Exception e)
{
throw new RuntimeException(e);
}
}

/**
* Description:
*
* @param jsonList
* @return
*/
public static Set<String> jsonAsSeocList(final String jsonList)
{
try
{
final ObjectMapper mapper = new ObjectMapper();
TypeReference<Set<String>> mapType = new TypeReference<Set<String>>()
{
};
Set<String> jsonToSeoc = mapper.readValue(jsonList, mapType);

return jsonToSeoc;
} catch (Exception e)
{
throw new RuntimeException(e);
}

}


/**
* Description:
*
* @param jsonList
* @return
*/
public static String getFieldValueFromJson(final String jsonList, int index, String fieldName)
{
try
{
JSONObject obj = new JSONObject(jsonList);
JSONArray seocsArr = obj.getJSONArray("Seocs");
JSONObject seocObj = seocsArr.getJSONObject(index);
String seocStr = seocObj.getString("Seoc");
String value = new JSONObject(seocStr).getString(fieldName);
return value;

} catch (Exception e)
{
throw new RuntimeException(e);
}

}

/**
* Description:
*
* @return
*/
public static Seoc getDraftSeoc()
{
Seoc seoc = getSeoc(3, "SEOC 1.0.1", 1, null, null, null, null, null, null, null, null, 5,
null, null, null, null, cc1, sl1, inprogress, qasp1, null);

// Set up Seocs for Status
Set<Seoc> seocs = inprogress.getSeocs();
if (seocs == null)
{
seocs = new HashSet<Seoc>();
inprogress.setSeocs(seocs);
}
seocs.add(seoc);

// Set up Seocs for ServiceLine
seocs = sl1.getSeocs();
if (seocs == null)
{
seocs = new HashSet<Seoc>();
sl1.setSeocs(seocs);
}
seocs.add(seoc);

// Set up Seocs for CategoryOfCare
seocs = cc1.getSeocs();
if (seocs == null)
{
seocs = new HashSet<Seoc>();
cc1.setSeocs(seocs);
}
seocs.add(seoc);

// Set up Seocs for Qasp
seocs = qasp1.getSeocs();
if (seocs == null)
{
seocs = new HashSet<Seoc>();
qasp1.setSeocs(seocs);
}
seocs.add(seoc);
return seoc;
}

/**
* Description:
*
* @return
*/
public static Seoc getActiveSeoc()
{
Date effectiveDate = ApiUtil.convertStringToDate("09-04-2018 03:34:05 AM");
Seoc seoc = getSeoc(1, "SEOC 1.0.0", 1, "1.0.0", effectiveDate, null, "Disclaimer SEOC", 2,
"Desc SEOC", false, "Overview SEOC", 5, effectiveDate, "System", null, null, cc1, sl1,
datehold, qasp1, new ArrayList<PayableService>());

// Set up Seocs for Status
Set<Seoc> seocs = new HashSet<Seoc>();
seocs.add(seoc);

// Set up Seocs for ServiceLine
seocs = sl1.getSeocs();
if (seocs == null)
{
seocs = new HashSet<Seoc>();
sl1.setSeocs(seocs);
}
seocs.add(seoc);

// Set up Seocs for CategoryOfCare
seocs = cc1.getSeocs();
if (seocs == null)
{
seocs = new HashSet<Seoc>();
cc1.setSeocs(seocs);
}
seocs.add(seoc);

// Set up services for Seoc
List<PayableService> services = new ArrayList<PayableService>();

PayableService service1 = getPayableService(1, "desc1", 5, "weeks", 10, "YES", "System",
effectiveDate, cs1Set, seoc);
PayableService service2 = getPayableService(2, "desc2", 6, "weeks", 10, "ANY", "System",
effectiveDate, cs2Set, seoc);

services.add(service1);
services.add(service2);

seoc.setServices(services);

return seoc;
}

/**
* Description:
*
* @param id
* @param billingCode
* @param codeType
* @param precertRqd
* @return
*/
public static BillingCode getBillingCode(int id, String billingCode, String codeType,
String description, boolean precertRqd)
{
BillingCode bc = new BillingCode();
bc.setId(id);
bc.setBillingCode(billingCode);
bc.setCodeType(codeType);
bc.setDescription(description);
bc.setPrecertRequired(precertRqd);
return bc;
}

/**
* Description:
*
* @param id
* @param description
* @param frequency
* @param frequencyType
* @param visits
* @param codeRequired
* @param codedBy
* @param codedTimestamp
* @param css
* @param seoc
* @return PayableService
*/
public static PayableService getPayableService(int id, String description, Integer frequency,
String frequencyType, Integer visits, String codeRequired, String codedBy,
Date codedTimestamp, Set<ClinicalService> css, Seoc seoc)
{
PayableService service = new PayableService();
service.setId(id);
service.setDescription(description);
service.setFrequency(frequency);
service.setFrequencyType(frequencyType);
service.setVisits(visits);
service.setCodeRequired(codeRequired);
service.setCodedBy(codedBy);
service.setCodedTimestamp(codedTimestamp);
service.setClinicalServices(css);
service.setSeoc(seoc);
return service;
}

/**
* Description:
*
* @param description
* @param frequency
* @param frequencyType
* @param visits
* @param codeRequired
* @param codedBy
* @param codedTimestamp
* @param cs
* @param seoc
* @param billingCodes
* @return
*/
public static PayableService getPayableService(String description, Integer frequency,
String frequencyType, Integer visits, String codeRequired, String codedBy,
Date codedTimestamp, Set<ClinicalService> csSet, Seoc seoc, Set<BillingCode> billingCodes)
{
PayableService service = new PayableService();
service.setDescription(description);
service.setFrequency(frequency);
service.setFrequencyType(frequencyType);
service.setVisits(visits);
service.setCodeRequired(codeRequired);
service.setCodedBy(codedBy);
service.setCodedTimestamp(codedTimestamp);
service.setClinicalServices(csSet);
service.setSeoc(seoc);
if (billingCodes != null)
{
billingCodes.forEach(bc ->
{
if (bc.getServices() == null)
{
bc.setServices(new HashSet<PayableService>());
}
bc.getServices().add(service);
});
service.setBillingCodes(billingCodes);
}

return service;
}

/**
* Description: Object for Repository Test cases
*
* @param sl
* @param cs
* @param cc
* @return
*/
public static Seoc getSeoc(Integer id, String name, Integer seocKey, String versionNumber,
Date effectiveDate, Date endDate, String disclaimer, Integer duration,
String description, Boolean rev, String proceduralOverview, Integer maxAllowableVisits,
Date activatedTimestamp, String activatedBy, Date discontinuedTimestamp,
String discontinuedBy, CategoryOfCare coc, ServiceLine sl, Status status, Qasp qasp,
List<PayableService> services)
{
Seoc seoc = new Seoc();
seoc.setId(id);
seoc.setName(name);
seoc.setSeocKey(seocKey);
seoc.setVersionNumber(versionNumber);
seoc.setEffectiveDate(effectiveDate);
seoc.setEndDate(endDate);
seoc.setDisclaimer(disclaimer);
seoc.setDuration(duration);
seoc.setDescription(description);
seoc.setRev(rev);
seoc.setProceduralOverview(proceduralOverview);
seoc.setMaxAllowableVisits(maxAllowableVisits);
seoc.setActivatedTimestamp(activatedTimestamp);
seoc.setActivatedBy(activatedBy);
seoc.setDiscontinuedTimestamp(discontinuedTimestamp);
seoc.setDiscontinuedBy(discontinuedBy);
seoc.setCategoryOfCare(coc);
seoc.setServiceLine(sl);
seoc.setQasp(qasp);
seoc.setStatus(status);
seoc.setServices(services);

return seoc;
}

/**
* Description: Object for Repository Test cases
*
* @param sl
* @param cs
* @param cc
* @return
*/
public static Seoc getSeoc(String name, Integer seocKey, String versionNumber,
Date effectiveDate, Date endDate, String disclaimer, Integer duration,
String description, Boolean rev, String proceduralOverview, Integer maxAllowableVisits,
Date activatedTimestamp, String activatedBy, Date discontinuedTimestamp,
String discontinuedBy, CategoryOfCare coc, ServiceLine sl, Status status, Qasp qasp,
List<PayableService> services)
{
Seoc seoc = new Seoc();
seoc.setName(name);
seoc.setSeocKey(seocKey);
seoc.setVersionNumber(versionNumber);
seoc.setEffectiveDate(effectiveDate);
seoc.setEndDate(endDate);
seoc.setDisclaimer(disclaimer);
seoc.setDuration(duration);
seoc.setDescription(description);
seoc.setRev(rev);
seoc.setProceduralOverview(proceduralOverview);
seoc.setMaxAllowableVisits(maxAllowableVisits);
seoc.setActivatedTimestamp(activatedTimestamp);
seoc.setActivatedBy(activatedBy);
seoc.setDiscontinuedTimestamp(discontinuedTimestamp);
seoc.setDiscontinuedBy(discontinuedBy);
seoc.setCategoryOfCare(coc);
seoc.setServiceLine(sl);
seoc.setQasp(qasp);
seoc.setStatus(status);
seoc.setServices(services);

return seoc;
}

/**
* Description:
*
* @param id
* @param description
* @return
*/
public static ClinicalService getClinicalService(int id, String description)
{
ClinicalService cs = new ClinicalService();
cs.setId(id);
cs.setDescription(description);
return cs;
}

/**
* Description:
*
* @param id
* @param description
* @return
*/
public static ServiceLine getServiceLine(int id, String description, String abr)
{
ServiceLine sl = new ServiceLine();
sl.setId(id);
sl.setDescription(description);
sl.setServiceAbbreviation(abr);
return sl;
}

/**
* Description:
*
* @param id
* @param description
* @return
*/
public static CategoryOfCare getCategoryOfCare(int id, String description)
{
CategoryOfCare cc = new CategoryOfCare();
cc.setId(id);
cc.setDescription(description);
return cc;
}

/**
* Description:
*
* @param id
* @param description
* @return
*/
public static Status getStatus(int id, String description)
{
Status st = new Status();
st.setId(id);
st.setDescription(description);
return st;
}

/**
* Description:
*
* @param id
* @param description
* @return
*/
public static Qasp getQasp(int id, String description)
{
Qasp qasp = new Qasp();
qasp.setId(id);
qasp.setDescription(description);
return qasp;
}

/**
* Description:
*
* @param id
* @param action
* @param description
* @return
*/
public static Event getEvent(int id, String action, String description)
{
Event event = new Event();
event.setId(id);
event.setAction(action);
event.setDescription(description);
return event;
}

/**
* Description:
*
* @param id
* @param comments
* @param event
* @param eventDate
* @param seocId
* @param seocKey
* @param userId
* @return
*/
public static ChangeLog getChangeLog(int id, String comments, Event event, Date eventDate,
int seocId, int seocKey, User user)
{
ChangeLog changeLog = new ChangeLog();

changeLog.setId(id);
changeLog.setComments(comments);
changeLog.setEvent(event);
changeLog.setEventDate(eventDate);
changeLog.setSeocId(seocId);
changeLog.setSeocKey(seocKey);
changeLog.setUser(user);

return changeLog;
}

/**
* Description:
*
* @param id
* @param vaUserId
* @param role
* @param deactivatedDate
* @param createDate
* @param modifiedDate
* @return User
*/
public static User getUser(int id, String userName, String vaNetworkId, String domain, String role, Date deactivatedDate,
Date createDate, Date modifiedDate)
{
User user = new User();

user.setId(id);
user.setVaNetworkId(vaNetworkId);
user.setDomain(domain);
user.setUserName(userName);
user.setRole(role);
user.setDeactivatedDate(deactivatedDate);
user.setCreateDate(createDate);
user.setModifiedDate(modifiedDate);
user.setVaUserId(user.appendDomainToNetworkId());

return user;
}

/**
* Description:
*
* @param id
* @param vaUserId
* @param role
* @param deactivated
* @param createDate
* @param modifiedDate
* @return
*/
public static User getUser(int id, String userName, String vaUserId, String role, Date deactivatedDate,
Date createDate, Date modifiedDate)
{
User user = new User();

user.setId(id);
user.setUserName(userName);
user.setRole(role);
user.setDeactivatedDate(deactivatedDate);
user.setCreateDate(createDate);
user.setModifiedDate(modifiedDate);
user.setVaUserId(vaUserId);

return user;
}

/**
* Description:
*
* @param currProgram
* @param currProgramVersion
* @return SeocConfig
*/
public static SeocConfig getSeocConfig(String currProgram, int currProgramVersion)
{
SeocConfig seocConfig = new SeocConfig();

seocConfig.setCurrProgram(currProgram);
seocConfig.setCurrProgramVersion(currProgramVersion);

return seocConfig;
}

/**
* Description:
*
* @param id
* @param hptcode
* @param classification
* @param spec
* @param grouping
* @return Hptc
*/
public static Hptc getHptc(String hptcode, String classification, String spec, String grouping)
{
Hptc hptc = new Hptc();

hptc.setHptc(hptcode);
hptc.setClassification(classification);
hptc.setSpecialization(spec);
hptc.setGrouping(grouping);

return hptc;
}

/**
* Description:
*
* @param msc
* @param hptc
* @return ServiceHptc
*/
public static ServiceHptc getServiceHptc(String msc, String hptc)
{
ServiceHptcId serviceHptcId = new ServiceHptcId(hptc, msc);
ServiceHptc serviceHptc = new ServiceHptc(serviceHptcId);
return serviceHptc;
}
}