@andes/fhir 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.circleci/config.yml +69 -0
- package/.editorconfig +14 -0
- package/.gitattributes +1 -0
- package/.github/CODEOWNERS +1 -0
- package/.github/labeler.yml +11 -0
- package/.github/pull_request_template.md +28 -0
- package/.github/workflows/build_test.yml +14 -0
- package/.github/workflows/has_conflicts.yml +13 -0
- package/CHANGELOG.md +306 -0
- package/LICENSE +674 -0
- package/README.md +2 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/src/data/patient.json +185 -0
- package/dist/src/lib/allergyIntolerance.js +40 -0
- package/dist/src/lib/allergyIntolerance.js.map +1 -0
- package/dist/src/lib/bundle.js +23 -0
- package/dist/src/lib/bundle.js.map +1 -0
- package/dist/src/lib/composition.js +151 -0
- package/dist/src/lib/composition.js.map +1 -0
- package/dist/src/lib/condition.js +80 -0
- package/dist/src/lib/condition.js.map +1 -0
- package/dist/src/lib/config.js +23 -0
- package/dist/src/lib/config.js.map +1 -0
- package/dist/src/lib/config.test.js +13 -0
- package/dist/src/lib/config.test.js.map +1 -0
- package/dist/src/lib/device.js +39 -0
- package/dist/src/lib/device.js.map +1 -0
- package/dist/src/lib/device.test.js +10 -0
- package/dist/src/lib/device.test.js.map +1 -0
- package/dist/src/lib/document-reference.js +104 -0
- package/dist/src/lib/document-reference.js.map +1 -0
- package/dist/src/lib/immunization.js +68 -0
- package/dist/src/lib/immunization.js.map +1 -0
- package/dist/src/lib/medication.js +65 -0
- package/dist/src/lib/medication.js.map +1 -0
- package/dist/src/lib/medicationRequest.js +100 -0
- package/dist/src/lib/medicationRequest.js.map +1 -0
- package/dist/src/lib/medicationStatement.js +56 -0
- package/dist/src/lib/medicationStatement.js.map +1 -0
- package/dist/src/lib/organization.js +91 -0
- package/dist/src/lib/organization.js.map +1 -0
- package/dist/src/lib/patient.js +361 -0
- package/dist/src/lib/patient.js.map +1 -0
- package/dist/src/lib/patient.test.js +40 -0
- package/dist/src/lib/patient.test.js.map +1 -0
- package/dist/src/lib/practitioner.js +161 -0
- package/dist/src/lib/practitioner.js.map +1 -0
- package/index.ts +31 -0
- package/jest.config.js +12 -0
- package/package.json +54 -0
- package/src/data/patient.json +185 -0
- package/src/lib/allergyIntolerance.ts +36 -0
- package/src/lib/bundle.ts +19 -0
- package/src/lib/composition.ts +153 -0
- package/src/lib/condition.ts +80 -0
- package/src/lib/config.test.ts +13 -0
- package/src/lib/config.ts +17 -0
- package/src/lib/device.test.ts +9 -0
- package/src/lib/device.ts +36 -0
- package/src/lib/document-reference.ts +102 -0
- package/src/lib/immunization.ts +64 -0
- package/src/lib/medication.ts +61 -0
- package/src/lib/medicationRequest.ts +100 -0
- package/src/lib/medicationStatement.ts +52 -0
- package/src/lib/organization.ts +89 -0
- package/src/lib/patient.test.ts +38 -0
- package/src/lib/patient.ts +374 -0
- package/src/lib/practitioner.ts +157 -0
- package/tsconfig.test.json +18 -0
- package/tslint.json +139 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encode = void 0;
|
|
4
|
+
var moment = require("moment");
|
|
5
|
+
var config_1 = require("./config");
|
|
6
|
+
function encode(ID, author, organization, patient, binaryURL) {
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'DocumentReference',
|
|
9
|
+
id: ID,
|
|
10
|
+
meta: {
|
|
11
|
+
lastUpdated: moment().format()
|
|
12
|
+
},
|
|
13
|
+
contained: [
|
|
14
|
+
{
|
|
15
|
+
resourceType: 'Practitioner',
|
|
16
|
+
id: author.id,
|
|
17
|
+
identifier: [{
|
|
18
|
+
system: config_1.makeUrl('Device'),
|
|
19
|
+
value: author.id
|
|
20
|
+
}]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
resourceType: 'Organization',
|
|
24
|
+
id: organization.id,
|
|
25
|
+
identifier: [{
|
|
26
|
+
system: config_1.makeUrl('Organization'),
|
|
27
|
+
value: organization.id
|
|
28
|
+
}]
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
custodian: {
|
|
32
|
+
identifier: {
|
|
33
|
+
system: 'https://federador.msal.gob.ar/uri',
|
|
34
|
+
value: config_1.makeUrl('Organization', organization.id)
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
masterIdentifier: {
|
|
38
|
+
system: config_1.makeUrl('documentos_versiones'),
|
|
39
|
+
value: ID
|
|
40
|
+
},
|
|
41
|
+
identifier: [{
|
|
42
|
+
system: config_1.makeUrl('documentos'),
|
|
43
|
+
value: ID
|
|
44
|
+
}],
|
|
45
|
+
status: 'current',
|
|
46
|
+
type: {
|
|
47
|
+
coding: [
|
|
48
|
+
{
|
|
49
|
+
system: 'http://loinc.org',
|
|
50
|
+
code: '60591-5'
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
subject: {
|
|
55
|
+
reference: config_1.makeUrl('Patient', patient.id),
|
|
56
|
+
},
|
|
57
|
+
// author: [
|
|
58
|
+
// {
|
|
59
|
+
// reference: makeUrl('Device', author.id),
|
|
60
|
+
// },
|
|
61
|
+
// {
|
|
62
|
+
// reference: makeUrl('Organization', organization.id),
|
|
63
|
+
// }
|
|
64
|
+
// ],
|
|
65
|
+
securityLabel: [{
|
|
66
|
+
coding: [{
|
|
67
|
+
system: 'https://saludddigital.gob.ar/nivelesconfidencialidad',
|
|
68
|
+
code: 'N'
|
|
69
|
+
}]
|
|
70
|
+
}],
|
|
71
|
+
content: [{
|
|
72
|
+
attachment: {
|
|
73
|
+
id: 'PRINCIPAL',
|
|
74
|
+
url: binaryURL
|
|
75
|
+
}
|
|
76
|
+
}],
|
|
77
|
+
context: {
|
|
78
|
+
event: [{
|
|
79
|
+
coding: [{
|
|
80
|
+
system: 'https://saludddigital.gob.ar/tiposevento',
|
|
81
|
+
code: 'CIR'
|
|
82
|
+
}]
|
|
83
|
+
}],
|
|
84
|
+
// period: {
|
|
85
|
+
// start: '2019-04-03T10:30:00+03:00',
|
|
86
|
+
// end: '2019-04-05T10:30:00+03:00'
|
|
87
|
+
// },
|
|
88
|
+
facilityType: {
|
|
89
|
+
coding: [{
|
|
90
|
+
system: 'https://saludddigital.gob.ar/tipoprestador',
|
|
91
|
+
code: 'INI'
|
|
92
|
+
}]
|
|
93
|
+
},
|
|
94
|
+
practiceSetting: {
|
|
95
|
+
coding: [{
|
|
96
|
+
system: 'https://saludddigital.gob.ar/especialidades',
|
|
97
|
+
code: 'CLM'
|
|
98
|
+
}]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
exports.encode = encode;
|
|
104
|
+
//# sourceMappingURL=document-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-reference.js","sourceRoot":"","sources":["../../../src/lib/document-reference.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AACjC,mCAAmC;AAEnC,SAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS;IAC/D,OAAO;QACH,YAAY,EAAE,mBAAmB;QACjC,EAAE,EAAE,EAAE;QACN,IAAI,EAAE;YACF,WAAW,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE;SACjC;QACD,SAAS,EAAE;YACP;gBACI,YAAY,EAAE,cAAc;gBAC5B,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,UAAU,EAAE,CAAC;wBACT,MAAM,EAAE,gBAAO,CAAC,QAAQ,CAAC;wBACzB,KAAK,EAAE,MAAM,CAAC,EAAE;qBACnB,CAAC;aACL;YACD;gBACI,YAAY,EAAE,cAAc;gBAC5B,EAAE,EAAE,YAAY,CAAC,EAAE;gBACnB,UAAU,EAAE,CAAC;wBACT,MAAM,EAAE,gBAAO,CAAC,cAAc,CAAC;wBAC/B,KAAK,EAAE,YAAY,CAAC,EAAE;qBACzB,CAAC;aACL;SACJ;QACD,SAAS,EAAE;YACP,UAAU,EAAE;gBACR,MAAM,EAAE,mCAAmC;gBAC3C,KAAK,EAAE,gBAAO,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,CAAC;aAClD;SACJ;QACD,gBAAgB,EAAE;YACd,MAAM,EAAE,gBAAO,CAAC,sBAAsB,CAAC;YACvC,KAAK,EAAE,EAAE;SACZ;QACD,UAAU,EAAE,CAAC;gBACT,MAAM,EAAE,gBAAO,CAAC,YAAY,CAAC;gBAC7B,KAAK,EAAE,EAAE;aACZ,CAAC;QACF,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE;YACF,MAAM,EAAE;gBACJ;oBACI,MAAM,EAAE,kBAAkB;oBAC1B,IAAI,EAAE,SAAS;iBAClB;aACJ;SACJ;QACD,OAAO,EAAE;YACL,SAAS,EAAE,gBAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;SAC5C;QACD,YAAY;QACZ,QAAQ;QACR,mDAAmD;QACnD,SAAS;QACT,QAAQ;QACR,+DAA+D;QAC/D,QAAQ;QACR,KAAK;QACL,aAAa,EAAE,CAAC;gBACZ,MAAM,EAAE,CAAC;wBACL,MAAM,EAAE,sDAAsD;wBAC9D,IAAI,EAAE,GAAG;qBACZ,CAAC;aACL,CAAC;QACF,OAAO,EAAE,CAAC;gBACN,UAAU,EAAE;oBACR,EAAE,EAAE,WAAW;oBACf,GAAG,EAAE,SAAS;iBACjB;aACJ,CAAC;QACF,OAAO,EAAE;YACL,KAAK,EAAE,CAAC;oBACJ,MAAM,EAAE,CAAC;4BACL,MAAM,EAAE,0CAA0C;4BAClD,IAAI,EAAE,KAAK;yBACd,CAAC;iBACL,CAAC;YACF,YAAY;YACZ,0CAA0C;YAC1C,uCAAuC;YAEvC,KAAK;YACL,YAAY,EAAE;gBACV,MAAM,EAAE,CAAC;wBACL,MAAM,EAAE,4CAA4C;wBACpD,IAAI,EAAE,KAAK;qBACd,CAAC;aACL;YACD,eAAe,EAAE;gBACb,MAAM,EAAE,CAAC;wBACL,MAAM,EAAE,6CAA6C;wBACrD,IAAI,EAAE,KAAK;qBACd,CAAC;aACL;SACJ;KAEJ,CAAC;AACN,CAAC;AAlGD,wBAkGC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encode = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Encode de Vacunas Nomivac from ANDES to FHIR
|
|
6
|
+
* @param {} nomivac
|
|
7
|
+
* [ASK] El code de extension puede ir en vaccineCode?
|
|
8
|
+
* [ASk] Location no se sabe. Solo esta el texto
|
|
9
|
+
*/
|
|
10
|
+
function encode(patientReference, nomivac) {
|
|
11
|
+
return {
|
|
12
|
+
resourceType: 'Immunization',
|
|
13
|
+
id: nomivac.idvacuna,
|
|
14
|
+
extension: [
|
|
15
|
+
{
|
|
16
|
+
url: 'http://sisa/fhir/esquema',
|
|
17
|
+
valueCoding: {
|
|
18
|
+
system: 'http://argentina.gob.ar/salud/NOMIVAC-esquemas',
|
|
19
|
+
code: '0',
|
|
20
|
+
display: nomivac.vacuna
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
url: 'http://sisa/fhir/condicionAplicacion',
|
|
25
|
+
valueCoding: {
|
|
26
|
+
system: 'http://argentina.gob.ar/salud/NOMIVAC-condicion',
|
|
27
|
+
code: '17',
|
|
28
|
+
display: 'Personal de Salud'
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
status: 'completed',
|
|
33
|
+
notGiven: false,
|
|
34
|
+
vaccineCode: {
|
|
35
|
+
coding: [
|
|
36
|
+
{
|
|
37
|
+
system: 'https://snomed.info/sct/11000221109/id/228100022110',
|
|
38
|
+
code: nomivac.idvacuna,
|
|
39
|
+
display: nomivac.vacuna
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
patient: {
|
|
44
|
+
reference: patientReference
|
|
45
|
+
},
|
|
46
|
+
date: nomivac.fechaAplicacion,
|
|
47
|
+
primarySource: false,
|
|
48
|
+
location: {
|
|
49
|
+
reference: 'http://argentina.gob.ar/salud/refes/14999912399913'
|
|
50
|
+
},
|
|
51
|
+
// lotNumber: null,
|
|
52
|
+
vaccinationProtocol: [
|
|
53
|
+
{
|
|
54
|
+
doseSequence: 1,
|
|
55
|
+
doseStatus: {
|
|
56
|
+
coding: [
|
|
57
|
+
{
|
|
58
|
+
system: 'http://hl7.org/fhir/vaccination-protocol-dose-status',
|
|
59
|
+
code: nomivac.dosis
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
exports.encode = encode;
|
|
68
|
+
//# sourceMappingURL=immunization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"immunization.js","sourceRoot":"","sources":["../../../src/lib/immunization.ts"],"names":[],"mappings":";;;AACA;;;;;GAKG;AACH,SAAgB,MAAM,CAAC,gBAAgB,EAAE,OAAO;IAC5C,OAAO;QACH,YAAY,EAAE,cAAc;QAC5B,EAAE,EAAE,OAAO,CAAC,QAAQ;QACpB,SAAS,EAAE;YACP;gBACI,GAAG,EAAE,0BAA0B;gBAC/B,WAAW,EAAE;oBACT,MAAM,EAAE,gDAAgD;oBACxD,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,OAAO,CAAC,MAAM;iBAC1B;aACJ;YACD;gBACI,GAAG,EAAE,sCAAsC;gBAC3C,WAAW,EAAE;oBACT,MAAM,EAAE,iDAAiD;oBACzD,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,mBAAmB;iBAC/B;aACJ;SACJ;QACD,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE;YACT,MAAM,EAAE;gBACJ;oBACI,MAAM,EAAE,qDAAqD;oBAC7D,IAAI,EAAE,OAAO,CAAC,QAAQ;oBACtB,OAAO,EAAE,OAAO,CAAC,MAAM;iBAC1B;aACJ;SACJ;QACD,OAAO,EAAE;YACL,SAAS,EAAE,gBAAgB;SAC9B;QACD,IAAI,EAAE,OAAO,CAAC,eAAe;QAC7B,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE;YACN,SAAS,EAAE,oDAAoD;SAClE;QACD,mBAAmB;QACnB,mBAAmB,EAAE;YACjB;gBACI,YAAY,EAAE,CAAC;gBACf,UAAU,EAAE;oBACR,MAAM,EAAE;wBACJ;4BACI,MAAM,EAAE,sDAAsD;4BAC9D,IAAI,EAAE,OAAO,CAAC,KAAK;yBACtB;qBACJ;iBACJ;aACJ;SACJ;KACJ,CAAC;AACN,CAAC;AAxDD,wBAwDC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encode = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Encode de Medicamentos from ANDES to FHIR
|
|
6
|
+
* @param {} medication
|
|
7
|
+
*/
|
|
8
|
+
function encode(medication) {
|
|
9
|
+
// Falta completar con más detalle
|
|
10
|
+
return {
|
|
11
|
+
resourceType: 'Medication',
|
|
12
|
+
id: medication.conceptId,
|
|
13
|
+
meta: {
|
|
14
|
+
profile: [
|
|
15
|
+
'http://hl7.org/fhir/uv/ips/StructureDefinition/medication-ips'
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
identifier: medication.moduleId,
|
|
19
|
+
code: {
|
|
20
|
+
coding: [
|
|
21
|
+
{
|
|
22
|
+
system: 'http://snomed.info/sct',
|
|
23
|
+
display: medication.term,
|
|
24
|
+
code: medication.conceptId
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
text: medication.fsn
|
|
28
|
+
},
|
|
29
|
+
status: medication.active === true ? 'active' : 'inactive',
|
|
30
|
+
// manufacturer: null,
|
|
31
|
+
// form: null,
|
|
32
|
+
// amount: null,
|
|
33
|
+
// ingredient: null,
|
|
34
|
+
// ingredient: [ // ejemplo
|
|
35
|
+
// {
|
|
36
|
+
// code: {
|
|
37
|
+
// coding: [
|
|
38
|
+
// {
|
|
39
|
+
// system: "http://snomed.info/sct",
|
|
40
|
+
// display: "salbutamol (sustancia)",
|
|
41
|
+
// code: "372897005"
|
|
42
|
+
// }
|
|
43
|
+
// ]
|
|
44
|
+
// },
|
|
45
|
+
// isActive: true,
|
|
46
|
+
// strength: {
|
|
47
|
+
// numerator: {
|
|
48
|
+
// value: 200,
|
|
49
|
+
// unit: "mcg"
|
|
50
|
+
// },
|
|
51
|
+
// denominator: {
|
|
52
|
+
// value: 1,
|
|
53
|
+
// unit: "disparo"
|
|
54
|
+
// }
|
|
55
|
+
// }
|
|
56
|
+
// }
|
|
57
|
+
// ],
|
|
58
|
+
text: {
|
|
59
|
+
status: 'generated',
|
|
60
|
+
div: "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p><b>Generated Narrative with Details</b></p><p><b>id</b>: Medicacion</p><p><b>meta</b>: </p><p><b>text</b>: " + medication.pt.term + "</p></div>"
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
exports.encode = encode;
|
|
65
|
+
//# sourceMappingURL=medication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"medication.js","sourceRoot":"","sources":["../../../src/lib/medication.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,SAAgB,MAAM,CAAC,UAAU;IAC7B,kCAAkC;IAClC,OAAO;QACH,YAAY,EAAE,YAAY;QAC1B,EAAE,EAAE,UAAU,CAAC,SAAS;QACxB,IAAI,EAAE;YACF,OAAO,EAAE;gBACL,+DAA+D;aAClE;SACJ;QACD,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,IAAI,EAAE;YACF,MAAM,EAAE;gBACJ;oBACI,MAAM,EAAE,wBAAwB;oBAChC,OAAO,EAAE,UAAU,CAAC,IAAI;oBACxB,IAAI,EAAE,UAAU,CAAC,SAAS;iBAC7B;aACJ;YACD,IAAI,EAAE,UAAU,CAAC,GAAG;SACvB;QACD,MAAM,EAAE,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;QAC1D,sBAAsB;QACtB,cAAc;QACd,gBAAgB;QAChB,oBAAoB;QACpB,2BAA2B;QAC3B,QAAQ;QACR,kBAAkB;QAClB,wBAAwB;QACxB,oBAAoB;QACpB,wDAAwD;QACxD,yDAAyD;QACzD,wCAAwC;QACxC,oBAAoB;QACpB,gBAAgB;QAChB,aAAa;QACb,0BAA0B;QAC1B,sBAAsB;QACtB,2BAA2B;QAC3B,8BAA8B;QAC9B,8BAA8B;QAC9B,iBAAiB;QACjB,6BAA6B;QAC7B,4BAA4B;QAC5B,kCAAkC;QAClC,gBAAgB;QAChB,YAAY;QACZ,QAAQ;QACR,KAAK;QACL,IAAI,EAAE;YACF,MAAM,EAAE,WAAW;YACnB,GAAG,EAAE,+JAA2J,UAAU,CAAC,EAAE,CAAC,IAAI,eAAY;SACjM;KACJ,CAAC;AACN,CAAC;AAvDD,wBAuDC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Encode medicationRequest from ANDES to FHIR
|
|
4
|
+
* @param {} medicationRequest
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.encode = void 0;
|
|
8
|
+
var moment = require("moment");
|
|
9
|
+
// Muy incompleto hay que mejorarlo mucho todavía
|
|
10
|
+
function encode(patientReference, practitionerReference, medicationFHIR, data) {
|
|
11
|
+
return {
|
|
12
|
+
resourceType: 'MedicationRequest',
|
|
13
|
+
id: data.registro._id,
|
|
14
|
+
text: {
|
|
15
|
+
status: 'generated',
|
|
16
|
+
},
|
|
17
|
+
contained: [
|
|
18
|
+
medicationFHIR
|
|
19
|
+
],
|
|
20
|
+
identifier: [
|
|
21
|
+
{
|
|
22
|
+
use: 'official',
|
|
23
|
+
system: 'http://app.andes.gob.ar/prescriptions',
|
|
24
|
+
value: data.registro.id
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
// active | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown
|
|
28
|
+
status: (data.prestacion.estadoActual.tipo === 'validada') ? 'active' : 'on-hold',
|
|
29
|
+
// intent: proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option
|
|
30
|
+
intent: 'order',
|
|
31
|
+
// category: {
|
|
32
|
+
// coding: [
|
|
33
|
+
// {
|
|
34
|
+
// system: '',
|
|
35
|
+
// display: '',
|
|
36
|
+
// code: ''
|
|
37
|
+
// }
|
|
38
|
+
// ]
|
|
39
|
+
// },
|
|
40
|
+
// priority: routine | urgent | asap | stat
|
|
41
|
+
priority: 'routine',
|
|
42
|
+
doNotPerform: false,
|
|
43
|
+
// Se puede usar medicationCodeableConcept o medicationReference, vamos a usar esta última.
|
|
44
|
+
medicationReference: {
|
|
45
|
+
reference: medicationFHIR.id,
|
|
46
|
+
display: medicationFHIR.code.text
|
|
47
|
+
},
|
|
48
|
+
subject: {
|
|
49
|
+
reference: patientReference // podría ser una reference a un group también
|
|
50
|
+
},
|
|
51
|
+
// encounter: Por ahora lo dejo pendiente. Podría ponerse una referencia a otra prestación o al informe del encuentro.
|
|
52
|
+
authoredOn: moment(data.registro.createdAt).format('YYYY-MM-DD'),
|
|
53
|
+
// requester & performer: pueden ser Reference(Practitioner|PractitionerRole|Organization|Patient|Device|RelatedPerson|CareTeam)
|
|
54
|
+
// por el momento vamos a tomar al profesional porque no tenemos otra info en la prestación
|
|
55
|
+
requester: {
|
|
56
|
+
reference: practitionerReference
|
|
57
|
+
},
|
|
58
|
+
// performer: {
|
|
59
|
+
// reference: practitionerReference
|
|
60
|
+
// },
|
|
61
|
+
// performerType: Lo dejamos pendiente
|
|
62
|
+
// recorder: {
|
|
63
|
+
// reference: practitionerReference
|
|
64
|
+
// },
|
|
65
|
+
// instantiatesCanonical: null, // ["<canonical>"], // Instantiates FHIR protocol or definition
|
|
66
|
+
// instantiatesUri: null, // ["<uri>"], // Instantiates external protocol or definition
|
|
67
|
+
basedOn: data.prestacion.id,
|
|
68
|
+
// groupIdentifier: null, // { Identifier }, // Composite request this is part of
|
|
69
|
+
// courseOfTherapyType: null, // { CodeableConcept }, // Overall pattern of medication administration
|
|
70
|
+
// insurance: null, // [{ Reference(Coverage|ClaimResponse) }], // Associated insurance coverage
|
|
71
|
+
note: null,
|
|
72
|
+
dosageInstruction: null,
|
|
73
|
+
// Medication supply authorization: Hay que ver esta parte
|
|
74
|
+
/*
|
|
75
|
+
dispenseRequest: { // Medication supply authorization
|
|
76
|
+
initialFill: { // First fill details
|
|
77
|
+
quantity: { Quantity(SimpleQuantity) }, // First fill quantity
|
|
78
|
+
duration: { Duration } // First fill duration
|
|
79
|
+
},
|
|
80
|
+
dispenseInterval: { Duration }, // Minimum period of time between dispenses
|
|
81
|
+
validityPeriod: { Period }, // Time period supply is authorized for
|
|
82
|
+
numberOfRepeatsAllowed: "<unsignedInt>", // Number of refills authorized
|
|
83
|
+
quantity: { Quantity(SimpleQuantity) }, // Amount of medication to supply per dispense
|
|
84
|
+
expectedSupplyDuration: { Duration }, // Number of days supply per dispense
|
|
85
|
+
performer: { Reference(Organization) } // Intended dispenser
|
|
86
|
+
},
|
|
87
|
+
*/
|
|
88
|
+
substitution: {
|
|
89
|
+
// allowed[x]: Whether substitution is allowed or not. One of these 2:
|
|
90
|
+
allowedBoolean: true,
|
|
91
|
+
// "allowedCodeableConcept" : { CodeableConcept },
|
|
92
|
+
reason: null // { CodeableConcept } // Why should (not) substitution be made
|
|
93
|
+
},
|
|
94
|
+
priorPrescription: null,
|
|
95
|
+
detectedIssue: null,
|
|
96
|
+
eventHistory: null // [{ Reference(Provenance) }]
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
exports.encode = encode;
|
|
100
|
+
//# sourceMappingURL=medicationRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"medicationRequest.js","sourceRoot":"","sources":["../../../src/lib/medicationRequest.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAAiC;AAEjC,iDAAiD;AAEjD,SAAgB,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,IAAI;IAChF,OAAO;QACH,YAAY,EAAE,mBAAmB;QACjC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;QACrB,IAAI,EAAE;YACF,MAAM,EAAE,WAAW;SAEtB;QACD,SAAS,EAAE;YACP,cAAc;SACjB;QACD,UAAU,EAAE;YACR;gBACI,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,uCAAuC;gBAC/C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;aAC1B;SACJ;QACD,0FAA0F;QAC1F,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACjF,2GAA2G;QAC3G,MAAM,EAAE,OAAO;QACf,cAAc;QACd,gBAAgB;QAChB,YAAY;QACZ,0BAA0B;QAC1B,2BAA2B;QAC3B,uBAAuB;QACvB,YAAY;QACZ,QAAQ;QACR,KAAK;QACL,2CAA2C;QAC3C,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE,KAAK;QACnB,2FAA2F;QAC3F,mBAAmB,EAAE;YACjB,SAAS,EAAE,cAAc,CAAC,EAAE;YAC5B,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI;SACpC;QACD,OAAO,EAAE;YACL,SAAS,EAAE,gBAAgB,CAAE,8CAA8C;SAC9E;QACD,sHAAsH;QACtH,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAChE,iIAAiI;QACjI,2FAA2F;QAC3F,SAAS,EAAE;YACP,SAAS,EAAE,qBAAqB;SACnC;QACD,eAAe;QACf,uCAAuC;QACvC,KAAK;QACL,sCAAsC;QACtC,cAAc;QACd,uCAAuC;QACvC,KAAK;QACL,+FAA+F;QAC/F,uFAAuF;QACvF,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;QAC3B,iFAAiF;QACjF,qGAAqG;QACrG,gGAAgG;QAChG,IAAI,EAAE,IAAI;QACV,iBAAiB,EAAE,IAAI;QACvB,0DAA0D;QAC1D;;;;;;;;;;;;;UAaE;QACF,YAAY,EAAE;YACV,sEAAsE;YACtE,cAAc,EAAE,IAAI;YACpB,kDAAkD;YAClD,MAAM,EAAE,IAAI,CAAC,+DAA+D;SAC/E;QACD,iBAAiB,EAAE,IAAI;QACvB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI,CAAA,8BAA8B;KACnD,CAAC;AACN,CAAC;AAzFD,wBAyFC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encode = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Encode de Medicamentos from ANDES to FHIR
|
|
6
|
+
* @param {} medicationStatement
|
|
7
|
+
*/
|
|
8
|
+
// Muy incompleto hay que mejorarlo mucho todavía
|
|
9
|
+
function encode(patientReference, medicationReference, prestacionMedicamento) {
|
|
10
|
+
return {
|
|
11
|
+
resourceType: 'MedicationStatement',
|
|
12
|
+
status: (prestacionMedicamento.valor.estado === 'activo') ? 'active' : 'inactive',
|
|
13
|
+
id: prestacionMedicamento._id,
|
|
14
|
+
effectiveDateTime: prestacionMedicamento.createdAt,
|
|
15
|
+
medicationCodeableConcept: {
|
|
16
|
+
coding: [
|
|
17
|
+
{
|
|
18
|
+
system: 'http://snomed.info/sct',
|
|
19
|
+
code: prestacionMedicamento.concepto.conceptId,
|
|
20
|
+
display: prestacionMedicamento.concepto.term
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
meta: {
|
|
25
|
+
profile: [
|
|
26
|
+
'http://hl7.org/fhir/uv/ips/StructureDefinition/medication-ips'
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
// extension: null,
|
|
30
|
+
// identifier: '', // Business identifier, not a resource identifier
|
|
31
|
+
subject: {
|
|
32
|
+
reference: patientReference
|
|
33
|
+
},
|
|
34
|
+
medicationReference: {
|
|
35
|
+
reference: medicationReference
|
|
36
|
+
},
|
|
37
|
+
// context: null, // Encounter | Episode of care (podría ser el informe del encuentro o lo que definamos que brinda más información sobre el por qué)
|
|
38
|
+
dosage: [
|
|
39
|
+
{
|
|
40
|
+
text: prestacionMedicamento.valor,
|
|
41
|
+
route: { coding: [{ system: 'http://standardterms.edqm.eu', code: prestacionMedicamento._id, display: prestacionMedicamento.nombre }] },
|
|
42
|
+
timing: { coding: { system: 'http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation', code: 'QD', display: 'Diario' } }
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
// effectivePeriod: { // Esta parte se podría calcular entre la fecha de la prestación y la cant. de tiempo que se indica, pero hay problemas
|
|
46
|
+
// en este registro ya que no siempre está la unidad de tiempo (dias, mes, etc) hay q ver si no es un bug.
|
|
47
|
+
// start: '2015-03'
|
|
48
|
+
// },
|
|
49
|
+
text: {
|
|
50
|
+
status: 'generated',
|
|
51
|
+
div: "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p><b>Generated Narrative with Details</b></p><p><b>id</b>: Medicacion </p><p><b>meta</b>: </p><p><b>text</b>: " + prestacionMedicamento.concepto.term + "</p></div>"
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
exports.encode = encode;
|
|
56
|
+
//# sourceMappingURL=medicationStatement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"medicationStatement.js","sourceRoot":"","sources":["../../../src/lib/medicationStatement.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,iDAAiD;AACjD,SAAgB,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,qBAAqB;IAC/E,OAAO;QACH,YAAY,EAAE,qBAAqB;QACnC,MAAM,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;QACjF,EAAE,EAAE,qBAAqB,CAAC,GAAG;QAC7B,iBAAiB,EAAE,qBAAqB,CAAC,SAAS;QAClD,yBAAyB,EAAE;YACvB,MAAM,EAAE;gBACJ;oBACI,MAAM,EAAE,wBAAwB;oBAChC,IAAI,EAAE,qBAAqB,CAAC,QAAQ,CAAC,SAAS;oBAC9C,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,IAAI;iBAC/C;aACJ;SACJ;QACD,IAAI,EAAE;YACF,OAAO,EAAE;gBACL,+DAA+D;aAClE;SACJ;QACD,mBAAmB;QACnB,oEAAoE;QACpE,OAAO,EAAE;YACL,SAAS,EAAE,gBAAgB;SAC9B;QACD,mBAAmB,EAAE;YACjB,SAAS,EAAE,mBAAmB;SACjC;QACD,qJAAqJ;QACrJ,MAAM,EAAE;YACJ;gBACI,IAAI,EAAE,qBAAqB,CAAC,KAAK;gBACjC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE,IAAI,EAAE,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE;gBACvI,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,0DAA0D,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;aAC5H;SACJ;QACD,iJAAiJ;QACjJ,0GAA0G;QAC1G,uBAAuB;QACvB,KAAK;QACL,IAAI,EAAE;YACF,MAAM,EAAE,WAAW;YACnB,GAAG,EAAE,gKAA8J,qBAAqB,CAAC,QAAQ,CAAC,IAAI,eAAY;SACrN;KACJ,CAAC;AACN,CAAC;AA7CD,wBA6CC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encode = void 0;
|
|
4
|
+
var config_1 = require("./config");
|
|
5
|
+
/**
|
|
6
|
+
* Encode a organization from ANDES to FHIR
|
|
7
|
+
* @param {} organization
|
|
8
|
+
*/
|
|
9
|
+
function encode(organization) {
|
|
10
|
+
var data = organization;
|
|
11
|
+
if (data) {
|
|
12
|
+
var identificadores = data.codigo.sisa ? [{
|
|
13
|
+
assigner: 'sisa',
|
|
14
|
+
value: data.codigo.sisa
|
|
15
|
+
}] : [];
|
|
16
|
+
if (data.codigo.cuie) {
|
|
17
|
+
identificadores.push({
|
|
18
|
+
assigner: 'cuie',
|
|
19
|
+
value: data.codigo.cuie
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (data.codigo.remediar) {
|
|
23
|
+
identificadores.push({
|
|
24
|
+
assigner: 'remediar',
|
|
25
|
+
value: data.codigo.remediar
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (data.codigo.sips) {
|
|
29
|
+
identificadores.push({
|
|
30
|
+
assigner: 'sips',
|
|
31
|
+
value: data.codigo.sips
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
identificadores.push({
|
|
35
|
+
system: config_1.makeUrl('Organization'),
|
|
36
|
+
value: data._id
|
|
37
|
+
});
|
|
38
|
+
var contactos = data.contacto ? data.contacto.map(function (unContacto) {
|
|
39
|
+
var cont = {
|
|
40
|
+
resourceType: 'ContactPoint',
|
|
41
|
+
value: unContacto.valor,
|
|
42
|
+
rank: unContacto.ranking,
|
|
43
|
+
};
|
|
44
|
+
switch (unContacto.tipo) {
|
|
45
|
+
case 'fijo':
|
|
46
|
+
cont['system'] = 'phone';
|
|
47
|
+
break;
|
|
48
|
+
case 'celular':
|
|
49
|
+
cont['system'] = 'phone';
|
|
50
|
+
break;
|
|
51
|
+
case 'email':
|
|
52
|
+
cont['system'] = 'email';
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
return cont;
|
|
56
|
+
}) : [];
|
|
57
|
+
// Parsea direcciones
|
|
58
|
+
var direcciones = data.direccion ? [{
|
|
59
|
+
resourceType: 'Address',
|
|
60
|
+
postalCode: data.direccion.codigoPostal ? data.direccion.codigoPostal : '',
|
|
61
|
+
line: [data.direccion.valor],
|
|
62
|
+
city: data.direccion.ubicacion.localidad ? data.direccion.ubicacion.localidad.nombre : '',
|
|
63
|
+
state: data.direccion.ubicacion.provincia ? data.direccion.ubicacion.provincia.nombre : '',
|
|
64
|
+
country: data.direccion.ubicacion.pais ? data.direccion.ubicacion.pais.nombre : '',
|
|
65
|
+
}] : [];
|
|
66
|
+
// Armamos la organizacion FHIR
|
|
67
|
+
var organizacionFHIR = {
|
|
68
|
+
id: data.id,
|
|
69
|
+
resourceType: 'Organization',
|
|
70
|
+
identifier: identificadores,
|
|
71
|
+
active: data.activo ? data.activo : null,
|
|
72
|
+
type: [{
|
|
73
|
+
resourceType: 'CodeableConcept',
|
|
74
|
+
text: data.tipoEstablecimiento ? data.tipoEstablecimiento.nombre : null,
|
|
75
|
+
}],
|
|
76
|
+
name: data.nombre ? data.nombre : null,
|
|
77
|
+
};
|
|
78
|
+
if (contactos.length > 0) { // A contact detail for the organization
|
|
79
|
+
organizacionFHIR['telecom'] = contactos;
|
|
80
|
+
}
|
|
81
|
+
if (direcciones) { // An address for the organization
|
|
82
|
+
organizacionFHIR['address'] = direcciones;
|
|
83
|
+
}
|
|
84
|
+
return organizacionFHIR;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.encode = encode;
|
|
91
|
+
//# sourceMappingURL=organization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../../src/lib/organization.ts"],"names":[],"mappings":"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"}
|