UNPKG

@ai-ecom/medusa-plugin-patient-record

Version:

A plugin for patient record

892 lines (888 loc) 89.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime/helpers/objectDestructuringEmpty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _medusa = require("@medusajs/medusa"); var _medusaCoreUtils = require("medusa-core-utils"); var _examinationResult4 = require("../models/examination-result"); var _lodash = require("lodash"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var ExaminationResultService = /*#__PURE__*/function (_TransactionBaseServi) { function ExaminationResultService(_ref) { var _this; var examinationResultRepository = _ref.examinationResultRepository, examinationResultTitleRepository = _ref.examinationResultTitleRepository, examinationResultTitleService = _ref.examinationResultTitleService, natureRepository = _ref.natureRepository, natureService = _ref.natureService, eventBusService = _ref.eventBusService, bloodAnalyteService = _ref.bloodAnalyteService, bloodAnalyteRepository = _ref.bloodAnalyteRepository, bloodAnalyteMethodRepository = _ref.bloodAnalyteMethodRepository, mediaResultRepository = _ref.mediaResultRepository, mediaRepository = _ref.mediaRepository, mediaResultService = _ref.mediaResultService, unitRepository = _ref.unitRepository, physicalMeasurementService = _ref.physicalMeasurementService, physicalMeasurementRepository = _ref.physicalMeasurementRepository, customerService = _ref.customerService, referenceService = _ref.referenceService, referenceConditionService = _ref.referenceConditionService; (0, _classCallCheck2["default"])(this, ExaminationResultService); // eslint-disable-next-line prefer-rest-params _this = _callSuper(this, ExaminationResultService, [arguments[0]]); _this.examinationResultRepository_ = examinationResultRepository; _this.examinationResultTitleRepository_ = examinationResultTitleRepository; _this.examinationResultTitleService_ = examinationResultTitleService; _this.natureRepository_ = natureRepository; _this.bloodAnalyteRepository_ = bloodAnalyteRepository; _this.bloodAnalyteMethodRepository_ = bloodAnalyteMethodRepository; _this.physicalMeasurementRepository_ = physicalMeasurementRepository; _this.mediaResultRepository_ = mediaResultRepository; _this.mediaRepository_ = mediaRepository; _this.unitRepository_ = unitRepository; _this.eventBusService_ = eventBusService; _this.bloodAnalyteService_ = bloodAnalyteService; _this.physicalMeasurementService_ = physicalMeasurementService; _this.mediaResultService_ = mediaResultService; _this.customerService_ = customerService; _this.referenceService_ = referenceService; _this.natureService_ = natureService; _this.referenceConditionService_ = referenceConditionService; return _this; } (0, _inherits2["default"])(ExaminationResultService, _TransactionBaseServi); return (0, _createClass2["default"])(ExaminationResultService, [{ key: "list", value: function () { var _list = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(selector) { var config, _yield$this$listAndCo, _yield$this$listAndCo2, examinationResults, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: config = _args.length > 1 && _args[1] !== undefined ? _args[1] : { skip: 0, take: 50, relations: [] }; _context.next = 3; return this.listAndCount(selector, config); case 3: _yield$this$listAndCo = _context.sent; _yield$this$listAndCo2 = (0, _slicedToArray2["default"])(_yield$this$listAndCo, 1); examinationResults = _yield$this$listAndCo2[0]; return _context.abrupt("return", examinationResults); case 7: case "end": return _context.stop(); } }, _callee, this); })); function list(_x) { return _list.apply(this, arguments); } return list; }() }, { key: "listAndCount", value: function () { var _listAndCount = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(selector) { var config, examinationResultRepo, query, _args2 = arguments; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: config = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : { skip: 0, take: 50, relations: [] }; examinationResultRepo = this.activeManager_.withRepository(this.examinationResultRepository_); query = (0, _medusa.buildQuery)(selector, config); return _context2.abrupt("return", examinationResultRepo.findAndCount(query)); case 4: case "end": return _context2.stop(); } }, _callee2, this); })); function listAndCount(_x2) { return _listAndCount.apply(this, arguments); } return listAndCount; }() // TODO: Remove this function and make the response nature like in the database structure and not modified response. }, { key: "optimizeExaminationResultData", value: function optimizeExaminationResultData(data) { if (!data) { return; } data.forEach(function (d) { var _d$examination_result, _d$examination_result2, _d$examination_result3; d.examination_result_status = d.examination_result.status; d.examination_result_type = d.examination_result.type; d.date = d.examination_result.date; d.reference_id = d.examination_result.reference_id; d.appointment_id = d.examination_result.appointment_id; if ((_d$examination_result = d.examination_result) !== null && _d$examination_result !== void 0 && _d$examination_result.title) { d.examination_result_title = d.examination_result.title.title; d.examination_result_title_id = d.examination_result.title.id; } if ((_d$examination_result2 = d.examination_result) !== null && _d$examination_result2 !== void 0 && (_d$examination_result3 = _d$examination_result2.title) !== null && _d$examination_result3 !== void 0 && _d$examination_result3.nature) { var _d$examination_result4, _d$examination_result5, _d$examination_result6, _d$examination_result7; d.examination_result_title_nature = (_d$examination_result4 = d.examination_result) === null || _d$examination_result4 === void 0 ? void 0 : (_d$examination_result5 = _d$examination_result4.title) === null || _d$examination_result5 === void 0 ? void 0 : _d$examination_result5.nature; d.examination_result_title_nature_id = (_d$examination_result6 = d.examination_result.title) === null || _d$examination_result6 === void 0 ? void 0 : (_d$examination_result7 = _d$examination_result6.nature) === null || _d$examination_result7 === void 0 ? void 0 : _d$examination_result7.id; } if (d.examination_result_type === "blood_analyte" || d.examination_result_type === "physical_measurement") { var _d$examination_result8, _d$examination_result9, _d$examination_result10, _d$examination_result11, _d$examination_result12; d.references = (d === null || d === void 0 ? void 0 : (_d$examination_result8 = d.examination_result) === null || _d$examination_result8 === void 0 ? void 0 : (_d$examination_result9 = _d$examination_result8.title) === null || _d$examination_result9 === void 0 ? void 0 : (_d$examination_result10 = _d$examination_result9.references) === null || _d$examination_result10 === void 0 ? void 0 : _d$examination_result10.length) && (d === null || d === void 0 ? void 0 : (_d$examination_result11 = d.examination_result) === null || _d$examination_result11 === void 0 ? void 0 : (_d$examination_result12 = _d$examination_result11.title) === null || _d$examination_result12 === void 0 ? void 0 : _d$examination_result12.references); // TODO: Uncomment this if we starting use ethnicities // if (d?.references) { // if (d.reference?.ethnicities_have_references?.length > 0) { // d.reference.ethnicity = // d.reference?.ethnicities_have_references[0]?.length && // d.reference?.ethnicities_have_references[0]?.ethnicity; // delete d.reference.ethnicities_have_references; // } // } delete d.unit_id; if (d !== null && d !== void 0 && d.method) { d.blood_analyte_method = d.method; delete d.method; } // Order the values by order column from small to big // d.references?.values.sort((a, b) => a.order - b.order); } delete d.examination_result; }); } }, { key: "optimizeData", value: function optimizeData(data) { this.optimizeExaminationResultData(data.blood_analytes); this.optimizeExaminationResultData(data.physical_measurements); this.optimizeExaminationResultData(data.media_results); return data; } }, { key: "listAndCountBaseOnReferenceAndAppointmentId", value: function () { var _listAndCountBaseOnReferenceAndAppointmentId = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(selector) { var config, examinationResultRepo, skip, take, appointment_id, customer_id, reference_id, caseBy, queryBuilderCounts, queryBuilder, conditionsAndParameters, _i, _conditionsAndParamet, _conditionsAndParamet2, condition, parameters, queryAppointmentAndReferenceNotNull, examinations, _yield$queryBuilderCo, count, _args3 = arguments; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: config = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : { skip: 0, take: 50 }; examinationResultRepo = this.activeManager_.withRepository(this.examinationResultRepository_); skip = config.skip, take = config.take; appointment_id = selector.appointment_id, customer_id = selector.customer_id, reference_id = selector.reference_id; // The COALESCE function is used here to take the first non-null value between "appointment_id" and "reference_id" caseBy = "COALESCE(examination_result.appointment_id, examination_result.reference_id)"; // Count all data queryBuilderCounts = examinationResultRepo.createQueryBuilder("examination_result").select("COUNT(DISTINCT ".concat(caseBy, ")"), "count"); // Get the examination queryBuilder = examinationResultRepo.createQueryBuilder("examination_result").select("DISTINCT ON (".concat(caseBy, ") ").concat(caseBy, " AS main_id, examination_result.*")).take(take).skip(skip); conditionsAndParameters = []; if (appointment_id) { conditionsAndParameters.push({ condition: "examination_result.appointment_id = :appointmentId", parameters: { appointmentId: appointment_id } }); } if (customer_id) { conditionsAndParameters.push({ condition: "examination_result.customer_id = :customerId", parameters: { customerId: customer_id } }); } if (reference_id) { conditionsAndParameters.push({ condition: "examination_result.reference_id = :referenceId", parameters: { referenceId: reference_id } }); } for (_i = 0, _conditionsAndParamet = conditionsAndParameters; _i < _conditionsAndParamet.length; _i++) { _conditionsAndParamet2 = _conditionsAndParamet[_i], condition = _conditionsAndParamet2.condition, parameters = _conditionsAndParamet2.parameters; queryBuilder.andWhere(condition, parameters); queryBuilderCounts.andWhere(condition, parameters); } // Avoid list with refence_id and appointment_id NULL if (!reference_id && !appointment_id) { queryAppointmentAndReferenceNotNull = "(examination_result.appointment_id IS NOT NULL OR examination_result.reference_id IS NOT NULL)"; queryBuilder.andWhere(queryAppointmentAndReferenceNotNull); queryBuilderCounts.andWhere(queryAppointmentAndReferenceNotNull); } _context3.next = 15; return queryBuilder.getRawMany(); case 15: examinations = _context3.sent; _context3.next = 18; return queryBuilderCounts.getRawOne(); case 18: _yield$queryBuilderCo = _context3.sent; count = _yield$queryBuilderCo.count; return _context3.abrupt("return", [examinations, parseInt(count)]); case 21: case "end": return _context3.stop(); } }, _callee3, this); })); function listAndCountBaseOnReferenceAndAppointmentId(_x3) { return _listAndCountBaseOnReferenceAndAppointmentId.apply(this, arguments); } return listAndCountBaseOnReferenceAndAppointmentId; }() }, { key: "retrieveDetails", value: function () { var _retrieveDetails = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(selector) { var _ref2, _bloodAnalytes$0$exam, _bloodAnalytes$, _physicalMeasurements, _mediaResults$, _ref3, _bloodAnalytes$0$exam2, _bloodAnalytes$2, _physicalMeasurements2, _mediaResults$2, _ref4, _bloodAnalytes$0$exam3, _bloodAnalytes$3, _physicalMeasurements3, _mediaResults$3; var _yield$this$bloodAnal, _yield$this$bloodAnal2, bloodAnalytes, bloodAnalyteCounts, _yield$this$physicalM, _yield$this$physicalM2, physicalMeasurements, physicalMeasurementCounts, _yield$this$mediaResu, _yield$this$mediaResu2, mediaResults, mediaResultCounts, bloodAnalyteConversions, physicalMeasurementConversions, conversions, customerId, appointmentId, referenceId, customer, examinationResult; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: if (!(!selector.appointment_id && !selector.reference_id)) { _context4.next = 2; break; } throw new _medusaCoreUtils.MedusaError(_medusaCoreUtils.MedusaError.Types.NOT_FOUND, "ERROR_APPOINTMENT_OR_REFERENCE_ID_NOT_FILLED"); case 2: _context4.next = 4; return this.bloodAnalyteService_.listAndCountDetails(selector); case 4: _yield$this$bloodAnal = _context4.sent; _yield$this$bloodAnal2 = (0, _slicedToArray2["default"])(_yield$this$bloodAnal, 2); bloodAnalytes = _yield$this$bloodAnal2[0]; bloodAnalyteCounts = _yield$this$bloodAnal2[1]; _context4.next = 10; return this.physicalMeasurementService_.listAndCountDetails(selector); case 10: _yield$this$physicalM = _context4.sent; _yield$this$physicalM2 = (0, _slicedToArray2["default"])(_yield$this$physicalM, 2); physicalMeasurements = _yield$this$physicalM2[0]; physicalMeasurementCounts = _yield$this$physicalM2[1]; _context4.next = 16; return this.mediaResultService_.listAndCountDetails(selector); case 16: _yield$this$mediaResu = _context4.sent; _yield$this$mediaResu2 = (0, _slicedToArray2["default"])(_yield$this$mediaResu, 2); mediaResults = _yield$this$mediaResu2[0]; mediaResultCounts = _yield$this$mediaResu2[1]; if (!(bloodAnalyteCounts <= 0 && physicalMeasurementCounts <= 0 && mediaResultCounts <= 0)) { _context4.next = 22; break; } throw new _medusaCoreUtils.MedusaError(_medusaCoreUtils.MedusaError.Types.NOT_FOUND, "ERROR_EXAMINATION_NOT_FOUND"); case 22: // TODO: Need rework and waiting for unit table erd is ready bloodAnalyteConversions = bloodAnalytes.map(function (entry) { return entry.unit; }).flat(); physicalMeasurementConversions = physicalMeasurements.map(function (entry) { return entry.unit; }).flat(); // Merging all conversions into one array and unique conversions = (0, _lodash.uniqBy)([].concat((0, _toConsumableArray2["default"])(bloodAnalyteConversions), (0, _toConsumableArray2["default"])(physicalMeasurementConversions)), "id"); customerId = (_ref2 = (_bloodAnalytes$0$exam = (_bloodAnalytes$ = bloodAnalytes[0]) === null || _bloodAnalytes$ === void 0 ? void 0 : _bloodAnalytes$.examination_result.customer_id) !== null && _bloodAnalytes$0$exam !== void 0 ? _bloodAnalytes$0$exam : (_physicalMeasurements = physicalMeasurements[0]) === null || _physicalMeasurements === void 0 ? void 0 : _physicalMeasurements.examination_result.customer_id) !== null && _ref2 !== void 0 ? _ref2 : (_mediaResults$ = mediaResults[0]) === null || _mediaResults$ === void 0 ? void 0 : _mediaResults$.examination_result.customer_id; appointmentId = (_ref3 = (_bloodAnalytes$0$exam2 = (_bloodAnalytes$2 = bloodAnalytes[0]) === null || _bloodAnalytes$2 === void 0 ? void 0 : _bloodAnalytes$2.examination_result.appointment_id) !== null && _bloodAnalytes$0$exam2 !== void 0 ? _bloodAnalytes$0$exam2 : (_physicalMeasurements2 = physicalMeasurements[0]) === null || _physicalMeasurements2 === void 0 ? void 0 : _physicalMeasurements2.examination_result.appointment_id) !== null && _ref3 !== void 0 ? _ref3 : (_mediaResults$2 = mediaResults[0]) === null || _mediaResults$2 === void 0 ? void 0 : _mediaResults$2.examination_result.appointment_id; referenceId = (_ref4 = (_bloodAnalytes$0$exam3 = (_bloodAnalytes$3 = bloodAnalytes[0]) === null || _bloodAnalytes$3 === void 0 ? void 0 : _bloodAnalytes$3.examination_result.reference_id) !== null && _bloodAnalytes$0$exam3 !== void 0 ? _bloodAnalytes$0$exam3 : (_physicalMeasurements3 = physicalMeasurements[0]) === null || _physicalMeasurements3 === void 0 ? void 0 : _physicalMeasurements3.examination_result.reference_id) !== null && _ref4 !== void 0 ? _ref4 : (_mediaResults$3 = mediaResults[0]) === null || _mediaResults$3 === void 0 ? void 0 : _mediaResults$3.examination_result.reference_id; _context4.next = 30; return this.customerService_.retrieve(customerId, {}); case 30: customer = _context4.sent; examinationResult = { customer: customer, appointment_id: appointmentId, reference_id: referenceId, blood_analytes: bloodAnalytes, physical_measurements: physicalMeasurements, media_results: mediaResults, conversions: conversions }; return _context4.abrupt("return", this.optimizeData(examinationResult)); case 33: case "end": return _context4.stop(); } }, _callee4, this); })); function retrieveDetails(_x4) { return _retrieveDetails.apply(this, arguments); } return retrieveDetails; }() }, { key: "retrieve", value: function () { var _retrieve = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(examinationResultId, config) { var examinationResult; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: _context5.next = 2; return this.retrieve_({ id: examinationResultId }, config); case 2: examinationResult = _context5.sent; if (examinationResult) { _context5.next = 5; break; } throw new _medusaCoreUtils.MedusaError(_medusaCoreUtils.MedusaError.Types.NOT_FOUND, "ExaminationResult with ".concat(examinationResultId, " was not found")); case 5: return _context5.abrupt("return", examinationResult); case 6: case "end": return _context5.stop(); } }, _callee5, this); })); function retrieve(_x5, _x6) { return _retrieve.apply(this, arguments); } return retrieve; }() }, { key: "retrieve_", value: function () { var _retrieve_ = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(selector, config) { var examinationResultRepo, query, examinationResult; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: examinationResultRepo = this.activeManager_.withRepository(this.examinationResultRepository_); query = (0, _medusa.buildQuery)(selector, config); _context6.next = 4; return examinationResultRepo.findOne(query); case 4: examinationResult = _context6.sent; return _context6.abrupt("return", examinationResult); case 6: case "end": return _context6.stop(); } }, _callee6, this); })); function retrieve_(_x7, _x8) { return _retrieve_.apply(this, arguments); } return retrieve_; }() }, { key: "create", value: function () { var _create = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(examinationObject) { var _this2 = this; var emitTransaction, _args8 = arguments; return _regenerator["default"].wrap(function _callee8$(_context8) { while (1) switch (_context8.prev = _context8.next) { case 0: emitTransaction = _args8.length > 1 && _args8[1] !== undefined ? _args8[1] : true; _context8.next = 3; return this.atomicPhase_( /*#__PURE__*/function () { var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(manager) { var examinationResultRepo, examinationResult, result; return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) switch (_context7.prev = _context7.next) { case 0: examinationResultRepo = manager.withRepository(_this2.examinationResultRepository_); _context7.prev = 1; examinationResult = examinationResultRepo.create(examinationObject); _context7.next = 5; return examinationResultRepo.save(examinationResult); case 5: examinationResult = _context7.sent; _context7.next = 8; return _this2.retrieve(examinationResult.id, {}); case 8: result = _context7.sent; if (!emitTransaction) { _context7.next = 12; break; } _context7.next = 12; return _this2.eventBusService_.withTransaction(manager).emit(ExaminationResultService.Events.CREATED, { id: result.id }); case 12: return _context7.abrupt("return", result); case 15: _context7.prev = 15; _context7.t0 = _context7["catch"](1); throw (0, _medusa.formatException)(_context7.t0); case 18: case "end": return _context7.stop(); } }, _callee7, null, [[1, 15]]); })); return function (_x10) { return _ref5.apply(this, arguments); }; }()); case 3: return _context8.abrupt("return", _context8.sent); case 4: case "end": return _context8.stop(); } }, _callee8, this); })); function create(_x9) { return _create.apply(this, arguments); } return create; }() }, { key: "createOrUpdateBloodAnalyte", value: function () { var _createOrUpdateBloodAnalyte = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(manager, bloodAnalyte) { var bloodAnalyteRepo, bloodAnalyteMethodRepo, examinationResultRepo, status, hint, value, unitId, bloodAnalyteMethod, examinationResultTitleId, customerId, appointmentId, referenceId, laboratoryProviderId, orderEntryDate, labResultDatetime, bloodAnalyteResult, examinationResult, isExaminationResultExists, examinationResultId, _examinationResult; return _regenerator["default"].wrap(function _callee9$(_context9) { while (1) switch (_context9.prev = _context9.next) { case 0: bloodAnalyteRepo = manager.withRepository(this.bloodAnalyteRepository_); bloodAnalyteMethodRepo = manager.withRepository(this.bloodAnalyteMethodRepository_); examinationResultRepo = manager.withRepository(this.examinationResultRepository_); status = bloodAnalyte.status, hint = bloodAnalyte.hint, value = bloodAnalyte.value, unitId = bloodAnalyte.unit_id, bloodAnalyteMethod = bloodAnalyte.blood_analyte_method, examinationResultTitleId = bloodAnalyte.examination_result_title_id, customerId = bloodAnalyte.customer_id, appointmentId = bloodAnalyte.appointment_id, referenceId = bloodAnalyte.reference_id, laboratoryProviderId = bloodAnalyte.laboratory_provider_id, orderEntryDate = bloodAnalyte.order_entry_date, labResultDatetime = bloodAnalyte.lab_result_datetime; _context9.next = 6; return examinationResultRepo.findOne({ where: { type: _examinationResult4.ExaminationResultType.BLOOD_ANALYTE, customer_id: customerId, reference_id: referenceId, examination_result_title_id: examinationResultTitleId // order_entry_date: orderEntryDate, } }); case 6: isExaminationResultExists = _context9.sent; if (!isExaminationResultExists) { _context9.next = 20; break; } examinationResultId = isExaminationResultExists.id; _context9.next = 11; return bloodAnalyteRepo.findOne({ where: { examination_result_id: examinationResultId, laboratory_provider_id: laboratoryProviderId } }); case 11: bloodAnalyteResult = _context9.sent; bloodAnalyteResult = _objectSpread(_objectSpread({}, bloodAnalyteResult), {}, { hint: hint !== null && hint !== void 0 ? hint : bloodAnalyteResult.hint, value: typeof value === "number" && !isNaN(value) ? value : bloodAnalyteResult.value }); _context9.next = 15; return examinationResultRepo.findOne({ where: { id: examinationResultId } }); case 15: examinationResult = _context9.sent; _context9.next = 18; return examinationResultRepo.save(_objectSpread(_objectSpread({}, examinationResult), {}, { reference_id: referenceId !== null && referenceId !== void 0 ? referenceId : examinationResult.reference_id, appointment_id: appointmentId !== null && appointmentId !== void 0 ? appointmentId : examinationResult.appointment_id, status: status !== null && status !== void 0 ? status : examinationResult.status })); case 18: _context9.next = 26; break; case 20: _examinationResult = examinationResultRepo.create({ customer_id: customerId, reference_id: referenceId, appointment_id: appointmentId, order_entry_date: orderEntryDate, lab_result_datetime: labResultDatetime, type: _examinationResult4.ExaminationResultType.BLOOD_ANALYTE, status: status, date: new Date() // Is This Correct? }); _examinationResult.examination_result_title_id = examinationResultTitleId; _context9.next = 24; return examinationResultRepo.save(_examinationResult); case 24: _examinationResult = _context9.sent; bloodAnalyteResult = bloodAnalyteRepo.create({ examination_result_id: _examinationResult.id, laboratory_provider_id: laboratoryProviderId, value: value, hint: hint }); case 26: if (!bloodAnalyteMethod) { _context9.next = 30; break; } _context9.next = 29; return bloodAnalyteMethodRepo.upsertBloodAnalyteMethod({ name: bloodAnalyteMethod }); case 29: bloodAnalyteResult.method = _context9.sent; case 30: bloodAnalyteResult.unit_id = unitId; _context9.next = 33; return bloodAnalyteRepo.save(bloodAnalyteResult); case 33: bloodAnalyteResult = _context9.sent; case 34: case "end": return _context9.stop(); } }, _callee9, this); })); function createOrUpdateBloodAnalyte(_x11, _x12) { return _createOrUpdateBloodAnalyte.apply(this, arguments); } return createOrUpdateBloodAnalyte; }() }, { key: "createOrUpdatePhysicalMeasurement", value: function () { var _createOrUpdatePhysicalMeasurement = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(manager, physicalMeasurement) { var physicalMeasurementRepo, examinationResultRepo, status, hint, value, unitId, examinationResultTitleId, customerId, appointmentId, referenceId, orderEntryDate, labResultDatetime, physicalMeasurementResult, examinationResult, isExaminationResultExists, examinationResultId, _examinationResult2; return _regenerator["default"].wrap(function _callee10$(_context10) { while (1) switch (_context10.prev = _context10.next) { case 0: physicalMeasurementRepo = manager.withRepository(this.physicalMeasurementRepository_); examinationResultRepo = manager.withRepository(this.examinationResultRepository_); status = physicalMeasurement.status, hint = physicalMeasurement.hint, value = physicalMeasurement.value, unitId = physicalMeasurement.unit_id, examinationResultTitleId = physicalMeasurement.examination_result_title_id, customerId = physicalMeasurement.customer_id, appointmentId = physicalMeasurement.appointment_id, referenceId = physicalMeasurement.reference_id, orderEntryDate = physicalMeasurement.order_entry_date, labResultDatetime = physicalMeasurement.lab_result_datetime; _context10.next = 5; return examinationResultRepo.findOne({ where: { type: _examinationResult4.ExaminationResultType.PHYSICAL_MEASUREMENT, customer_id: customerId, reference_id: referenceId, examination_result_title_id: examinationResultTitleId } }); case 5: isExaminationResultExists = _context10.sent; if (!isExaminationResultExists) { _context10.next = 19; break; } examinationResultId = isExaminationResultExists.id; _context10.next = 10; return physicalMeasurementRepo.findOne({ where: { examination_result_id: examinationResultId // physical_measurement_provider_id: laboratoryProviderId, } }); case 10: physicalMeasurementResult = _context10.sent; physicalMeasurementResult = _objectSpread(_objectSpread({}, physicalMeasurementResult), {}, { hint: hint !== null && hint !== void 0 ? hint : physicalMeasurementResult.hint, value: typeof value === "number" && !isNaN(value) ? value : physicalMeasurementResult.value }); _context10.next = 14; return examinationResultRepo.findOne({ where: { id: examinationResultId } }); case 14: examinationResult = _context10.sent; _context10.next = 17; return examinationResultRepo.save(_objectSpread(_objectSpread({}, examinationResult), {}, { reference_id: referenceId !== null && referenceId !== void 0 ? referenceId : examinationResult.reference_id, appointment_id: appointmentId !== null && appointmentId !== void 0 ? appointmentId : examinationResult.appointment_id, status: status !== null && status !== void 0 ? status : examinationResult.status })); case 17: _context10.next = 25; break; case 19: _examinationResult2 = examinationResultRepo.create({ customer_id: customerId, reference_id: referenceId, appointment_id: appointmentId, order_entry_date: orderEntryDate, lab_result_datetime: labResultDatetime, type: _examinationResult4.ExaminationResultType.PHYSICAL_MEASUREMENT, status: status, date: new Date() // Is This Correct? }); _examinationResult2.examination_result_title_id = examinationResultTitleId; _context10.next = 23; return examinationResultRepo.save(_examinationResult2); case 23: _examinationResult2 = _context10.sent; physicalMeasurementResult = physicalMeasurementRepo.create({ examination_result_id: _examinationResult2.id, value: value, hint: hint }); case 25: physicalMeasurementResult.unit_id = unitId; _context10.next = 28; return physicalMeasurementRepo.save(physicalMeasurementResult); case 28: physicalMeasurementResult = _context10.sent; case 29: case "end": return _context10.stop(); } }, _callee10, this); })); function createOrUpdatePhysicalMeasurement(_x13, _x14) { return _createOrUpdatePhysicalMeasurement.apply(this, arguments); } return createOrUpdatePhysicalMeasurement; }() }, { key: "createOrUpdateMedia", value: function () { var _createOrUpdateMedia = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12(manager, mediaResult) { var mediaResultRepo, mediaRepo, examinationResultRepo, status, hint, title, medias, customerId, appointmentId, referenceId, dicomImageProviderId, orderEntryDate, labResultDatetime, examinationResultId, mediaResultResult, examinationResult, isExaminationResultExists, _examinationResultId, _examinationResult3, mediasInsert; return _regenerator["default"].wrap(function _callee12$(_context12) { while (1) switch (_context12.prev = _context12.next) { case 0: mediaResultRepo = manager.withRepository(this.mediaResultRepository_); mediaRepo = manager.withRepository(this.mediaRepository_); examinationResultRepo = manager.withRepository(this.examinationResultRepository_); status = mediaResult.status, hint = mediaResult.hint, title = mediaResult.title, medias = mediaResult.medias, customerId = mediaResult.customer_id, appointmentId = mediaResult.appointment_id, referenceId = mediaResult.reference_id, dicomImageProviderId = mediaResult.dicom_image_provider_id, orderEntryDate = mediaResult.order_entry_date, labResultDatetime = mediaResult.lab_result_datetime, examinationResultId = mediaResult.id; _context12.next = 6; return examinationResultRepo.findOne({ where: { type: _examinationResult4.ExaminationResultType.MEDIA_RESULT, customer_id: customerId, reference_id: referenceId, id: examinationResultId // order_entry_date: orderEntryDate, } }); case 6: isExaminationResultExists = _context12.sent; if (!isExaminationResultExists) { _context12.next = 20; break; } _examinationResultId = isExaminationResultExists.id; _context12.next = 11; return mediaResultRepo.findOne({ where: { examination_result_id: _examinationResultId // dicom_image_provider_id: dicomImageProviderId should we also search by dicom image provider? } }); case 11: mediaResultResult = _context12.sent; mediaResultResult = _objectSpread(_objectSpread({}, mediaResultResult), {}, { hint: hint !== null && hint !== void 0 ? hint : mediaResultResult.hint, title: title !== null && title !== void 0 ? title : mediaResultResult.title, dicomImageProviderId: dicomImageProviderId !== null && dicomImageProviderId !== void 0 ? dicomImageProviderId : mediaResultResult.dicom_image_provider_id }); _context12.next = 15; return examinationResultRepo.findOne({ where: { id: _examinationResultId } }); case 15: examinationResult = _context12.sent; _context12.next = 18; return examinationResultRepo.save(_objectSpread(_objectSpread({}, examinationResult), {}, { reference_id: referenceId !== null && referenceId !== void 0 ? referenceId : examinationResult.reference_id, appointment_id: appointmentId !== null && appointmentId !== void 0 ? appointmentId : examinationResult.appointment_id, status: status !== null && status !== void 0 ? status : examinationResult.status })); case 18: _context12.next = 25; break; case 20: _examinationResult3 = examinationResultRepo.create({ customer_id: customerId, reference_id: referenceId, appointment_id: appointmentId, order_entry_date: orderEntryDate, lab_result_datetime: labResultDatetime, type: _examinationResult4.ExaminationResultType.MEDIA_RESULT, status: status !== null && status !== void 0 ? status : _examinationResult4.ExaminationResultStatus.NOT_STARTED, // Is This Correct? date: new Date() // Is This Correct? }); _context12.next = 23; return examinationResultRepo.save(_examinationResult3); case 23: _examinationResult3 = _context12.sent; mediaResultResult = mediaResultRepo.create({ examination_result_id: _examinationResult3.id, title: title, hint: hint, dicom_image_provider_id: dicomImageProviderId }); case 25: if (!medias) { _context12.next = 30; break; } mediasInsert = medias.map( /*#__PURE__*/function () { var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11(media) { return _regenerator["default"].wrap(function _callee11$(_context11) { while (1) switch (_context11.prev = _context11.next) { case 0: _context11.next = 2; return mediaRepo.upsertMedia(media); case 2: return _context11.abrupt("return", _context11.sent); case 3: case "end": return _context11.stop(); } }, _callee11); })); return function (_x17) { return _ref6.apply(this, arguments); }; }()); _context12.next = 29; return Promise.all(mediasInsert); case 29: mediaResultResult.medias = _context12.sent; case 30: _context12.next = 32; return mediaResultRepo.save(mediaResultResult); case 32: mediaResultResult = _context12.sent; case 33: case "end": return _context12.stop(); } }, _callee12, this); })); function createOrUpdateMedia(_x15, _x16) { return _createOrUpdateMedia.apply(this, arguments); } return createOrUpdateMedia; }() }, { key: "prepareUnits", value: function () { var _prepareUnits = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14(resultInput, config) { var manager, unitRepo, unitUpsertDatas, uniqueUnitUpsertDatas, promiseUnitUpsert; return _regenerator["default"].wrap(function _callee14$(_context14) { while (1) switch (_context14.prev = _context14.next) { case 0: manager = config === null || config === void 0 ? void 0 : config.customManager; unitRepo = manager.withRepository(this.unitRepository_); unitUpsertDatas = resultInput.flatMap(function (bloodAnalyte) { var _bloodAnalyte$examina, _bloodAnalyte$examina2; var unit = bloodAnalyte === null || bloodAnalyte === void 0 ? void 0 : bloodAnalyte.unit; var referenceUnit = bloodAnalyte === null || bloodAnalyte === void 0 ? void 0 : (_bloodAnalyte$examina = bloodAnalyte.examination_result_title) === null || _bloodAnalyte$examina === void 0 ? void 0 : (_bloodAnalyte$examina2 = _bloodAnalyte$examina.reference) === null || _bloodAnalyte$examina2 === void 0 ? void 0 : _bloodAnalyte$examina2.unit; var unitToBeCreatedOrUpdated = []; if (unit) { unitToBeCreatedOrUpdated.push({ id: "".concat(unit === null || unit === void 0 ? void 0 : unit.nominator, ".").concat(unit === null || unit === void 0 ? void 0 : unit.denominator), nominator: unit === null || unit === void 0 ? void 0 : unit.nominator, denominator: unit === null || unit === void 0 ? void 0 : unit.denominator }); } if (referenceUnit) { unitToBeCreatedOrUpdated.push({ id: "".concat(referenceUnit === null || referenceUnit === void 0 ? void 0 : referenceUnit.nominator, ".").concat(referenceUnit === null || referenceUnit === void 0 ? void 0 : referenceUnit.denominator), nominator: referenceUnit === null || referenceUnit === void 0 ? void 0 : referenceUnit.nominator, denominator: referenceUnit === null || referenceUnit === void 0 ? void 0 : referenceUnit.denominator }); } return unitToBeCreatedOrUpdated; }); uniqueUnitUpsertDatas = Array.from(new Set(unitUpsertDatas.map(function (item) { return item.id; }))).map(function (id) { return unitUpsertDatas.find(function (item) { return item.id === id; }); }); promiseUnitUpsert = uniqueUnitUpsertDatas.map( /*#__PURE__*/function () { var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13(uniqueUnitUpsert) { return _regenerator["default"].wrap(function _callee13$(_context13) { while (1) switch (_context13.prev = _context13.next) { case 0: _context13.next = 2; return unitRepo.upsertUnit({ nominator_id: uniqueUnitUpsert.nominator, denominator_id: uniqueUnitUpsert.denominator }); case 2: return _context13.abrupt("return", _context13.sent); case 3: case "end": return _context13.stop(); } }, _callee13); })); return function (_x20) { return _ref7.apply(this, arguments); }; }()); return _context14.abrupt("return", Promise.all(promiseUnitUpsert)); case 6: case "end": return _context14.stop(); } }, _callee14, this); })); function prepareUnits(_x18, _x19) { return _prepareUnits.apply(this, arguments); } return pr