/* * Copyright (c) 1995, 1996 Gunther Schadow. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "carevue.h" #include "cvgateway.h" #include #include #include #include #include #include HL7Message *update_pat_info(HL7Message &msg) { ADT_A08msg &request = (ADT_A08msg &)msg; IDtyp bed = request.PatVisit.AssPatLoc.Bed; IDtyp adn = request.PatVisit.VisitNum.IdNum; strstream cmds; xios _cmds(cmds); cmds << hl7er << PGETC "/idb_direct -c -e 8 -l '" << bed << "' -r '" << adn << "'"; for(repstruc*robx=&request.Obs; !robx->end(); robx=robx->next()) adtobx(cmds, robx->first()); cmds << ends; int ret = runcmd(cmds.str()); cmds.freeze(0); if(ret & IDB_ERR) ERROR("%s returned error status %o", cmds.str(), ret); if(! (ret&IDB_PAT1)) { // patient is not yet known LOGWARNING("patient not known, admit the patient"); ADT_A01msg a01; a01.MesHea = request.MesHea; a01.EventType = request.EventType; a01.PatIde = request.PatIde; a01.PatVisit = request.PatVisit; a01.PatVisitAddInf = request.PatVisitAddInf; a01.Obs = request.Obs; a01.PatAllInf = request.PatAllInf; a01.DiaGno = request.DiaGno; a01.Pro = request.Pro; a01.Gua = request.Gua; a01.IN1group = request.IN1group; a01.Acc = request.Acc; a01.Ub82Data = request.Ub82Data; a01.Ub92Data = request.Ub92Data; a01.HpConFigDem = request.HpConFigDem; return admit_patient(a01); } else { request.MesHea.RecApp = "ADT"; request.HpConFigDem = assemble_zdm(request.PatIde, request.PatVisit, request.NextOfKin, request.PatAllInf, request.DiaGno[0], request.Obs); request.Obs.unset(); fix_pid(request.PatIde, request.PatVisit); if(! request.PatVisit.PriorPatLoc.ispresent()) request.PatVisit.PriorPatLoc = request.PatVisit.AssPatLoc; request.PatVisit.DisDis.unset(); request.PatVisit.DisToLoc.unset(); return forward_message(request); } }