public Boolean isStaleOnDiagnosis(ValueObject diagnosis) // WDEV-19239
      {
    if (diagnosis == null) return false;

    DomainFactory factory = getDomainFactory();

    List<?> appts = null;

    if (diagnosis instanceof PatientDiagnosisAtConsultationVo) {
      PatientDiagnosisAtConsultationVo patDiag = (PatientDiagnosisAtConsultationVo) diagnosis;
      appts =
          factory.find(
              "select a.id from PatientDiagnosis as a where a.id = :DiagnosisId and a.version > :DiagnosisVersion",
              new String[] {"DiagnosisId", "DiagnosisVersion"},
              new Object[] {
                patDiag.getID_PatientDiagnosis(), patDiag.getVersion_PatientDiagnosis()
              });
    } else if (diagnosis instanceof CodedDiagnosesForAttendanceVo) {
      CodedDiagnosesForAttendanceVo codedDiag = (CodedDiagnosesForAttendanceVo) diagnosis;
      appts =
          factory.find(
              "select a.id from CodedDiagForAttendance as a where a.id = :DiagnosisId and a.version > :DiagnosisVersion",
              new String[] {"DiagnosisId", "DiagnosisVersion"},
              new Object[] {
                codedDiag.getID_CodedDiagForAttendance(),
                codedDiag.getVersion_CodedDiagForAttendance()
              });
    }

    if (appts != null && appts.size() > 0) return true;

    return false;
  }
  // WDEV-19239
  private boolean isPrimary(PatientDiagnosisAtConsultationVo diagnose) {
    if (diagnose == null
        || diagnose.getPrimaryForCareSpells() == null
        || diagnose.getPrimaryForCareSpells().size() == 0) return false;

    for (CSPrimaryDiagnosisShortVo primary : diagnose.getPrimaryForCareSpells()) {
      if (primary == null || primary.getCareContext() == null) continue;

      if (primary.getCareContext().equals(diagnose.getCareContext())
          && Boolean.TRUE.equals(primary.getIsActive())) return true;
    }

    return false;
  }
  public PatientDiagnosisAtConsultationVoCollection saveDiagnosis(
      PatientDiagnosisAtConsultationVoCollection diagnosis, CareContextRefVo careContext)
      throws StaleObjectException {
    if (diagnosis == null)
      throw new CodingRuntimeException(
          "Cannot save a null PatientDiagnosisAtConsultationVoCollection.");

    if (!diagnosis.isValidated())
      throw new CodingRuntimeException(
          "PatientDiagnosisAtConsultationVoCollection is not validated.");

    DomainFactory factory = getDomainFactory();
    PatientDiagnosisAtConsultationVoCollection coll =
        new PatientDiagnosisAtConsultationVoCollection();

    // WDEV-19239
    boolean isPatientDiagPrimary = false;
    CareContextRefVo careContextRef = null;
    for (PatientDiagnosisAtConsultationVo diagnose : diagnosis) {
      if (diagnose == null) continue;

      careContextRef = diagnose.getCareContext();
      if (isPrimary(diagnose)) isPatientDiagPrimary = true;

      PatientDiagnosis doDiagnose =
          PatientDiagnosisAtConsultationVoAssembler.extractPatientDiagnosis(factory, diagnose);

      factory.save(doDiagnose);
      coll.add(PatientDiagnosisAtConsultationVoAssembler.create(doDiagnose));
    }

    CodedDiagnosesForAttendanceVoCollection collCodedDiag =
        listCodedDiagnosesForAttendance(careContextRef, true);

    if (isPatientDiagPrimary && collCodedDiag != null && collCodedDiag.size() > 0) {
      for (CodedDiagnosesForAttendanceVo codedDiag : collCodedDiag) {
        codedDiag.setIsMain(false);

        CodedDiagForAttendance doCodedDiag =
            CodedDiagnosesForAttendanceVoAssembler.extractCodedDiagForAttendance(
                factory, codedDiag);
        factory.save(doCodedDiag);
      }
    }

    if (careContext != null) {
      AttendDiagInvTreatStatusVo attendDiagInvTreatStatus =
          getAttendDiagInvTreatStatus(careContext);

      if (attendDiagInvTreatStatus != null) {
        attendDiagInvTreatStatus.setNoDiagnoses(null);
        attendDiagInvTreatStatus.setDiagnosesNotRecorded(null);

        AttendDiagInvTreatStatus doAttendDiagInvTreatStatus =
            AttendDiagInvTreatStatusVoAssembler.extractAttendDiagInvTreatStatus(
                factory, attendDiagInvTreatStatus);
        factory.save(doAttendDiagInvTreatStatus);
      }
    }

    return coll;
  }