com.mmm.cms.homehealth.v2308_1
Class GrouperVersion_v2308_1

java.lang.Object
  extended by com.mmm.cms.homehealth.HomeHealthEventNotifier
      extended by com.mmm.cms.homehealth.v2308_1.GrouperVersion_v2308_1
All Implemented Interfaces:
HomeHealthEventNotifierIF, HomeHealthGrouperIF, Describable, Initializable, Namable, java.io.Serializable
Direct Known Subclasses:
GrouperVersion_v2308_2, GrouperVersion_v2409_1, GrouperVersion_v3110_1

public class GrouperVersion_v2308_1
extends HomeHealthEventNotifier
implements HomeHealthGrouperIF

This class uses the 2.03 version scoring logic by extending the GrouperVersion 2.03 class, but encapsulates the Diagnosis Code set for valid codes between January 1, 2008 and September 30, 2008, inclusive.

See Also:
com.mmm.cms.homehealth.v02_03java.GrouperVersion_02_03, Serialized Form

Field Summary
protected  ClinicalFunctional_ScoringModel_v2308 clinicalModel_1
          The Clinical Scoring module, equation 1
protected  ClinicalFunctional_ScoringModel_v2308 clinicalModel_2
          The Clinical Scoring module, equation 2
protected  ClinicalFunctional_ScoringModel_v2308 clinicalModel_3
          The Clinical Scoring module, equation 3
protected  ClinicalFunctional_ScoringModel_v2308 clinicalModel_4
          The Clinical Scoring module, equation 4
protected  NRS_ScoringModel_v2308 nrsScoringModel
          The NRS Scoring module
 
Fields inherited from interface com.mmm.cms.homehealth.proto.HomeHealthGrouperIF
DEFAULT_BLANK_VALUE, HH_LOGGER_NAME
 
Constructor Summary
GrouperVersion_v2308_1()
          Constructor that sets the effective start and thru date to January 1,
GrouperVersion_v2308_1(java.util.Calendar start, java.util.Calendar thru, java.util.Calendar window)
          Constructor that sets the effective start, thru, and window date to the supplied dates.
 
Method Summary
protected  void fireScoringGeneral(java.lang.String message)
          Scoring Event support method
protected  void fireScoringRecord(java.lang.String message, HomeHealthRecordIF record)
          Scoring Event support method
 HomeHealthRecordValidatorIF getClincalValidator()
          Provides the validator for the Clinical portion of the scoring
 java.lang.String getDescription()
          gets the description for this version
 java.util.Calendar getEffectiveDateStart()
          gets the effective start date
 java.util.Calendar getEffectiveDateThru()
          gets the effective through date
 java.lang.String getName()
          Get the name of this version
 HomeHealthRecordValidatorIF getNRSValidator()
          Provides the validator for the Non-Routine Supplies portion of the scoring
 java.lang.String getVersion()
          gets the version identifier
 void init(java.util.Properties props)
          Sets up this version by loading the related Diagnosis code / category data, and initializing the scoring models: 4 clinical/functional models (one for each equation), and one Non-Routine Supplies model
 boolean isValidDiagnosisCode(HomeHealthRecordIF record, Icd9DiagnosisCodeIF code)
          Determines if the Diagnosis code is valie for this grouper
 boolean isValidForVersion(HomeHealthRecordIF record)
          Validate the record.
 HomeHealthRecordValidatorIF populateValdateClinicalCodes(HomeHealthRecordIF record)
          This method is not very efficient for scoring a record, since it poplates the codes into the record each time, prior to validating them.
 ScoringResultsIF score(HomeHealthRecordIF record, boolean validateDates)
          This is the main scoring module for the Oasis record.
 void setDescription(java.lang.String arg0)
          Empty method - you can not reset the description
 void setName(java.lang.String name)
          Emtpy method - you can reset the name
 
Methods inherited from class com.mmm.cms.homehealth.HomeHealthEventNotifier
addEventListener, getEventListeners, getListenerCount, notifyEventListeners, removeEventListener, removeEventListeners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.mmm.cms.homehealth.proto.HomeHealthEventNotifierIF
addEventListener, getEventListeners, getListenerCount, notifyEventListeners, removeEventListener, removeEventListeners
 

Field Detail

nrsScoringModel

protected NRS_ScoringModel_v2308 nrsScoringModel
The NRS Scoring module


clinicalModel_1

protected ClinicalFunctional_ScoringModel_v2308 clinicalModel_1
The Clinical Scoring module, equation 1


clinicalModel_2

protected ClinicalFunctional_ScoringModel_v2308 clinicalModel_2
The Clinical Scoring module, equation 2


clinicalModel_3

protected ClinicalFunctional_ScoringModel_v2308 clinicalModel_3
The Clinical Scoring module, equation 3


clinicalModel_4

protected ClinicalFunctional_ScoringModel_v2308 clinicalModel_4
The Clinical Scoring module, equation 4

Constructor Detail

GrouperVersion_v2308_1

public GrouperVersion_v2308_1()
Constructor that sets the effective start and thru date to January 1,


GrouperVersion_v2308_1

public GrouperVersion_v2308_1(java.util.Calendar start,
                              java.util.Calendar thru,
                              java.util.Calendar window)
Constructor that sets the effective start, thru, and window date to the supplied dates. The start and thru dates can not be null but the window can be.

Method Detail

getName

public java.lang.String getName()
Get the name of this version

Specified by:
getName in interface Namable
Returns:
the name of this version

setName

public void setName(java.lang.String name)
Emtpy method - you can reset the name

Specified by:
setName in interface Namable
Parameters:
name -

getVersion

public java.lang.String getVersion()
gets the version identifier

