Files
medods_n3health_extension/metaData.js
T
2026-02-15 16:59:54 +03:00

107 lines
3.8 KiB
JavaScript

// metaData.js
(function () {
const MAX_ATTEMPTS = 3;
const INTERVAL_MS = 1000;
let attempts = 0;
let done = false;
function sendMetaData() {
if (done) return;
attempts++;
if (window.gon) {
try {
done = true;
const metaData = {};
const clinicPhone = window.gon.application.current_clinic.phone1 || window.gon.application.current_clinic.phone2;
const clinicPhoneNormalized = `+7${clinicPhone.replace(/[^\d]/g, '').slice(1, 12)}`;
metaData.practitioner = {
familyName: window.gon.application.current_user.surname,
givenName: window.gon.application.current_user.name,
middleName: window.gon.application.current_user.second_name,
userIdLpu: window.gon.application.current_user.id,
telecom: [{
system: 'Email',
value: window.gon.application.current_clinic.email
}, {
system: 'Telephone',
value: clinicPhoneNormalized
}]
}
patientPhone = window.gon.specific.client.phone;
const patientPhoneNormalized = `+7${patientPhone.replace(/[^\d]/g, '').slice(1, 12)}`;
metaData.patients = [{
idPatientMis: window.gon.specific.client.id,
familyName: window.gon.specific.client.surname,
givenName: window.gon.specific.client.name,
middleName: window.gon.specific.client.second_name,
birthDate: window.gon.specific.client.birthdate,
sex: window.gon.specific.client.sex_id === 1 ? 'male' : 'female',
telecom: [{
system: 'Telephone',
value: patientPhoneNormalized
}],
documentDto: [{
providerName: 'ПФР',
docN: window.gon.specific.client.snils,
docS: '',
documentName: 'СНИЛС',
idDocumentType: 223
}]
}]
if (window.gon.specific.client.email) {
metaData.patients[0].telecom.push({
system: 'Email',
value: window.gon.specific.client.email
});
}
metaData.docs = window.gon.specific.docs.map(doc => ({
id: doc.id,
title: doc.title,
created_at: doc.created_at,
updated_at: doc.updated_at,
number: doc.number,
data: doc.data
}));
metaData.userData = {
id: window.gon.application.current_user.id,
login: window.gon.application.current_user.username,
};
// Отправляем только один раз
window.postMessage(
{
source: 'medods-extension',
type: 'metaData',
payload: metaData
},
'*'
);
return;
} catch (error) {
console.error('Error in metaData:', error);
}
}
if (attempts >= MAX_ATTEMPTS) {
console.warn('Max attempts reached for metaData');
return;
}
setTimeout(sendMetaData, INTERVAL_MS);
}
// Запускаем после небольшой задержки
setTimeout(sendMetaData, 100);
})();