10 |
11 | `;
12 |
13 | constructor(public encabezado) {
14 | super();
15 | }
16 |
17 | public async process() {
18 | this.data = {
19 | encabezado: this.encabezado
20 | };
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/packages/drive/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@andes/drive",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "types": "index.d.ts",
7 | "scripts": {
8 | "test": "echo \"Error: no test specified\" && exit 1"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "request": "^2.83.0",
14 | "mongoose": "^5.0.14",
15 | "multer": "^1.4.0",
16 | "node-seaweedfs": "^1.4.0",
17 | "gridfs-stream": "^1.1.1",
18 | "@andes/mongoose-plugin-audit": "^1.1.3",
19 | "@andes/api-tool": "^1.0.0"
20 | }
21 | }
--------------------------------------------------------------------------------
/modules/forms/forms-epidemiologia/forms-history.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | import { FormsEpidemiologiaCloneSchema } from './forms-epidemiologia-schema';
3 |
4 |
5 | const FormsHistorySchema = FormsEpidemiologiaCloneSchema.clone();
6 | FormsHistorySchema.add({
7 | createdAt: Date,
8 | createdBy: { nombreCompleto: String, username: String },
9 | updatedAt: Date,
10 | updatedBy: { nombreCompleto: String, username: String },
11 | id: mongoose.Types.ObjectId
12 | });
13 |
14 | export const FormsHistory = mongoose.model('formsEpidemiologiaHistory', FormsHistorySchema, 'formsEpidemiologiaHistory');
15 |
--------------------------------------------------------------------------------
/modules/matriculaciones/schemas/agendaMatriculaciones.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | const agendaMatriculacionesSchema = new mongoose.Schema({
4 | diasHabilitados: { type: Array, required: true },
5 | horarioInicioTurnos: { type: String, required: true },
6 | horarioFinTurnos: { type: String, required: true },
7 | fechasExcluidas: [Date],
8 | duracionTurno: { type: Number, required: true }
9 | });
10 |
11 | // Virtuals
12 |
13 |
14 | const agendaMatriculaciones = mongoose.model('agendaMatriculaciones', agendaMatriculacionesSchema, 'agendaMatriculaciones');
15 |
16 | export = agendaMatriculaciones;
17 |
--------------------------------------------------------------------------------
/templates/ficha-epidemiologica/ficha-epidemiologica.scss:
--------------------------------------------------------------------------------
1 | .contenedor-secundario {
2 | display: block;
3 | text-align: center;
4 | font-size: .25cm;
5 | }
6 |
7 | p {
8 | margin: 5px 0;
9 | font-family: Arial, sans-serif;
10 | font-size: .27cm;
11 | }
12 |
13 | .foot {
14 | font-family: Arial, sans-serif;
15 | font-size: 10px;
16 | }
17 |
18 | .logoHeader {
19 | width: 70%;
20 | display: block;
21 | margin: auto;
22 | }
23 |
24 | .texto-centrado {
25 | text-align: center;
26 | font-size: 14px;
27 | align-items: center;
28 | font-weight: bold;
29 | text-decoration: underline;
30 | }
--------------------------------------------------------------------------------
/modules/huds/motivosHuds/motivosHuds.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { MotivosHuds } from './motivosHuds.schema';
3 |
4 | class MotivosHudsResource extends ResourceBase {
5 | Model = MotivosHuds;
6 | resourceName = 'motivosHuds';
7 | searchFileds = {
8 | label: MongoQuery.partialString,
9 | key: MongoQuery.partialString,
10 | descripcion: MongoQuery.partialString,
11 | moduloDefault: MongoQuery.partialString
12 | };
13 | }
14 | export const MotivosHudsCtr = new MotivosHudsResource({});
15 | export const MotivosHudsRouter = MotivosHudsCtr.makeRoutes();
16 |
--------------------------------------------------------------------------------
/scripts/update-pacientes-ficha.ts:
--------------------------------------------------------------------------------
1 | import { FormsEpidemiologia } from '../modules/forms/forms-epidemiologia/forms-epidemiologia-schema';
2 | import { Types } from 'mongoose';
3 |
4 | async function run(done) {
5 |
6 | const fichas: any = await FormsEpidemiologia.find({ 'paciente.id': { $type: 'string' } });
7 | for await (const ficha of fichas) {
8 | const paciente = ficha.paciente;
9 | paciente.id = new Types.ObjectId(paciente.id);
10 | await FormsEpidemiologia.update(
11 | { _id: ficha.id },
12 | { $set: { paciente } }
13 | );
14 | }
15 | done();
16 | }
17 |
18 | export = run;
19 |
--------------------------------------------------------------------------------
/core/tm/routes/organizacionCache.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import * as organizacionCache from '../schemas/organizacionCache';
3 |
4 | const router = express.Router();
5 |
6 | router.get('/organizacionesCache', (req, res, next) => {
7 |
8 | const query = organizacionCache.organizacionCache.find({}, {
9 | coordenadasDeMapa: 1,
10 | nombre: 1,
11 | localidad: 1,
12 | domicilio: 1,
13 | telefono: 1
14 | });
15 | query.exec((err, data) => {
16 | if (err) {
17 | return next(err);
18 | }
19 | res.json(data);
20 | });
21 | });
22 |
23 | export = router;
24 |
--------------------------------------------------------------------------------
/core/tm/schemas/eclqueries.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | import { Document, Model } from 'mongoose';
3 |
4 | export interface ECL {
5 | key: string;
6 | nombre: string;
7 | valor: string;
8 | descripcion: string;
9 | }
10 |
11 | export interface ECLQueriesDocument extends ECL, Document { }
12 |
13 | export const ECLQueriesSchema = new mongoose.Schema({
14 | key: String,
15 | nombre: String,
16 | valor: String,
17 | descripcion: String
18 | });
19 |
20 | export const ECLQueries: Model
= mongoose.model(
21 | 'ECLQueries',
22 | ECLQueriesSchema,
23 | 'eclqueries'
24 | );
25 |
--------------------------------------------------------------------------------
/modules/recetas/parametros.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export interface RecetaParametros {
4 | key: string;
5 | nombre: string;
6 | value: string;
7 | type: 'text' | 'number';
8 | observacion: string;
9 | }
10 |
11 | export const RecetasParametrosSchema = new mongoose.Schema({
12 | key: String,
13 | nombre: String,
14 | value: String,
15 | type: {
16 | type: String,
17 | enum: ['text', 'number']
18 | },
19 | observacion: String
20 | });
21 |
22 |
23 | export const RecetasParametros = mongoose.model('recetasParametros', RecetasParametrosSchema, 'recetasParametros');
24 |
--------------------------------------------------------------------------------
/packages/event-bus/index.ts:
--------------------------------------------------------------------------------
1 | const Emitter = require('pattern-emitter');
2 |
3 | export class EventBus extends Emitter {
4 |
5 | /**
6 | * Emite un evento de forma asincrónica
7 | * @param {string} event Nombre del evento a emitir
8 | * @param {any} params listado de paramentros relacionados con el evento
9 | */
10 |
11 | emitAsync (name: String, ...params: any[]);
12 |
13 | emitAsync() {
14 | process.nextTick(() => {
15 | this.emit.apply(this, arguments);
16 | });
17 | }
18 |
19 | }
20 |
21 | export const EventCore = new EventBus();
22 |
23 | export const EventSocket = new EventBus();
24 |
--------------------------------------------------------------------------------
/core/tm/eclqueries.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { Auth } from './../../auth/auth.class';
3 | import { ECLQueries } from './schemas/eclqueries.schema';
4 |
5 | class ECLQueriesController extends ResourceBase {
6 | Model = ECLQueries;
7 | resourceName = 'eclqueries';
8 | middlewares = [Auth.authenticate()];
9 | routesEnable = ['get', 'search'];
10 | searchFileds = {
11 | key: MongoQuery.partialString,
12 | nombre: MongoQuery.partialString
13 | };
14 | }
15 |
16 | export const ECLQueriesCtr = new ECLQueriesController({});
17 | export const ECLQueriesRouter = ECLQueriesCtr.makeRoutes();
18 |
--------------------------------------------------------------------------------
/core-v2/mpi/index.ts:
--------------------------------------------------------------------------------
1 | import { Router } from 'express';
2 | import { PacienteRouter } from './paciente/paciente.routes';
3 | import { PacientesEmpadronadosRouter } from './pacientes-empadronados/pacientes-empadronados.routes';
4 | import { ParentescoRouter } from './parentesco/parentesco.routes';
5 | import { Routing as RoutingValidacion } from './validacion';
6 | require('./paciente/paciente.events');
7 |
8 |
9 | const router = Router();
10 | router.use(PacienteRouter);
11 | router.use(ParentescoRouter);
12 | router.use(RoutingValidacion);
13 | router.use(PacientesEmpadronadosRouter);
14 |
15 |
16 | export const RoutingMPI = router;
17 |
18 | export * from './paciente';
19 |
--------------------------------------------------------------------------------
/modules/rup/internacion/internacion.log.ts:
--------------------------------------------------------------------------------
1 | import { Connections } from '../../../connections';
2 | import { Logger } from '@andes/log';
3 |
4 | export const internacionCamaEstadosLog = new Logger({
5 | connection: Connections.logs,
6 | module: 'internacion',
7 | type: 'cama-estados',
8 | application: 'andes',
9 | bucketBy: 'd',
10 | bucketSize: 100,
11 | expiredAt: '2 M'
12 | });
13 |
14 | export const internacionCensosLog = new Logger({
15 | connection: Connections.logs,
16 | module: 'internacion',
17 | type: 'censos',
18 | application: 'andes',
19 | bucketBy: 'd',
20 | bucketSize: 100,
21 | expiredAt: '2 M'
22 | });
23 |
--------------------------------------------------------------------------------
/modules/forms/forms-epidemiologia/forms-history.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { FormsHistory } from './forms-history.schema';
3 | import { Auth } from '../../../auth/auth.class';
4 |
5 | class FormsHistoryResource extends ResourceBase {
6 | Model = FormsHistory;
7 | resourceName = 'formsHistory';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | id: {
11 | field: 'id',
12 | fn: MongoQuery.equalMatch
13 | },
14 | };
15 | }
16 |
17 | export const FormHistoryCtr = new FormsHistoryResource();
18 | export const FormHistoryRouter = FormHistoryCtr.makeRoutes();
19 |
--------------------------------------------------------------------------------
/packages/drive/middleware/multer.ts:
--------------------------------------------------------------------------------
1 | const multer = require('multer');
2 |
3 |
4 | function AdapterStorage(adapter) {
5 | this.adapter = adapter;
6 | }
7 |
8 | AdapterStorage.prototype._handleFile = function _handleFile(req, file, cb) {
9 | this.adapter.write(file.stream).then(id => {
10 | cb(null, { id, adapter: this.adapter.name, size: file.size });
11 | });
12 | };
13 |
14 | AdapterStorage.prototype._removeFile = function _removeFile(req, file, cb) {
15 | cb(null, true);
16 | };
17 |
18 | export default (adapter) => {
19 | const fileMulterAdapter = new AdapterStorage(adapter);
20 | return multer({ storage: fileMulterAdapter });
21 | };
22 |
23 |
--------------------------------------------------------------------------------
/core/log/schemas/logJobs.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const logJobsSchema = new mongoose.Schema({
4 | job: {
5 | type: String,
6 | enum: [
7 | 'actualizar agendas', 'actualizar carpetas', 'actualizar turnos del dia', 'cda sips', 'farmacias',
8 | 'integracion andes', 'mpi corrector', 'mpi updater', 'recordar turnos',
9 | 'recordatorio agenda', 'robo sender'
10 | ]
11 | },
12 | error: mongoose.Schema.Types.Mixed,
13 | createdAt: Date,
14 | createdBy: mongoose.Schema.Types.Mixed
15 |
16 | });
17 |
18 | export const logJobs = mongoose.model('logJobs', logJobsSchema, 'logJobs');
19 |
--------------------------------------------------------------------------------
/jobs/exportCovid19.ts:
--------------------------------------------------------------------------------
1 | import { exportCovid19 } from '../modules/vacunas/controller/vacunas.controller';
2 |
3 | async function run(done) {
4 | // Si length=5 entonces vienen dos argumentos (fechaDesde y fechaHasta)
5 | if (process.argv.length === 5) {
6 | const desde = process.argv[3];
7 | const hasta = process.argv[4];
8 | await exportCovid19(null, null, desde, hasta);
9 | } else { // Si no es 5 entonces viene 1 solo argumento (horas) o sin argumentos (por defecto una hora)
10 | const horas = process.argv[3] || '1';
11 | await exportCovid19(horas, null, null, null);
12 | }
13 | done();
14 | }
15 |
16 | export = run;
17 |
18 |
--------------------------------------------------------------------------------
/modules/dispositivo/dispositivo.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { Auth } from '../../auth/auth.class';
3 | import { Dispositivo } from './dispositivo.schema';
4 |
5 | class DispositivoResource extends ResourceBase {
6 | Model = Dispositivo;
7 | resourceName = 'dispositivo';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | nombre: MongoQuery.partialString,
11 | tipo: MongoQuery.partialString,
12 | activo: MongoQuery.equalMatch,
13 | };
14 | }
15 |
16 | export const DispositivoCtr = new DispositivoResource({});
17 | export const DispositivoRouter = DispositivoCtr.makeRoutes();
18 |
--------------------------------------------------------------------------------
/core/tm/schemas/grupo-poblacional.schema.ts:
--------------------------------------------------------------------------------
1 | import { Schema, model } from 'mongoose';
2 |
3 | export const GrupoPoblacionalSchema = new Schema({
4 | id: Schema.Types.ObjectId,
5 | nombre: {
6 | type: String,
7 | required: true
8 | },
9 | descripcion: {
10 | type: String,
11 | required: true
12 | },
13 | activo: {
14 | type: Boolean,
15 | default: true
16 | },
17 | validaciones: Schema.Types.Mixed,
18 | mensajeDefault: Schema.Types.Mixed,
19 | excepciones: Schema.Types.Mixed
20 |
21 | });
22 |
23 | export const GrupoPoblacional = model('grupo-poblacional', GrupoPoblacionalSchema, 'grupo-poblacional');
24 |
--------------------------------------------------------------------------------
/modules/descargas/model/barcode.ts:
--------------------------------------------------------------------------------
1 | const bwipjs = require('bwip-js');
2 |
3 | /**
4 | * Genera un código de barras como imagen PNG en base64.
5 | * @param text Texto que será codificado
6 | * @param bcid Tipo de código de barras, por defecto 'code128'
7 | * @returns Cadena base64 para usar como
8 | */
9 | export async function generateBarcodeBase64(text: string, bcid: string) {
10 | bcid = bcid ? bcid : 'code128';
11 | const pngBuffer = await bwipjs.toBuffer({
12 | bcid,
13 | text,
14 | scale: 1,
15 | height: 8,
16 | includetext: true,
17 | });
18 |
19 | return pngBuffer.toString('base64');
20 | }
21 |
--------------------------------------------------------------------------------
/modules/descargas/puco/constancia-puco.ts:
--------------------------------------------------------------------------------
1 | import { InformePDF, getAssetsURL } from '../model/informe.class';
2 | import { ConstanciaPucoBody } from './constancia-puco-body';
3 | import { ConstanciaPucoHeader } from './constancia-puco-header';
4 |
5 | export class ConstanciaPuco extends InformePDF {
6 | constructor(public req) {
7 | super();
8 | }
9 |
10 | stylesUrl = [
11 | getAssetsURL('templates/puco/constancia.scss')
12 | ];
13 |
14 | public async process() {
15 | this.header = new ConstanciaPucoHeader(this.req.body.financiador);
16 | this.body = new ConstanciaPucoBody(this.req.body);
17 |
18 | await super.process();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/modules/rup/internacion/index.ts:
--------------------------------------------------------------------------------
1 | export { CamasRouter } from './camas.routes';
2 | export { CensosRouter } from './censo.routes';
3 | export { EstadosRouter } from './estados.routes';
4 | export { SalaComunRouter } from './sala-comun/sala-comun.routes';
5 | export { InternacionRouter } from './internacion.routes';
6 | export { InternacionResumenRouter } from './resumen/internacion-resumen.routes';
7 | export { PlanIndicacionesRouter } from './plan-indicaciones/plan-indicaciones.routes';
8 | export { PlanIndicacionesEventosRouter } from './plan-indicaciones/plan-indicaciones-eventos.routes';
9 |
10 | import './resumen/internacion-resumen.hook';
11 | import './plan-indicaciones/plan-indicaciones.hook';
12 |
--------------------------------------------------------------------------------
/modules/mobileApp/routes/gestion.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import { urlDatosGestion } from '../../../config.private';
3 | const request = require('request');
4 |
5 | const router = express.Router();
6 | const urlGestion = urlDatosGestion;
7 |
8 |
9 | router.get('/datosGestion/', (req, res, next) => {
10 | const options = {
11 | method: 'GET',
12 | uri: urlGestion,
13 | body: {},
14 | json: true,
15 | timeout: 10000,
16 | };
17 | request(options, (error, response, _body) => {
18 | if (error) {
19 | return next(error);
20 | }
21 | res.json(_body);
22 | });
23 |
24 | });
25 |
26 | export = router;
27 |
--------------------------------------------------------------------------------
/modules/mobileApp/routes/categoria.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { Categoria } from '../schemas/categoria';
3 |
4 | class CategoriaResource extends ResourceBase {
5 | Model = Categoria;
6 | resourceName = 'categoria';
7 | keyId = '_id';
8 | searchFileds = {
9 | titulo: MongoQuery.partialString,
10 | expresionSnomed: MongoQuery.equalMatch,
11 | busquedaPor: {
12 | field: 'busquedaPor',
13 | fn: (value) => {
14 | return { $in: value };
15 | }
16 | }
17 | };
18 | }
19 | export const CategoriaCtr = new CategoriaResource({});
20 | module.exports = CategoriaCtr.makeRoutes();
21 |
--------------------------------------------------------------------------------
/modules/carpetas/controller/carpetaPacienteController.ts:
--------------------------------------------------------------------------------
1 | import * as carpetaPaciente from '../../carpetas/schemas/carpetaPaciente';
2 |
3 | export async function buscarCarpeta(req) {
4 | let carpeta;
5 | if (req.params.id) {
6 | carpeta = carpetaPaciente.findById(req.params.id);
7 | } else {
8 | if (req.query.documento && req.query.organizacion) {
9 | carpeta = carpetaPaciente.find({ documento: req.query.documento });
10 | carpeta.where('carpetaEfectores.organizacion._id').equals(req.query.organizacion);
11 | } else {
12 | return [];
13 | }
14 | }
15 | return await carpeta;
16 | }
17 |
18 | exports.buscarCarpeta = buscarCarpeta;
19 |
--------------------------------------------------------------------------------
/jobs/manual.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Corre una Jobs de forma manual. Corre desde el root del proyecto.
3 | *
4 | * node jobs/manual.js [Js File to run]
5 | */
6 |
7 |
8 | import { AndesDrive } from '@andes/drive/';
9 | import { Drive } from '../config.private';
10 | import { Connections } from './../connections';
11 |
12 | const path = require('path');
13 |
14 | Connections.initialize();
15 | AndesDrive.setup(Drive);
16 |
17 | const { setupServices } = require('../services');
18 | setupServices();
19 |
20 | const done = () => {
21 | process.exit(0);
22 | };
23 |
24 | const actionName = process.argv[2];
25 | require('./../modules/webhook');
26 | const action = require(path.join('..', actionName));
27 |
28 | action(done);
29 |
--------------------------------------------------------------------------------
/modules/vacunas/schemas/nomivacCondicion.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const nomivacCondicionSchema = new mongoose.Schema({
4 | id: mongoose.Schema.Types.ObjectId,
5 | codigo: {
6 | type: Number,
7 | required: true
8 | },
9 | nombre: {
10 | type: String,
11 | required: true
12 | },
13 | sexo: String,
14 | orden: String,
15 | habilitado: {
16 | type: Boolean,
17 | required: true,
18 | default: false
19 | }
20 | });
21 |
22 | nomivacCondicionSchema.index({
23 | codigo: 1
24 | });
25 | export const nomivacCondicion = mongoose.model('nomivacCondiciones', nomivacCondicionSchema, 'nomivacCondiciones');
26 |
--------------------------------------------------------------------------------
/core/term/schemas/cie10.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const schema = new mongoose.Schema({
4 | capitulo: String,
5 | grupo: String,
6 | causa: String,
7 | subcausa: String,
8 | codigo: String,
9 | nombre: String,
10 | sinonimo: String,
11 | c2: Boolean,
12 | reporteC2: String,
13 | ficha: String
14 | });
15 |
16 | /**
17 | * Desacoplo el schema de la colleccion del que se usa como subschema
18 | * Mongoose te crea indices en los subschemas.
19 | * Consumen espacio.
20 | */
21 |
22 | const Cie10SchemaWithIndex = schema.clone();
23 | Cie10SchemaWithIndex.index({ codigo: 1 });
24 | export const model = mongoose.model('cie10', Cie10SchemaWithIndex, 'cie10');
25 |
--------------------------------------------------------------------------------
/modules/insumos/insumos.routes.ts:
--------------------------------------------------------------------------------
1 | import { asyncHandler, Request, Response } from '@andes/api-tool';
2 | import { MongoQuery, ResourceBase } from '@andes/core';
3 | import { Auth } from '../../auth/auth.class';
4 | import { Insumo } from './insumos-schema';
5 |
6 | class InsumosResource extends ResourceBase {
7 | Model = Insumo;
8 | resourceName = 'insumos';
9 | middlewares = [Auth.authenticate()];
10 | searchFileds = {
11 | insumo: MongoQuery.partialString,
12 | tipo: MongoQuery.equalMatch,
13 | requiereEspecificacion: MongoQuery.equalMatch,
14 | };
15 | }
16 |
17 |
18 | export const InsumosCtr = new InsumosResource({});
19 | export const InsumosRouter = InsumosCtr.makeRoutes();
20 |
21 |
--------------------------------------------------------------------------------
/modules/recetas/recetas.error.ts:
--------------------------------------------------------------------------------
1 | export class RecetaNotFound extends Error {
2 | status = 400;
3 | message = 'receta no encontrada';
4 | }
5 |
6 | export class ParamsIncorrect extends Error {
7 | status = 400;
8 | message = 'parámetros incorrectos';
9 | constructor(motivo?: string) {
10 | super();
11 | this.message = motivo ? this.message + '. Motivo: ' + motivo : this.message;
12 | }
13 | }
14 |
15 | export class RecetaNotEdit extends Error {
16 | status = 400;
17 | message = 'La receta no se puede modificar';
18 | constructor(motivo?: string) {
19 | super();
20 | this.message = motivo ? this.message + '. Motivo: ' + motivo : this.message;
21 | }
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/modules/webhook/webhooklog/webhooklog.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const WebHookLogSchema = new mongoose.Schema({
4 | event: String,
5 | url: String,
6 | method: {
7 | type: String,
8 | default: 'POST',
9 | enum: ['POST', 'PUT', 'PATCH', 'GET']
10 | },
11 | headers: mongoose.SchemaTypes.Mixed, // for Token AUTH
12 | body: mongoose.SchemaTypes.Mixed, // a projections of data to send
13 | subscriptionId: mongoose.SchemaTypes.ObjectId,
14 | status: Number,
15 | response: mongoose.SchemaTypes.Mixed,
16 | updatedAt: Date
17 | }, { timestamps: true });
18 | export const WebHookLog = mongoose.model('webhookLog', WebHookLogSchema, 'webhookLog');
19 |
--------------------------------------------------------------------------------
/modules/constantes/constantes.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | import { Document, Model } from 'mongoose';
3 |
4 | export interface Constante {
5 | key: string;
6 | nombre: string;
7 | source: string;
8 | type: 'text' | 'number';
9 | }
10 |
11 | export interface ConstanteDocument extends Constante, Document { }
12 |
13 | export const ConstantesSchema = new mongoose.Schema({
14 | key: String,
15 | nombre: String,
16 | source: String,
17 | type: {
18 | type: String,
19 | enum: ['text', 'number']
20 | }
21 | });
22 |
23 | export const Constantes: Model = mongoose.model(
24 | 'constantes',
25 | ConstantesSchema,
26 | 'constantes'
27 | );
28 |
--------------------------------------------------------------------------------
/modules/descargas/ficha-epidemiologica/ficha-header.ts:
--------------------------------------------------------------------------------
1 | import { HTMLComponent } from '../model/html-component.class';
2 | import { loadImage } from '../model/informe.class';
3 |
4 | export class FichaEpidemiologicaHeader extends HTMLComponent {
5 | template = `
6 |
7 | `;
8 |
9 | constructor(public detalle) {
10 | super();
11 | }
12 |
13 | public async process() {
14 | this.data = {
15 | tipo: this.detalle.type.name.toUpperCase(),
16 | logos: {
17 | andes: loadImage('templates/ficha-epidemiologica/img/logoEpidemio.png')
18 | },
19 | };
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/modules/vacunas/nomivacCategoria.route.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { nomivacCategoria } from './schemas/nomivacCategoria.schema';
3 | import { Auth } from '../../auth/auth.class';
4 |
5 | class NomivacCategoriaResource extends ResourceBase {
6 | Model = nomivacCategoria;
7 | resourceName = 'nomivacCategorias';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | codigo: MongoQuery.equalMatch,
11 | habilitado: MongoQuery.equalMatch,
12 | nombre: MongoQuery.partialString
13 | };
14 | }
15 |
16 | export const nomivacCategoriaCtr = new NomivacCategoriaResource({});
17 | export const nomivacCategoriaRouter = nomivacCategoriaCtr.makeRoutes();
18 |
--------------------------------------------------------------------------------
/modules/vacunas/nomivacCondicion.route.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { nomivacCondicion } from './schemas/nomivacCondicion.schema';
3 | import { Auth } from '../../auth/auth.class';
4 |
5 | class NomivacCondicionResource extends ResourceBase {
6 | Model = nomivacCondicion;
7 | resourceName = 'nomivacCondiciones';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | codigo: MongoQuery.equalMatch,
11 | habilitado: MongoQuery.equalMatch,
12 | nombre: MongoQuery.partialString
13 | };
14 | }
15 |
16 | export const nomivacCondicionCtr = new NomivacCondicionResource({});
17 | export const nomivacCondicionRouter = nomivacCondicionCtr.makeRoutes();
18 |
--------------------------------------------------------------------------------
/modules/matriculaciones/schemas/turno.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | import { AuditPlugin } from '@andes/mongoose-plugin-audit';
3 |
4 | const turnoSchema = new mongoose.Schema({
5 | fecha: { type: Date, required: true },
6 | tipo: {
7 | type: String,
8 | enum: ['matriculacion', 'renovacion']
9 | },
10 | notificado: { type: Boolean, default: false },
11 | sePresento: { type: Boolean, default: false },
12 | profesional: { type: mongoose.Schema.Types.ObjectId, ref: 'turnoSolicitado' },
13 | anulado: Boolean
14 | });
15 |
16 | // Virtuals
17 |
18 | turnoSchema.plugin(AuditPlugin);
19 | const turno = mongoose.model('turnoMatriculaciones', turnoSchema, 'turno');
20 |
21 | export = turno;
22 |
--------------------------------------------------------------------------------
/modules/mobileApp/sendMessageCache.routes.ts:
--------------------------------------------------------------------------------
1 | import { RoboModel } from '../../utils/roboSender/roboSchema';
2 | import { MongoQuery, ResourceBase } from '@andes/core';
3 | import { Auth } from '../../auth/auth.class';
4 |
5 | class SendMessageCacheResource extends ResourceBase {
6 | Model = RoboModel;
7 | resourceName = 'sendMessageCache';
8 | keyId = '_id';
9 | middlewares = [Auth.authenticate()];
10 | searchFileds = {
11 | email: MongoQuery.partialString,
12 | phone: MongoQuery.partialString,
13 | search: ['email', 'phone']
14 | };
15 | }
16 |
17 | export const SendMessageCacheCtr = new SendMessageCacheResource({});
18 | export const SendMessageCacheRouter = SendMessageCacheCtr.makeRoutes();
19 |
--------------------------------------------------------------------------------
/modules/constantes/constantes.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { Auth } from '../../auth/auth.class';
3 | import { Constantes } from './constantes.schema';
4 |
5 | class ConstantesController extends ResourceBase {
6 | Model = Constantes;
7 | resourceName = 'constantes';
8 | middlewares = [Auth.authenticate()];
9 | routesEnable = ['get', 'search'];
10 | searchFileds = {
11 | key: MongoQuery.equalMatch,
12 | nombre: MongoQuery.partialString,
13 | source: MongoQuery.equalMatch,
14 | type: MongoQuery.equalMatch
15 | };
16 | }
17 |
18 | export const ConstantesCtr = new ConstantesController({});
19 | export const ConstantesRouter = ConstantesCtr.makeRoutes();
20 |
--------------------------------------------------------------------------------
/core/tm/routes/tipoEstablecimiento.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import * as tipoEstablecimiento from '../schemas/tipoEstablecimiento_model';
3 |
4 | const router = express.Router();
5 |
6 | router.get('/tiposEstablecimiento/:id*?', (req, res, next) => {
7 | if (req.params.id) {
8 | tipoEstablecimiento.findById(req.params.id, (err, data) => {
9 | if (err) {
10 | return next(err);
11 | }
12 | res.json(data);
13 | });
14 | } else {
15 | tipoEstablecimiento.find({}, (err, data) => {
16 | if (err) {
17 | return next(err);
18 | }
19 | res.json(data);
20 | });
21 | }
22 | });
23 | export = router;
24 |
25 |
--------------------------------------------------------------------------------
/modules/centroOperativoMedico/reglasDerivacion.routes.ts:
--------------------------------------------------------------------------------
1 | import { ReglasDerivacion } from './schemas/reglasDerivacion.schema';
2 | import { MongoQuery, ResourceBase } from '@andes/core';
3 | import { Auth } from '../../auth/auth.class';
4 |
5 | class ReglasDerivacionResource extends ResourceBase {
6 | Model = ReglasDerivacion;
7 | resourceName = 'reglasDerivacion';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | estadoInicial: MongoQuery.equalMatch,
11 | estadoFinal: MongoQuery.equalMatch,
12 | soloCOM: MongoQuery.equalMatch
13 | };
14 | }
15 |
16 | export const ReglasDerivacionCtr = new ReglasDerivacionResource({});
17 | export const ReglasDerivacionRouter = ReglasDerivacionCtr.makeRoutes();
18 |
--------------------------------------------------------------------------------
/modules/gestor-usuarios/perfil.schema.ts:
--------------------------------------------------------------------------------
1 | import { AuditPlugin } from '@andes/mongoose-plugin-audit';
2 | import { Schema, model } from 'mongoose';
3 |
4 | export const PerfilSchema = new Schema({
5 |
6 | nombre: {
7 | type: String,
8 | required: true
9 | },
10 |
11 | permisos: {
12 | type: [String],
13 | required: true
14 | },
15 |
16 | organizacion: {
17 | type: Schema.Types.ObjectId,
18 | ref: 'organizacion',
19 | required: false
20 | },
21 |
22 | activo: {
23 | type: Boolean,
24 | required: true
25 | }
26 |
27 | });
28 |
29 | PerfilSchema.plugin(AuditPlugin);
30 |
31 | export const Perfiles = model('authPerfiles', PerfilSchema, 'authPerfiles');
32 |
--------------------------------------------------------------------------------
/modules/vacunas/nomivacLaboratorio.route.ts:
--------------------------------------------------------------------------------
1 | import { Auth } from '../../auth/auth.class';
2 | import { MongoQuery, ResourceBase } from '@andes/core';
3 | import { nomivacLaboratorio } from './schemas/nomivacLaboratorios.schema';
4 |
5 | class NomivacLaboratorioResource extends ResourceBase {
6 | Model = nomivacLaboratorio;
7 | resourceName = 'nomivacLaboratorios';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | codigo: MongoQuery.equalMatch,
11 | habilitado: MongoQuery.equalMatch,
12 | nombre: MongoQuery.partialString
13 | };
14 | }
15 |
16 | export const nomivacLaboratorioCtr = new NomivacLaboratorioResource({});
17 | export const nomivacLaboratorioRouter = nomivacLaboratorioCtr.makeRoutes();
18 |
--------------------------------------------------------------------------------
/modules/rup/schemas/prestacion-adjuntos.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Schema de archivos adjuntos en una prestación.
3 | * Se usa para sincronizar desde la appMobile
4 | */
5 | import * as mongoose from 'mongoose';
6 |
7 | export const schema = new mongoose.Schema({
8 | paciente: mongoose.Schema.Types.ObjectId,
9 | prestacion: mongoose.Schema.Types.ObjectId,
10 | profesional: mongoose.Schema.Types.ObjectId,
11 | registro: mongoose.Schema.Types.ObjectId,
12 | valor: mongoose.Schema.Types.Mixed,
13 | estado: {
14 | type: String,
15 | enum: ['pending', 'upload', 'sync']
16 | },
17 | createdAt: mongoose.Schema.Types.Date
18 | });
19 |
20 | export const model = mongoose.model('prestacion-adjuntos', schema, 'prestaciones-adjuntos');
21 |
--------------------------------------------------------------------------------
/modules/vacunas/nomivacVacuna.route.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { nomivacVacunas } from './schemas/nomivacVacuna.schema';
3 | import { Auth } from '../../auth/auth.class';
4 |
5 | class NomivacVacunaResource extends ResourceBase {
6 | Model = nomivacVacunas;
7 | resourceName = 'nomivacVacunas';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | codigo: MongoQuery.equalMatch,
11 | habilitado: MongoQuery.equalMatch,
12 | nombre: MongoQuery.partialString,
13 | calendarioNacional: MongoQuery.equalMatch
14 | };
15 | }
16 |
17 | export const nomivacVacunaCtr = new NomivacVacunaResource({});
18 | export const nomivacVacunaRouter = nomivacVacunaCtr.makeRoutes();
19 |
--------------------------------------------------------------------------------
/core-v2/mpi/parentesco/parentesco.routes.ts:
--------------------------------------------------------------------------------
1 | import { Parentesco } from './parentesco.schema';
2 | import { MongoQuery } from '@andes/core';
3 | import { ResourceBase } from '@andes/core';
4 | import { Auth } from '../../../auth/auth.class';
5 |
6 | class ParentescoResource extends ResourceBase {
7 | Model = Parentesco;
8 | resourceName = 'parentescos';
9 | middlewares = [Auth.authenticate()];
10 | routesAuthorization = {
11 | get: Auth.authorize('mpi:paciente:parentesco')
12 | };
13 | searchFileds = {
14 | nombre: MongoQuery.partialString,
15 | search: ['nombre']
16 | };
17 | }
18 |
19 | export const ParentescoCtr = new ParentescoResource({});
20 | export const ParentescoRouter = ParentescoCtr.makeRoutes();
21 |
22 |
--------------------------------------------------------------------------------
/modules/webhook/webhooklog/webhooklog.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery } from '@andes/core';
2 | import { ResourceBase } from '@andes/core';
3 | import { WebHookLog } from './webhooklog.schema';
4 |
5 | class WebhookLogResource extends ResourceBase {
6 | Model = WebHookLog;
7 | resourceName = 'log';
8 | keyId = '_id';
9 |
10 | searchFileds = {
11 | url: MongoQuery.partialString,
12 | event: MongoQuery.partialString,
13 | fecha: {
14 | field: 'updatedAt',
15 | fn: (value) => (MongoQuery.matchDate(value))
16 | },
17 | search: ['url', 'event']
18 | };
19 | }
20 |
21 | export const WebhookLogCtr = new WebhookLogResource({});
22 |
23 | export const WebhookLogRouter = WebhookLogCtr.makeRoutes();
24 |
--------------------------------------------------------------------------------
/utils/scriptsMongo/createExternalAppsToken.ts:
--------------------------------------------------------------------------------
1 | import { authApps } from './../../auth/schemas/authApps';
2 | import * as AuthClass from './../../auth/auth.class';
3 | import * as Connections from './../../connections';
4 |
5 |
6 | Connections.Connections.initialize();
7 |
8 | createToken();
9 |
10 | async function createToken() {
11 | const id = process.argv[2];
12 | const app: any = await authApps.findById(id);
13 | const organizacion = {
14 | id: app.organizacion,
15 | nombre: app.nombre
16 | };
17 | const permisos = app.permisos;
18 |
19 | const token = AuthClass.Auth.generateAppToken(app, organizacion, permisos);
20 | app.token = token;
21 | app.save().then(() => {
22 | process.exit();
23 | });
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/modules/descargas/recupero-costo/recupero-costo-header.ts:
--------------------------------------------------------------------------------
1 | import { HTMLComponent } from '../model/html-component.class';
2 | import { loadImage } from '../model/informe.class';
3 |
4 | export class RecuperoCostoHeader extends HTMLComponent {
5 | template = ``;
9 |
10 | constructor() {
11 | super();
12 |
13 | this.data = {
14 | logo: loadImage('templates/recupero-costo/img/logo.png'),
15 | logoSalud: loadImage('templates/recupero-costo/img/logosalud.png')
16 | };
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/utils/requestHandler.ts:
--------------------------------------------------------------------------------
1 | import * as request from 'request';
2 | /**
3 | *
4 | *
5 | * @export
6 | * @param {*} params ={
7 | host,
8 | port,
9 | path,
10 | method: 'GET/PUT/POST...',
11 | rejectUnauthorized: boolean
12 | }
13 | * @returns {Promise<[status,body]>}
14 | */
15 | export function handleHttpRequest(params): Promise {
16 | return new Promise((resolve, reject) => {
17 | request(params, (err, response, body) => {
18 | if (!err) {
19 | const status = response && response.statusCode;
20 | return resolve([status, body]);
21 | } else {
22 | return reject(err);
23 | }
24 | });
25 | });
26 | }
27 |
--------------------------------------------------------------------------------
/modules/centroOperativoMedico/schemas/reglasDerivacion.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | export const ESTADOS_DERIVACION = ['solicitada', 'habilitada', 'inhabilitada', 'asignada', 'rechazada', 'aceptada', 'finalizada', 'encomendada'];
3 |
4 | export const ReglasDerivacionSchema = new mongoose.Schema({
5 | id: mongoose.Schema.Types.ObjectId,
6 | estadoInicial: {
7 | type: String,
8 | enum: ESTADOS_DERIVACION
9 | },
10 | estadoFinal: {
11 | type: String,
12 | enum: ESTADOS_DERIVACION
13 | },
14 | soloCom: Boolean,
15 | modificaDestino: Boolean,
16 | defineGravedad: Boolean
17 | });
18 |
19 | export const ReglasDerivacion = mongoose.model('reglasDerivacion', ReglasDerivacionSchema, 'reglasDerivacion');
20 |
--------------------------------------------------------------------------------
/.github/issue_template.md:
--------------------------------------------------------------------------------
1 |
12 | ### Comportamiento actual
13 | * Resumen del problema.
14 |
15 | ### Resultado esperado
16 | * ¿Que espera que suceda?
17 |
18 | ### Pasos para reproducir el problema
19 | 1.
20 | 2.
21 | 3.
22 |
23 |
24 |
25 |
26 |
31 |
--------------------------------------------------------------------------------
/core-v2/mpi/pacientes-empadronados/pacientes-empadronados.schema.ts:
--------------------------------------------------------------------------------
1 | import { model, Schema } from 'mongoose';
2 | import { ObraSocialSchema } from '../../../modules/obraSocial/schemas/obraSocial';
3 |
4 | export const PacientesEmpadronadosSchema = new Schema(
5 | {
6 | documento: String,
7 | sexo: String,
8 | genero: String,
9 | nombre: String,
10 | apellido: String,
11 | fechaNacimiento: Date,
12 | fechaEmpadronamiento: Date,
13 | codigoSisaEmpadronamiento: String,
14 | financiador: { type: ObraSocialSchema },
15 | pais: String,
16 | createdAt: Date
17 | });
18 |
19 | export const PacientesEmpadronados = model('pacientes-empadronados', PacientesEmpadronadosSchema, 'pacientes-empadronados');
20 |
--------------------------------------------------------------------------------
/modules/mobileApp/schemas/recordatorio.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const recordatorioSchema = new mongoose.Schema({
4 | idTurno: {
5 | type: mongoose.Schema.Types.ObjectId,
6 | // unique: true
7 | },
8 | fechaTurno: Date,
9 | paciente: {
10 | nombre: String,
11 | apellido: String,
12 | telefono: String,
13 | },
14 | dataAgenda: {
15 | _id: false,
16 | profesionalId: mongoose.Schema.Types.ObjectId,
17 | fecha: Date
18 | },
19 | estadoEnvio: Boolean,
20 | tipoRecordatorio: {
21 | type: String,
22 | enum: ['turno', 'agenda']
23 | }
24 | });
25 |
26 | export const recordatorio = mongoose.model('recordatorio', recordatorioSchema, 'recordatorio');
27 |
--------------------------------------------------------------------------------
/core-v2/mpi/pacientes-empadronados/pacientes-empadronados.routes.ts:
--------------------------------------------------------------------------------
1 |
2 | import { MongoQuery, ResourceBase } from '@andes/core';
3 | import { Auth } from '../../../auth/auth.class';
4 | import { PacientesEmpadronados } from './pacientes-empadronados.schema';
5 |
6 | class PacientesEmpadronadosResource extends ResourceBase {
7 | Model = PacientesEmpadronados;
8 | resourceName = 'pacientes-empadronados';
9 | middlewares = [Auth.authenticate()];
10 | searchFileds = {
11 | paciente: {
12 | field: 'paciente.id',
13 | fn: MongoQuery.equalMatch
14 | }
15 | };
16 | }
17 |
18 | export const PacientesEmpadronadosCtr = new PacientesEmpadronadosResource({});
19 | export const PacientesEmpadronadosRouter = PacientesEmpadronadosCtr.makeRoutes();
20 |
--------------------------------------------------------------------------------
/modules/forms/forms-resources/forms-resources-routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { Auth } from '../../../auth/auth.class';
3 | import { FormResource } from './forms-resources-schema';
4 |
5 | class FormResourceResource extends ResourceBase {
6 | Model = FormResource;
7 | resourceName = 'resources';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | nombre: MongoQuery.partialString,
11 | activo: MongoQuery.partialString,
12 | id: MongoQuery.equalMatch,
13 | type: MongoQuery.partialString,
14 | search: ['nombre', 'id', 'type']
15 | };
16 | }
17 |
18 | export const FormResourceCtr = new FormResourceResource();
19 | export const FormResourcesRouter = FormResourceCtr.makeRoutes();
20 |
--------------------------------------------------------------------------------
/modules/vacunas/schemas/nomivacLote.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | export const nomivacLoteSchema = new mongoose.Schema({
3 | id: mongoose.Schema.Types.ObjectId,
4 | codigo: {
5 | type: String,
6 | required: true
7 | },
8 | habilitado: {
9 | type: Boolean,
10 | required: true,
11 | default: false
12 | },
13 | descripcion: String,
14 | vacuna: {
15 | _id: {
16 | type: mongoose.Schema.Types.ObjectId,
17 | ref: 'nomivacVacunas'
18 | },
19 | codigo: Number,
20 | nombre: String
21 | }
22 | });
23 | nomivacLoteSchema.index({
24 | codigo: 1
25 | });
26 | export const nomivacLotes = mongoose.model('nomivacLotes', nomivacLoteSchema, 'nomivacLotes');
27 |
--------------------------------------------------------------------------------
/modules/forms/forms.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { Forms } from './forms.schema';
3 | import { Auth } from '../../auth/auth.class';
4 | class FormsResource extends ResourceBase {
5 | Model = Forms;
6 | resourceName = 'formulario';
7 | middlewares = [Auth.authenticate()];
8 | routesAuthorization = {};
9 | searchFileds = {
10 | name: MongoQuery.partialString,
11 | type: MongoQuery.partialString,
12 | active: MongoQuery.equalMatch,
13 | search: ['name', 'type'],
14 | sections: {
15 | field: 'sections.id',
16 | fn: value => value
17 | }
18 | };
19 | }
20 |
21 | export const FormCtr = new FormsResource();
22 | export const FormRouter = FormCtr.makeRoutes();
23 |
--------------------------------------------------------------------------------
/modules/mobileApp/pacienteApp.routes.ts:
--------------------------------------------------------------------------------
1 |
2 | import { PacienteApp } from './schemas/pacienteApp';
3 | import { MongoQuery, ResourceBase } from '@andes/core';
4 | import { Auth } from '../../auth/auth.class';
5 |
6 | class PacienteAppResource extends ResourceBase {
7 | Model = PacienteApp;
8 | resourceName = 'pacienteApp';
9 | keyId = '_id';
10 | middlewares = [Auth.authenticate()];
11 | searchFileds = {
12 | documento: MongoQuery.partialString,
13 | email: MongoQuery.partialString,
14 | sexo: MongoQuery.partialString,
15 | activacionApp: MongoQuery.equalMatch,
16 | search: ['documento', 'email']
17 | };
18 | }
19 |
20 | export const PacienteAppCtr = new PacienteAppResource({});
21 | export const PacienteAppRouter = PacienteAppCtr.makeRoutes();
22 |
--------------------------------------------------------------------------------
/modules/vacunas/schemas/nomivacLaboratorios.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const nomivacLaboratorioSchema = new mongoose.Schema({
4 | id: mongoose.Schema.Types.ObjectId,
5 | codigo: {
6 | type: Number,
7 | required: true
8 | },
9 | nombre: {
10 | type: String,
11 | required: true
12 | },
13 | Pais: String,
14 | RazonSocial: String,
15 | CUIT: String,
16 | Provincia: String,
17 | Localidad: String,
18 | Domicilio: String,
19 | CodigoPostal: String,
20 | TipoTelefono: String,
21 | Telefono: String,
22 | Mail: String,
23 | habilitado: Boolean
24 | });
25 |
26 | export const nomivacLaboratorio = mongoose.model('nomivacLaboratorios', nomivacLaboratorioSchema, 'nomivacLaboratorios');
27 |
--------------------------------------------------------------------------------
/modules/matriculaciones/schemas/cambioDni.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | import { ObjSIISASchema } from '../../../core/tm/schemas/siisa';
3 |
4 | const cambioDniSchema = new mongoose.Schema({
5 | apellido: { type: String, required: true },
6 | nombre: { type: String, required: true },
7 | idProfesional: { type: String, required: false },
8 | nacionalidad: { type: ObjSIISASchema, required: false },
9 | dniActual: { type: String, required: true },
10 | dniNuevo: { type: String, required: true },
11 | fecha: { type: Date, required: true },
12 | atendida: { type: Boolean, required: true },
13 |
14 | });
15 |
16 | // Virtuals
17 |
18 |
19 | const cambioDni = mongoose.model('solicitudCambioDni', cambioDniSchema, 'solicitudCambioDni');
20 |
21 | export = cambioDni;
22 |
--------------------------------------------------------------------------------
/modules/semaforo/semaforo.schema.ts:
--------------------------------------------------------------------------------
1 | import { AuditPlugin } from '@andes/mongoose-plugin-audit';
2 | import * as mongoose from 'mongoose';
3 |
4 | export const SemaforoSchema = new mongoose.Schema({
5 | name: String,
6 | options: [
7 | {
8 | id: Number,
9 | priority: Number,
10 | min: Number,
11 | max: Number,
12 | value: mongoose.Schema.Types.Mixed,
13 | label: String,
14 | color: String,
15 | itemRowStyle: {
16 | border: String,
17 | hover: String,
18 | background: String
19 | }
20 | }
21 | ]
22 | });
23 |
24 | SemaforoSchema.plugin(AuditPlugin);
25 | export const Semaforo = mongoose.model('semaforo', SemaforoSchema, 'semaforo');
26 |
--------------------------------------------------------------------------------
/jobs/fueraDeAgendaJob.ts:
--------------------------------------------------------------------------------
1 | import * as fueraAgendaCtrl from './../modules/estadistica/pecas/controller/fueraDeAgenda';
2 | import * as moment from 'moment';
3 |
4 | function run(done) {
5 | const paramInicio = process.argv[3];
6 | const paramFin = process.argv[4];
7 | const start = paramInicio ?
8 | moment(new Date(paramInicio).setHours(0, 0, 0, 0)).format('YYYY-MM-DD HH:mm:ss') :
9 | moment(new Date().setHours(0, 0, 0, 0)).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss');
10 | const end = paramFin ?
11 | moment(new Date(paramFin).setHours(23, 59, 0, 0)).format('YYYY-MM-DD HH:mm:ss') :
12 | moment(new Date().setHours(23, 59, 0, 0)).subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss');
13 | fueraAgendaCtrl.fueraAgendaPecas(start, end, done);
14 | }
15 |
16 | export = run;
17 |
--------------------------------------------------------------------------------
/modules/obraSocial/controller/profe.ts:
--------------------------------------------------------------------------------
1 | import { Profe } from '../schemas/profe';
2 |
3 | // obtiene las versiones de todos los padrones cargados (PROFE)
4 | export async function obtenerVersiones() {
5 | const versiones = await Profe.distinct('version').exec(); // esta consulta obtiene un arreglo de strings
6 | for (let i = 0; i < versiones.length; i++) {
7 | versiones[i] = { version: versiones[i] };
8 | }
9 | versiones.sort((a, b) => compare(a.version, b.version));
10 | return versiones;
11 | }
12 |
13 | // Compara fechas. Junto con el sort ordena los elementos de mayor a menor.
14 | function compare(a, b) {
15 | if (new Date(a) > new Date(b)) {
16 | return -1;
17 | }
18 | if (new Date(a) < new Date(b)) {
19 | return 1;
20 | }
21 | return 0;
22 | }
23 |
--------------------------------------------------------------------------------
/modules/webhook/webhook.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const WebHookSchema = new mongoose.Schema({
4 | nombre: String,
5 | event: String,
6 | url: String,
7 | method: {
8 | type: String,
9 | default: 'POST',
10 | enum: ['POST', 'PUT', 'PATCH', 'GET']
11 | },
12 | headers: mongoose.SchemaTypes.Mixed, // for Token AUTH
13 | data: mongoose.SchemaTypes.Mixed, // a projections of data to send
14 | filters: [mongoose.SchemaTypes.Mixed], // posibles filtros filtros
15 | trasform: {
16 | type: String,
17 | required: false
18 | },
19 | active: Boolean,
20 | rules: mongoose.SchemaTypes.Mixed
21 | }, { timestamps: true });
22 |
23 | export const WebHook = mongoose.model('webhook', WebHookSchema, 'webhook');
24 |
--------------------------------------------------------------------------------
/core/tm/index.ts:
--------------------------------------------------------------------------------
1 | import { ConceptosTurneablesRouter } from './conceptos-turneables.routes';
2 | import { ModulosRouter } from './modulos.routes';
3 | import { GrupoPoblacionalRouter } from './grupo-poblacional.routes';
4 | import { ZonasSanitariasRouter } from './zonaSanitaria.routes';
5 | import { ServicionIntermedioRouter } from './servicio-intermedio.routes';
6 | import { FarmaciasRouter } from './farmacia.routes';
7 | import { AreaAraucaniaRouter } from './areaAraucania.routes';
8 | import { ECLQueriesRouter } from './eclqueries.routes';
9 |
10 | export const Routes = [
11 | ConceptosTurneablesRouter,
12 | ModulosRouter,
13 | GrupoPoblacionalRouter,
14 | ZonasSanitariasRouter,
15 | ServicionIntermedioRouter,
16 | FarmaciasRouter,
17 | AreaAraucaniaRouter,
18 | ECLQueriesRouter
19 | ];
20 |
--------------------------------------------------------------------------------
/core/tm/routes/profesion.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import { asyncHandler } from '@andes/api-tool';
3 | import { profesion } from '../schemas/profesion_model';
4 |
5 | const router = express.Router();
6 |
7 | router.get('/profesiones/:id', asyncHandler(async (req, res, next) => {
8 | const prof = await profesion.findById(req.params.id);
9 | res.json(prof);
10 | }));
11 |
12 | router.get('/profesiones/', asyncHandler(async (req, res, next) => {
13 | let query: any = {};
14 | if (req.query) {
15 | query = {
16 | ...req.query,
17 | habilitado: true // Solo trae profesiones habilitadas
18 | };
19 | }
20 | const profesiones = await profesion.find(query).sort({ codigoSISA: 1 });
21 | res.json(profesiones);
22 | }));
23 |
24 | export = router;
25 |
--------------------------------------------------------------------------------
/shared/interfaces/direccion.interface.ts:
--------------------------------------------------------------------------------
1 | import { IUbicacion } from './ubicacion.interface';
2 | import { Moment } from 'moment';
3 | import { Document } from 'mongoose';
4 |
5 | export interface IDireccion {
6 | tipo: String;
7 | valor: String;
8 | codigoPostal: String;
9 | ubicacion: IUbicacion;
10 | geoReferencia: Number[];
11 | ranking: Number;
12 | activo: Boolean;
13 | ultimaActualizacion: Date | Moment;
14 | situacionCalle: Boolean;
15 | }
16 |
17 | export interface IDireccionDoc extends Document, IDireccion {
18 | /**
19 | * Determina si todos los campos de la dirección están cargados
20 | */
21 | isCompleted(): Boolean;
22 |
23 | /**
24 | * Devuelve la dirección formateada (calle, localidad, provincia)
25 | */
26 | format(): String;
27 | }
28 |
--------------------------------------------------------------------------------
/modules/vacunas/nomivacLote.route.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import * as mongoose from 'mongoose';
3 | import { Auth } from '../../auth/auth.class';
4 | import { nomivacLotes } from './schemas/nomivacLote.schema';
5 |
6 | class NomivacLotesResource extends ResourceBase {
7 | Model = nomivacLotes;
8 | resourceName = 'nomivacLotes';
9 | middlewares = [Auth.authenticate()];
10 | searchFileds = {
11 | codigo: MongoQuery.equalMatch,
12 | habilitado: MongoQuery.equalMatch,
13 | vacuna: {
14 | field: 'vacuna._id',
15 | fn: (value) => mongoose.Types.ObjectId(value)
16 | },
17 | };
18 | }
19 |
20 | export const nomivacLoteCtr = new NomivacLotesResource({});
21 | export const nomivacLoteRouter = nomivacLoteCtr.makeRoutes();
22 |
--------------------------------------------------------------------------------
/modules/vacunas/schemas/vacunas.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const vacunasSchema = new mongoose.Schema({
4 | idvacuna: Number,
5 | codigo: String,
6 | vacuna: String,
7 | esquema: String,
8 | condicion: String,
9 | dosis: String,
10 | ordenDosis: Number,
11 | fechaAplicacion: Date,
12 | documento: String,
13 | apellido: String,
14 | nombre: String,
15 | fechaNacimiento: Date,
16 | sexo: {
17 | type: String,
18 | enum: ['masculino', 'femenino']
19 | },
20 | codigoEsquema: Number,
21 | codigoCondicion: Number,
22 | efector: String
23 | });
24 |
25 | vacunasSchema.index({ documento: 1 });
26 | vacunasSchema.index({ idvacuna: 1 });
27 |
28 | export const vacunas = mongoose.model('vacunas', vacunasSchema, 'nomivac');
29 |
--------------------------------------------------------------------------------
/modules/descargas/informe-turnos/informe-turnos.ts:
--------------------------------------------------------------------------------
1 | import { InformePDF, getAssetsURL } from '../model/informe.class';
2 | import { TurnosInformeBody } from './turno-body';
3 | import { TurnosInformeHeader } from './turnos-header';
4 | import * as moment from 'moment';
5 |
6 | export class InformeTurnos extends InformePDF {
7 | constructor(public req) {
8 | super();
9 | }
10 |
11 | stylesUrl = [
12 | getAssetsURL('templates/matriculaciones/informe-turno.scss')
13 | ];
14 |
15 | public async process() {
16 | const fecha = moment(this.req.body.fecha).format('DD/MM/YYYY');
17 | const turnos = this.req.body.turnos;
18 | this.header = new TurnosInformeHeader();
19 | this.body = new TurnosInformeBody(turnos,fecha);
20 | await super.process();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/core/log/schemas/logExportaInformacion.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const informacionExportadaSchema = new mongoose.Schema({
4 | fecha: {
5 | type: Date
6 | },
7 | sistema: String,
8 | key: String,
9 | idPrestacion: mongoose.Schema.Types.ObjectId,
10 | idPaciente: mongoose.Schema.Types.ObjectId,
11 | info_enviada: { type: mongoose.Schema.Types.Mixed },
12 | resultado: { type: mongoose.Schema.Types.Mixed }
13 | });
14 |
15 | informacionExportadaSchema.index({ fecha: 1, sistema: 1, key: 1 });
16 | informacionExportadaSchema.index({ fecha: 1, idPaciente: 1 });
17 | informacionExportadaSchema.index({ idPrestacion: 1 });
18 |
19 | export const InformacionExportada = mongoose.model('nomivacInformacionExportada', informacionExportadaSchema, 'nomivacInformacionExportada');
20 |
--------------------------------------------------------------------------------
/modules/matriculaciones/routes/entidadFormadora.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import * as entidadFormadora from '../schemas/entidadFormadora';
3 |
4 | const router = express.Router();
5 |
6 | router.get('/entidadesFormadoras/:id*?', (req, res, next) => {
7 |
8 | if (req.params.id) {
9 | entidadFormadora.findById(req.params.id, (err, data) => {
10 | if (err) {
11 | return next(err);
12 | }
13 |
14 | res.json(data);
15 | });
16 |
17 | } else {
18 |
19 | entidadFormadora.find({ habilitado: true }).sort({ codigoSISA: 1 }).exec((error, data) => {
20 | if (error) {
21 | return next(error);
22 | }
23 |
24 | res.json(data);
25 | });
26 | }
27 |
28 | });
29 |
30 |
31 | export = router;
32 |
--------------------------------------------------------------------------------
/modules/matriculaciones/routes/modalidadesCertificacion.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import * as modalidadesCertificacion from '../schemas/modalidadesCertificacion';
3 |
4 | const router = express.Router();
5 |
6 | router.get('/modalidadesCertificacion/:id*?', (req, res, next) => {
7 |
8 | if (req.params.id) {
9 | modalidadesCertificacion.findById(req.params.id, (err, data) => {
10 | if (err) {
11 | return next(err);
12 | }
13 |
14 | res.json(data);
15 | });
16 |
17 | } else {
18 |
19 | modalidadesCertificacion.find().exec((error, data) => {
20 | if (error) {
21 | return next(error);
22 | }
23 |
24 | res.json(data);
25 | });
26 | }
27 |
28 | });
29 |
30 |
31 | export = router;
32 |
--------------------------------------------------------------------------------
/scripts/MISC-85.ts:
--------------------------------------------------------------------------------
1 | import { Codificacion } from '../modules/rup/schemas/codificacion';
2 | import { Prestacion } from '../modules/rup/schemas/prestacion';
3 |
4 |
5 | async function run(done) {
6 | const codificaciones = Codificacion.find({ estadoFacturacion: { $exists: true } }).cursor({ batchSize: 100 });
7 | let i = 0;
8 | for await (const codificacion of codificaciones) {
9 | i++;
10 | // eslint-disable-next-line no-console
11 | if (i % 100 === 0) { console.log(i); }
12 |
13 | if (codificacion.estadoFacturacion) {
14 | await Prestacion.updateOne(
15 | { _id: codificacion.idPrestacion },
16 | { $set: { estadoFacturacion: codificacion.estadoFacturacion } }
17 | );
18 | }
19 |
20 | }
21 | done();
22 | }
23 |
24 | export = run;
25 |
--------------------------------------------------------------------------------
/modules/descargas/matriculaciones/certificado-etica.ts:
--------------------------------------------------------------------------------
1 | import { InformePDF, getAssetsURL } from '../model/informe.class';
2 | import { CertificadoEticaHeader } from './certificado-etica-header';
3 | import { CertificadoEticaBody } from './certificado-etica-body';
4 | import { CertificadoEticaFooter } from './certificado-etica-footer';
5 |
6 | export class CertificadoEtica extends InformePDF {
7 | constructor(public req) {
8 | super();
9 | }
10 |
11 | stylesUrl = [
12 | getAssetsURL('templates/matriculaciones/certificado-etica.scss')
13 | ];
14 |
15 | public async process() {
16 | this.header = new CertificadoEticaHeader();
17 | this.body = new CertificadoEticaBody(this.req.body);
18 | this.footer = new CertificadoEticaFooter();
19 |
20 | await super.process();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/modules/forms/forms-resources/forms-preset-resources-routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { Auth } from '../../../auth/auth.class';
3 | import { FormPresetResource } from './forms-preset-resources-schema';
4 |
5 | class FormPresetResourceResource extends ResourceBase {
6 | Model = FormPresetResource;
7 | resourceName = 'preset-resources';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | nombre: MongoQuery.partialString,
11 | activo: MongoQuery.partialString,
12 | id: MongoQuery.equalMatch,
13 | type: MongoQuery.partialString,
14 | search: ['nombre', 'id', 'type']
15 | };
16 | }
17 |
18 | export const FormPresetResourceCtr = new FormPresetResourceResource();
19 | export const FormPresetResourcesRouter = FormPresetResourceCtr.makeRoutes();
20 |
--------------------------------------------------------------------------------
/modules/vacunas/routes/vacunas-pacientes.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { Auth } from '../../../auth/auth.class';
3 | import { VacunasPacientes } from '../schemas/vacunas-pacientes.schema';
4 |
5 | class VacunasPacientesResource extends ResourceBase {
6 | Model = VacunasPacientes;
7 | middlewares = [Auth.authenticate()];
8 | resourceName = 'vacunas-pacientes';
9 | searchFileds = {
10 | paciente: {
11 | field: 'paciente.id',
12 | fn: MongoQuery.equalMatch
13 | },
14 | vacuna: {
15 | field: 'aplicaciones.vacuna.id',
16 | fn: MongoQuery.equalMatch
17 | }
18 | };
19 | }
20 |
21 | export const VacunasPacientesCtr = new VacunasPacientesResource();
22 | export const VacunasPacientesRouter = VacunasPacientesCtr.makeRoutes();
23 |
--------------------------------------------------------------------------------
/modules/descargas/com/derivacion.ts:
--------------------------------------------------------------------------------
1 | import { DerivacionBody } from './derivacion-body';
2 | import { DerivacionHeader } from './derivacion-header';
3 | import { InformePDF, getAssetsURL } from '../model/informe.class';
4 | import { Auth } from '../../../auth/auth.class';
5 |
6 | export class Derivacion extends InformePDF {
7 | constructor(public req) {
8 | super();
9 | }
10 |
11 | stylesUrl = [
12 | getAssetsURL('templates/com/comprobante.scss')
13 | ];
14 |
15 | public async process() {
16 | this.header = new DerivacionHeader();
17 |
18 | const { derivacionId, historial } = this.req.body;
19 | const organizacionId = historial ? Auth.getOrganization(this.req) : null;
20 | this.body = new DerivacionBody({ derivacionId, historial, organizacionId });
21 | await super.process();
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/modules/descargas/laboratorio/laboratorio.ts:
--------------------------------------------------------------------------------
1 | import { InformePDF, getAssetsURL } from '../model/informe.class';
2 | import { FarmaciaBody } from './laboratorio-body';
3 | import { FarmaciaHeader } from './laboratorio-header';
4 | import { LaboratorioFooter } from './laboratorio-footer';
5 |
6 | export class Laboratorio extends InformePDF {
7 | constructor(private encabezado, private detalle, private paciente, private usuario) {
8 | super();
9 | }
10 |
11 | stylesUrl = [
12 | getAssetsURL('templates/laboratorio/laboratorio.scss')
13 | ];
14 |
15 | public async process() {
16 | this.header = new FarmaciaHeader(this.encabezado);
17 | this.body = new FarmaciaBody(this.encabezado, this.paciente, this.detalle);
18 | this.footer = new LaboratorioFooter(this.usuario);
19 |
20 | await super.process();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/modules/vacunas/schemas/nomivacVacuna.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const nomivacVacunaSchema = new mongoose.Schema({
4 | id: mongoose.Schema.Types.ObjectId,
5 | codigo: {
6 | type: Number,
7 | required: true
8 | },
9 | nombre: {
10 | type: String,
11 | required: true
12 | },
13 | calendarioNacional: String,
14 | codigoNomencladorNacer: String,
15 | vigenciaDesde: Date,
16 | vigenciaHasta: Date,
17 | orden: String,
18 | habilitado: {
19 | type: Boolean,
20 | required: true,
21 | default: false
22 | },
23 | codigoSUMAR: String,
24 | snomed_conceptId: String
25 | });
26 |
27 | nomivacVacunaSchema.index({
28 | codigo: 1
29 | });
30 | export const nomivacVacunas = mongoose.model('nomivacVacunas', nomivacVacunaSchema, 'nomivacVacunas');
31 |
--------------------------------------------------------------------------------
/scripts/gdu-22.ts:
--------------------------------------------------------------------------------
1 |
2 | import { AuthUsers } from '../auth/schemas/authUsers';
3 |
4 | async function run(done) {
5 | const permiso = 'usuarios:*';
6 | const permisosUsuarios = ['usuarios:read',
7 | 'usuarios:write',
8 | 'usuarios:perfiles',
9 | ];
10 | const usuarios = AuthUsers.find({ 'organizaciones.permisos': permiso }).cursor({ batchSize: 200 });
11 |
12 | let usuario;
13 | while (usuario = await usuarios.next()) {
14 | usuario.organizaciones
15 | .filter(o => o.permisos.includes(permiso))
16 | .forEach(o => o.permisos = [...o.permisos.filter(p => p !== permiso), ...permisosUsuarios]);
17 |
18 | await AuthUsers.update({ _id: usuario._id }, { $set: { organizaciones: usuario.organizaciones } });
19 | }
20 | done();
21 | }
22 |
23 | export = run;
24 |
--------------------------------------------------------------------------------
/core/tm/modulos.routes.ts:
--------------------------------------------------------------------------------
1 |
2 | import { MongoQuery, ResourceBase } from '@andes/core';
3 | import { Modulos } from './schemas/modulos.schema';
4 |
5 | class ModuloResource extends ResourceBase {
6 | Model = Modulos;
7 | resourceName = 'modulos';
8 | searchFileds = {
9 | search: ['nombre'],
10 | nombre: MongoQuery.partialString,
11 | descripcion: MongoQuery.partialString,
12 | color: MongoQuery.partialString,
13 | subtitulo: MongoQuery.partialString,
14 | activo: MongoQuery.equalMatch,
15 | orden: MongoQuery.equalMatch,
16 | permisos: {
17 | field: 'permisos',
18 | fn: (value) => {
19 | return { $in: value };
20 | }
21 | }
22 | };
23 | }
24 | export const ModulosCtr = new ModuloResource({});
25 | export const ModulosRouter = ModulosCtr.makeRoutes();
26 |
--------------------------------------------------------------------------------
/utils/utilCoordenadas.ts:
--------------------------------------------------------------------------------
1 | // Aplica applyHaversine para calcular distancia entre dos puntos
2 | export function getDistanceBetweenPoints(start, end, units) {
3 | const earthRadius = {
4 | miles: 3958.8,
5 | km: 6371
6 | };
7 |
8 | const R = earthRadius[units || 'km'];
9 | const lat1 = start.lat;
10 | const lon1 = start.lng;
11 | const lat2 = end.lat;
12 | const lon2 = end.lng;
13 |
14 | const dLat = toRad((lat2 - lat1));
15 | const dLon = toRad((lon2 - lon1));
16 | const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
17 | Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) *
18 | Math.sin(dLon / 2) *
19 | Math.sin(dLon / 2);
20 | const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
21 | const d = R * c;
22 | return d;
23 | }
24 |
25 | function toRad(x) {
26 | return x * Math.PI / 180;
27 | }
28 |
--------------------------------------------------------------------------------
/modules/rup/schemas/semantic-tag.ts:
--------------------------------------------------------------------------------
1 | export const SemanticTag = {
2 | type: String,
3 | enum: [
4 | 'objeto físico',
5 | 'estructura corporal',
6 | 'espécimen',
7 | 'hallazgo',
8 | 'sustancia',
9 | 'concepto especial',
10 | 'medio ambiente / localización',
11 | 'metadato',
12 | 'contexto social',
13 | 'entidad observable',
14 | 'procedimiento',
15 | 'calificador',
16 | 'fuerza física',
17 | 'escala de estadificación',
18 | 'elemento de registro',
19 | 'producto',
20 | 'evento',
21 | 'organismo',
22 | 'situación',
23 | 'trastorno',
24 | 'régimen/tratamiento',
25 | 'medio ambiente',
26 | 'medicamento clínico',
27 | 'fármaco de uso clínico',
28 | 'persona',
29 | 'plan'
30 | ]
31 | };
32 |
--------------------------------------------------------------------------------
/modules/turnos/institucion.routes.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import { IInstitucion, Institucion } from './institucion.schema';
3 |
4 | class InstitucionResource extends ResourceBase {
5 | Model = Institucion;
6 | resourceName = 'institucion';
7 | searchFileds = {
8 | nombre: MongoQuery.partialString,
9 | tipo: MongoQuery.partialString,
10 | activo: MongoQuery.equalMatch,
11 | contacto: {
12 | field: 'contacto.valor',
13 | fn: MongoQuery.partialString
14 | },
15 | direccion: {
16 | field: 'direccion.valor',
17 | fn: MongoQuery.partialString
18 | },
19 | search: ['nombre']
20 | };
21 | }
22 |
23 | export const InstitucionCtr = new InstitucionResource({});
24 | export const InstitucionRouter = InstitucionCtr.makeRoutes();
25 |
--------------------------------------------------------------------------------
/core/tm/routes/especialidadesFT.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import * as especialidad from '../schemas/especialidadesFT';
3 | import * as mongoose from 'mongoose';
4 |
5 | const router = express.Router();
6 |
7 | router.get('/especialidadFT/:id?', (req, res, next) => {
8 |
9 | if (mongoose.Types.ObjectId.isValid(req.params.id)) {
10 |
11 | especialidad.findById(req.params.id, (err, data) => {
12 | if (err) {
13 | return next(err);
14 | }
15 | res.json(data);
16 | });
17 | } else {
18 | const query = especialidad.find({});
19 |
20 | query.sort({ descripcion: 1 });
21 |
22 | query.exec((err, data) => {
23 | if (err) {
24 | return next(err);
25 | }
26 | res.json(data);
27 | });
28 | }
29 | });
30 |
31 | export = router;
32 |
--------------------------------------------------------------------------------
/modules/descargas/ficha-epidemiologica/ficha.ts:
--------------------------------------------------------------------------------
1 | import { InformePDF, getAssetsURL } from '../model/informe.class';
2 | import { FichaEpidemiologicaBody } from './ficha-body';
3 | import { FichaEpidemiologicaFooter } from './ficha-footer';
4 | import { FichaEpidemiologicaHeader } from './ficha-header';
5 |
6 | export class FichaEpidemiologica extends InformePDF {
7 | constructor(private detalle, private usuario, private ficha) {
8 | super();
9 | }
10 |
11 | stylesUrl = [
12 | getAssetsURL('templates/ficha-epidemiologica/ficha-epidemiologica.scss')
13 | ];
14 |
15 | public async process() {
16 | this.header = new FichaEpidemiologicaHeader(this.detalle);
17 | this.body = new FichaEpidemiologicaBody(this.detalle, this.ficha);
18 | this.footer = new FichaEpidemiologicaFooter(this.usuario);
19 |
20 | await super.process();
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/scripts/VAC-108.ts:
--------------------------------------------------------------------------------
1 | import { sincronizarVacunas } from '../modules/vacunas/controller/vacunas.events';
2 | import { VacunasPacientes } from '../modules/vacunas/schemas/vacunas-pacientes.schema';
3 |
4 | async function run(done) {
5 | const from = new Date('2021-02-01T00:00:00.000-03:00');
6 | const vacunasPacientes: any = VacunasPacientes.aggregate([
7 | { $match: { 'aplicaciones.fechaAplicacion': { $gte: from } } },
8 | { $group: { _id: '$paciente.id', count: { $sum: 1 } } },
9 | { $match: { _id: { $ne: null }, count: { $gt: 1 } } },
10 | { $project: { pacienteId: '$_id' } }
11 | ]).cursor({ batchSize: 100 });
12 |
13 | for await (const pacienteId of vacunasPacientes) {
14 | await VacunasPacientes.remove({ 'paciente.id': pacienteId._id });
15 | await sincronizarVacunas(pacienteId._id);
16 | }
17 | done();
18 | }
19 |
20 | export = run;
21 |
--------------------------------------------------------------------------------
/templates/emails/otp-code.html:
--------------------------------------------------------------------------------
1 | {{#> layout }}
2 | {{#with usuario}}
3 |
4 | Hola {{nombre}} {{apellido}}
5 |
6 |
7 | Recibiste este mensaje porque solicitaste cambiar tu contraseña.
8 | {{/with}}
9 |
10 |
11 | Tu código de verificación es:
12 |
13 |
14 | {{otpCode}}
15 |
16 |
17 |
18 | Este código expirará en 1 hora. Por favor, ingresa este código en el
19 | formulario para continuar.
20 |
21 | {{/layout}}
22 |
--------------------------------------------------------------------------------
/packages/drive/file-descriptor/controller.ts:
--------------------------------------------------------------------------------
1 | import { FileDescriptorModel } from './schemas';
2 | import { Auth } from '../../../auth/auth.class';
3 |
4 | export class FileDescriptor {
5 | public static async create(data, req) {
6 | // [TODO] Add some validation
7 | const fd = new FileDescriptorModel(data);
8 | Auth.audit(fd, req);
9 | return fd.save();
10 | }
11 |
12 | public static async update(uuid, data, req) {
13 | const fd = await this.find(uuid);
14 | fd.real_id = data.real_id;
15 | fd.adapter = data.adapter;
16 | Auth.audit(fd, req);
17 | return fd.save();
18 | }
19 |
20 | public static async delete(uuid) {
21 | const fd = await this.find(uuid);
22 | return fd.remove();
23 | }
24 |
25 | public static async find(id) {
26 | return await FileDescriptorModel.findById(id);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/core/term/schemas/configuracionPrestacion.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const configuracionPrestacionSchema = new mongoose.Schema({
4 | snomed: {
5 | conceptId: String,
6 | term: String,
7 | fsn: String,
8 | semanticTag: String,
9 | },
10 | loinc: {
11 | code: String,
12 | codeSystem: String,
13 | codeSystemName: String,
14 | displayName: String
15 | },
16 | idServicio: Number,
17 | organizaciones: [{
18 | _id: {
19 | type: mongoose.Schema.Types.ObjectId,
20 | ref: 'organizacion'
21 | },
22 | codigo: Number, // Codigo de la prestación (va a servir para vincular las prestaciones que tengan distinto ID)
23 | }]
24 | });
25 |
26 | export const configuracionPrestacionModel = mongoose.model('configuracionPrestacion', configuracionPrestacionSchema, 'configuracionPrestacion');
27 |
--------------------------------------------------------------------------------
/modules/mobileApp/schemas/minuta.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | import { AuditPlugin } from '@andes/mongoose-plugin-audit';
3 | export const MinutaSchema = new mongoose.Schema({
4 | idMinuta: {
5 | type: String
6 | },
7 | fecha: {
8 | type: Date
9 | },
10 | quienRegistra: {
11 | type: String,
12 | required: true
13 | },
14 | participantes: {
15 | type: String
16 | },
17 | temas: {
18 | type: String
19 | },
20 | conclusiones: {
21 | type: String
22 | },
23 | pendientes: {
24 | type: String
25 | },
26 | fechaProxima: {
27 | type: Date
28 | },
29 | lugarProxima: {
30 | type: String
31 | },
32 | origen: {
33 | type: String
34 | }
35 | });
36 |
37 | MinutaSchema.plugin(AuditPlugin);
38 | export const Minuta = mongoose.model('minuta', MinutaSchema, 'minuta');
39 |
--------------------------------------------------------------------------------
/modules/huds/export-huds/exportHuds.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | // [TODO] Interfaces
4 |
5 | export const ExportHudsSchema = new mongoose.Schema({
6 | fechaDesde: Date,
7 | fechaHasta: Date,
8 | pacienteId: mongoose.Schema.Types.ObjectId,
9 | pacienteNombre: String,
10 | tipoPrestacion: String,
11 | idHudsFiles: mongoose.Schema.Types.ObjectId,
12 | user: Object,
13 | prestaciones: [mongoose.Schema.Types.ObjectId], // Para el pedido desde el buscador de turnos y prestaciones
14 | createdAt: Date,
15 | updatedAt: Date,
16 | expiredAt: Date,
17 | status: {
18 | type: String,
19 | enum: ['pending', 'success', 'error', 'canceled', 'completed'],
20 | required: true,
21 | default: 'pending'
22 | },
23 | excluye: [String]
24 | });
25 |
26 | export const ExportHudsModel = mongoose.model('exportHuds', ExportHudsSchema, 'exportHuds');
27 |
--------------------------------------------------------------------------------
/modules/rup/schemas/prestacion.solicitud.historial.ts:
--------------------------------------------------------------------------------
1 | import { tipoPrestacionSchema } from './../../../core/tm/schemas/tipoPrestacion';
2 | import { ProfesionalBaseSchema } from './../../../core/tm/schemas/profesional';
3 | import * as mongoose from 'mongoose';
4 | import { AuditPlugin } from '@andes/mongoose-plugin-audit';
5 |
6 | export const PrestacionSolicitudHistorialschema = new mongoose.Schema({
7 | accion: String,
8 | descripcion: String,
9 | fechaDeNotificacion: Date,
10 | profesional: ProfesionalBaseSchema,
11 | tipoPrestacion: tipoPrestacionSchema,
12 | turno: mongoose.Schema.Types.ObjectId,
13 | organizacion: {
14 | id: mongoose.Schema.Types.ObjectId,
15 | nombre: String
16 | },
17 | observaciones: String,
18 | idTurnoSuspendido: mongoose.Schema.Types.ObjectId
19 | });
20 |
21 | // Habilitar plugin de auditoría
22 | PrestacionSolicitudHistorialschema.plugin(AuditPlugin);
23 |
--------------------------------------------------------------------------------
/packages/drive/file-descriptor/schemas.ts:
--------------------------------------------------------------------------------
1 | import { Types, Model, model, Document, Schema } from 'mongoose';
2 | import { AuditPlugin } from '@andes/mongoose-plugin-audit';
3 |
4 | export interface IFileDescriptor {
5 | adapter?: string;
6 | real_id?: string;
7 | mimetype: string;
8 | originalname: string;
9 | extension: string;
10 | origin?: string;
11 | size?: number;
12 | }
13 |
14 | export interface FileDescriptorDocument extends Document, IFileDescriptor { }
15 |
16 | export const FileDescriptorSchema: Schema = new Schema({
17 | adapter: String,
18 | real_id: String,
19 | mimetype: String,
20 | extension: String,
21 | originalname: String,
22 | origin: String,
23 | size: Number
24 | });
25 |
26 | FileDescriptorSchema.plugin(AuditPlugin);
27 | export const FileDescriptorModel: Model = model('AndesDriveMetadata', FileDescriptorSchema, 'AndesDriveMetadata');
28 |
--------------------------------------------------------------------------------
/core/tm/routes/sms.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import { EventCore } from '@andes/event-bus';
3 | import { sendSms, SmsOptions } from '../../../utils/roboSender/sendSms';
4 |
5 | const router = express.Router();
6 |
7 | router.get('/sms', async (req, res, next) => {
8 | const smsOptions: SmsOptions = {
9 | telefono: req.query.telefono,
10 | mensaje: req.query.mensaje
11 | };
12 | try {
13 | const resultado = await sendSms(smsOptions);
14 | return res.json(resultado);
15 | } catch (error) {
16 | return res.json('1');
17 | }
18 | });
19 |
20 | router.post('/notificacion', async (req, res, next) => {
21 | try {
22 | const body = req.body.params;
23 | EventCore.emitAsync(body.evento, body.dto);
24 | return res.json({ resultado: 1 });
25 | } catch (error) {
26 | return res.json({ resultado: 0 });
27 | }
28 | });
29 |
30 | export = router;
31 |
--------------------------------------------------------------------------------
/modules/descargas/informe-rup/elementos-rup/autocitado.component.ts:
--------------------------------------------------------------------------------
1 | import { HTMLComponent } from '../../model/html-component.class';
2 |
3 | export class AutocitadoComponent extends HTMLComponent {
4 | template = `
5 |
6 |
7 | {{ registro.concepto.term }}:
8 |
9 |
10 |
11 |
Motivo: {{{ valor.motivo }}}
12 |
13 |
14 | `;
15 | constructor(private prestacion, private registro, private params, private depth) {
16 | super();
17 | }
18 |
19 | async process() {
20 | const datos = this.registro.valor.solicitudPrestacion;
21 | this.data = {
22 | registro: this.registro,
23 | valor: {
24 | motivo: datos.motivo
25 | }
26 | };
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/modules/descargas/informe-rup/elementos-rup/valor-numerico.component.ts:
--------------------------------------------------------------------------------
1 | import { HTMLComponent } from '../../model/html-component.class';
2 |
3 | export class ValorNumericoComponent extends HTMLComponent {
4 | template = `
5 |
6 |
7 | {{ registro.concepto.term }}
8 | {{#if registro.esDiagnosticoPrincipal}}(PROCEDIMIENTO / DIAGNÓSTICO PRINCIPAL){{/if}}:
9 |
10 | {{{ registro.valor }}}{{unidad}}
11 |
12 |
13 |
14 |
15 | `;
16 | constructor(private prestacion, private registro, private params, private depth) {
17 | super();
18 | }
19 |
20 | async process() {
21 | this.data = {
22 | registro: this.registro,
23 | unidad: this.params?.unit
24 | };
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/scripts/core-68.ts:
--------------------------------------------------------------------------------
1 | import { Profesional } from '../core/tm/schemas/profesional';
2 |
3 | async function run(done) {
4 | let i = 0;
5 | const profesionales = Profesional.find({}).cursor({ batchSize: 100 });
6 | for await (const profesional of profesionales) {
7 | try {
8 | profesional._createTokens();
9 | if (i % 100 === 0) {
10 | // eslint-disable-next-line no-console
11 | console.log(i++);
12 | }
13 | await Profesional.update(
14 | { _id: profesional.id },
15 | {
16 | $set: {
17 | tokens: profesional.tokens
18 | }
19 | }
20 | );
21 | } catch (e) {
22 | // eslint-disable-next-line no-console
23 | console.error(profesional.id, e);
24 | }
25 |
26 | }
27 |
28 | done();
29 | }
30 |
31 | export = run;
32 |
--------------------------------------------------------------------------------
/core/tm/routes/ocupacion.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import * as ocupacion from '../schemas/ocupacion';
3 |
4 | import { defaultLimit, maxLimit } from './../../../config';
5 |
6 | const router = express.Router();
7 |
8 | router.get('/ocupacion', (req, res, next) => {
9 |
10 | const conditions = {};
11 | conditions['$or'] = [];
12 | conditions['$or'].push({ codigo: RegExp('^' + req.query.nombre + '$', 'i') });
13 | conditions['$or'].push({ nombre: RegExp('^.*' + req.query.nombre + '.*$', 'i') });
14 | const query = ocupacion.model.find(conditions);
15 | const skip = parseInt(req.query.skip || 0, 10);
16 | const limit = Math.min(parseInt(req.query.limit || defaultLimit, 15), maxLimit);
17 | query.skip(skip);
18 | query.limit(limit);
19 | query.exec((err, data) => {
20 | if (err) {
21 | return next(err);
22 | }
23 | res.json(data);
24 | });
25 | });
26 |
27 | export = router;
28 |
--------------------------------------------------------------------------------
/modules/vacunas/schemas/nomivacEsquema.schema.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 |
3 | export const nomivacEsquemaSchema = new mongoose.Schema({
4 | id: mongoose.Schema.Types.ObjectId,
5 | codigo: {
6 | type: Number,
7 | required: true
8 | },
9 | nombre: {
10 | type: String,
11 | required: true
12 | },
13 | vacuna: {
14 | _id: mongoose.Schema.Types.ObjectId,
15 | codigo: Number,
16 | nombre: String,
17 | snomed_conceptId: String
18 | },
19 | condicion: {
20 | _id: mongoose.Schema.Types.ObjectId,
21 | codigo: Number,
22 | nombre: String
23 | },
24 | regular: String,
25 | embarazo: String,
26 | habilitado: Boolean
27 | });
28 |
29 | nomivacEsquemaSchema.index({
30 | 'vacuna._id': 1,
31 | 'condicion._id': 1
32 | });
33 | export const nomivacEsquema = mongoose.model('nomivacEsquemas', nomivacEsquemaSchema, 'nomivacEsquemas');
34 |
--------------------------------------------------------------------------------
/core/tm/schemas/modulos.schema.ts:
--------------------------------------------------------------------------------
1 | import { Schema, model } from 'mongoose';
2 |
3 | export const ModuloSchema = new Schema({
4 | id: Schema.Types.ObjectId,
5 | nombre: {
6 | type: String,
7 | required: true
8 | },
9 | descripcion: {
10 | type: String,
11 | required: true
12 | },
13 | subtitulo: String,
14 | icono: String,
15 | linkAcceso: String,
16 | color: String,
17 | permisos: [String],
18 | activo: {
19 | type: Boolean,
20 | default: true
21 | },
22 | orden: Number,
23 | submodulos: [
24 | {
25 | activo: { type: Boolean, default: true },
26 | nombre: String,
27 | linkAcceso: String,
28 | color: String,
29 | icono: String,
30 | orden: Number,
31 | permisos: [String]
32 | }
33 | ]
34 |
35 | });
36 |
37 | export const Modulos = model('modulos', ModuloSchema, 'modulos');
38 |
--------------------------------------------------------------------------------
/modules/descargas/model/html-component.class.ts:
--------------------------------------------------------------------------------
1 | import * as fs from 'fs';
2 | import * as handlebars from 'handlebars';
3 | import * as path from 'path';
4 |
5 |
6 | export abstract class HTMLComponent {
7 | public template: string;
8 | public templateUrl: string;
9 |
10 | public data: { [key: string]: any };
11 |
12 |
13 | async render() {
14 | await this.process();
15 | const templateHTML = this.getTemplate();
16 | const template = handlebars.compile(templateHTML);
17 | const html = template(this.data);
18 | return html;
19 | }
20 |
21 | private getTemplate() {
22 | if (this.template) {
23 | return this.template;
24 | } else if (this.templateUrl) {
25 | return fs.readFileSync(path.join(__dirname, this.templateUrl), 'utf8');
26 | } else {
27 | throw new Error('no template');
28 | }
29 | }
30 |
31 | public async process() { }
32 | }
33 |
--------------------------------------------------------------------------------
/modules/obraSocial/schemas/sumar.ts:
--------------------------------------------------------------------------------
1 | import * as mongoose from 'mongoose';
2 | import * as configPrivate from './../../../config.private';
3 | import { Connections } from './../../../connections';
4 |
5 | const sumarSchema = new mongoose.Schema({
6 | id_smiafiliados: Number,
7 | clavebeneficiario: String,
8 | afiapellido: String,
9 | afinombre: String,
10 | afitipodoc: String,
11 | aficlasedoc: String,
12 | afidni: String,
13 | afisexo: String,
14 | afidomdepartamento: String,
15 | afidomlocalidad: String,
16 | afitipocategoria: Number,
17 | afifechanac: Date,
18 | activo: String,
19 | cuieefectorasignado: String,
20 | cuielugaratencionhabitual: String,
21 | motivobaja: Number,
22 | mensajebaja: String,
23 | fechainscripcion: Date,
24 | fechacarga: Date,
25 | usuariocarga: String,
26 | embarazoactual: String
27 | });
28 |
29 | export const sumar: any = mongoose.model('sumar', sumarSchema, 'sumar');
30 |
--------------------------------------------------------------------------------
/scripts/tag-vacunas.ts:
--------------------------------------------------------------------------------
1 | import { Prestacion } from './../modules/rup/schemas/prestacion';
2 |
3 | async function run(done) {
4 | const parametros = {
5 | 'ejecucion.fecha': { $gt: new Date('2020-12-27T00:00:00.000-03:00') },
6 | 'estadoActual.tipo': 'validada',
7 | 'ejecucion.registros.concepto.conceptId': '840534001',
8 | 'tags.vacunasCovid': { $exists: false }
9 | };
10 |
11 | const prestaciones = Prestacion.find(parametros).cursor({ batchSize: 100 });
12 | let i = 0;
13 | for await (const prestacion of prestaciones) {
14 | i++;
15 | // eslint-disable-next-line no-console
16 | if (i % 100 === 0) { console.log(i); }
17 |
18 | const $set: any = {
19 | tags: { vacunasCovid: true },
20 | };
21 | await Prestacion.update(
22 | { _id: prestacion.id },
23 | { $set }
24 | );
25 |
26 | }
27 | done();
28 | }
29 |
30 | export = run;
31 |
32 |
--------------------------------------------------------------------------------
/modules/descargas/informe-rup/elementos-rup/seccion/seccionado.component.ts:
--------------------------------------------------------------------------------
1 | import { HTMLComponent } from '../../../model/html-component.class';
2 | import { registroToHTML } from '../../utils/registro-to-html';
3 |
4 | export class SeccionadoComponent extends HTMLComponent {
5 | template = `
6 |
7 | {{#each registros}}
8 | {{{this}}}
9 | {{/each}}
10 |
11 |
12 | `;
13 | constructor(private prestacion, private registro, private params, private depth) {
14 | super();
15 | }
16 |
17 | async process() {
18 | const ps = this.registro.registros.map(registro => {
19 | return registroToHTML(this.prestacion, registro, this.depth + 1);
20 | });
21 | const registros = await Promise.all(ps);
22 |
23 | this.data = {
24 | registro: this.registro,
25 | registros,
26 | showTitle: this.depth === 0
27 | };
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/modules/descargas/informe-rup/elementos-rup/observaciones.component.ts:
--------------------------------------------------------------------------------
1 | import { HTMLComponent } from '../../model/html-component.class';
2 |
3 | export class ObservacionesComponent extends HTMLComponent {
4 | template = `
5 |
6 |
7 | {{ registro.concepto.term }}
8 | {{#if registro.esDiagnosticoPrincipal}}(PROCEDIMIENTO / DIAGNÓSTICO PRINCIPAL){{/if}}
9 | {{#if registro.valor}}:
10 |
11 | {{{ valor }}}
12 |
13 | {{/if}}
14 |
15 |
16 | `;
17 | constructor(private prestacion, private registro, private params, private depth) {
18 | super();
19 | }
20 |
21 | async process() {
22 | this.data = {
23 | registro: this.registro,
24 | valor: this.registro.valor
25 | };
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/modules/pacs/pacs-config.controller.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ObjectId, ResourceBase } from '@andes/core';
2 | import { Auth } from '../../auth/auth.class';
3 | import { IPacsConfig, PacsConfig } from './pacs-config.schema';
4 |
5 | export class PacsConfigCtr extends ResourceBase {
6 | Model = PacsConfig;
7 | resourceName = 'pacs-config';
8 | middlewares = [Auth.authenticate()];
9 | searchFileds = {
10 | organizacion: MongoQuery.equalMatch.withField('organizacion.id'),
11 | tipoPrestacion: MongoQuery.equalMatch.withField('tipoPrestacion.conceptId')
12 | };
13 |
14 | async getConfig(organizacion: ObjectId, tipoPrestacion: string): Promise {
15 | const config = await this.findOne({
16 | organizacion,
17 | tipoPrestacion
18 | });
19 | return config;
20 | }
21 | }
22 |
23 | export const PacsConfigController = new PacsConfigCtr();
24 | export const PacsConfigRoutes = PacsConfigController.makeRoutes();
25 |
--------------------------------------------------------------------------------
/modules/descargas/informe-rup/elementos-rup/lugar-nacimiento.componenet.ts:
--------------------------------------------------------------------------------
1 | import { HTMLComponent } from '../../model/html-component.class';
2 |
3 | export class LugarDeNacimientoComponent extends HTMLComponent {
4 | template = `
5 |
6 |
7 | {{ titulo }}:
8 |
9 | {{{ valor }}}
10 |
11 |
12 |
13 |
14 | `;
15 | constructor(private prestacion, private registro, private params, private depth) {
16 | super();
17 | }
18 |
19 | async process() {
20 | this.data = {
21 | titulo: this.registro.concepto.term,
22 | registro: this.registro,
23 | valor: this.getValor()
24 | };
25 | }
26 |
27 | getValor() {
28 | const valor = this.registro.valor?.nombre || this.registro.valor;
29 | return valor;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/modules/mobileApp/controller/PushClientFCM.ts:
--------------------------------------------------------------------------------
1 | import { services } from '../../../services';
2 | export interface IPushNotification {
3 | title?: 'Andes Salud' | string;
4 | body: string;
5 | extraData?: any;
6 | }
7 |
8 | export function sendPushNotification(devices, notification: IPushNotification): any {
9 |
10 | const servicio = 'push-notifications-default';
11 |
12 | for (const device of devices) {
13 | if (device.device_fcm_token) {
14 | const payload = {
15 | title: notification.title || 'Andes Salud',
16 | body: notification.body,
17 | extraData: notification.extraData,
18 | to: device.device_fcm_token,
19 | priority: 'high',
20 | restricted_package_name: '',
21 | time_to_live: 0,
22 | };
23 |
24 | // Enviar push con llamada HTTP
25 | services.get(servicio).exec(payload);
26 | }
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/scripts/vac-41.ts:
--------------------------------------------------------------------------------
1 | import { InscripcionVacuna } from '../modules/vacunas/schemas/inscripcion-vacunas.schema';
2 |
3 | async function run(done) {
4 | let i = 0;
5 | const inscripciones = InscripcionVacuna.find({}).cursor({ batchSize: 100 });
6 | for await (const inscripcion of inscripciones) {
7 | try {
8 | inscripcion._createTokens();
9 | if (i % 100 === 0) {
10 | // eslint-disable-next-line no-console
11 | console.log(i++);
12 | }
13 | await InscripcionVacuna.update(
14 | { _id: inscripcion.id },
15 | {
16 | $set: {
17 | tokens: inscripcion.tokens
18 | }
19 | }
20 | );
21 | } catch (e) {
22 | // eslint-disable-next-line no-console
23 | console.error(inscripcion.id, e);
24 | }
25 |
26 | }
27 |
28 | done();
29 | }
30 |
31 | export = run;
32 |
--------------------------------------------------------------------------------
/modules/vacunas/nomivacDosis.route.ts:
--------------------------------------------------------------------------------
1 | import { MongoQuery, ResourceBase } from '@andes/core';
2 | import * as mongoose from 'mongoose';
3 | import { nomivacDosis } from './schemas/nomivacDosis.schema';
4 | import { Auth } from '../../auth/auth.class';
5 |
6 | class NomivacDosisResource extends ResourceBase {
7 | Model = nomivacDosis;
8 | resourceName = 'nomivacDosis';
9 | middlewares = [Auth.authenticate()];
10 | searchFileds = {
11 | codigo: MongoQuery.equalMatch,
12 | habilitado: MongoQuery.equalMatch,
13 | nombre: MongoQuery.partialString,
14 | vacuna: {
15 | field: 'vacuna._id',
16 | fn: (value) => mongoose.Types.ObjectId(value)
17 | },
18 | esquema: {
19 | field: 'esquema._id',
20 | fn: (value) => mongoose.Types.ObjectId(value)
21 | }
22 | };
23 | }
24 |
25 | export const nomivacDosisCtr = new NomivacDosisResource({});
26 | export const nomivacDosisRouter = nomivacDosisCtr.makeRoutes();
27 |
--------------------------------------------------------------------------------
/core/tm/routes/procedimientoQuirurgico.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import * as procedimientosQuirurgicos from '../schemas/procedimientoQuirurgico';
3 | const router = express.Router();
4 | import { defaultLimit, maxLimit } from './../../../config';
5 |
6 | router.get('/procemientosQuirurgicos', (req, res, next) => {
7 | const conditions = {};
8 | conditions['$or'] = [];
9 | conditions['$or'].push({ codigo: RegExp('^' + req.query.nombre + '$', 'i') });
10 | conditions['$or'].push({ nombre: RegExp('^.*' + req.query.nombre + '.*$', 'i') });
11 | const query = procedimientosQuirurgicos.model.find(conditions);
12 | const skip = parseInt(req.query.skip || 0, 10);
13 | const limit = Math.min(parseInt(req.query.limit || defaultLimit, 15), maxLimit);
14 | query.skip(skip);
15 | query.limit(limit);
16 | query.exec((err, data) => {
17 | if (err) {
18 | return next(err);
19 | }
20 | res.json(data);
21 | });
22 | });
23 | export = router;
24 |
--------------------------------------------------------------------------------
/scripts/deleteFoto.ts:
--------------------------------------------------------------------------------
1 |
2 | import { Paciente, PacienteCtr } from '../core-v2/mpi/paciente';
3 | import { userScheduler } from '../config.private';
4 |
5 |
6 | // Borra el campo 'foto' de los pacientes
7 | async function run(done) {
8 | const cursor = Paciente.find({ $and: [{ 'relaciones.foto': { $exists: true } }, { 'relaciones.foto': /data:image/ }] }).cursor({ batchSize: 100 });
9 | const updatePatient = async (pac) => {
10 | try {
11 | const data = { relaciones: pac.relaciones.toObject() };
12 | data.relaciones.forEach(rel => {
13 | if (rel.foto !== undefined) {
14 | delete rel.foto;
15 | }
16 | });
17 | await PacienteCtr.update(pac, data, userScheduler as any);
18 | } catch (error) {
19 | return;
20 | }
21 | };
22 |
23 | await cursor.eachAsync(async (pac: any) => {
24 | await updatePatient(pac);
25 | });
26 | done();
27 | }
28 |
29 | export = run;
30 |
--------------------------------------------------------------------------------
/templates/laboratorio/laboratorio.scss:
--------------------------------------------------------------------------------
1 | .contenedor-secundario {
2 | display: block;
3 | text-align: center;
4 | font-size: .25cm;
5 | }
6 |
7 | .tabla-header {
8 | border-color: black;
9 | border-collapse: collapse;
10 | font-size: .25cm;
11 | }
12 |
13 | td {
14 | text-align: left;
15 | }
16 |
17 | .tabla-header {
18 | border-color: black;
19 | border-collapse: collapse;
20 | font-size: .20cm;
21 | }
22 |
23 | .tituloGeneral {
24 | text-align: left;
25 | margin-top: 20px;
26 | font-size: .25cm;
27 | }
28 |
29 | .tituloSecundario {
30 | text-align: left;
31 | margin-top: 8px;
32 | font-size: .25cm;
33 | }
34 |
35 | .tituloTabla {
36 | text-align: left;
37 | margin-top: 8px;
38 | margin-left: 20px;
39 | font-size: .25cm;
40 | }
41 |
42 | body {
43 | padding-left: 0.5cm;
44 | padding-right: 0.5cm;
45 | font-family: Arial, sans-serif;
46 | }
47 |
48 | .foot {
49 | font-family: Arial, sans-serif;
50 | font-size: 10px;
51 | }
--------------------------------------------------------------------------------