/// <summary> /// Synchronizes the service. /// </summary> /// <param name="encounter">The encounter.</param> /// <param name="procedure">The procedure.</param> /// <param name="diagnosis">The diagnosis.</param> /// <returns>A service.</returns> public Service SynchronizeService(Encounter encounter, Procedure procedure, CodedConcept diagnosis) { Check.IsNotNull(encounter, "Encounter is required."); Check.IsNotNull(procedure, "Procedure is required."); Check.IsNotNull(diagnosis, "Diagnosis is required."); var medicalProcedure = _medicalProcedureTranslator.Translate ( procedure ); var service = _serviceRepository.GetByTrackingNumber ( procedure.Key ); var primaryIndicator = ( procedure.ProcedureType != ProcedureType.Activity ); if (service == null) { service = _serviceFactory.CreateService ( encounter, diagnosis, medicalProcedure, primaryIndicator, procedure.Key ); } else { if (encounter.Key != service.Encounter.Key) { service.ReviseEncounter(encounter); } if (diagnosis != service.Diagnosis) { service.ReviseDiagnosis(diagnosis); } if (medicalProcedure != service.MedicalProcedure) { service.ReviseMedicalProcedure(medicalProcedure); } if (procedure.Key != service.TrackingNumber) { service.ReviseTrackingNumber(procedure.Key); } if (primaryIndicator != service.PrimaryIndicator) { service.RevisePrimaryIndicator(primaryIndicator); } if (procedure.BillingUnitCount != service.BillingUnitCount) { service.ReviseBillingUnitCount(procedure.BillingUnitCount); } } //TODO: move them to ctor var currency = _lookupValueRepository.GetLookupByWellKnownName<Currency>(WellKnownNames.CommonModule.Currency.USDollars); service.ReviseChargeAmount(new Money(currency, 1)); var c = new UnitCount ( 1 ); service.ReviseBillingUnitCount ( c ); return service; }
/// <summary> /// Translates the specified procedure. /// </summary> /// <param name="procedure">The procedure.</param> /// <returns> /// A MedicalProcedure instance. /// </returns> public MedicalProcedure Translate(Procedure procedure) { if (procedure == null) { return null; } var medicalProcedure = new MedicalProcedure ( procedure.ProcedureCode, procedure.FirstModifierCode, procedure.SecondModifierCode, procedure.ThirdModifierCode, procedure.FourthModifierCode ); return medicalProcedure; }