Skip to content

Commit dac6bdd

Browse files
committed
TM - Formulario terapéutico: nuevo esquema y api
1 parent fb63d39 commit dac6bdd

8 files changed

Lines changed: 11399 additions & 231 deletions

File tree

core/tm/controller/formularioTerapeutico.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 23 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -1,148 +1,28 @@
1-
import { toArray } from './../../../utils/utils';
21
import * as express from 'express';
3-
import * as formularioTerapeutico from '../schemas/formularioTerapeutico';
4-
import * as mongoose from 'mongoose';
5-
import * as utils from '../../../utils/utils';
6-
import * as formularioCtrl from '../controller/formularioTerapeutico';
2+
import { MongoQuery, ResourceBase } from '@andes/core';
73
import { Auth } from './../../../auth/auth.class';
4+
import { FormularioTerapeutico } from '../schemas/formularioTerapeutico';
85

96
const router = express.Router();
107

11-
router.get('/formularioTerapeutico/:id?', async (req, res, next) => {
12-
if (mongoose.Types.ObjectId.isValid(req.params.id)) {
13-
formularioTerapeutico.findById(req.params.id, (err, data) => {
14-
if (err) {
15-
return next(err);
16-
}
17-
res.json(data);
18-
});
19-
} else {
20-
let query;
21-
const opciones = {};
22-
if (req.query.padre) {
23-
const arr = await formularioCtrl.getPadres(req.query.padre, []);
24-
res.json(arr);
25-
} else {
26-
if (req.query.nombreMedicamento) {
27-
// Parámetro texto ingresado
28-
if (isNaN(req.query.nombreMedicamento)) {
29-
30-
opciones['$and'] = [];
31-
const words = String(req.query.nombreMedicamento).split(' ');
32-
words.forEach((word) => {
33-
// normalizamos cada una de las palabras como hace SNOMED para poder buscar palabra a palabra
34-
word = word.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
35-
const expWord = '^' + utils.removeDiacritics(word) + '.*';
36-
// agregamos la palabra a la condicion
37-
// opciones['$and'].push({ 'subcapitulos.medicamentos.concepto.words': { '$regex': expWord } });
38-
opciones['$and'].push({ 'concepto.words': { $regex: '(?i)' + expWord } });
39-
});
40-
}
41-
}
42-
// Parámetro Especialidad
43-
if (req.query.especialidad) {
44-
opciones['lespecialidades'] = String(req.query.especialidad);
45-
}
46-
// Parámetro Carro de Emergencia
47-
if (req.query.carro) {
48-
opciones['carro'] = Boolean(req.query.carro);
49-
}
50-
// Parámetro Nivel de Complejidad
51-
if (req.query.nivel) {
52-
opciones['nivelComplejidad'] = req.query.nivel;
53-
}
54-
55-
opciones['borrado'] = { $exists: true };
56-
57-
// Parámetro vista de arbol
58-
if (req.query.tree) { // llevarlo a lado del controlador
59-
let data;
60-
let out = [];
61-
if (req.query.root) {
62-
data = await toArray(formularioTerapeutico.aggregate(
63-
[
64-
{ $match: { idpadre: mongoose.Types.ObjectId('5ac6512111764e32b35ad416'), borrado: { $exists: false } } },
65-
{
66-
$graphLookup: {
67-
from: 'formularioTerapeutico',
68-
startWith: '$_id',
69-
connectFromField: 'idpadre',
70-
connectToField: 'idpadre',
71-
as: 'arbol'
72-
}
73-
}
74-
]
75-
).cursor({}).exec());
76-
out = [];
77-
data.forEach((nodo, indiceNodo) => {
78-
out.push(nodo);
79-
});
80-
} else {
81-
const idpadre = req.query.idpadre;
82-
data = await toArray(formularioTerapeutico.aggregate(
83-
[
84-
{ $match: { idpadre: mongoose.Types.ObjectId(idpadre), borrado: { $exists: false } } },
85-
{
86-
$graphLookup: {
87-
from: 'formularioTerapeutico',
88-
startWith: '$_id',
89-
connectFromField: 'idpadre',
90-
connectToField: 'idpadre',
91-
as: 'arbol'
92-
}
93-
}
94-
]
95-
).cursor({}).exec());
96-
out = [];
97-
data.forEach((nodo, indiceNodo) => {
98-
out.push(nodo);
99-
});
100-
}
101-
res.json(out);
102-
} else {
103-
query = formularioTerapeutico.find(opciones);
104-
if (!Object.keys(query).length) {
105-
res.status(400).send('Debe ingresar al menos un parámetro');
106-
return next(400);
107-
}
108-
if (req.query.nombreMedicamento) {
109-
try {
110-
const data = await formularioTerapeutico.find({ descripcion: RegExp('^.*' + req.query.nombreMedicamento + '.*$', 'i') });
111-
res.json(data);
112-
} catch (error) {
113-
return next(error);
114-
}
115-
}
116-
}
117-
}
118-
119-
}
120-
});
121-
122-
123-
router.post('/formularioTerapeutico', Auth.authenticate(), (req, res, next) => {
124-
req.body.descripcion = req.body.concepto.term;
125-
const newFormTera = new formularioTerapeutico(req.body);
126-
Auth.audit(newFormTera, req);
127-
newFormTera.save((errSave) => {
128-
if (errSave) {
129-
return next(errSave);
130-
}
131-
res.status(201).json(newFormTera);
132-
});
133-
});
134-
135-
136-
router.put('/formularioTerapeutico/:id', Auth.authenticate(), (req, res, next) => {
137-
const idPadre = mongoose.Types.ObjectId(req.body.idpadre);
138-
req.body.idpadre = idPadre;
139-
formularioTerapeutico.findByIdAndUpdate(req.params.id, req.body, { new: true }, (err, data) => {
140-
if (err) {
141-
return next(err);
142-
}
143-
res.json(data);
144-
});
145-
});
146-
147-
148-
export = router;
8+
class FormularioTerapeuticoResource extends ResourceBase {
9+
Model = FormularioTerapeutico;
10+
resourceName = 'formularioTerapeutico';
11+
keyId = '_id';
12+
searchFields = {
13+
sistema: MongoQuery.partialString,
14+
funcion: MongoQuery.partialString,
15+
grupoFarmacologico: MongoQuery.partialString,
16+
nivelComplejidad: MongoQuery.partialString,
17+
especialidad: MongoQuery.partialString,
18+
carroEmergencia: MongoQuery.partialString,
19+
medicamento: MongoQuery.partialString,
20+
principioActivo: MongoQuery.partialString,
21+
via: MongoQuery.partialString,
22+
formaFarmaceutica: MongoQuery.partialString,
23+
snomed: MongoQuery.partialString
24+
};
25+
middlewares = [Auth.authenticate()];
26+
}
27+
export const FormularioTerapeuticoCtr = new FormularioTerapeuticoResource({});
28+
export const FormularioTerapeuticoRouter = FormularioTerapeuticoCtr.makeRoutes();
Lines changed: 26 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,35 @@
1-
import * as mongoose from 'mongoose';
2-
import { AuditPlugin } from '@andes/mongoose-plugin-audit';
1+
import { model, Schema } from 'mongoose';
32

