BMS-HOSxP Community
HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: doramon ที่ พฤษภาคม 14, 2009, 13:13:27 PM
-
Unit Script;
function addzero(s:string;i:integer):string;
begin
//result:=s;
while length(s)<i do
begin
s:='0'+s;
end;
result:=s;
end;
function CheckPID(pid: string): boolean;
var
i: integer;
nMod, nValue, cv: integer;
snmod: string;
begin
pid := replacestr(pid, '-', '');
result := false;
if length(replacestr(pid, ' ', '')) <> 13 then
exit;
try
cv := strtoint(copy(pid, 1, 1));
nValue := cv * 13;
for i := 2 to 12 do
begin
cv := strtoint(copy(pid, i, 1));
nValue := nValue + (cv * (14 - i));
end;
nMod := 11 - (nValue mod 11);
snmod := inttostr(nmod);
snmod := copy(snmod, length(snmod), 1);
result := copy(pid, 13, 1) = snmod;
except
result := false;
end;
end;
function MakeFullCID(cid: string): string;
begin
result := cid;
if length(cid) = 17 then
exit;
result := '';
if length(cid) <> 13 then
exit;
result := copy(cid, 1, 1) + '-' +
copy(cid, 2, 4) + '-' +
copy(cid, 6, 5) + '-' +
copy(cid, 11, 2) + '-' +
copy(cid, 13, 1);
end;
Procedure Main;
var
i:integer;
dbf:TDBF;
tc:tclientdataset;
tcid:tclientdataset;
begin
dbf:=tdbf.create(nil);
dbf.tablename:='c:\CSCDMEM.DBF';
dbf.open;
dbf.first;
tc:=tclientdataset.create(nil);
tcid:=tclientdataset.create(nil);
while not dbf.eof do
begin
tc.data:=HoSxP_GetDataset('select * from patient where hn = "'+copy(dbf.fieldbyname('hn').asstring,3,7)+'"');
if tc.recordcount>0 then
begin
showdebugtext('Update patient : '+tc.fieldbyname('hn').asstring);
tc.edit;
tc.fieldbyname('gov_chronic_id').asstring:=dbf.fieldbyname('memberno').asstring;
tc.fieldbyname('pttype').asstring:= '40';
if checkpid(dbf.fieldbyname('pid').asstring) then
begin
tc.fieldbyname('cid').asstring:=dbf.fieldbyname('pid').asstring;
tcid.data:=HOSxP_GetDataset('select * from ptcardno where hn="'+copy(dbf.fieldbyname('hn').asstring,3,7)+'" and cardtype="01"');
if tcid.recordcount>0 then
begin
tcid.edit;
end else
begin
tcid.insert;
end;
tcid.fieldbyname('hn').asstring:=copy(dbf.fieldbyname('hn').asstring,3,7);
tcid.fieldbyname('cardno').asstring:=makefullcid(dbf.fieldbyname('pid').asstring);
tcid.fieldbyname('cardtype').asstring:='01';
tcid.post;
if tcid.changecount>0 then
HOSxP_UpdateDelta(tcid.delta, 'select * from ptcardno where hn="'+copy(dbf.fieldbyname('hn').asstring,3,7)+'" and cardtype="01"');
end;
tc.post;
if tc.changecount>0 then
HOSxP_UpdateDelta(tc.delta,'select * from patient where hn = "'+copy(dbf.fieldbyname('hn').asstring,3,7)+'"');
end;
dbf.next;
end;
dbf.free;
tc.free;
showmessage('done.');
end;
end.
-
ไม่รู้เหมือนกันหรือเปล่า เห็นมีใครเคยทำไว้ (จำไม่ได้) เอาเข้าไปเป็น user script ตั้งนานแล้ว แต่ไม่ได้ใช้ซะที
:) :) :)
Unit Script;
function addzero(s:string;i:integer):string;
begin
//result:=s;
while length(s)<i do
begin
s:='0'+s;
end;
result:=s;
end;
function CheckPID(pid: string): boolean;
var
i: integer;
nMod, nValue, cv: integer;
snmod: string;
begin
pid := replacestr(pid, '-', '');
result := false;
if length(replacestr(pid, ' ', '')) <> 13 then
exit;
try
cv := strtoint(copy(pid, 1, 1));
nValue := cv * 13;
for i := 2 to 12 do
begin
cv := strtoint(copy(pid, i, 1));
nValue := nValue + (cv * (14 - i));
end;
nMod := 11 - (nValue mod 11);
snmod := inttostr(nmod);
snmod := copy(snmod, length(snmod), 1);
result := copy(pid, 13, 1) = snmod;
except
result := false;
end;
end;
function MakeFullCID(cid: string): string;
begin
result := cid;
if length(cid) = 17 then
exit;
result := '';
if length(cid) <> 13 then
exit;
result := copy(cid, 1, 1) + '-' +
copy(cid, 2, 4) + '-' +
copy(cid, 6, 5) + '-' +
copy(cid, 11, 2) + '-' +
copy(cid, 13, 1);
end;
Procedure Main;
var
i:integer;
dbf:TDBF;
tc:tclientdataset;
tcid:tclientdataset;
begin
dbf:=tdbf.create(nil);
dbf.tablename:='C:\CSCD\DATA\CSCDMember.DBF';
dbf.open;
dbf.first;
tc:=tclientdataset.create(nil);
tcid:=tclientdataset.create(nil);
while not dbf.eof do
begin
tc.data:=HoSxP_GetDataset('select * from patient where hn = "'+dbf.fieldbyname('hn').asstring+'"');
if tc.recordcount>0 then
begin
showdebugtext('Update patient : '+tc.fieldbyname('hn').asstring);
tc.edit;
tc.fieldbyname('gov_chronic_id').asstring:=dbf.fieldbyname('memberno').asstring;
tc.fieldbyname('pttype').asstring:= '24';
if checkpid(dbf.fieldbyname('cspid').asstring) then
begin
tc.fieldbyname('cid').asstring:=dbf.fieldbyname('cspid').asstring;
tcid.data:=HOSxP_GetDataset('select * from ptcardno where hn="'+dbf.fieldbyname('hn').asstring+'" and cardtype="01"');
if tcid.recordcount>0 then
begin
tcid.edit;
end else
begin
tcid.insert;
end;
tcid.fieldbyname('hn').asstring:=dbf.fieldbyname('hn').asstring;
tcid.fieldbyname('cardno').asstring:=makefullcid(dbf.fieldbyname('cspid').asstring);
tcid.fieldbyname('cardtype').asstring:='01';
tcid.post;
if tcid.changecount>0 then
HOSxP_UpdateDelta(tcid.delta, 'select * from ptcardno where hn="'+dbf.fieldbyname('hn').asstring+'" and cardtype="01"');
end;
tc.post;
if tc.changecount>0 then
HOSxP_UpdateDelta(tc.delta,'select * from patient where hn = "'+dbf.fieldbyname('hn').asstring+'"');
end;
dbf.next;
end;
dbf.free;
tc.free;
showmessage('done.');
end;
end.
-
พี่โก้ครับรบกวนช่วยแปะตัว user script ตัวนี้ทีครับ อยากลองใช้ครับ
รบกวนพี่โก้อีกแล้ว ;D ;D
ขอบคุณครับ
-
พี่โก้ครับรบกวนช่วยแปะตัว user script ตัวนี้ทีครับ อยากลองใช้ครับ
รบกวนพี่โก้อีกแล้ว ;D ;D
ขอบคุณครับ
ลองศึกษาวิธีทำจากกระทู้นี้ครับ http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=8817.msg50173#msg50173
เจอแล้วได้ file จากโปรแกรม อ. mn ทำมาให้แล้ว อยู่ที่ C:\Program Files\HOSxP\script
-
คำสั่งเหมือนกันครับพี่
แต่ว่า ที่ระบบส่งกลับมาจะเป็น hn 9 หลัก
ถ้า รพ เราใช้ hn 7 หลัก แล้ว จะรับไม่ได้ครัับ
;D
-
คำสั่งเหมือนกันครับพี่
แต่ว่า ที่ระบบส่งกลับมาจะเป็น hn 9 หลัก
ถ้า รพ เราใช้ hn 7 หลัก แล้ว จะรับไม่ได้ครัับ
;D
อ้อ...พอดีเห็นว่ามีอยูี่ในโปรแกรมน่ะ แต่ไม่ได้ใช้ซะที
-
อ.อ๊อด เขียน script เพิ่มเติม นำเข้าในในตาราง pttypeno ด้วยนะครับ เนื่องจากเอาใว้ตรวจสอบว่า สิทธิเบิกตรง dateexp หมดอายุแล้ว หรือถูกยกเลิกแล้ว เช่น นำเข้าจาก ตาราง cscdmember โดยนำเข้าดังนี้
ตาราง cscdmember---------->pttypeno
cspid pttypeno
hcode hospmain
hcode hospsub
hn hn
dateexp expiredate
lastupd begindate
-
อ.อ๊อด เขียน script เพิ่มเติม นำเข้าในในตาราง pttypeno ด้วยนะครับ เนื่องจากเอาใว้ตรวจสอบว่า สิทธิเบิกตรง dateexp หมดอายุแล้ว หรือถูกยกเลิกแล้ว เช่น นำเข้าจาก ตาราง cscdmember โดยนำเข้าดังนี้
ตาราง cscdmember---------->pttypeno
cspid pttypeno
hcode hospmain
hcode hospsub
hn hn
dateexp expiredate
lastupd begindate
่จะทดสอบดูครับ
แต่ว่า script ที่ให้ไปนี้ก็เปลียนสิทธิ์ตรง จุดส่งตรวจ อยู่แล้วครับว่า สิทธิ์็หลัก เปลียนแปลงอะไร
-
อ.อ๊อด เขียน script เพิ่มเติม นำเข้าในในตาราง pttypeno ด้วยนะครับ เนื่องจากเอาใว้ตรวจสอบว่า สิทธิเบิกตรง dateexp หมดอายุแล้ว หรือถูกยกเลิกแล้ว เช่น นำเข้าจาก ตาราง cscdmember โดยนำเข้าดังนี้
ตาราง cscdmember---------->pttypeno
cspid pttypeno
hcode hospmain
hcode hospsub
hn hn
dateexp expiredate
lastupd begindate
begindate น่าจะใช้ dateeff นะครับ
เพราะ lastupd เป็นวันที่ปรับปรุงข้อมูล ผมลองดูในแฟ้มตอบรับล่าสุด (งวดต้นเดือน พ.ค. 52) พบว่า
lastupd = 03/05/52
dateeff = 05/05/52
ดังนั้น ถ้าเราให้ begindate = lastupd แปลว่าผู้ป่วยจะเริ่มใช้สิทธิได้ตั้งแต่ 03/05/52 ทั้ง ๆ ที่ สกส. ให้ใช้สิทธิได้ 05/05/52