...
This commit is contained in:
805
Node/package-lock.json
generated
805
Node/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -6,24 +6,24 @@
|
||||
"scripts": {
|
||||
"build": "rimraf ./build && tsc",
|
||||
"start": "npm run build && node build/index.js",
|
||||
"start:dev": "nodemon"
|
||||
"dev": "nodemon"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@types/node": "^18.7.18",
|
||||
"@types/uuid": "^8.3.4",
|
||||
"nodemon": "^2.0.19",
|
||||
"rimraf": "^3.0.2",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": "^16.0.3",
|
||||
"excel-date-to-js": "^1.1.5",
|
||||
"kuzzle-sdk": "^7.10.1",
|
||||
"pocketbase": "^0.7.0",
|
||||
"read-excel-file": "^5.5.0",
|
||||
"surrealdb.js": "^0.3.1",
|
||||
"neo4j-driver": "^5.0.1",
|
||||
"uuid": "^9.0.0",
|
||||
"xlsx": "^0.18.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,25 +1,7 @@
|
||||
import reader from "xlsx";
|
||||
import { getJsDateFromExcel } from "excel-date-to-js";
|
||||
|
||||
import { readdirSync, writeFileSync } from "fs";
|
||||
import { writeFileSync } from "fs";
|
||||
import { join } from "path";
|
||||
|
||||
const excelPath = join(__dirname, "..", "..", "Excel");
|
||||
|
||||
const excelFiles = readdirSync(excelPath);
|
||||
|
||||
const readExcel = (filePath: string) => {
|
||||
let data: unknown[] = [];
|
||||
const file = reader.readFile(filePath);
|
||||
const sheets = file.SheetNames;
|
||||
for (let i = 0; i < sheets.length; i++) {
|
||||
const temp = reader.utils.sheet_to_json(file.Sheets[file.SheetNames[i]]);
|
||||
temp.forEach((res) => {
|
||||
data.push(res);
|
||||
});
|
||||
}
|
||||
return data;
|
||||
};
|
||||
import excelData from "./excelToJson";
|
||||
|
||||
const recordsToJson = () => {
|
||||
let pacientiNr = 0;
|
||||
@@ -31,11 +13,8 @@ const recordsToJson = () => {
|
||||
let bariNr = 0;
|
||||
let records: any[] = [];
|
||||
|
||||
excelFiles.every((file) => {
|
||||
if (!file.includes("raw_") && !file.includes("lock")) {
|
||||
const excelFile = join(excelPath, file);
|
||||
const data = readExcel(excelFile);
|
||||
const klinika_emer = file.split("_")[0];
|
||||
const data = excelData();
|
||||
const klinika_emer = 'file.split("_")[0];'
|
||||
klinikaNr++;
|
||||
const klinika: any = {
|
||||
nr: klinikaNr,
|
||||
@@ -131,11 +110,8 @@ const recordsToJson = () => {
|
||||
});
|
||||
records.push(klinika);
|
||||
console.log(`Mbaroi ${klinika_emer}`);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
const jsonFile = join(__dirname, "..", "..", "JSON", "records.json");
|
||||
writeFileSync(jsonFile, JSON.stringify(records));
|
||||
};
|
||||
|
||||
export default recordsToJson;
|
||||
export { recordsToJson, excelData };
|
||||
|
||||
29
Node/src/excelToJson.ts
Normal file
29
Node/src/excelToJson.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { join } from "path";
|
||||
import reader, { WorkBook, WorkSheet } from "xlsx";
|
||||
import { readdirSync } from "fs";
|
||||
|
||||
let excelPath = join(__dirname, "..", "..", "Excel");
|
||||
let excelFiles = readdirSync(excelPath);
|
||||
|
||||
const excelData = () => {
|
||||
return excelFiles.flatMap((fileName) => {
|
||||
const filePath = join(excelPath, fileName);
|
||||
if (!fileName.includes("raw_") && !fileName.includes("lock")) {
|
||||
const klinika_emer = fileName.split("_")[0];
|
||||
const wb: WorkBook = reader.readFile(filePath);
|
||||
const sheets: string[] = wb.SheetNames;
|
||||
return sheets.flatMap((sheet: string) => {
|
||||
const ws: WorkSheet = wb.Sheets[sheet];
|
||||
const data = reader.utils.sheet_to_json(ws);
|
||||
return data.map((record: any) => {
|
||||
record.klinika = klinika_emer;
|
||||
return record;
|
||||
});
|
||||
});
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export default excelData;
|
||||
@@ -1,23 +1,10 @@
|
||||
// import { run } from "./kuzzle";
|
||||
// import { initDriver } from "./neo4j.driver";
|
||||
import createObjects from "./structureData";
|
||||
require("dotenv").config();
|
||||
|
||||
import recordsToJson from "./convertToJson";
|
||||
recordsToJson();
|
||||
// (async () => {
|
||||
// const kuzzle = await run();
|
||||
// if (kuzzle) {
|
||||
// const credentials = {
|
||||
// username: "julian.cuni",
|
||||
// password: "MatraPaPuPa..11",
|
||||
// };
|
||||
// try {
|
||||
// const jwt = await kuzzle.auth.login("local", credentials);
|
||||
// // const apiKey = await kuzzle.auth.createApiKey("Sigfox API key");
|
||||
// } catch (error: any) {
|
||||
// console.error(error.message);
|
||||
// }
|
||||
// }
|
||||
// })();
|
||||
// const { NEO4J_URL, NEO4J_USER, NEO4J_PASS } = process.env;
|
||||
|
||||
// (async () => {
|
||||
// await login();
|
||||
// await initDriver(NEO4J_URL!, NEO4J_USER!, NEO4J_PASS!);
|
||||
// })();
|
||||
createObjects();
|
||||
|
||||
42
Node/src/interfaces.ts
Normal file
42
Node/src/interfaces.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
export interface Klinika {
|
||||
id: string;
|
||||
emer: string;
|
||||
pacientet: Pacienti[],
|
||||
diagnozat: Diagnoza[]
|
||||
}
|
||||
export interface Diagnoza {
|
||||
id: string;
|
||||
emer: string;
|
||||
kodi_dg_icd_9: string[];
|
||||
pacientet: Pacienti[]
|
||||
}
|
||||
export interface Pacienti {
|
||||
id: string;
|
||||
emer: string;
|
||||
mbiemer: string;
|
||||
datelindja: Date;
|
||||
mosha: number;
|
||||
gjinia: string;
|
||||
}
|
||||
|
||||
export interface Shtrimi {
|
||||
id: string;
|
||||
date: Date;
|
||||
dite_qendrimi: number;
|
||||
}
|
||||
|
||||
|
||||
|
||||
export interface Trajtimi {
|
||||
id: string;
|
||||
urgjence: boolean;
|
||||
salle_lindje: boolean;
|
||||
barnat: Bari[];
|
||||
}
|
||||
|
||||
export interface Bari {
|
||||
id: string;
|
||||
emer: string;
|
||||
njesia: string | null;
|
||||
sasia: string | null;
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
import { Kuzzle, WebSocket, Http } from "kuzzle-sdk";
|
||||
|
||||
const kuzzle = new Kuzzle(new Http("localhost"));
|
||||
|
||||
kuzzle.on("networkError", (error: any) => {
|
||||
console.error("Network Error: ", error);
|
||||
});
|
||||
|
||||
const run = async () => {
|
||||
try {
|
||||
// Connects to the Kuzzle server
|
||||
await kuzzle.connect();
|
||||
// Creates an index
|
||||
// await kuzzle.index.create("nyc-open-data");
|
||||
// // Creates a collection
|
||||
// await kuzzle.collection.create("nyc-open-data", "yellow-taxi", {});
|
||||
// console.log("nyc-open-data/yellow-taxi ready!");
|
||||
return kuzzle;
|
||||
} catch (error: any) {
|
||||
console.error(error.message);
|
||||
}
|
||||
// finally {
|
||||
// kuzzle.disconnect();
|
||||
// }
|
||||
return null;
|
||||
};
|
||||
export { run };
|
||||
13
Node/src/neo4j.driver.ts
Normal file
13
Node/src/neo4j.driver.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import neo4j, { Driver } from "neo4j-driver";
|
||||
|
||||
let driver: Driver;
|
||||
|
||||
export const initDriver = async (uri: string, username: string, password: string) => {
|
||||
driver = neo4j.driver(uri, neo4j.auth.basic(username, password));
|
||||
await driver.getServerInfo();
|
||||
return driver;
|
||||
};
|
||||
|
||||
export const getDriver = () => {
|
||||
return driver;
|
||||
}
|
||||
81
Node/src/saveToNeo4j.ts
Normal file
81
Node/src/saveToNeo4j.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import { ManagedTransaction, QueryResult } from "neo4j-driver";
|
||||
import { Klinika, Pacienti } from "./interfaces";
|
||||
import { getDriver } from "./neo4j.driver";
|
||||
|
||||
export const findPacient = async (pacienti: Pacienti) => {
|
||||
const driver = getDriver();
|
||||
const session = driver.session();
|
||||
|
||||
try {
|
||||
const result: QueryResult = await session.executeRead(
|
||||
(tx: ManagedTransaction) => {
|
||||
return tx.run(
|
||||
`MATCH (p:Pacienti) WHERE p.emer = $emer AND p.mbiemer = $mbiemer AND p.mosha = $mosha
|
||||
RETURN p
|
||||
`,
|
||||
{
|
||||
emer: pacienti.emer,
|
||||
mbiemer: pacienti.mbiemer,
|
||||
mosha: pacienti.mosha,
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
await session.close();
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
await session.close();
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
export const findKlinika = async (klinika: Klinika) => {
|
||||
const driver = getDriver();
|
||||
const session = driver.session();
|
||||
try {
|
||||
const result: QueryResult = await session.executeRead(
|
||||
(tx: ManagedTransaction) => {
|
||||
return tx.run(
|
||||
`OPTIONAL MATCH (k:Klinika) WHERE k.emer = $emer RETURN k IS NOT NULL AS Predicate
|
||||
|
||||
`,
|
||||
{
|
||||
emer: klinika.emer,
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
await session.close();
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
await session.close();
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
export const upsertKlinika = async (klinika: Klinika) => {
|
||||
const klinikaFromDb = await findKlinika(klinika);
|
||||
if (!klinikaFromDb?.records[0].get('Predicate')) {
|
||||
const driver = getDriver();
|
||||
const session = driver.session();
|
||||
|
||||
try {
|
||||
const result: QueryResult = await session.run(
|
||||
`MERGE (k:Klinika {emer: $emer}) RETURN k
|
||||
`,
|
||||
{
|
||||
emer: klinika.emer,
|
||||
}
|
||||
);
|
||||
await session.close();
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
await session.close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return klinikaFromDb;
|
||||
};
|
||||
@@ -1,37 +0,0 @@
|
||||
const Surreal = require("surrealdb.js");
|
||||
|
||||
const db = new Surreal("https://baas.microservices.al/rpc");
|
||||
async function main() {
|
||||
try {
|
||||
await db.use("fluxem", "fluxem");
|
||||
|
||||
const token = await db.signin({
|
||||
NS: "fluxem",
|
||||
DB: "fluxem",
|
||||
SC: "allusers",
|
||||
email: "test@acme.com",
|
||||
pass: "some password",
|
||||
marketing: true,
|
||||
tags: ["rust", "golang", "javascript"],
|
||||
});
|
||||
|
||||
let created = await db.create("person", {
|
||||
title: "Founder & CEO",
|
||||
name: {
|
||||
first: "Tobie",
|
||||
last: "Morgan Hitchcock",
|
||||
},
|
||||
marketing: true,
|
||||
identifier: Math.random().toString(36).substr(2, 10),
|
||||
});
|
||||
|
||||
// await db.invalidate();
|
||||
|
||||
// const res = await db.authenticate(token)
|
||||
console.log("token", created);
|
||||
} catch (e) {
|
||||
console.error("ERROR", e);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
172
Node/src/structureData.ts
Normal file
172
Node/src/structureData.ts
Normal file
@@ -0,0 +1,172 @@
|
||||
import excelData from "./excelToJson";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { getJsDateFromExcel } from "excel-date-to-js";
|
||||
import {
|
||||
Klinika,
|
||||
Pacienti,
|
||||
Shtrimi,
|
||||
Diagnoza,
|
||||
Trajtimi,
|
||||
Bari,
|
||||
} from "./interfaces";
|
||||
// import { findPacient, upsertKlinika } from "./saveToNeo4j";
|
||||
|
||||
let klinikat: Klinika[] = [];
|
||||
let pacientet: Pacienti[] = [];
|
||||
let shtrimet: Shtrimi[] = [];
|
||||
let diagnozat: Diagnoza[] = [];
|
||||
let trajtimet: Trajtimi[] = [];
|
||||
let barnat: Bari[] = [];
|
||||
|
||||
const createObjects = () => {
|
||||
let errorNr = 0;
|
||||
let pacientiNr = 0;
|
||||
|
||||
const data = excelData();
|
||||
data.every(async (record: any) => {
|
||||
if (record && record["EMER"] && record["MBIEMER"]) {
|
||||
let emerPacienti = record.EMER;
|
||||
let mbiemerPacienti = record.MBIEMER;
|
||||
let moshaPacienti = record.MOSHA;
|
||||
let gjiniaPacienti = record.GJINIA;
|
||||
let datelindjaPacienti = record.DATELINDJA_KORIGJ;
|
||||
let klinikaEmer = record.klinika;
|
||||
let dataEShtrimit = record.DT_SHTRIMI_KORIGJ;
|
||||
let dite_qendrimi = record["DITE QENDRIMI NE SPITAL"];
|
||||
let diagnozaRaw = record.DIAGNOZA;
|
||||
let kodi_dg_icd_9Raw = record["Kodi DG ICD-9"];
|
||||
let trajtimiUrgjence = record["TRAJTIMI SPITALOR Urgjence"];
|
||||
let trajtimiPavion = record["TRAJTIMI SPITALOR Pavion"];
|
||||
let trajtimiSalleLindje = record["TRAJTIMI SALLE LINDJE"];
|
||||
try {
|
||||
datelindjaPacienti = getJsDateFromExcel(datelindjaPacienti);
|
||||
dataEShtrimit = getJsDateFromExcel(dataEShtrimit);
|
||||
} catch (error: any) {
|
||||
datelindjaPacienti = null;
|
||||
}
|
||||
|
||||
let klinika: Klinika = {
|
||||
id: uuidv4(),
|
||||
emer: klinikaEmer.trim(),
|
||||
pacientet: [],
|
||||
diagnozat: [],
|
||||
};
|
||||
insertKlinikaArr(klinika);
|
||||
let pacienti: Pacienti = {
|
||||
id: uuidv4(),
|
||||
emer: emerPacienti.trim(),
|
||||
mbiemer: mbiemerPacienti.trim(),
|
||||
datelindja: datelindjaPacienti,
|
||||
mosha: moshaPacienti,
|
||||
gjinia: klinika.emer === "OBS-GYN" ? "F" : gjiniaPacienti.trim(),
|
||||
};
|
||||
const newPacient = insertPacientiArr(pacienti);
|
||||
klinika.pacientet.push(newPacient);
|
||||
let diagnoza: Diagnoza = {
|
||||
id: uuidv4(),
|
||||
emer: diagnozaRaw.trim(),
|
||||
kodi_dg_icd_9: kodi_dg_icd_9Raw ? kodi_dg_icd_9Raw.split("\n") : [],
|
||||
pacientet: [],
|
||||
};
|
||||
diagnoza.pacientet.push(newPacient);
|
||||
const newDiagnoze = insertDiagnozaArr(diagnoza);
|
||||
klinika.diagnozat.push(newDiagnoze);
|
||||
let shtrimi: Shtrimi = {
|
||||
id: uuidv4(),
|
||||
date: dataEShtrimit,
|
||||
dite_qendrimi: dite_qendrimi ? dite_qendrimi : null,
|
||||
};
|
||||
shtrimet.push(shtrimi);
|
||||
|
||||
if (trajtimiPavion) rregulloBarnat(trajtimiPavion);
|
||||
if (trajtimiSalleLindje) rregulloBarnat(trajtimiSalleLindje);
|
||||
if (trajtimiUrgjence) rregulloBarnat(trajtimiUrgjence);
|
||||
let trajtimi: Trajtimi = {
|
||||
id: uuidv4(),
|
||||
salle_lindje: trajtimiSalleLindje ? true : false,
|
||||
urgjence: trajtimiUrgjence ? true : false,
|
||||
barnat: barnat,
|
||||
};
|
||||
// return false;
|
||||
} else {
|
||||
// console.log(errorNr++, record);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
console.log(barnat.length);
|
||||
};
|
||||
|
||||
const rregulloBarnat = (trajtimiRaw: any): Bari[] => {
|
||||
let barnatRawArr = trajtimiRaw.split("\n");
|
||||
|
||||
return barnatRawArr.map((bar: any) => {
|
||||
bar = bar.trim();
|
||||
let bariRaw = bar.split(",");
|
||||
if (
|
||||
bariRaw[0] === "" ||
|
||||
bariRaw[0] === "??" ||
|
||||
bariRaw[0] === "???" ||
|
||||
bariRaw[0] === "????" ||
|
||||
bariRaw[0] === "---" ||
|
||||
bariRaw[0] === "----" ||
|
||||
bariRaw[0] === "-----"
|
||||
) {
|
||||
return null;
|
||||
} else {
|
||||
let newBar: Bari = {
|
||||
id: uuidv4(),
|
||||
emer: bariRaw[0],
|
||||
njesia: null,
|
||||
sasia: null,
|
||||
};
|
||||
const isFoundBari = barnat.some((bar) => {
|
||||
if (newBar.emer === bar.emer) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (!isFoundBari) {
|
||||
barnat.push(newBar);
|
||||
}
|
||||
return newBar;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const insertKlinikaArr = (klinika: Klinika) => {
|
||||
const isFoundKlinika = klinikat.some((klinike) => {
|
||||
if (klinika.emer === klinike.emer) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (!isFoundKlinika) klinikat.push(klinika);
|
||||
return klinika;
|
||||
};
|
||||
|
||||
const insertPacientiArr = (pacienti: Pacienti) => {
|
||||
const isFoundPacienti = pacientet.some((pacient) => {
|
||||
if (
|
||||
pacienti.emer === pacient.emer &&
|
||||
pacienti.mbiemer === pacient.mbiemer
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (!isFoundPacienti) pacientet.push(pacienti);
|
||||
return pacienti;
|
||||
};
|
||||
|
||||
const insertDiagnozaArr = (diagnoza: Diagnoza) => {
|
||||
const isFoundDiagnoza = diagnozat.some((diagnoze) => {
|
||||
if (diagnoza.emer === diagnoze.emer) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (!isFoundDiagnoza) diagnozat.push(diagnoza);
|
||||
return diagnoza;
|
||||
};
|
||||
|
||||
export default createObjects;
|
||||
Reference in New Issue
Block a user