MyHospital
Thu ngân viện phí đối chiếu máy POS báo thành công với phần mềm chưa ghi nhận giao dịch
Chuyển đổi số

Lỗi Timeout API Thanh Toán POS: Xử Lý Khi HIS Chưa Ghi Nhận

13/8/2026

Hóa đơn máy POS đã in ra, dòng chữ "GIAO DỊCH THÀNH CÔNG" hiện rõ, nhưng màn hình phần mềm viện phí bên cạnh vẫn đứng yên ở trạng thái chưa thu tiền. Thu ngân phân vân giữa hai lựa chọn đều rủi ro: cà thẻ lại để chắc ăn, hoặc cho người bệnh qua trong khi khoản thu chưa nằm trong hệ thống. Đây chính là hiện trường của lỗi timeout API thanh toán POS - một trong những tình huống dễ gây thất thoát và tranh cãi nhất tại quầy thu ngân điện tử. Bài viết phân tích nguyên nhân kỹ thuật đằng sau lỗi này, quy trình xử lý an toàn ngay tại quầy, và cơ chế đối soát trên HIS giúp giao dịch treo tự khớp lại mà không cần thu ngân nhớ tra soát thủ công từng ca.

Vì sao API thanh toán POS timeout đúng lúc gạch tiền

Một giao dịch cà thẻ tại quầy viện phí thực chất chạy qua hai đường tín hiệu độc lập. Máy POS giao tiếp trực tiếp với ngân hàng phát hành thẻ để thực hiện việc trừ tiền, quá trình này thường hoàn tất trong vài giây và in hóa đơn ngay khi có phản hồi thành công. Song song đó, cổng thanh toán phải gửi một tín hiệu callback riêng về API của HIS để hệ thống viện phí biết khoản thu đã hoàn tất và gạch đúng phiếu.

Hai đường tín hiệu này không đảm bảo về đích cùng lúc. Tiền đã trừ khỏi thẻ không đồng nghĩa với việc HIS đã nhận được xác nhận. Vài nguyên nhân phổ biến khiến API callback không về kịp:

  • Đường truyền mạng nội bộ chập chờn: quầy thu ngân dùng chung băng thông với các thiết bị khác, đúng giờ cao điểm gói tin bị nghẽn.
  • Cổng thanh toán trung gian quá tải: khi lượng giao dịch toàn hệ thống của ngân hàng hoặc trung gian thanh toán tăng đột biến, thời gian phản hồi API kéo dài vượt ngưỡng chờ mặc định.
  • Ngưỡng timeout cấu hình quá ngắn: HIS đặt thời gian chờ phản hồi thấp hơn thời gian xử lý thực tế của cổng, khiến hệ thống báo lỗi dù giao dịch vẫn đang chạy bình thường ở phía sau.
  • Sự cố tường lửa hoặc chứng chỉ bảo mật hết hạn giữa máy chủ HIS và cổng thanh toán, chặn tín hiệu callback dù cả hai phía vẫn hoạt động.

Sai lầm thường gặp: Nhiều cơ sở coi mọi lần timeout là "lỗi mạng, thử lại sau" và bỏ qua việc phân biệt hai khả năng hoàn toàn khác nhau: giao dịch chưa từng đến ngân hàng (an toàn để thử lại), hay giao dịch đã thành công nhưng tín hiệu về chưa tới (thử lại sẽ trừ tiền lần hai).

Hậu quả nếu thu ngân bấm lại giao dịch ngay lúc timeout

