Example #1
0
        public async Task Handle(UpsertEpisodeOfCareCommand message)
        {
            var statement = @"INSERT INTO episodeofcare(" +
                            " id, patient_id, start, \"end\", last_updated, status)" +
                            @"VALUES (@Id, @PatientId, @Start, @End, @LastUpdated, @Status)
                              ON CONFLICT (id) DO UPDATE
                              SET patient_id=EXCLUDED.patient_id, start=EXCLUDED.start," +
                            " \"end\"=EXCLUDED.end, last_updated=EXCLUDED.last_updated, status=EXCLUDED.status" +
                            "  WHERE episodeofcare.last_updated < EXCLUDED.last_updated;";
            var p = new
            {
                Id        = message.EpisodeOfCare.Id,
                PatientId = message.PatientId,
                Start     = FhirDateParser.Parse(message.EpisodeOfCare.Period.Start),
                End       = string.IsNullOrWhiteSpace(message.EpisodeOfCare.Period.End)
                    ? FhirDateParser.Parse(message.EpisodeOfCare.Period.Start)
                    : FhirDateParser.Parse(message.EpisodeOfCare.Period.End),
                LastUpdated = message.EpisodeOfCare.Meta.LastUpdated,
                Status      = message.EpisodeOfCare.Status
            };

            using (var uow = _unitOfWorkFcatory())
            {
                await uow.QueryAsync((c, t) => c.ExecuteAsync(statement, p, t));
            }
        }
Example #2
0
        public async Task <Card> Handle(RequestMessage message)
        {
            var hookContext = message.Context as Bundle;

            if (hookContext == null)
            {
                throw new ArgumentException("Для использования CDS в листках нетрудоспособности необходимо в свойстве Context передать FHIR ресурс типа Bundle");
            }



            var episodeOfCare = GetResourceFromBundle <EpisodeOfCare>(hookContext);
            var composition   = GetResourceFromBundle <Composition>(hookContext);
            var claim         = GetResourceFromBundle <Claim>(hookContext);
            var condition     = GetResourceFromBundle <Condition>(hookContext);
            var encounters    = hookContext.Entry.Select(b => b.Resource).OfType <Encounter>();


            var context = new DisabilitySheetHookContext
            {
                PatientId      = message.Patient,
                TreatmentStart = FhirDateParser.Parse(episodeOfCare.Period.Start),
                TreatmentEnd   = string.IsNullOrWhiteSpace(episodeOfCare.Period.End)
                                        ? FhirDateParser.Parse(episodeOfCare.Period.Start)
                                        : FhirDateParser.Parse(episodeOfCare.Period.End),
                CompositionCreating = FhirDateParser.Parse(composition.GetExtensionValue <Date>(CompositionCreatingDateSystem).Value),
                TreatmentModeCode   = ((CodeableConcept)episodeOfCare.Extension.First(e => e.Url.Equals(EpisodeOfCareTreatmentModeSystem)).Value).Coding.First().Code,
                DiagnosisCode       = condition.Code.Coding.First().Code,
                KindDisabilityCode  = claim.Condition.First().Code,
                VkkDates            = encounters
                                      .Where(e => e.Meta?.Profile != null && e.Meta.Profile.Any(p => p.Equals(EncounterVkkProfile)))
                                      .Select(p => FhirDateParser.Parse(p.Period.Start)),
                FreedPersonId   = composition.Subject.Reference,
                EpisodeOfCareId = episodeOfCare.Id,
                ClaimId         = claim.Id,
                CompositionId   = composition.Id
            };

            return(await HandleCore(context));
        }
        public async Task Handle(UpsertPatientCommand message)
        {
            var statement = @"INSERT INTO patient(
                                id, date_birth, last_updated)
                                VALUES (@Id, @DateBirth, @LastUpdated)
                              ON CONFLICT (id) DO UPDATE
                                SET date_birth=EXCLUDED.date_birth, last_updated=EXCLUDED.last_updated
                                WHERE patient.last_updated < EXCLUDED.last_updated;";

            var p = new
            {
                DateBirth   = string.IsNullOrEmpty(message.Patient.BirthDate)?null:new DateTime?(FhirDateParser.Parse(message.Patient.BirthDate)),
                LastUpdated = message.Patient.Meta.LastUpdated,
                Id          = message.Patient.Id
            };

            using (var uow = _unitOfWorkFactory())
            {
                await uow.QueryAsync((c, t) => c.ExecuteAsync(statement, p, t));
            }
        }