@ai-ecom/medusa-plugin-patient-record
Version:
A plugin for patient record
892 lines (888 loc) • 89.7 kB
JavaScript
"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