Phản xạ tự nhiên khi thấy màn hình treo là bấm lại. Với một API thanh toán không có cơ chế chống trùng, thao tác này kéo theo hàng loạt hệ quả:

  • Thu trùng tiền của người bệnh: khoản phí bị trừ hai lần trên cùng một thẻ, người bệnh chỉ phát hiện khi kiểm tra sao kê ngân hàng, dẫn tới khiếu nại và quy trình hoàn tiền phát sinh sau đó.
  • Lệch số liệu chốt ca: doanh thu ghi trên HIS thấp hơn số tiền thực tế ngân hàng đã ghi nhận, khiến việc chốt phơi viện phí cuối ngày mất thời gian truy vết từng giao dịch lệch.
  • Bỏ sót khoản thu: ngược lại, nếu thu ngân chọn cách "cho người bệnh qua trước, xử lý sau" mà không ghi chú lại mã giao dịch, khoản tiền treo dễ bị quên hẳn khi ca đông người.
  • Mất dấu vết đối chiếu: không có mã tham chiếu lưu lại ngay từ đầu, bộ phận kế toán viện phí phải dò ngược sao kê ngân hàng theo giờ phút để tìm đúng giao dịch, tốn nhiều công sức hơn nhiều so với việc ghi nhận đúng ngay từ lúc phát sinh.

Quy trình xử lý tại quầy khi máy POS báo lỗi nhưng đã trừ tiền

Khi màn hình phần mềm không cập nhật dù hóa đơn POS đã in, thu ngân cần theo đúng trình tự sau, không xử lý theo cảm tính:

  1. Đọc mã tham chiếu giao dịch (RRN) trên hóa đơn POS. Đây là mã định danh duy nhất của lần cà thẻ, dùng để tra cứu chính xác giao dịch đó ở bất kỳ khâu nào phía sau.
  2. Kiểm tra trạng thái trên màn hình đối soát của HIS (nếu phần mềm có mục "Giao dịch chờ xác nhận") trước khi kết luận là mất dữ liệu hoàn toàn. Nhiều trường hợp callback chỉ chậm vài chục giây chứ chưa mất hẳn.
  3. Không cà thẻ lại ngay lập tức. Nếu chưa xác định được giao dịch gốc đã thành công hay chưa, tuyệt đối không lặp lại thao tác thanh toán trên cùng một khoản phí.
  4. Ghi nhận thủ công vào sổ giao dịch treo: mã RRN, số tiền, giờ phút, mã hồ sơ người bệnh. Đây là căn cứ đối soát nếu hệ thống không tự khớp trong ca đó.
  5. Báo bộ phận kỹ thuật hoặc kế toán viện phí để tra soát trạng thái thực tế với ngân hàng, thay vì tự phán đoán.
  6. Chỉ gạch nợ hoặc hoàn tiền sau khi có kết quả tra soát rõ ràng, tránh xử lý hai chiều cùng lúc gây rối số liệu.

Thu ngân ghi sổ giao dịch treo khi máy POS báo thành công nhưng phần mềm chưa xác nhận Ghi lại mã tham chiếu ngay tại quầy là căn cứ đối soát nếu hệ thống chưa tự khớp trong ca

Cơ chế đối soát tự động bắt giao dịch treo trên HIS

Quy trình thủ công ở trên là lớp phòng vệ cuối cùng, không phải giải pháp chính. Một phần mềm viện phí xử lý tốt lỗi timeout cần có sẵn ba lớp kỹ thuật để phần lớn giao dịch treo tự khớp lại mà không cần thu ngân can thiệp:

Cơ chếVai tròHiệu quả khi timeout xảy ra
Idempotency keyGắn mã định danh duy nhất cho mỗi yêu cầu thanh toán trước khi gửi tới cổngChặn thu trùng nếu hệ thống tự động gửi lại yêu cầu
Webhook callback có xác nhậnCổng thanh toán chủ động báo kết quả về HIS, có cơ chế yêu cầu HIS phản hồi đã nhậnGiảm phụ thuộc vào một lần chờ phản hồi duy nhất
Tác vụ tra soát định kỳ (polling)HIS tự động hỏi lại trạng thái thực tế của các giao dịch đang "chờ xác nhận" theo chu kỳ vài phútTự khớp giao dịch treo mà không cần thu ngân đối soát tay

Khi cả ba lớp cùng hoạt động, một giao dịch timeout điển hình đi qua luồng: gửi yêu cầu có idempotency key, chờ webhook trong một khoảng thời gian ngắn, nếu không nhận được thì tác vụ tra soát định kỳ tự động hỏi lại cổng thanh toán bằng đúng mã tham chiếu và cập nhật kết quả thật vào phiếu thu - không cần con người mở lại từng giao dịch.

