@andes/fhir 1.12.0 → 1.12.1-beta.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/{src → dist}/data/patient.json +192 -192
- package/dist/{src/helpers → helpers}/patientFactory.js +35 -31
- package/dist/{src/lib → lib}/allergyIntolerance.js +39 -40
- package/dist/{src/lib → lib}/bundle.js +25 -26
- package/dist/{src/lib → lib}/composition.js +152 -152
- package/dist/{src/lib → lib}/condition.js +79 -80
- package/dist/{src/lib → lib}/config.js +27 -21
- package/dist/lib/config.test.js +19 -0
- package/dist/{src/lib → lib}/device.js +38 -39
- package/dist/lib/device.test.js +9 -0
- package/dist/{src/lib → lib}/document-reference.js +106 -107
- package/dist/{src/lib → lib}/immunization.js +67 -68
- package/{src/lib/medication.ts → dist/lib/medication.js} +64 -61
- package/{src/lib/medicationRequest.ts → dist/lib/medicationRequest.js} +103 -100
- package/dist/{src/lib → lib}/medicationStatement.js +55 -56
- package/dist/lib/organization.js +93 -0
- package/dist/lib/patient.js +465 -0
- package/dist/{src/lib → lib}/patient.test.js +132 -113
- package/dist/lib/practitioner.js +186 -0
- package/dist/types/andes/organization.types.js +2 -0
- package/dist/types/andes/patient.types.js +2 -0
- package/dist/types/andes/practitioner.types.js +3 -0
- package/package.json +53 -44
- package/.circleci/config.yml +0 -72
- package/.editorconfig +0 -14
- package/.env.example +0 -2
- package/.gitattributes +0 -1
- package/.github/CODEOWNERS +0 -1
- package/.github/labeler.yml +0 -11
- package/.github/pull_request_template.md +0 -28
- package/.github/workflows/build_test.yml +0 -14
- package/.github/workflows/has_conflicts.yml +0 -13
- package/.vscode/settings.json +0 -2
- package/CHANGELOG.md +0 -351
- package/coverage/clover.xml +0 -209
- package/coverage/coverage-final.json +0 -5
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/config.ts.html +0 -136
- package/coverage/lcov-report/device.ts.html +0 -193
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/helpers/index.html +0 -116
- package/coverage/lcov-report/helpers/patientFactory.ts.html +0 -124
- package/coverage/lcov-report/index.html +0 -131
- package/coverage/lcov-report/lib/config.ts.html +0 -136
- package/coverage/lcov-report/lib/device.ts.html +0 -193
- package/coverage/lcov-report/lib/index.html +0 -146
- package/coverage/lcov-report/lib/patient.ts.html +0 -1318
- package/coverage/lcov-report/patient.ts.html +0 -1207
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov.info +0 -425
- package/dist/index.js +0 -52
- package/dist/index.js.map +0 -1
- package/dist/src/data/patient.json +0 -192
- package/dist/src/helpers/patientFactory.js.map +0 -1
- package/dist/src/lib/allergyIntolerance.js.map +0 -1
- package/dist/src/lib/bundle.js.map +0 -1
- package/dist/src/lib/composition.js.map +0 -1
- package/dist/src/lib/condition.js.map +0 -1
- package/dist/src/lib/config.js.map +0 -1
- package/dist/src/lib/config.test.js +0 -13
- package/dist/src/lib/config.test.js.map +0 -1
- package/dist/src/lib/device.js.map +0 -1
- package/dist/src/lib/device.test.js +0 -10
- package/dist/src/lib/device.test.js.map +0 -1
- package/dist/src/lib/document-reference.js.map +0 -1
- package/dist/src/lib/immunization.js.map +0 -1
- package/dist/src/lib/medication.js +0 -65
- package/dist/src/lib/medication.js.map +0 -1
- package/dist/src/lib/medicationRequest.js +0 -103
- package/dist/src/lib/medicationRequest.js.map +0 -1
- package/dist/src/lib/medicationStatement.js.map +0 -1
- package/dist/src/lib/organization.js +0 -91
- package/dist/src/lib/organization.js.map +0 -1
- package/dist/src/lib/patient.js +0 -397
- package/dist/src/lib/patient.js.map +0 -1
- package/dist/src/lib/patient.test.js.map +0 -1
- package/dist/src/lib/practitioner.js +0 -161
- package/dist/src/lib/practitioner.js.map +0 -1
- package/index.ts +0 -30
- package/jest.config.js +0 -12
- package/release.config.js +0 -74
- package/src/helpers/patientFactory.ts +0 -13
- package/src/lib/allergyIntolerance.ts +0 -36
- package/src/lib/bundle.ts +0 -19
- package/src/lib/composition.ts +0 -153
- package/src/lib/condition.ts +0 -80
- package/src/lib/config.test.ts +0 -13
- package/src/lib/config.ts +0 -17
- package/src/lib/device.test.ts +0 -9
- package/src/lib/device.ts +0 -36
- package/src/lib/document-reference.ts +0 -102
- package/src/lib/immunization.ts +0 -64
- package/src/lib/medicationStatement.ts +0 -52
- package/src/lib/organization.ts +0 -89
- package/src/lib/patient.test.ts +0 -101
- package/src/lib/patient.ts +0 -411
- package/src/lib/practitioner.ts +0 -157
- package/tsconfig.test.json +0 -18
- package/tslint.json +0 -139
|
@@ -1,100 +1,103 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
//
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Encode medicationRequest from ANDES to FHIR
|
|
4
|
+
* @param {} medicationRequest
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.encode = void 0;
|
|
11
|
+
const moment_1 = __importDefault(require("moment"));
|
|
12
|
+
// Muy incompleto hay que mejorarlo mucho todavía
|
|
13
|
+
function encode(patientReference, practitionerReference, medicationFHIR, data) {
|
|
14
|
+
return {
|
|
15
|
+
resourceType: 'MedicationRequest',
|
|
16
|
+
id: data.registro._id, // id de la prescripción completa
|
|
17
|
+
text: {
|
|
18
|
+
status: 'generated',
|
|
19
|
+
// 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>: ${'DEFINIR'}</p></div>`
|
|
20
|
+
},
|
|
21
|
+
contained: [
|
|
22
|
+
medicationFHIR
|
|
23
|
+
],
|
|
24
|
+
identifier: [
|
|
25
|
+
{
|
|
26
|
+
use: 'official',
|
|
27
|
+
system: 'http://app.andes.gob.ar/prescriptions', // Es el id de la prestación completa
|
|
28
|
+
value: data.registro.id
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
// active | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown
|
|
32
|
+
status: (data.prestacion.estadoActual.tipo === 'validada') ? 'active' : 'on-hold', // Lo mejor sería enviar el estado de la receta desde la prestación
|
|
33
|
+
// intent: proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option
|
|
34
|
+
intent: 'order', // Ya que no tenemos este dato, ver como sería en caso de recetas prolongadas si puede ir como plan
|
|
35
|
+
// category: {
|
|
36
|
+
// coding: [
|
|
37
|
+
// {
|
|
38
|
+
// system: '',
|
|
39
|
+
// display: '',
|
|
40
|
+
// code: ''
|
|
41
|
+
// }
|
|
42
|
+
// ]
|
|
43
|
+
// },
|
|
44
|
+
// priority: routine | urgent | asap | stat
|
|
45
|
+
priority: 'routine',
|
|
46
|
+
doNotPerform: false,
|
|
47
|
+
// Se puede usar medicationCodeableConcept o medicationReference, vamos a usar esta última.
|
|
48
|
+
medicationReference: {
|
|
49
|
+
reference: medicationFHIR.id,
|
|
50
|
+
display: medicationFHIR.code.text
|
|
51
|
+
},
|
|
52
|
+
subject: {
|
|
53
|
+
reference: patientReference // podría ser una reference a un group también
|
|
54
|
+
},
|
|
55
|
+
// encounter: Por ahora lo dejo pendiente. Podría ponerse una referencia a otra prestación o al informe del encuentro.
|
|
56
|
+
authoredOn: (0, moment_1.default)(data.registro.createdAt).format('YYYY-MM-DD'),
|
|
57
|
+
// requester & performer: pueden ser Reference(Practitioner|PractitionerRole|Organization|Patient|Device|RelatedPerson|CareTeam)
|
|
58
|
+
// por el momento vamos a tomar al profesional porque no tenemos otra info en la prestación
|
|
59
|
+
requester: {
|
|
60
|
+
reference: practitionerReference
|
|
61
|
+
},
|
|
62
|
+
// performer: {
|
|
63
|
+
// reference: practitionerReference
|
|
64
|
+
// },
|
|
65
|
+
// performerType: Lo dejamos pendiente
|
|
66
|
+
// recorder: {
|
|
67
|
+
// reference: practitionerReference
|
|
68
|
+
// },
|
|
69
|
+
// instantiatesCanonical: null, // ["<canonical>"], // Instantiates FHIR protocol or definition
|
|
70
|
+
// instantiatesUri: null, // ["<uri>"], // Instantiates external protocol or definition
|
|
71
|
+
basedOn: data.prestacion.id, // Vamos a usar el id de la prestación donde esta todo [{ Reference(CarePlan|MedicationRequest|ServiceRequest| ImmunizationRecommendation) }], // What request fulfills
|
|
72
|
+
// groupIdentifier: null, // { Identifier }, // Composite request this is part of
|
|
73
|
+
// courseOfTherapyType: null, // { CodeableConcept }, // Overall pattern of medication administration
|
|
74
|
+
// insurance: null, // [{ Reference(Coverage|ClaimResponse) }], // Associated insurance coverage
|
|
75
|
+
note: null, // De donde sacamos las notas? [{ Annotation }], // Information about the prescription
|
|
76
|
+
dosageInstruction: null, // [{ Dosage }], // How the medication should be taken
|
|
77
|
+
// Medication supply authorization: Hay que ver esta parte
|
|
78
|
+
/*
|
|
79
|
+
dispenseRequest: { // Medication supply authorization
|
|
80
|
+
initialFill: { // First fill details
|
|
81
|
+
quantity: { Quantity(SimpleQuantity) }, // First fill quantity
|
|
82
|
+
duration: { Duration } // First fill duration
|
|
83
|
+
},
|
|
84
|
+
dispenseInterval: { Duration }, // Minimum period of time between dispenses
|
|
85
|
+
validityPeriod: { Period }, // Time period supply is authorized for
|
|
86
|
+
numberOfRepeatsAllowed: "<unsignedInt>", // Number of refills authorized
|
|
87
|
+
quantity: { Quantity(SimpleQuantity) }, // Amount of medication to supply per dispense
|
|
88
|
+
expectedSupplyDuration: { Duration }, // Number of days supply per dispense
|
|
89
|
+
performer: { Reference(Organization) } // Intended dispenser
|
|
90
|
+
},
|
|
91
|
+
*/
|
|
92
|
+
substitution: {
|
|
93
|
+
// allowed[x]: Whether substitution is allowed or not. One of these 2:
|
|
94
|
+
allowedBoolean: true, // <boolean>,
|
|
95
|
+
// "allowedCodeableConcept" : { CodeableConcept },
|
|
96
|
+
reason: null // { CodeableConcept } // Why should (not) substitution be made
|
|
97
|
+
},
|
|
98
|
+
priorPrescription: null, // { Reference(MedicationRequest) }, // An order/prescription that is being replaced
|
|
99
|
+
detectedIssue: null, // [{ Reference(DetectedIssue) }], // Clinical Issue with action
|
|
100
|
+
eventHistory: null // [{ Reference(Provenance) }]
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
exports.encode = encode;
|
|
@@ -1,56 +1,55 @@
|
|
|
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
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
exports.encode = encode;
|
|
56
|
-
//# sourceMappingURL=medicationStatement.js.map
|
|
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, // El código de la prestación donde está el registro del contexto de porque está consumiendo el medicamento
|
|
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, // indicación
|
|
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;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encode = void 0;
|
|
4
|
+
const config_1 = require("./config");
|
|
5
|
+
/**
|
|
6
|
+
* Encode an ANDES Organization to FHIR Organization
|
|
7
|
+
*/
|
|
8
|
+
function encode(organization) {
|
|
9
|
+
const data = organization;
|
|
10
|
+
if (!data)
|
|
11
|
+
return null;
|
|
12
|
+
// Identificadores
|
|
13
|
+
const identificadores = [];
|
|
14
|
+
if (data.codigo?.sisa) {
|
|
15
|
+
identificadores.push({
|
|
16
|
+
system: 'andes.gob.ar/sisa',
|
|
17
|
+
value: data.codigo.sisa
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (data.codigo?.cuie) {
|
|
21
|
+
identificadores.push({
|
|
22
|
+
system: 'andes.gob.ar/cuie',
|
|
23
|
+
value: data.codigo.cuie
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
if (data.codigo?.remediar) {
|
|
27
|
+
identificadores.push({
|
|
28
|
+
system: 'andes.gob.ar/remediar',
|
|
29
|
+
value: data.codigo.remediar
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if (data.codigo?.sips) {
|
|
33
|
+
identificadores.push({
|
|
34
|
+
system: 'andes.gob.ar/sips',
|
|
35
|
+
value: data.codigo.sips
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
identificadores.push({
|
|
39
|
+
system: (0, config_1.makeUrl)('Organization'),
|
|
40
|
+
value: data._id ?? data.id
|
|
41
|
+
});
|
|
42
|
+
// Contactos → telecom
|
|
43
|
+
const contactos = (data.contacto ?? [])
|
|
44
|
+
.map((item) => {
|
|
45
|
+
const cp = {
|
|
46
|
+
value: item.valor,
|
|
47
|
+
rank: item.ranking
|
|
48
|
+
};
|
|
49
|
+
switch (item.tipo) {
|
|
50
|
+
case 'fijo':
|
|
51
|
+
case 'celular':
|
|
52
|
+
cp.system = 'phone';
|
|
53
|
+
break;
|
|
54
|
+
case 'email':
|
|
55
|
+
cp.system = 'email';
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
return cp;
|
|
59
|
+
});
|
|
60
|
+
// Dirección → address
|
|
61
|
+
const direcciones = [];
|
|
62
|
+
if (data.direccion) {
|
|
63
|
+
const dir = data.direccion;
|
|
64
|
+
direcciones.push({
|
|
65
|
+
postalCode: dir.codigoPostal ?? '',
|
|
66
|
+
line: [dir.valor],
|
|
67
|
+
city: dir.ubicacion?.localidad?.nombre ?? '',
|
|
68
|
+
state: dir.ubicacion?.provincia?.nombre ?? '',
|
|
69
|
+
country: dir.ubicacion?.pais?.nombre ?? ''
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Organización FHIR
|
|
73
|
+
const organizacionFHIR = {
|
|
74
|
+
resourceType: 'Organization',
|
|
75
|
+
id: data._id ?? data.id,
|
|
76
|
+
identifier: identificadores,
|
|
77
|
+
active: data.activo ?? undefined,
|
|
78
|
+
name: data.nombre ?? undefined,
|
|
79
|
+
type: data.tipoEstablecimiento
|
|
80
|
+
? [{
|
|
81
|
+
text: data.tipoEstablecimiento.nombre
|
|
82
|
+
}]
|
|
83
|
+
: undefined
|
|
84
|
+
};
|
|
85
|
+
if (contactos.length > 0) {
|
|
86
|
+
organizacionFHIR.telecom = contactos;
|
|
87
|
+
}
|
|
88
|
+
if (direcciones.length > 0) {
|
|
89
|
+
organizacionFHIR.address = direcciones;
|
|
90
|
+
}
|
|
91
|
+
return organizacionFHIR;
|
|
92
|
+
}
|
|
93
|
+
exports.encode = encode;
|