Specified by:
getVersion in interface HomeHealthGrouperIF
Returns:

getEffectiveDateStart

public java.util.Calendar getEffectiveDateStart()
gets the effective start date

Specified by:
getEffectiveDateStart in interface HomeHealthGrouperIF
Returns:

getEffectiveDateThru

public java.util.Calendar getEffectiveDateThru()
gets the effective through date

Specified by:
getEffectiveDateThru in interface HomeHealthGrouperIF
Returns:

isValidForVersion

public boolean isValidForVersion(HomeHealthRecordIF record)
Validate the record. The record must be within the effect start and the effective thru dates, and the assessment reason must be appropriate for the completed dates According to the Readme203.pdf, Source of Data, item 2, page 6: The Therapy threshold item (M0825 & M0826) is NOT equal to NA. This means that the cases for which the HIPPS codes is not needed will not be classified. (This would include, for example, assessments for non-Medicare/non-Medicaid patients, or Medicare assessments that are not the basis for casemix classifications for the Medicare episode.) It also means that the Medicare assessments with M0825 or M0826 coded NA in error will not be classified. Records with M0825 or M0826 left blank WILL be classified, with that item treated as invalid data. Specification for Version 02.03: Transition Issues The Grouper Version 02.n applies to Medicare home health payment episodes starting January 1, 2008, or later. Since episode start date is not recorded on the OASIS, the effective date of Grouper 02.03 is based on assessment completion date (M0090_INFO_COMPLETED_DATE). If reason for assessment (M0100_ASSMT_REASON) = 01 or 03 (start/resumption of care), Grouper 02.03 will be effective for assessments with M0090_INFO_COMPLETED_DATE on or after 2008-01-01. To allow for completion of recertification assessments during the 5-day window before the next episode begins, if reason for assessment (M0100_ASSMT_REASON) = 04 or 05 (recertification/other followup), Grouper 02.03 will be effective for assessments with M0090_INFO_COMPLETED_DATE on or after 2007-12-27. NB: The effective date of the Final Rule, CMS-1541-FC, is January 1, 2008. Therefore, the logic above does not cover ALL situations, and in some cases it is anticipated that providers or RHHIs may need to develop workarounds. For example, an assessment with M0100_ASSMT_REASON=04 or 05, M0090 assessment completed date = 12/27/2007, and episode start date = 12/31/2007 would need to use Grouper Version 01.06, but the software will produce a Grouper 02.03 classification because the assessment date is on/after 12/27/2007. In these cases, a workaround will be necessary. Guidance has been posted on the CMS Web site, http://www.cms.hhs.gov/HomeHealthPPS/.

Specified by:
isValidForVersion in interface HomeHealthGrouperIF
Parameters:
record -
Returns:
true if this version can score the record

getDescription

public java.lang.String getDescription()
gets the description for this version

Specified by:
getDescription in interface Describable
Returns:
the description of this version

setDescription

public void setDescription(java.lang.String arg0)
Empty method - you can not reset the description

Specified by:
setDescription in interface Describable
Parameters:
arg0 -

init

public void init(java.util.Properties props)
          throws java.lang.Exception
Sets up this version by loading the related Diagnosis code / category data, and initializing the scoring models: 4 clinical/functional models (one for each equation), and one Non-Routine Supplies model

Specified by:
init in interface Initializable
Parameters:
props -
Throws:
java.lang.Exception

score

public ScoringResultsIF score(HomeHealthRecordIF record,
                              boolean validateDates)
This is the main scoring module for the Oasis record. It uses a validator to verify the diagnosis codes and other variables on the record are valid for scoring with this version. It uses the 4 clinical/functional and NRS models to perform the scoring on the record, return the Scoring results. Pseudo code lines 553 thru 1971

Specified by:
score in interface HomeHealthGrouperIF
validateDates - - if true then is calls isValidForVersion() prior to scoring. If isValidForVersion() is called, and returns false, the record will not be scored.
Returns:
ScoringResultsIF representing the score. This will never be null

getClincalValidator

public HomeHealthRecordValidatorIF getClincalValidator()
Provides the validator for the Clinical portion of the scoring

Specified by:
getClincalValidator in interface HomeHealthGrouperIF
Returns:
HomeHealthRecordValidatorIF

getNRSValidator

public HomeHealthRecordValidatorIF getNRSValidator()
Provides the validator for the Non-Routine Supplies portion of the scoring

Specified by:
getNRSValidator in interface HomeHealthGrouperIF
Returns:
HomeHealthRecordValidatorIF

isValidDiagnosisCode

public boolean isValidDiagnosisCode(HomeHealthRecordIF record,
                                    Icd9DiagnosisCodeIF code)
Description copied from interface: HomeHealthGrouperIF
Determines if the Diagnosis code is valie for this grouper

Specified by:
isValidDiagnosisCode in interface HomeHealthGrouperIF
Returns:
True if the code is valid for the grouper version and the effective data of the code

populateValdateClinicalCodes

public HomeHealthRecordValidatorIF populateValdateClinicalCodes(HomeHealthRecordIF record)
This method is not very efficient for scoring a record, since it poplates the codes into the record each time, prior to validating them. However, it should give sufficient information about the which codes were used for scoring.

Specified by:
populateValdateClinicalCodes in interface HomeHealthGrouperIF
Parameters:
record -
Returns:
HomeHealthRecordValidatorIF, this value will never be null.

fireScoringGeneral

protected void fireScoringGeneral(java.lang.String message)
Scoring Event support method

Parameters:
message -

fireScoringRecord

protected void fireScoringRecord(java.lang.String message,
                                 HomeHealthRecordIF record)
Scoring Event support method

Parameters:
message -
record -