Kỹ thuật viên kiểm tra log đối soát giao dịch thanh toán POS trên phần mềm HIS Nhật ký đối soát ghi lại trạng thái thật của từng giao dịch timeout để truy vết khi cần

Đối soát thủ công và đối soát tự động: chênh lệch thời gian thực tế

Sự khác biệt giữa hai cách xử lý không chỉ nằm ở mức độ chính xác, mà còn ở thời gian bộ phận tài chính phải bỏ ra mỗi khi có giao dịch treo.

Tiêu chíĐối soát thủ côngĐối soát tự động trên HIS
Cách phát hiện giao dịch treoThu ngân hoặc kế toán tự nhận ra khi khớp sổ cuối caHệ thống tự đánh dấu trạng thái "chờ xác nhận" ngay khi timeout
Cách xác minh với ngân hàngGọi điện hoặc tra cứu thủ công theo mã RRN từng giao dịchGọi API tra soát tự động theo chu kỳ, không cần thao tác tay
Thời điểm phát hiện thu trùngThường sau khi người bệnh khiếu nạiNgay trong ca, trước khi chốt phơi
Khối lượng công việc cuối ngàyDò từng dòng lệch giữa sổ quỹ và sao kê ngân hàngChỉ xử lý số ít trường hợp hệ thống chưa tự khớp được

Một cơ sở dùng phần mềm có đối soát tự động vẫn cần con người xử lý phần còn sót lại - không phải giao dịch treo nào cũng khớp được tự động, đặc biệt khi ngân hàng phía đối tác cũng đang gặp sự cố. Nhưng khối lượng cần xử lý tay giảm đáng kể so với việc dò toàn bộ giao dịch trong ngày.

Danh sách giao dịch chờ đối soát trên phần mềm quản lý viện phí Danh sách giao dịch chờ xác nhận giúp kế toán viện phí xử lý đúng phần còn tồn đọng, không phải dò lại toàn bộ ca

Phân hệ Tài chính - Nhà thuốc của phần mềm quản lý bệnh viện MyHospital tích hợp idempotency key khi gọi API thanh toán POS, cùng tác vụ tra soát tự động cho các giao dịch chờ xác nhận - giảm phụ thuộc vào việc thu ngân phải nhớ kiểm tra tay từng ca. Đăng ký dùng thử để xem luồng đối soát giao dịch hoạt động trên dữ liệu thực tế.

Thiết lập ngăn lỗi timeout API thanh toán POS tái diễn

Ngoài xử lý khi sự cố đã xảy ra, bộ phận IT và kế toán viện phí nên rà soát lại một số thiết lập gốc để giảm tần suất timeout:

  • Đặt lại ngưỡng timeout theo thực tế đo được, không dùng cấu hình mặc định của nhà cung cấp phần mềm khi chưa đo thời gian phản hồi trung bình của cổng thanh toán đang dùng tại cơ sở.
  • Bật webhook thay vì chỉ chờ phản hồi đồng bộ một lần. Webhook cho phép cổng thanh toán báo kết quả bất cứ khi nào sẵn sàng, không bắt HIS phải "đứng chờ" trong một cửa sổ thời gian cố định.
  • Kích hoạt idempotency key ở mọi luồng thanh toán điện tử, không riêng POS - áp dụng chung với đối soát phiên giao dịch thanh toán không tiền mặt qua QR động và chuyển khoản.
  • Giữ lại nhật ký giao dịch chi tiết, ghi rõ mã tham chiếu, giá trị trước và sau mỗi lần cập nhật trạng thái, tương tự nguyên tắc trong nhật ký giao dịch thu ngân bất biến - đây là căn cứ để truy vết khi có tranh chấp.
  • Diễn tập định kỳ với thu ngân về cách đọc mã RRN và quy trình báo cáo giao dịch treo, thay vì để mỗi người tự xử lý theo kinh nghiệm riêng.

