import { Injectable } from '@nestjs/common' import { isNil } from 'lodash' import { AnthropometryRepository, BioimpedanceCreditRepository, BioimpedanceImportationRepository, PatientRepository, } from '../../../repositories' import { BioimpedanceCredit } from '../../../models/credits/bioimpedance_credit.model' import { CravaService, Product } from '../../../services/crava' const CENTAURO_ACRONYM_PREFIX = 'CTARO' @Injectable() export class Credits { constructor( private readonly cravaService: CravaService, private readonly anthropometryRepository: AnthropometryRepository, private readonly bioimpedanceImportationRepository: BioimpedanceImportationRepository, private readonly bioimpedanceCreditRepository: BioimpedanceCreditRepository, private readonly patientRepository: PatientRepository, ) {} async notifyCravaSystemThatBioimpedanceCreditWasUsed(credit: BioimpedanceCredit): Promise { if (credit.value >= 0) return const anthropometry = await this.anthropometryRepository.findByBioimpedance(credit.bioimpedance_id) const bioimpedanceImportation = await this.bioimpedanceImportationRepository.findByAnthropometry(anthropometry.id) if (!bioimpedanceImportation?.smartfit_unit?.acronym?.startsWith(CENTAURO_ACRONYM_PREFIX)) return const bioimpedanceCreditByCrava = ( await this.bioimpedanceCreditRepository.findCreditsByAuthorType(credit.patient_id, 'crava') ).pop() if (isNil(bioimpedanceCreditByCrava)) return const patient = await this.patientRepository.get(credit.patient_id) await this.cravaService.redeemBenefict({ user: { id: bioimpedanceCreditByCrava.created_by_id, documentNumber: patient.document_number, }, product: Product.BIOIMPEDANCE, }) } }