diff --git a/core/tm/farmacia.routes.ts b/core/tm/farmacia.routes.ts index b770a4f451..c7110c30c1 100644 --- a/core/tm/farmacia.routes.ts +++ b/core/tm/farmacia.routes.ts @@ -3,6 +3,7 @@ import { Farmacia, IFarmaciaDoc } from './schemas/farmacia'; import { EventCore } from '@andes/event-bus/'; import { Auth } from '../../auth/auth.class'; + class FarmaciasResourse extends ResourceBase { Model = Farmacia; resourceName = 'farmacias'; diff --git a/core/tm/schemas/farmacia.ts b/core/tm/schemas/farmacia.ts index 066bd77b3e..bc5371f21b 100644 --- a/core/tm/schemas/farmacia.ts +++ b/core/tm/schemas/farmacia.ts @@ -1,8 +1,23 @@ import * as mongoose from 'mongoose'; +import { CustomError } from '@andes/core'; import * as direccionSchema from './direccion'; import { IFarmacia } from '../interfaces/IFarmacia'; import { AndesDocWithAudit } from '@andes/mongoose-plugin-audit'; +function validarCuit(cuit: string): boolean { + if (!cuit || !/^\d{11}$/.test(cuit)) { return false; } + const coeficientes = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]; + const nums = cuit.split('').map(Number); + let sum = 0; + for (let i = 0; i < 10; i++) { + sum += nums[i] * coeficientes[i]; + } + let verificador = 11 - (sum % 11); + if (verificador === 11) { verificador = 0; } + if (verificador === 10) { verificador = 9; } + return verificador === nums[10]; +} + const FarmaciaSchema = new mongoose.Schema({ denominacion: String, razonSocial: String, @@ -38,5 +53,17 @@ const FarmaciaSchema = new mongoose.Schema({ }] }); +FarmaciaSchema.pre('save', function (this: any, next) { + if (this.cuit) { + const cuit = this.cuit.replace(/\D/g, ''); + if (!validarCuit(cuit)) { + return next(new CustomError('CUIT inválido. Debe tener 11 dígitos numéricos con dígito verificador correcto.', 400)); + } + this.cuit = cuit; + } + next(); +}); + + export type IFarmaciaDoc = AndesDocWithAudit; export const Farmacia = mongoose.model('farmacias', FarmaciaSchema, 'farmacias'); diff --git a/scripts/fix-cuit-farmacias.ts b/scripts/fix-cuit-farmacias.ts new file mode 100644 index 0000000000..913486f16c --- /dev/null +++ b/scripts/fix-cuit-farmacias.ts @@ -0,0 +1,20 @@ +import { Farmacia } from '../core/tm/schemas/farmacia'; + +async function run(done) { + try { + const farmacias = await Farmacia.find({ cuit: { $regex: /-/ } }); + for (const farmacia of farmacias) { + if (farmacia.cuit) { + farmacia.cuit = farmacia.cuit.replace(/[^\d]/g, ''); + await Farmacia.update({ _id: farmacia._id }, { $set: { cuit: farmacia.cuit } }); + } + } + done(); + } catch (error) { + // eslint-disable-next-line no-console + console.error('Error updating CUIT:', error); + done(error); + } +} + +export = run;