Chọn phần mềm viện phí xử lý được lỗi timeout thanh toán POS

Lỗi timeout API thanh toán POS không phải sự cố có thể loại bỏ hoàn toàn - mạng và hạ tầng phía ngân hàng nằm ngoài tầm kiểm soát của bệnh viện. Điều nằm trong tầm kiểm soát là cách hệ thống phản ứng khi sự cố xảy ra: có chặn được thu trùng bằng idempotency key hay không, có tự tra soát và khớp lại giao dịch treo hay bắt kế toán dò từng dòng sao kê, và thu ngân có quy trình rõ ràng để không phải tự quyết định trong vài giây căng thẳng tại quầy. Ba yếu tố này nên là tiêu chí bắt buộc khi đánh giá phần mềm thu viện phí, ngang hàng với các tiêu chí về giao diện hay tốc độ xử lý thường được nhắc tới đầu tiên.

Câu hỏi thường gặp

Vì sao máy POS báo giao dịch thành công nhưng phần mềm viện phí không ghi nhận?
Vì hai hệ thống xác nhận giao dịch qua hai đường riêng. Máy POS nhận phản hồi trực tiếp từ ngân hàng phát hành thẻ ngay khi cà thẻ. Còn HIS chỉ biết giao dịch đã thành công khi nhận được tín hiệu callback từ cổng thanh toán qua API. Nếu API đó phản hồi chậm hoặc rớt kết nối đúng lúc lẽ ra phải gửi tín hiệu về, HIS vẫn treo ở trạng thái chưa thu trong khi tiền đã trừ khỏi thẻ.
Thu ngân có nên cà thẻ lại ngay khi POS chưa thấy tiền ghi vào phiếu?
Không. Việc đầu tiên là kiểm tra mã tham chiếu giao dịch trên hóa đơn máy POS, không cà lại theo phản xạ. Cà lại ngay khi giao dịch gốc đã thành công ở phía ngân hàng sẽ tạo ra hai lần trừ tiền cho cùng một khoản thu, và phần chênh lệch chỉ lộ ra khi người bệnh khiếu nại hoặc đến khi đối soát cuối ca.
Idempotency key trong thanh toán POS là gì và giải quyết vấn đề gì?
Đây là một mã định danh duy nhất được HIS gắn cho mỗi lần gửi yêu cầu thanh toán tới cổng, trước khi máy POS thực hiện giao dịch. Nếu cùng một mã được gửi lại lần hai do timeout hoặc do thao tác lặp, cổng thanh toán nhận diện đó là yêu cầu trùng và trả về đúng kết quả của giao dịch gốc thay vì trừ tiền thêm một lần nữa. Đây là cơ chế chặn thu trùng ở tầng kỹ thuật, không phụ thuộc vào việc thu ngân có nhớ kiểm tra hay không.
Giao dịch treo do lỗi timeout có tự động khớp lại trên HIS không?
Có, nếu phần mềm có tác vụ đối soát tự động chạy định kỳ, gọi API tra soát trạng thái thực tế với cổng thanh toán cho từng giao dịch đang ở trạng thái chờ xác nhận. Khi phát hiện giao dịch đã thành công phía ngân hàng nhưng HIS chưa ghi nhận, hệ thống tự cập nhật và gạch đúng khoản thu. Nếu không có cơ chế này, giao dịch treo sẽ tồn đọng đến khi thu ngân đối soát thủ công cuối ca.
Nên đặt ngưỡng timeout cho API thanh toán POS bao lâu là hợp lý?
Ngưỡng quá ngắn khiến hệ thống báo lỗi ngay cả khi giao dịch vẫn đang xử lý bình thường ở phía cổng thanh toán, gây timeout giả. Ngưỡng quá dài khiến quầy thu ngân treo máy lâu khi mạng thật sự gặp sự cố, làm chậm dòng người chờ thanh toán. Cần cấu hình theo thời gian phản hồi trung bình của cổng đang dùng, kết hợp cơ chế tra soát bất đồng bộ ở phía sau thay vì chỉ dựa vào một lần chờ phản hồi duy nhất.