4-
const schema = new mongoose.Schema({
5-
idpadre: {
6-
type: mongoose.Schema.Types.ObjectId,
3+
4+
export const formularioTerapeuticoSchema = new Schema({
5+
sistema: {
6+
_id: { type: Schema.Types.ObjectId },
7+
nombre: String
8+
},
9+
funcion: {
10+
_id: { type: Schema.Types.ObjectId },
11+
nombre: String
12+
},
13+
grupoFarmacologico: {
14+
_id: { type: Schema.Types.ObjectId },
15+
nombre: String
716
},
8-
descripcion: String,
917
nivelComplejidad: String,
10-
especialidades: [String],
18+
especialidad: String,
1119
requisitos: String,
1220
carroEmergencia: String,
13-
recomendaciones: String,
21+
medicamento: String,
1422
indicaciones: String,
15-
comentario: String,
16-
conceptId: String,
17-
borrado: Boolean,
18-
concepto: Object
19-
// padre: {
20-
// nombre: String,
21-
// conceptId: String,
22-
// },
23-
// nombre: String,
24-
// conceptId: String,
25-
// capitulo: Number,
26-
// nombre: String,
27-
// medicamentos: [{
28-
// clasificacion: String,
29-
// numero: Number,
30-
// nivelComplejidad: String,
31-
// recomendaciones: String,
32-
// especialidades: [String], // enum?
33-
// requisitos: String, // enum
34-
// carroEmergencia: Boolean,
35-
// indicaciones: String, // estandarizar?
36-
// comentario: String, // estandarizar?
37-
// concepto: {
38-
// conceptId: String,
39-
// term: String,
40-
// fsn: String,
41-
// semanticTag: String,
42-
// words: [String]
43-
// }
44-
// }]
45-
// }]
23+
recomendacionesDeUso: String,
24+
principioActivo: String,
25+
via: String,
26+
formaFarmaceutica: String,
27+
potencia: String,
28+
unidades: String,
29+
presentacion: String,
30+
atcVia: String,
31+
snomed: String
4632
});
4733

48-
// Habilitar plugin de auditoría
49-
schema.plugin(AuditPlugin);
50-
51-
// Exportar modelo
52-
const model = mongoose.model('formularioTerapeutico', schema, 'formularioTerapeutico');
34+
export const FormularioTerapeutico = model('formulario-terapeutico', formularioTerapeuticoSchema, 'formulario-terapeutico');
5335

54-
export = model;

core/tm/schemas/ftpFuncion.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import * as mongoose from 'mongoose';
2+
3+
const ftpFuncionSchema = new mongoose.Schema({
4+
nombre: String
5+
});
6+
7+
export const FtpFuncion = mongoose.model('ftpFuncion', ftpFuncionSchema, 'ftpFuncion');
8+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import * as mongoose from 'mongoose';
2+
3+
const ftpGrupoFarmacologicoSchema = new mongoose.Schema({
4+
nombre: String
5+
});
6+
7+
export const FtpGrupoFarmacologico = mongoose.model('ftpGrupoFarmacologico', ftpGrupoFarmacologicoSchema, 'ftpGrupoFarmacologico');
8+

core/tm/schemas/ftpSistema.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as mongoose from 'mongoose';
2+
3+
const ftpSistemaSchema = new mongoose.Schema({
4+
nombre: String
5+
});
6+
7+
export const FtpSistema = mongoose.model('ftpSistema', ftpSistemaSchema, 'ftpSistema');

0 commit comments

Comments
 (0)