Quyền riêng tư

Chính sách quyền riêng tư

Cập nhật 20/10/2026

Bản chính sách đầy đủ của ứng dụng HenryExpense, giống nội dung trong app (Khác → Chính sách quyền riêng tư).

HenryExpense là app ghi chép thu chi cá nhân. Chính sách này nói rõ app lưu gì, gửi gì và gửi cho ai. Mặc định mọi dữ liệu ở lại trên máy của bạn.

Tóm tắt

  • Dữ liệu thu chi lưu trên máy bạn, trong cơ sở dữ liệu SQLite của app.
  • HenryExpense không có máy chủ, không có tài khoản người dùng, không có quảng cáo, không có phân tích sử dụng (analytics) và không có báo cáo lỗi tự động.
  • Dữ liệu chỉ rời máy khi bạn tự bật một tính năng tuỳ chọn (Trợ lý AI và gợi ý danh mục bằng AI, Gmail, mở app ngân hàng qua dl.vietqr.io trong Chuyển khoản QR, tự động cập nhật tỷ giá, tự cập nhật giá tài sản, tra giá cổ phiếu và tiền mã hoá bằng AI; riêng tỷ giá và giá tài sản tiền mã hoá chỉ gửi mã tiền như VND hoặc USD, giá vàng không gửi tham số nào, tra giá bằng AI chỉ gửi mã cổ phiếu hoặc mã BTC/USDT kèm ngày hay thời điểm tra, không gửi số lượng hay dữ liệu thu chi), tự lưu và chia sẻ tệp sao lưu hay tệp xuất, hoặc tự gửi một email mẫu cho nhà phát triển bằng ứng dụng Mail của máy (bạn thấy trước toàn bộ nội dung và tự bấm gửi). Ngoài ra, khi mở, app tự hỏi máy chủ Expo (u.expo.dev) xem có bản cập nhật của chính ứng dụng không (xem mục Cập nhật ứng dụng qua mạng); việc này không gửi dữ liệu thu chi. Với Gmail, app chỉ trao đổi dữ liệu trực tiếp với Google, không qua máy chủ nào của HenryExpense, và tuân thủ yêu cầu Sử dụng Hạn chế (Limited Use) của Google; mặc định Trợ lý AI không nhận từng giao dịch nhập từ Gmail (xem mục Trợ lý AI). Quét hoá đơn và mã QR bằng camera được xử lý trên máy.

Dữ liệu lưu trên máy

  • Ví, giao dịch, danh mục, ngân sách, nợ, tiết kiệm, mục tiêu, tài sản (nhà đất, xe, vàng... cùng các lần mua, lần bán và các lần định giá) và các dữ liệu bạn nhập khác được lưu cục bộ trong SQLite.
  • Cài đặt app cũng lưu trên máy.
  • Ghi nhớ danh mục: khi bạn chọn hoặc đổi danh mục cho một khoản thu/chi có ghi chú (trên form, ở màn Phân loại giao dịch hoặc khi duyệt thư Gmail), khi bạn lưu giao dịch có danh mục điền sẵn từ hoá đơn, app lưu ghi chú đã rút gọn (chữ thường, bỏ dấu, bỏ số có từ 4 chữ số, email, đường dẫn web và từ đệm như "chuyen tien"; tối đa 80 ký tự) cùng danh mục bạn chọn và số lần chọn, để lần sau tự gợi ý đúng danh mục. App không lưu số tiền, ví hay ngày giao dịch trong ghi nhớ này. Giữ tối đa 2.000 dòng, dòng cũ nhất bị bỏ trước. Bạn tắt "Nhớ lựa chọn danh mục", xem và xoá từng dòng, hoặc bấm "Xoá bộ nhớ phân loại" trong Cài đặt AI. Ghi nhớ và từ khoá gợi ý danh mục chạy hoàn toàn trên máy, kể cả khi bạn không dùng AI.
  • Từ bảng ghi nhớ đó, app tự tạo một tệp chữ dễ đọc ai-memory/ghi-nho-danh-muc.md trong thư mục tài liệu riêng của app (cùng nội dung: ghi chú đã rút gọn, tên danh mục, số lần; dòng học từ thư Gmail ghi "từ email, không gửi AI"). Tệp do app viết lại sau mỗi thay đổi, AI không viết vào tệp, sửa tệp không có tác dụng, và tệp không được gửi đi đâu. Tệp không hiện trong ứng dụng Tệp của iPhone; trên iOS nó có thể nằm trong bản sao lưu iCloud/máy tính của chính bạn như dữ liệu khác của app (xem dòng dưới).
  • Mã PIN của khoá app (lưu dạng băm có salt, không lưu PIN gốc) và các mã bí mật khác (token Gmail, API key AI) lưu trong SecureStore, tức Keychain trên iOS và Keystore trên Android, không lưu trong cơ sở dữ liệu.
  • Trên iOS, hệ thống có thể đưa dữ liệu của app vào bản sao lưu iCloud hoặc bản sao lưu máy tính của chính bạn, tuỳ cài đặt thiết bị. Đó là bản sao lưu của hệ điều hành, do bạn kiểm soát, không phải do HenryExpense gửi đi.

Khoá app

  • Khoá app dùng MỘT phương thức mở khoá tại một thời điểm: Không khoá, Mã PIN, hoặc Sinh trắc học (Face ID, Touch ID, vân tay). Không bật PIN và sinh trắc cùng lúc. Đổi phương thức phải xác nhận bằng phương thức đang dùng (nhập đúng PIN, hoặc xác thực của hệ điều hành). Nếu bản cũ của app đang bật cả PIN lẫn sinh trắc, khi cập nhật app giữ PIN và tắt sinh trắc.
  • Mã PIN gồm đúng 4 chữ số (10.000 khả năng). Để chống đoán PIN, sau mỗi 5 lần nhập sai app khoá tạm và tăng dần thời gian chờ, từ 30 giây lên tối đa 60 phút mỗi lần; số lần sai được tính cả khi bạn nhập PIN để đổi phương thức. App chỉ lưu mã băm của PIN trong kho bảo mật của hệ điều hành (Keychain/Keystore), không gửi PIN đi đâu và không đưa vào tệp sao lưu của app.
  • Khi chọn Sinh trắc học, app không có PIN dự phòng: nếu máy không nhận được khuôn mặt/vân tay (hoặc bạn đã xoá sinh trắc trong cài đặt máy), hệ điều hành sẽ cho mở bằng mật mã của thiết bị. Số lần thử sinh trắc do hệ điều hành giới hạn. Vì vậy ai biết mật mã thiết bị cũng mở được app ở chế độ này.
  • Ngoại lệ: nếu thiết bị không đặt mật mã và không có sinh trắc nào, khoá bằng sinh trắc tạm không có hiệu lực (app mở không cần xác thực) và màn Bảo mật hiện cảnh báo. Lựa chọn của bạn vẫn được giữ; trong lúc đó, nhắc nhở trên màn hình khoá của máy vẫn có thể hiện số tiền; khoá tự có hiệu lực lại khi bạn đặt mật mã thiết bị. Muốn khoá trên máy như vậy, hãy chọn Mã PIN.
  • Khoá app là lớp bảo vệ bổ sung khi người khác cầm máy đang mở khoá, không thay thế mật mã của thiết bị. Hãy đặt mật mã thiết bị và không dùng PIN dễ đoán (như 0000, 1234 hay ngày sinh).
  • Xác thực bằng Face ID, Touch ID, vân tay, mật mã thiết bị hoặc PIN đều được xử lý trên máy. App không nhận hay lưu dữ liệu sinh trắc học hay mật mã thiết bị; việc nhận diện do hệ điều hành thực hiện.
  • Thông tin khoá không được đưa vào tệp sao lưu của app.
  • Thao tác "Xoá dữ liệu ứng dụng" (Cài đặt chung) chỉ làm được khi khoá app đang bật và yêu cầu xác thực lại bằng đúng phương thức đang dùng (PIN, hoặc sinh trắc học/mật mã thiết bị). PIN bạn nhập chỉ được dùng để kiểm tra, không được lưu hay ghi log; số lần nhập sai được tính chung với màn hình khoá. Đặt lại không xoá cài đặt khoá app của bạn.

Thông báo nhắc nhở

  • Nhắc nhở (khoản định kỳ, hạn thẻ, đáo hạn tiết kiệm, nhắc nhập liệu hằng ngày) là thông báo cục bộ do app lên lịch trên máy bạn.
  • App không dùng thông báo đẩy từ máy chủ và không gửi dữ liệu nào ra ngoài để tạo thông báo.
  • Bạn bật hoặc tắt nhắc nhở trong Cài đặt. Nhắc nhập liệu hằng ngày có nội dung cố định, không kèm số tiền.

Rung phản hồi và phông chữ

  • Máy rung nhẹ khi bạn lưu giao dịch, ghi nhanh, hoàn tác hoặc mở menu Ghi sổ. Rung chỉ xảy ra khi bạn đang thao tác trong app và không gửi dữ liệu nào ra ngoài. Trên Android, app khai báo quyền rung (VIBRATE): đây là quyền thường, không cần bạn cho phép và không cho app đọc dữ liệu nào. Bạn tắt rung trong Cài đặt chung; lựa chọn bật/tắt này có trong tệp sao lưu.
  • Phông chữ của theme Sổ ghi (Be Vietnam Pro, IBM Plex Mono) được nhúng sẵn trong app; app không tải phông chữ qua mạng.
  • Chế độ màu (Sáng, Tối hoặc Theo máy, ở Cài đặt › Giao diện) chỉ đổi màu hiển thị trên máy. Khi chọn Theo máy, app đọc chế độ sáng/tối của hệ thống để đổi màu; app không cần quyền nào cho việc này và không gửi gì ra ngoài. Lựa chọn này có trong tệp sao lưu.

Camera: quét hoá đơn và mã QR

  • Khi thêm giao dịch, bạn có thể chụp hoặc chọn ảnh hoá đơn để app đọc chữ (OCR), hoặc quét mã VietQR chuyển khoản bằng camera hay từ ảnh trong thư viện. App chỉ xin quyền camera và thư viện ảnh khi bạn dùng các nút này lần đầu; app không xin quyền micro.
  • Việc đọc chữ và giải mã QR làm hoàn toàn trên máy bằng thư viện chạy trên máy: trên iOS là Apple Vision (đọc chữ) và bộ quét mã của hệ thống, trên Android là Google ML Kit (quét ảnh từ thư viện cần Google Play Services, có thể tải mô hình nhận dạng về máy; quét camera trực tiếp dùng ML Kit đóng gói sẵn, không cần Play Services). Ảnh, chữ đọc được và nội dung mã QR không được gửi tới HenryExpense hay dịch vụ nào khác. Theo tài liệu của Google, thư viện ML Kit có thể gửi số liệu kỹ thuật ẩn danh về hiệu năng và mức sử dụng cho Google, không kèm ảnh hay nội dung quét.
  • Ảnh chụp và các bản ảnh tạm app tạo ra để quét được xoá ngay sau khi quét xong, kể cả khi quét lỗi hoặc bạn huỷ. App không lưu ảnh vào thư viện và không giữ ảnh trong cơ sở dữ liệu. Camera chỉ chạy khi màn quét QR đang mở.
  • Kết quả quét chỉ dùng để điền sẵn form (số tiền, ngày, ghi chú); bạn kiểm tra rồi tự bấm lưu, app không tự tạo giao dịch. Ngoại lệ duy nhất: khi quét từ nút + ở thanh dưới cùng (nút này mở thẳng camera quét mã QR; đóng camera để ghi tay) hoặc nút tắt "Quét QR" ở màn Tổng quan, với tính năng Chuyển khoản QR đã bật, cho phép mở qua dl.vietqr.io và cách ghi sổ "Ghi ngay", app tự lưu giao dịch rồi mở app ngân hàng (xem mục dưới).
  • Với mã VietQR, tên người nhận, ngân hàng và số tài khoản (chỉ hiện 4 số cuối) được hiển thị để bạn kiểm tra và không được lưu. Ghi chú điền sẵn lấy từ nội dung chuyển khoản trong mã, hoặc "Chuyển khoản tới" kèm tên người nhận; app không chèn số tài khoản vào ghi chú.
  • Ghi chú điền từ hoá đơn hay mã QR, khi bạn lưu, là ghi chú bình thường: nằm trong tệp sao lưu và tệp xuất, và có thể được gửi tới nhà cung cấp AI nếu bạn dùng Trợ lý AI và không tắt chia sẻ ghi chú (xem mục Trợ lý AI).

Chuyển khoản QR qua dl.vietqr.io (tính năng tuỳ chọn)

  • Sau khi quét mã VietQR, app có thể hiện nút "Chuyển khoản ngay" để mở app ngân hàng của bạn với màn chuyển khoản điền sẵn. Nút chỉ hiện khi bạn đã bật cả "Bật chuyển khoản QR" lẫn "Cho phép mở qua dl.vietqr.io" trong Khác -> Chuyển khoản QR. Công tắc "Cho phép mở qua dl.vietqr.io" mặc định tắt; khi tắt, app chỉ điền sẵn form như mục Camera ở trên và không gửi gì đi. Nếu "Bật chuyển khoản QR" đang bật nhưng công tắc này đang tắt, mỗi lần bạn quét từ nút + ở thanh dưới cùng hoặc nút tắt "Quét QR" ở màn Tổng quan một mã có số tiền (giao dịch Chi, VND), app hỏi có bật không (nêu rõ dữ liệu gửi tới vietqr.io). Chọn "Để sau" (hoặc đóng hộp thoại) thì không gửi gì và công tắc vẫn tắt; chọn "Bật và chuyển khoản" thì công tắc được bật cho cả các lần sau (tắt lại trong Khác -> Chuyển khoản QR) và app mở liên kết ngay.
  • Chỉ khi bạn bấm nút (và chọn app ngân hàng, nếu chưa đặt app mặc định), hoặc khi bạn quét mã từ nút + ở thanh dưới cùng hay nút tắt "Quét QR" ở màn Tổng quan (app tự mở app ngân hàng ngay sau khi quét, không cần bấm nút, chỉ khi công tắc "Cho phép mở qua dl.vietqr.io" đã bật; khi đó nội dung chuyển khoản là ghi chú vừa điền từ mã QR), app mới mở trang dl.vietqr.io bằng trình duyệt trong app (không đưa bạn ra Safari hay Chrome). Trang tự chạy như trình duyệt thông thường rồi chuyển sang app ngân hàng bạn chọn. App không còn gửi yêu cầu nền tới dl.vietqr.io. Nếu trình duyệt trong app không mở được, app mở chính liên kết đó bằng trình duyệt của máy. Liên kết chứa: mã app ngân hàng bạn chọn, mã ngân hàng dạng chữ của VietQR (vd vcb, mb; suy ra từ BIN trong mã QR) và số tài khoản đầy đủ của người nhận lấy từ mã QR, số tiền đang nhập trên form và nội dung chuyển khoản là ghi chú đang có trên form (đã bỏ dấu và ký tự đặc biệt, cắt còn tối đa 25 ký tự), kèm một địa chỉ quay lại cố định https://www.vietqr.io/deeplink (tham số bắt buộc để vietqr.io dựng liên kết tự điền; không chứa dữ liệu của bạn). Với các app ngân hàng có hỗ trợ (hiện là MB, BIDV, VietinBank, ACB, OCB), vietqr.io chuyển các thông tin trên sang app ngân hàng để điền sẵn màn chuyển khoản. Nếu bạn đã sửa ghi chú, nội dung đã sửa sẽ được gửi. App không gửi tên ví, danh mục, số dư hay dữ liệu thu chi khác.
  • Bộ nhớ tạm: với app ngân hàng không tự điền số tiền (không có nhãn "Tự điền" trong danh sách chọn app), trước khi mở app, HenryExpense sao chép riêng số tiền (số nguyên, không kèm số tài khoản hay nội dung) vào bộ nhớ tạm của máy và báo cho bạn để dán vào app ngân hàng. Các app khác trên máy (hoặc thiết bị Apple liên kết qua Clipboard chung) có thể đọc số tiền này cho tới khi bạn sao chép nội dung khác; HenryExpense không gửi nó đi đâu.
  • vietqr.io là dịch vụ của bên thứ ba, không thuộc HenryExpense. Trang được mở trong trình duyệt trong app (Safari View Controller trên iPhone, Chrome Custom Tab trên Android), nên vietqr.io nhận các thông tin trên cùng địa chỉ IP và thông tin trình duyệt như mọi trang web, và trang có thể đặt cookie hay chạy kiểm tra trình duyệt của riêng họ; hai bên xử lý dữ liệu theo chính sách riêng của họ. App không đọc, không lưu và không ghi log nội dung trang. Trình duyệt trong app có thể lưu cookie của vietqr.io; cookie này nằm trong trình duyệt của máy, không phải trong HenryExpense. Trên iPhone, Safari View Controller không ghi trang này vào lịch sử Safari và không dùng chung cookie với Safari. Trên Android, Chrome Custom Tab dùng chung dữ liệu với Chrome, nên liên kết (gồm số tài khoản người nhận, số tiền, nội dung) có thể được lưu vào lịch sử Chrome; khi phải mở bằng trình duyệt của máy (đường dự phòng) thì trình duyệt đó cũng có thể lưu. Bạn xoá được trong lịch sử của trình duyệt.
  • App không tự chuyển tiền: bạn vẫn kiểm tra và xác nhận giao dịch trong app ngân hàng.
  • Số tài khoản đầy đủ chỉ giữ trong bộ nhớ khi form đang mở để dựng liên kết, không hiển thị, không ghi log, không lưu vào cơ sở dữ liệu hay tệp sao lưu, và bị xoá khi bạn đóng form, bỏ kết quả quét hoặc đổi loại giao dịch. Liên kết cũng không được lưu.
  • Với cách ghi sổ "Hỏi khi quay lại", trạng thái chờ xác nhận chỉ nằm trong bộ nhớ; giao dịch chỉ được lưu khi bạn chọn "Ghi vào sổ" sau khi quay lại app. Với "Ghi ngay", giao dịch được lưu như bình thường trước khi mở app ngân hàng. Giao dịch đã lưu không chứa số tài khoản.
  • Các cài đặt của tính năng (bật/tắt, app ngân hàng mặc định, ví và danh mục mặc định, cách ghi sổ) lưu trên máy và nằm trong tệp sao lưu; chúng không chứa số tài khoản. Riêng công tắc "Cho phép mở qua dl.vietqr.io" không nằm trong tệp sao lưu và không bị khôi phục ghi đè, nên sau khi khôi phục bạn phải tự bật lại. Tắt "Cho phép mở qua dl.vietqr.io" bất cứ lúc nào để ngừng gửi.

Tự động cập nhật tỷ giá (tuỳ chọn)

  • Mặc định tắt. Bạn bật trong Khác -> Cài đặt chung -> Tiền tệ & tỷ giá, mục Tự động cập nhật; lần đầu bật, app hiện hộp hỏi đồng ý lấy dữ liệu từ Internet, và chỉ khi bạn đồng ý app mới gọi mạng. Chưa đồng ý thì app không gửi yêu cầu nào; khi đã tắt, app không gửi yêu cầu nào, kể cả khi bạn bấm làm mới ở mục "Tiền mã hoá (tham khảo)" của màn Quy đổi (nút này chỉ hoạt động khi tự cập nhật tỷ giá đang bật và đã đồng ý, hoặc khi tra giá bằng AI đang bật và đã đồng ý); tỷ giá chỉ là số bạn tự nhập.
  • Khi bật, app tự lấy tỷ giá tham khảo theo tần suất bạn chọn (mỗi ngày, hoặc mỗi lần mở app nhưng không quá một lần mỗi giờ; lần trước lỗi thì thử lại sau ít nhất 15 phút), khi bạn bấm "Cập nhật ngay" (trong Tiền tệ & tỷ giá hoặc màn Quy đổi), sau khi bạn đổi tiền gốc, và khi bạn thêm vào danh sách tiền tệ một loại tiền chưa có tỷ giá. App gửi một yêu cầu HTTPS tải bảng tỷ giá công khai, thử lần lượt tới khi được: cdn.jsdelivr.net (gói dữ liệu currency-api), latest.currency-api.pages.dev (bản sao của cùng dữ liệu) và open.er-api.com (ExchangeRate-API).
  • Dữ liệu gửi đi chỉ có mã tiền gốc của bạn (ví dụ VND) nằm trong địa chỉ yêu cầu. App không gửi giao dịch, số dư, ví, danh mục, danh sách loại tiền bạn dùng hay bất kỳ dữ liệu thu chi nào. Như mọi kết nối Internet, các máy chủ này thấy địa chỉ IP của bạn và thông tin kỹ thuật của kết nối (ví dụ tên hệ điều hành, phiên bản ứng dụng trong thông tin trình khách), và xử lý theo chính sách riêng của họ. Các bên này không thuộc HenryExpense; HenryExpense không có máy chủ trung gian.
  • Tỷ giá nhận về được ghi đè lên tỷ giá hiện có (kể cả tỷ giá bạn nhập tay), trừ loại tiền bạn bật "Giữ tỷ giá thủ công". App bỏ qua giá trị không hợp lệ và giá trị lệch hơn 50% so với tỷ giá đang có (bạn kiểm tra rồi nhập tay nếu đúng). Tỷ giá chỉ để tham khảo, không phải tỷ giá của ngân hàng. Nếu không có mạng hoặc nguồn lỗi, tỷ giá cũ được giữ nguyên.
  • App không ghi địa chỉ yêu cầu hay nội dung phản hồi vào nhật ký; chỉ lưu trên máy thời điểm, nguồn và ngày dữ liệu của lần cập nhật gần nhất, hoặc loại lỗi (ví dụ "không có mạng").
  • Các cài đặt của tính năng (bật/tắt, đồng ý, tần suất, kết quả lần cập nhật gần nhất) lưu theo thiết bị, không nằm trong tệp sao lưu và không bị khôi phục ghi đè, nên khôi phục một tệp sao lưu không tự bật tính năng trên máy khác. Bản thân tỷ giá (kèm nguồn và trạng thái "Giữ tỷ giá thủ công") là dữ liệu thu chi nên nằm trong tệp sao lưu. Tắt công tắc bất cứ lúc nào để ngừng gửi.
  • Danh sách tiền tệ của bạn (các loại tiền hiện ở màn Quy đổi) và loại tiền nguồn đã chọn ở màn Quy đổi là cài đặt lưu trên máy, nằm trong tệp sao lưu và không được gửi đi. Thêm một loại tiền vào danh sách chỉ gọi mạng khi tự động cập nhật đang bật và bạn đã đồng ý; khi đó app vẫn chỉ gửi mã tiền gốc rồi lọc trên máy các tỷ giá cần dùng. Số tiền bạn nhập ở màn Quy đổi chỉ nằm trong bộ nhớ, không được lưu hay gửi đi.
  • Mục "Tiền mã hoá (tham khảo)" ở màn Quy đổi (BTC, USDT): tiền mã hoá không phải loại tiền của app, chỉ để quy đổi tham khảo; số coin bạn nhập chỉ nằm trong bộ nhớ, không được lưu hay gửi đi. Giá đối chứng (USD của 1 coin) lấy từ chính bảng currency-api mà tự động cập nhật tỷ giá đã tải (không thêm yêu cầu nào), hoặc khi bạn bấm "Cập nhật giá" ở mục này. Nút "Cập nhật giá" chỉ hoạt động khi tự động cập nhật tỷ giá đang bật và đã đồng ý, không gọi AI; mỗi lần bấm app luôn gửi một yêu cầu HTTPS cố định tải bảng giá theo USD (usd.min.json) tới cdn.jsdelivr.net rồi latest.currency-api.pages.dev (không xét tuổi của giá đã lưu); yêu cầu này không chứa dữ liệu nào của bạn (kể cả tiền gốc). Khi tự động cập nhật tỷ giá tắt hoặc chưa đồng ý, nút này không gửi yêu cầu nào. Giá đối chứng, giá AI đã chấp nhận, hàng chờ và kết quả lần làm mới gần nhất lưu theo thiết bị (nhóm cài đặt cryptoRate), không nằm trong tệp sao lưu và không bị khôi phục ghi đè. Phần tra giá bằng AI của mục này xem mục "Tra giá cổ phiếu và tiền mã hoá bằng AI".
  • Ghi nguồn: tỷ giá từ open.er-api.com do ExchangeRate-API cung cấp ("Rates By Exchange Rate API", https://www.exchangerate-api.com); dữ liệu currency-api do dự án mã nguồn mở fawazahmed0/exchange-api phát hành.

Tự cập nhật giá tài sản: tiền mã hoá và vàng (tuỳ chọn)

  • Mặc định tắt. Bạn bật trong Khác -> Cài đặt chung, nhóm Tài sản, hàng "Giá tài sản tự động", công tắc "Tự cập nhật giá tài sản"; app hiện hộp đồng ý riêng (tách khỏi đồng ý của tỷ giá và của Trợ lý AI), chỉ khi bạn đồng ý app mới gọi mạng. Sau đó từng tài sản chỉ được cập nhật khi bạn bật "Tự cập nhật giá" trong form tài sản và đã nhập số lượng; tài sản đã bán không được cập nhật.
  • Khi bật, app lấy giá tối đa một lần mỗi ngày khi mở app (lần trước lỗi thì thử lại sau ít nhất 15 phút) và khi bạn bấm "Cập nhật ngay". Chỉ gửi yêu cầu khi có tài sản bật "Tự cập nhật giá" thuộc loại tương ứng, nên việc app gửi yêu cầu cho thấy bạn có tài sản loại đó.
  • Tài sản loại Ngoại tệ (ví dụ USD) được tính theo tỷ giá đang có trong app, nên không cần đồng ý này và không gửi thêm gì ra ngoài máy. Tỷ giá trong app là do bạn nhập hoặc do tự động cập nhật tỷ giá mang về (mục trên); app chỉ thêm mã ngoại tệ bạn đang giữ vào danh sách mã nhận về, còn yêu cầu gửi đi vẫn chỉ có tiền gốc.
  • Bạn cũng có thể lấy giá ngay cho một tài sản bằng nút "Cập nhật theo giá thị trường" của tài sản đó. Việc này cần đồng ý như trên (không cần bật công tắc tự cập nhật) và chỉ chạy khi bạn bấm. App vẫn chỉ gửi đúng các yêu cầu nêu dưới đây (tiền mã hoá: mã tiền định giá; vàng: không tham số), không gửi gì thêm.
  • Tiền mã hoá (BTC, USDT): app tải bảng giá công khai của currency-api, thử lần lượt cdn.jsdelivr.net rồi latest.currency-api.pages.dev (cùng hai máy chủ của mục Tự động cập nhật tỷ giá). Dữ liệu gửi đi chỉ có mã tiền định giá của tài sản (ví dụ VND) nằm trong địa chỉ yêu cầu; không gửi mã đồng coin, số lượng, tên tài sản hay số dư; mã coin chỉ dùng để đọc bảng giá ngay trên máy.
  • Vàng: app gửi một yêu cầu tới https://www.vang.today/api/prices không kèm tham số nào (máy chủ không biết bạn giữ loại vàng nào) và lấy giá mua vào theo VND mỗi lượng, rồi quy đổi trên máy theo loại vàng và đơn vị bạn chọn. Chỉ áp dụng cho tài sản vàng tính bằng VND.
  • Các yêu cầu không gửi cookie hay thông tin đăng nhập. Như mọi kết nối Internet, các máy chủ này thấy địa chỉ IP của bạn và thông tin kỹ thuật của kết nối, và xử lý theo chính sách riêng của họ. Các bên này không thuộc HenryExpense. App không ghi địa chỉ yêu cầu hay nội dung phản hồi vào nhật ký; chỉ lưu trên máy thời điểm và số tài sản đã cập nhật/bỏ qua/lỗi của lần gần nhất, hoặc loại lỗi.
  • Giá nhận về là dữ liệu tham khảo, có thể lệch so với giá giao dịch thực tế; mỗi bản định giá ghi rõ nguồn (currency-api hoặc vang.today) và ngày. Giá bạn nhập tay trong cùng ngày luôn được giữ. App bỏ qua giá không hợp lệ, giá chênh lệch quá lớn so với lần tự động trước (vàng hơn 20%, tiền mã hoá hơn 50%, trong vòng 7 ngày) và giá USDT lệch xa 1 USD.
  • Cài đặt của tính năng (bật/tắt, đồng ý, kết quả gần nhất) lưu theo thiết bị, không nằm trong tệp sao lưu và không bị khôi phục ghi đè. Các bản định giá đã ghi (kèm nguồn, đơn giá) là dữ liệu tài sản nên nằm trong tệp sao lưu. Thu hồi đồng ý cũng tắt tính năng; tắt bất cứ lúc nào để ngừng gửi.

Tra giá cổ phiếu và tiền mã hoá bằng AI (tuỳ chọn)

  • Mặc định tắt và chỉ hiện khi Trợ lý AI đang dùng nhà cung cấp có công cụ tìm kiếm web (hiện là Anthropic và Google Gemini; OpenAI và Tương thích OpenAI không có nên tính năng bị ẩn, app không tra giá theo trí nhớ của mô hình). Tính năng cần đồng ý riêng "Tra giá bằng AI" (cùng màn "Giá tài sản tự động"), ngoài đồng ý chia sẻ với nhà cung cấp AI ở Cài đặt AI. Một lần đồng ý dùng cho cả cổ phiếu Việt Nam và tiền mã hoá (BTC, USDT), gồm tài sản tiền mã hoá và mục "Tiền mã hoá (tham khảo)" ở màn Quy đổi.
  • Đồng ý có phiên bản: nếu trước đây bạn chỉ đồng ý tra giá cổ phiếu, app coi là chưa đồng ý cho phạm vi mới và hỏi lại. Cho tới khi bạn đồng ý lại, app không tra giá bằng AI cho bất kỳ loại nào, kể cả cổ phiếu (giá đã ghi vẫn giữ nguyên).
  • Cổ phiếu: khi bạn bấm "Cập nhật ngay" (hoặc nếu bạn bật thêm "Tự chạy mỗi ngày", mặc định tắt: một lần mỗi ngày khi mở app), app gửi tới nhà cung cấp AI đang chọn một yêu cầu chứa hướng dẫn tra giá, ngày hôm nay và danh sách mã cổ phiếu của các tài sản bật "Tự cập nhật giá" (tối đa 20 mã mỗi lần, ví dụ FPT, VNM).
  • Bạn cũng có thể tra giá ngay cho một cổ phiếu bằng nút "Cập nhật theo giá thị trường" của tài sản đó. Việc này cần đồng ý "Tra giá bằng AI" và công tắc Bật tra giá bằng AI như trên, và chỉ chạy khi bạn bấm. Nếu app đang tra giá hàng loạt thì nút dùng kết quả đó, không hỏi AI lần hai. Yêu cầu chỉ chứa hướng dẫn tra giá, ngày hôm nay và mã của cổ phiếu đó.
  • Tiền mã hoá: trong cùng lần chạy đó, nếu có tài sản BTC/USDT bật "Tự cập nhật giá" và công tắc tra tiền mã hoá đang bật (mặc định bật sau khi đồng ý), app gửi một yêu cầu riêng chỉ chứa hướng dẫn tra giá, thời điểm hiện tại (giờ UTC) và mã coin bạn đang giữ trong số BTC, USDT. Ở màn Quy đổi, khi bạn bấm làm mới mục "Tiền mã hoá (tham khảo)", app gửi yêu cầu tương tự với cố định cả hai mã BTC và USDT (không phụ thuộc bạn có giữ hay không).
  • Nhà cung cấp dùng công cụ tìm kiếm web của họ (có thể qua đối tác tìm kiếm), nên các mã này cũng đi tới công cụ tìm kiếm đó. Vì vậy nhà cung cấp AI và công cụ tìm kiếm có thể biết bạn đang giữ những mã cổ phiếu hay đồng coin nào. App không gửi số lượng, số coin bạn nhập, tên tài sản, ghi chú, giá mua, số dư, tài sản ròng hay dữ liệu thu chi nào.
  • Chi phí tính vào API key của bạn: mỗi lần tra là một lời gọi AI có tìm kiếm web (có cổ phiếu và tiền mã hoá thì là hai lời gọi), nhà cung cấp có thể tính thêm phí tìm kiếm.
  • Giá do AI tra cứu có thể sai, và trang web mà AI đọc có thể chứa nội dung sai hoặc cố tình đánh lừa mô hình; app dặn mô hình coi nội dung trang là dữ liệu, không phải chỉ thị, và không tin bất kỳ chữ nào ngoài các trường giá được kiểm. App kiểm tra trên máy: mã phải đúng mã đã hỏi, lời trả lời phải có dấu vết tìm kiếm web, và trang nguồn phải là địa chỉ https thuộc danh sách trang tin cậy cố định trong app và khớp nguồn mà công cụ tìm kiếm trả về. Cổ phiếu: giá theo VND là số nguyên hợp lý (giá ghi theo nghìn đồng bị từ chối), ngày giá không quá 5 ngày. Tiền mã hoá: giá tính bằng USD cho một coin, đúng cặp giao dịch (BTCUSD, BTCUSDT, USDTUSD), trong khoảng hợp lý (BTC 1.000 tới 10.000.000 USD, USDT 0,9 tới 1,1 USD), thời điểm giá không cũ quá 48 giờ và không ở tương lai.
  • Tiền mã hoá còn được đối chiếu với giá đối chứng của currency-api (bảng giá công khai, xem mục Tự động cập nhật tỷ giá). Để có giá này, khi bạn bấm "Tra giá bằng AI" ở mục Quy đổi (cần đồng ý Tra giá bằng AI đúng phiên bản, công tắc Bật tra giá bằng AI và công tắc Tiền mã hoá đều bật) app gửi thêm một yêu cầu HTTPS cố định tải bảng giá theo USD (usd.min.json) tới cdn.jsdelivr.net rồi latest.currency-api.pages.dev; với tra giá tài sản, app dùng giá đối chứng đã lưu nếu còn mới (không quá 12 giờ), không thì tải lại bằng yêu cầu cố định trên. Yêu cầu không chứa mã coin hay dữ liệu nào của bạn. Mỗi tài sản chỉ có một nguồn giá tự động mỗi ngày: đã có giá tự động từ currency-api hôm nay thì không tra AI cho tài sản đó. Giá AI chỉ được ghi thẳng khi khớp giá đối chứng (BTC lệch không quá 5%, USDT không quá 2%) và không chênh lớn so với giá AI lần trước; nếu không có giá đối chứng, lệch giá đối chứng, nguồn không khớp, là giá lần đầu hay chênh lớn, giá nằm trong "Giá chờ xác nhận" để bạn tự đối soát (ví dụ mở liên kết nguồn) rồi bấm Xác nhận; Từ chối thì không ghi gì. Giá trị tài sản tiền mã hoá được quy ra tiền của tài sản trên máy bằng tỷ giá USD đang lưu.
  • Giá AI không bao giờ thay giá bạn nhập tay trong cùng ngày. Mỗi bản định giá do AI tra ghi rõ "Giá do AI tra cứu" kèm liên kết nguồn (chỉ mở được khi thuộc danh sách tin cậy).
  • Câu trả lời của AI không được lưu ngoài phần giá đã kiểm; app không ghi lời gọi, địa chỉ yêu cầu hay phản hồi vào nhật ký. Hàng chờ xác nhận (mã, giá, ngày hay thời điểm giá, liên kết nguồn; không có số lượng), giá AI đã chấp nhận của mục Quy đổi tham khảo và các cài đặt của tính năng (gồm phiên bản đồng ý) lưu theo thiết bị, không nằm trong tệp sao lưu và không bị khôi phục ghi đè, nên khôi phục sao lưu không tự bật tính năng. Bản định giá tài sản đã ghi (kèm đơn giá và liên kết nguồn) là dữ liệu tài sản nên nằm trong tệp sao lưu. Giá và hàng chờ này không được đưa vào Trợ lý AI hay tệp xuất CSV/Excel.
  • Thu hồi đồng ý "Tra giá bằng AI" tắt tính năng, tắt tự chạy hằng ngày và xoá cả hàng chờ của tài sản lẫn của mục Quy đổi tham khảo. Thu hồi đồng ý với nhà cung cấp AI, xoá nhà cung cấp hoặc đổi loại/địa chỉ máy chủ của nhà cung cấp cũng tắt tính năng này. Lưu ý: nếu bạn chuyển sang một nhà cung cấp khác đã được đồng ý ở Cài đặt AI, lần tra sau gửi mã tới nhà cung cấp mới đó.

Cập nhật ứng dụng qua mạng (EAS Update)

  • Khi mở, app tự hỏi máy chủ Expo (u.expo.dev) xem có bản cập nhật nhỏ (mã JS và hình ảnh của ứng dụng) không. Đây không phải tính năng tuỳ chọn và không có công tắc tắt trong app. Máy chủ này không phải của HenryExpense và không cần tài khoản.
  • Thông tin kỹ thuật được gửi đi: phiên bản ứng dụng, phiên bản runtime, nền tảng (iOS/Android), kênh cập nhật và mã định danh bản cập nhật đang chạy. Kèm theo là một mã ngẫu nhiên gắn với lần cài app này (không gắn với danh tính của bạn hay dữ liệu thu chi; xoá app là mất mã). Nếu lần chạy trước gặp lỗi nghiêm trọng lúc khởi động, app có thể gửi kèm đoạn nhật ký lỗi ngắn của lần đó.
  • App không gửi giao dịch, số dư, ví, danh mục hay bất kỳ dữ liệu thu chi nào. Như mọi kết nối Internet, máy chủ Expo thấy địa chỉ IP của bạn và xử lý theo chính sách riêng của họ.
  • Bản cập nhật chỉ thay mã chạy của ứng dụng, không đọc hay thay đổi dữ liệu thu chi trên máy.

Gmail (tính năng tuỳ chọn)

Tính năng Gmail tự thêm giao dịch từ email thông báo biến động số dư của ngân hàng. Tính năng mặc định tắt và có thể chưa có trong một số bản phát hành; chỉ chạy khi bạn tự kết nối tài khoản Google trong màn hình Đồng bộ Gmail. Trước khi đăng nhập, app hiện hộp giới thiệu nêu dữ liệu được đọc, mục đích sử dụng và liên kết tới chính sách này; bạn phải chọn "Tôi đã đọc và đồng ý" thì mới tiếp tục được.

  • Quyền xin: gmail.readonly (chỉ đọc thư) cùng quyền định danh cơ bản (openid, email) để app biết địa chỉ tài khoản đã kết nối. App không gửi, xoá, sửa hay gắn nhãn thư. Về kỹ thuật, quyền chỉ đọc của Google cho phép đọc mọi thư trong hộp thư; app chỉ tìm và đọc thư gửi từ các địa chỉ người gửi bạn đã chọn trong danh sách nguồn email.
  • Đăng nhập dùng OAuth của Google với PKCE, mở trong trình duyệt của hệ điều hành; app không thấy mật khẩu Google của bạn.
  • App gọi trực tiếp máy chủ của Google (đăng nhập, Gmail API, lấy địa chỉ email tài khoản) ngay trên máy bạn. Không có máy chủ nào của HenryExpense nhận hay lưu thư, token hay dữ liệu lấy từ thư.
  • Mục đích duy nhất: nhận diện email giao dịch của ngân hàng để tạo giao dịch trong sổ thu chi của bạn (số tiền, thời gian, mô tả, mã tham chiếu để không ghi trùng). Thư nào app chưa chắc chắn thì đưa vào hàng chờ duyệt để bạn xác nhận hoặc bỏ qua, không tự ghi.

Dữ liệu Google: Sử dụng Hạn chế (Limited Use)

Việc sử dụng và chuyển giao thông tin nhận từ Google APIs của HenryExpense tuân thủ Chính sách Dữ liệu Người dùng của Google API Services (Google API Services User Data Policy), bao gồm các yêu cầu về Sử dụng Hạn chế (Limited Use). Cụ thể:

  • Dữ liệu nhận từ Gmail chỉ được dùng để cung cấp tính năng mà bạn nhìn thấy trong app: tự thêm giao dịch và hàng chờ duyệt từ email ngân hàng.
  • Không bán dữ liệu, không chuyển cho bên quảng cáo, môi giới dữ liệu hay bên thứ ba nào khác, và không dùng để hiển thị hoặc nhắm quảng cáo.
  • Không ai đọc dữ liệu này ngoài bạn. Nhà phát triển không có quyền truy cập vì dữ liệu chỉ nằm trên máy bạn; ngoại lệ duy nhất chỉ có thể là khi bạn đồng ý cụ thể, khi cần cho mục đích bảo mật (ví dụ điều tra lạm dụng) hoặc khi pháp luật bắt buộc.
  • Không dùng dữ liệu này để phát triển, cải thiện hay huấn luyện mô hình AI hoặc học máy tổng quát.
  • Ghi chú của giao dịch tạo từ thư (lấy từ nội dung thư), tiêu đề, đoạn trích và địa chỉ người gửi không bao giờ được đưa vào dữ liệu gửi tới nhà cung cấp AI, kể cả khi bạn bật chia sẻ ghi chú hay bật "Cho AI đọc giao dịch từ Gmail" trong Cài đặt AI.
  • Gợi ý danh mục cho hàng chờ duyệt và giao dịch tạo từ thư (kể cả giao dịch tự ghi đã gắn thư) chỉ chạy trên máy (ghi nhớ lựa chọn của bạn và từ khoá). Các mục này không bao giờ được gửi tới nhà cung cấp AI để phân loại, kể cả khi bạn bật "Dùng AI khi không đoán được". Khi bạn duyệt một thư kèm danh mục (hoặc chọn danh mục cho giao dịch tạo từ thư ở màn Phân loại giao dịch), app ghi nhớ ghi chú đã rút gọn của thư đó trên máy, đánh dấu "từ email"; dòng ghi nhớ này chỉ dùng để gợi ý trên máy và không bao giờ được gửi làm ví dụ cho AI. Dòng đã đánh dấu "từ email" luôn giữ dấu đó, kể cả khi bạn sau này chọn danh mục cho ghi chú giống hệt; chúng bị xoá khi bạn ngắt kết nối hoặc xoá dữ liệu Gmail.
  • Công tắc "Cho AI đọc giao dịch từ Gmail" mặc định tắt. Khi tắt, Trợ lý AI và "Viết tóm tắt bằng AI" không nhận từng giao dịch tạo từ thư (không có trong danh sách, kết quả tìm kiếm hay tín hiệu khoản chi lớn, khoản trùng, khoản lặp). Tuy vậy, giao dịch tạo từ thư là giao dịch trong sổ của bạn nên các số tổng hợp mà trợ lý đọc (số dư ví, tổng thu/chi, tiến độ ngân sách, thẻ tín dụng, tổng theo danh mục, ví hoặc ngày, mức tăng của danh mục) vẫn tính cả chúng; nếu một ngày hay một danh mục chỉ có một giao dịch thì con số tổng đó bằng đúng số tiền của giao dịch ấy. Chỉ khi bạn bật công tắc (app hỏi xác nhận trước), số tiền, ngày, ví và danh mục của từng giao dịch này mới được gửi như giao dịch khác khi trợ lý cần (xem mục Trợ lý AI). Việc gửi này chỉ để trả lời câu hỏi bạn đặt ra, tới nhà cung cấp AI do bạn chọn.

Dữ liệu Gmail lưu ở đâu

  • Token đăng nhập Google (access token, refresh token) và địa chỉ email của tài khoản lưu trong SecureStore (Keychain trên iOS, Keystore trên Android). Client ID Google mà bản dành cho nhà phát triển cho phép tự dán cũng lưu trong SecureStore. Token và Client ID không nằm trong cơ sở dữ liệu hay tệp sao lưu. Riêng địa chỉ Gmail đã kết nối còn được lưu thêm trong cài đặt của app (SQLite) để hiện trên màn Đồng bộ Gmail; đây là dữ liệu theo thiết bị, không nằm trong tệp sao lưu (xem dưới).
  • Giao dịch tạo từ thư lưu trong SQLite như giao dịch thường, kèm mã nguồn (ví dụ gmail-vpbank) và mã tham chiếu của ngân hàng để không ghi trùng. Ghi chú có thể lấy từ nội dung thư; danh mục do app tự chọn ngay trên máy trong các danh mục sẵn có, trước hết theo ghi nhớ lựa chọn của bạn, sau đó theo từ khoá trong mô tả đó (không dùng AI). Khi bị xoá, giao dịch (kèm ghi chú, mã nguồn, mã tham chiếu) nằm trong Thùng rác cho tới khi Thùng rác được dọn. Lưu ý với thư báo số dư của ACB: thư không có mã giao dịch nên app tự tạo mã tham chiếu bằng cách băm (SHA-256, giữ 32 ký tự đầu) 4 số cuối của tài khoản, ngày, số tiền, số dư sau giao dịch và nội dung ghi chú trong thư; mã chỉ có dạng acb: kèm 32 ký tự hex, không chứa số tài khoản, số dư hay ghi chú ở dạng đọc được. Mã này lưu cùng giao dịch và trong tệp sao lưu, không hiện trên màn hình (dòng nguồn chỉ ghi "Gmail" và tên ngân hàng); vì chỉ tạo từ 4 số cuối tài khoản nên không thể dò ra số tài khoản đầy đủ. Mục chờ duyệt lập bằng bản cũ (còn mã cũ hoặc số tài khoản đầy đủ) được đổi sang dạng này và che còn 4 số cuối khi app mở lại. Mã không được gửi tới nhà cung cấp AI và không có trong tệp xuất CSV/Excel. Các giao dịch ACB nhập từ phiên bản cũ được đổi sang dạng băm này khi cập nhật app (kể cả trong Thùng rác).
  • Chống ghi trùng với giao dịch bạn tự ghi: khi thư về, app so với giao dịch ngay trên máy (cùng ví, cùng loại thu/chi, cùng số tiền, lệch tối đa 24 giờ). Đúng một giao dịch khớp thì app gắn mã nguồn và mã tham chiếu của thư vào đúng giao dịch đó, không đổi số tiền, ví, danh mục hay ghi chú của bạn; chưa chắc thì thư nằm ở hàng chờ duyệt để bạn chọn. Vì vậy một giao dịch bạn tự ghi mà đã được gắn thư sẽ được coi là giao dịch tạo từ thư: ghi chú của nó không được gửi tới nhà cung cấp AI và nó bị lọc như giao dịch Gmail khi "Cho AI đọc giao dịch từ Gmail" tắt. Giao dịch tạo từ quét QR chuyển khoản mang nhãn nguồn vietqr để so khớp như trên; nhãn này không chứa số tài khoản hay mã ngân hàng, chỉ nằm trong dữ liệu trên máy và tệp sao lưu như các nhãn nguồn khác.
  • Cài đặt Gmail lưu trong cài đặt của app (SQLite): danh sách nguồn email (địa chỉ người gửi, tên, ví mặc định, quy tắc chọn ví theo số thẻ/tài khoản bạn nhập), bảng ghép số thẻ đã che với ví, bật/tắt tự đồng bộ; cùng các dữ liệu theo thiết bị: hàng chờ duyệt (tiêu đề và đoạn trích ngắn của thư, chuỗi số dài trong đoạn trích được che; số thẻ/tài khoản chỉ giữ ở dạng ngân hàng đã che trong thư hoặc 4 số cuối, kể cả thư ACB; mã tham chiếu của thư ACB là chuỗi băm nêu trên), danh sách thư đã bỏ qua, kết quả đồng bộ gần nhất (chỉ số đếm), mốc đồng bộ và địa chỉ Gmail đã kết nối.
  • Số tài khoản/thẻ của ví: với ví ngân hàng và thẻ tín dụng, bạn có thể nhập (hoặc dán) số tài khoản/thẻ; app chỉ lưu 4 chữ số cuối trong thông tin ví (SQLite), phần còn lại bị bỏ ngay, không lưu. 4 số này chỉ dùng trên máy để khớp thư ngân hàng với đúng ví: thư có số khớp đúng một ví thì ghi vào ví đó; nếu bạn đã gắn số cho ví cùng ngân hàng mà thư không khớp ví nào hoặc khớp nhiều ví, giao dịch vào hàng chờ duyệt kèm lý do để bạn tự chọn ví. 4 số cuối không được gửi tới nhà cung cấp AI, không có trong tệp xuất CSV/Excel, không ghi vào nhật ký hay thông báo. Đây là dữ liệu ví nên nằm trong tệp sao lưu (không mã hoá) và không bị xoá khi Ngắt kết nối hay "Xoá toàn bộ dữ liệu Gmail"; muốn xoá, hãy xoá ô số trong màn sửa ví.
  • App không ghi nội dung thư, token hay địa chỉ email vào nhật ký (log) và không tạo thông báo từ nội dung thư.

Lưu giữ và xoá dữ liệu Gmail

  • Dữ liệu lấy từ Gmail chỉ giữ trên máy cho tới khi bạn xoá. Hàng chờ duyệt giữ tối đa 100 thư; duyệt hoặc bỏ qua một thư sẽ xoá thư đó khỏi hàng chờ.
  • "Ngắt kết nối": thu hồi quyền với Google (best effort khi có mạng), xoá token khỏi SecureStore, xoá hàng chờ duyệt, danh sách thư đã bỏ qua, kết quả đồng bộ gần nhất, mốc đồng bộ và địa chỉ Gmail đã kết nối. Ghi nhớ danh mục học từ thư (đánh dấu "từ email") cũng bị xoá; cấu hình nguồn email, quy tắc ví và các giao dịch đã ghi vẫn được giữ.
  • "Xoá toàn bộ dữ liệu Gmail" (màn hình Đồng bộ Gmail, mục Dữ liệu và quyền riêng tư): làm như Ngắt kết nối, đồng thời xoá cấu hình nguồn email, quy tắc và bảng ghép số thẻ với ví, cài đặt tự đồng bộ và Client ID đã dán. Thao tác này không xoá giao dịch đã ghi vào sổ vì đó là dữ liệu thu chi của bạn, và xoá cả ghi nhớ danh mục học từ thư (ghi chú đã rút gọn kèm danh mục, đánh dấu "từ email"), kể cả trong tệp ghi-nho-danh-muc.md. Ghi nhớ do chính bạn chọn danh mục (không từ thư) được giữ.
  • "Danh sách giao dịch đã nhập" (cùng mục Dữ liệu và quyền riêng tư): liệt kê các giao dịch tạo từ thư ngay trên máy, kể cả giao dịch bạn tự ghi mà đã được gắn thư (xem mục chống ghi trùng); bạn chọn xoá từng giao dịch hoặc xoá tất cả, và "Xoá tất cả" cũng xoá cả các giao dịch tự ghi đã gắn thư này. Giao dịch bị xoá (kèm giao dịch phí con của chúng) được chuyển vào Thùng rác, không đụng tới kết nối, cấu hình nguồn hay hàng chờ duyệt. Số dư các ví thay đổi theo. Trong Thùng rác, giao dịch vẫn giữ đủ nội dung (số tiền, ngày, ghi chú lấy từ thư, mã nguồn, mã tham chiếu) và khôi phục được trong 30 ngày; sau đó Thùng rác tự xoá hẳn, hoặc bạn tự xoá hẳn sớm hơn. Trong lúc giao dịch còn trong Thùng rác, thư tương ứng không bị nhập lại; sau khi Thùng rác được dọn, lần đồng bộ sau có thể nhập lại các thư còn nằm trong khoảng đồng bộ nếu bạn vẫn kết nối Gmail. Bạn cũng có thể xoá từng giao dịch như bình thường.
  • Bạn có thể tự thu hồi quyền của HenryExpense bất cứ lúc nào tại https://myaccount.google.com/permissions, nhất là khi app báo không thu hồi được do không có mạng. Sau khi thu hồi, app không đọc được thư nữa cho tới khi bạn kết nối lại.
  • Tệp sao lưu và tệp xuất bạn đã tạo trước đó không bị các thao tác trên sửa lại (xem mục Sao lưu và xuất dữ liệu).

Trợ lý AI (tính năng tuỳ chọn)

  • Mở trợ lý bằng nút nổi trên màn hình. Cài đặt AI nằm ở Khác -> Trí tuệ nhân tạo -> Cài đặt AI, nơi bạn chọn nhà cung cấp, thu hồi đồng ý và xoá API key. Khác không có hàng riêng cho trợ lý.
  • Mặc định app không gửi gì cho bên AI nào. Bạn tự chọn nhà cung cấp và tự nhập API key của mình. Các nhà cung cấp hiện có: Anthropic (Claude), OpenAI, Google Gemini, Tương thích OpenAI (tự chọn máy chủ). Với loại tương thích OpenAI, dữ liệu đi tới máy chủ mà bạn nhập địa chỉ.
  • Trước lần gửi đầu tiên tới mỗi nhà cung cấp, app hiện hộp đồng ý. Chỉ sau khi bạn đồng ý, dữ liệu mới được gửi. Bạn có thể thu hồi đồng ý trong Cài đặt AI; thu hồi cũng tắt luôn "Cho AI đọc giao dịch từ Gmail" (muốn dùng lại phải bật lại).
  • Khi bạn đặt câu hỏi, app gửi câu hỏi của bạn và dữ liệu giao dịch mà các công cụ đọc của trợ lý lấy ra để trả lời (số dư, giao dịch, tổng hợp). Trợ lý chỉ đọc, không sửa hay xoá dữ liệu của bạn. Giao dịch nhập từ Gmail có quy tắc riêng (xem dưới).
  • Mục "Điểm tin" ở Tổng quan phát hiện bất thường (danh mục tăng đột biến, khoản chi lớn, khoản trùng, khoản lặp, ngân sách) hoàn toàn trên máy, không gửi gì đi. Chỉ khi bạn bấm "Viết tóm tắt bằng AI", app mới gửi các tín hiệu đã tổng hợp tới nhà cung cấp AI bạn chọn, sau khi bạn đã đồng ý; app không tự gửi nền. Nội dung gửi gồm tên danh mục, tên ngân sách, số tiền và phần trăm của từng tín hiệu (không gửi danh sách giao dịch thô); ghi chú và tên người tuân theo cài đặt chia sẻ của bạn. Khi "Cho AI đọc giao dịch từ Gmail" tắt, các tín hiệu khoản chi lớn, khoản trùng và khoản lặp có liên quan tới giao dịch tạo từ thư không được gửi (vẫn hiện trên máy); tín hiệu danh mục và ngân sách là số tổng nên vẫn tính cả giao dịch đó. Bản tóm tắt AI được lưu trên máy để dùng lại, gắn với nhà cung cấp đã viết và đúng dữ liệu đã gửi: đổi nhà cung cấp, tắt AI hoặc đổi các cài đặt chia sẻ làm thay đổi dữ liệu gửi đi thì bản cũ không còn hiện, và khi bạn bật ẩn số dư thì nội dung không hiển thị. Cả bản tóm tắt lẫn lựa chọn Tuần/Tháng của Điểm tin đều không nằm trong tệp sao lưu.
  • Ghi chú giao dịch và tên người (người vay, người nhận, thành viên chia tiền...) được gửi theo mặc định. Bạn tắt được từng loại trong Cài đặt AI; khi tắt, các trường đó bị thay bằng "[ẩn]" trước khi gửi.
  • Tài sản: khi trò chuyện, trợ lý không đọc danh sách tài sản, các lần mua, lần bán, các lần định giá, ghi chú của tài sản hay tài sản ròng mở rộng. Riêng tính năng "Tra giá cổ phiếu bằng AI" (nếu bạn bật) gửi mã cổ phiếu của các tài sản đã bật "Tự cập nhật giá" cùng ngày hôm nay tới nhà cung cấp AI và công cụ tìm kiếm web của họ, không kèm số lượng hay tên tài sản (xem mục Tra giá cổ phiếu bằng AI). Riêng giao dịch mua/bán tài sản là giao dịch ví bình thường (danh mục "Mua tài sản"/"Bán tài sản", ghi chú mặc định "Mua: <tên tài sản>", "Mua thêm: <tên tài sản>" hoặc "Bán: <tên tài sản>"), nên trợ lý có thể nhận số tiền, ngày, ví, danh mục và ghi chú đó (tức tên tài sản) như giao dịch khác; tắt chia sẻ ghi chú thì ghi chú bị thay bằng "[ẩn]". Các giao dịch này mặc định không tính vào báo cáo nên không vào Điểm tin.
  • Giao dịch tạo từ thư Gmail: ghi chú (lấy từ nội dung thư) không bao giờ được đưa vào dữ liệu gửi AI, kể cả khi bạn bật chia sẻ ghi chú, và tìm kiếm của trợ lý không khớp theo ghi chú đó. Công tắc "Cho AI đọc giao dịch từ Gmail" (Cài đặt AI, chỉ hiện khi app có tính năng Gmail) mặc định tắt: khi tắt, trợ lý không nhận từng giao dịch này, chỉ nhận các số tổng hợp đã tính cả chúng; khi bật (sau khi bạn xác nhận), số tiền, ngày, ví và danh mục của từng giao dịch được gửi như giao dịch khác. Công tắc lưu theo thiết bị, không nằm trong tệp sao lưu. Chi tiết xem mục Dữ liệu Google: Sử dụng Hạn chế.
  • Phân loại danh mục bằng AI: app luôn gợi ý danh mục trên máy trước (ghi nhớ lựa chọn của bạn, rồi từ khoá). Chỉ khi hai cách này không đoán được, ghi chú không quá chung (ví dụ chỉ có "chuyen tien" thì không hỏi) và mục đó không phải từ Gmail, app mới cho hỏi AI. Công tắc "Dùng AI khi không đoán được" trong Cài đặt AI mặc định tắt. Khi bật, app chỉ hỏi AI lúc bạn bấm "Hỏi AI" (trên form ghi chép hoặc ở màn Phân loại giao dịch; ghi chú gửi đi có thể là chữ app điền sẵn từ hoá đơn hay mã QR), không tự hỏi khi bạn gõ và không chạy nền. App cũng chỉ hỏi khi đã bật Trợ lý AI, đã chọn nhà cung cấp, có API key, bạn đã đồng ý và đang bật chia sẻ ghi chú; tắt chia sẻ ghi chú thì không gửi gì. Mỗi lần bấm hỏi tối đa 200 mục, trong tối đa 7 lời gọi (mỗi lời gọi tối đa 30 mục; ghi chú giống nhau chỉ gửi một lần); chi phí tính vào API key của bạn.
  • Nội dung gửi khi phân loại: loại (thu hoặc chi), danh sách tên danh mục của loại đó (không gồm "Khác" và danh mục hệ thống, tên gửi nguyên văn) và ghi chú của các mục cần gợi ý, mỗi ghi chú cắt còn tối đa 120 ký tự. Trước khi gửi, app thay địa chỉ email, đường dẫn web và chuỗi từ 6 chữ số trở lên (như số tài khoản, số điện thoại, mã giao dịch) bằng "[ẩn]"; số ngắn hơn mà bạn tự gõ trong ghi chú (ví dụ số tiền) vẫn được gửi. Khi bạn tắt chia sẻ tên người, app thay tên người ghi ở giao dịch và cụm chữ IN HOA kiểu "NGUYEN VAN A" bằng "[người]"; tên viết thường hay chỉ viết hoa chữ đầu trong ghi chú không che được, nên nếu ghi chú có tên người, hãy tắt chia sẻ ghi chú. App không gửi số tiền, ngày, ví, số dư, mã giao dịch hay mã định danh nào.
  • Ví dụ đã nhớ: nếu "Gửi ví dụ đã nhớ cho AI" bật (mặc định tắt) và bạn cho chia sẻ cả ghi chú lẫn tên người, app gửi kèm tối đa 20 dòng ghi nhớ của chính bạn có từ trùng với các ghi chú đang hỏi (ghi chú đã rút gọn của các giao dịch trước, kèm tên danh mục bạn đã chọn; mỗi dòng được làm sạch lại trước khi gửi) để AI đoán sát hơn. Dòng ghi nhớ học từ thư Gmail không bao giờ được gửi. Tắt công tắc này, hoặc tắt chia sẻ tên người, để không gửi ví dụ. App không gửi nguyên tệp ghi nhớ.
  • Kết quả AI chỉ là gợi ý: app chỉ nhận tên có đúng trong danh sách danh mục đã gửi (tên khác bị bỏ), và bạn duyệt rồi mới lưu. "Tự áp dụng khi AI rất chắc chắn" mặc định tắt và chỉ có ở màn Phân loại giao dịch; khi bật, sau lần bấm "Hỏi AI" app lưu ngay các gợi ý AI rất chắc chắn mà không chờ bạn duyệt. Các gợi ý tự áp dụng này KHÔNG được ghi nhớ: app chỉ ghi nhớ khi chính bạn chọn hoặc tích rồi bấm "Áp dụng". Nút "Hoàn tác" trả lại danh mục cũ của giao dịch và cũng hoàn nguyên các dòng ghi nhớ vừa thay đổi trong lượt đó (xoá dòng mới tạo, trả lại dòng cũ). App dặn mô hình coi ghi chú là dữ liệu, không phải chỉ thị.
  • Gợi ý AI đã nhận được nhớ tạm trên máy (ghi chú đã rút gọn và tên danh mục, tối đa 500 mục) để không hỏi lại cùng một ghi chú. Bộ nhớ tạm này theo thiết bị, không nằm trong tệp sao lưu, và bị xoá khi bạn thu hồi đồng ý với nhà cung cấp đang dùng, xoá hay đổi nhà cung cấp hoặc model, bấm "Xoá bộ nhớ phân loại" hoặc Xoá dữ liệu ứng dụng. App không ghi ghi chú gửi đi hay câu trả lời của AI vào nhật ký. Các công tắc "Dùng AI khi không đoán được", "Tự áp dụng khi AI rất chắc chắn" và "Gửi ví dụ đã nhớ cho AI" lưu theo thiết bị, không nằm trong tệp sao lưu.
  • Nút "Lưu và kiểm tra" chỉ gửi API key tới nhà cung cấp để kiểm tra kết nối và lấy danh sách model, không gửi dữ liệu thu chi.
  • Dữ liệu gửi đi do nhà cung cấp bạn chọn xử lý theo chính sách riêng của họ. HenryExpense không có máy chủ trung gian và không xem được nội dung đó.
  • API key lưu trong SecureStore (Keychain), không nằm trong cơ sở dữ liệu và không vào tệp sao lưu.
  • Cuộc trò chuyện chỉ giữ trong bộ nhớ khi app chạy. Các câu trả lời trước trong cuộc trò chuyện đang mở được gửi lại cùng câu hỏi tiếp theo, nên sau khi tắt một cài đặt chia sẻ, hãy bấm "Cuộc trò chuyện mới" để dữ liệu đã đọc trước đó không bị gửi lại.

Gửi email mẫu cho nhà phát triển

  • Trong Hướng dẫn sử dụng, chủ đề Đồng bộ Gmail, một số bản cài có nút "Gửi email mẫu cho nhà phát triển" để bạn gửi mẫu email thông báo của ngân hàng chưa được hỗ trợ. Nút chỉ có khi bản cài được cấu hình sẵn địa chỉ nhận của nhà phát triển; không có địa chỉ thì không có nút.
  • Bạn tự điền form: tên ngân hàng, địa chỉ người gửi của ngân hàng, tiêu đề và nội dung thư mẫu, ghi chú. Form không tự lấy gì từ kết nối Gmail, hàng chờ duyệt hay sổ thu chi; nội dung là những gì bạn tự gõ hoặc dán vào, và có thể chứa thông tin từ email ngân hàng của bạn. Ngoài phần bạn nhập, app chỉ thêm phiên bản ứng dụng và hệ điều hành (ví dụ ios 18). App không đính kèm giao dịch, số dư, ví, token Gmail, API key hay địa chỉ Gmail đã kết nối.
  • Trước khi soạn thư, app tự làm mờ mọi chuỗi liền nhau từ 8 chữ số trở lên trong tiêu đề, nội dung và ghi chú, chỉ giữ 4 chữ số cuối. App cũng làm mờ các nhóm số ngắt bằng dấu cách, dấu chấm hay gạch nối khi tổng từ 12 chữ số trở lên (ví dụ 1234 5678 9012), cũng chỉ giữ 4 chữ số cuối. Cách này không ẩn được số ngắn hơn (như mã OTP, số điện thoại ngắt nhóm dưới 12 chữ số, số tiền, số dư), chữ số kiểu khác (ví dụ chữ số Ả Rập-Ấn Độ), họ tên, địa chỉ hay nội dung chuyển khoản. Tên ngân hàng và địa chỉ người gửi giữ nguyên. Vì vậy hãy tự xoá họ tên, số tài khoản/thẻ, số dư, mã OTP và địa chỉ trước khi gửi. Nội dung quá dài được cắt gọn (app báo cho bạn biết) để mở được ứng dụng Mail.
  • Bấm "Xem lại" để thấy nguyên văn thư: địa chỉ nhận, tiêu đề và nội dung đã làm mờ. Chỉ khi bạn bấm "Mở ứng dụng Mail", app mới mở ứng dụng Mail của máy với thư soạn sẵn; bạn vẫn sửa được và tự bấm gửi trong Mail. App không tự gửi, không gửi nền và không gửi qua máy chủ nào của HenryExpense.
  • Thư được gửi từ tài khoản email trong ứng dụng Mail của bạn, nên nhà phát triển sẽ thấy địa chỉ email (và tên hiển thị, nếu có) mà bạn dùng để gửi, cùng nội dung thư. Thư đi qua nhà cung cấp email của bạn và của nhà phát triển như mọi email khác, và bản đã gửi nằm trong hộp thư Đã gửi của bạn. Nhà phát triển chỉ dùng thư mẫu để thêm hoặc sửa cách đọc email của ngân hàng đó; bạn có thể trả lời cùng thư để yêu cầu xoá.
  • Ở bước xem lại luôn có nút "Chia sẻ nội dung": thư dài bị cắt bớt khi mở trong Mail (đường dẫn thư có giới hạn độ dài), nên nút này chuyển bản đầy đủ (đã làm mờ) cho ứng dụng bạn chọn trong bảng chia sẻ của hệ điều hành; ứng dụng đó xử lý theo chính sách riêng của nó. Nếu máy không mở được ứng dụng Mail, app hiện thêm địa chỉ nhận để bạn tự gửi.
  • Nội dung form chỉ nằm trong bộ nhớ khi form đang mở, mất khi bạn đóng form; app không lưu, không ghi log và không đưa nội dung này vào tệp sao lưu.

Sao lưu và xuất dữ liệu

  • Sao lưu JSON, xuất CSV và xuất Excel tạo ra tệp do bạn tự lưu hoặc chia sẻ. App không tự gửi các tệp này đi đâu.
  • Tệp sao lưu chứa dữ liệu thu chi (gồm cả giao dịch tạo từ thư Gmail cùng ghi chú của chúng) và phần lớn cài đặt, gồm cấu hình nguồn email Gmail do bạn tạo (địa chỉ người gửi, quy tắc ví, bật/tắt tự đồng bộ; mốc đồng bộ của từng nguồn được để trống). Tệp sao lưu cũng chứa tài sản, các lần mua và lần bán của tài sản (số lượng, giá, phí, ghi chú), và các lần định giá (kể cả nguồn đơn giá và liên kết nguồn của giá tự động hoặc do AI tra), cùng 4 số cuối tài khoản/thẻ bạn gắn cho ví ngân hàng/thẻ tín dụng (tệp xuất CSV/Excel thì không có 4 số này). Tệp sao lưu cũng chứa bảng ghi nhớ danh mục (ghi chú đã rút gọn, danh mục đã chọn, số lần, nguồn ghi nhớ, kể cả dòng học từ thư Gmail) và công tắc "Nhớ lựa chọn danh mục"; tệp chữ ghi-nho-danh-muc.md thì không nằm trong tệp sao lưu, app tạo lại nó từ bảng sau khi khôi phục. Tệp xuất CSV/Excel không chứa ghi nhớ danh mục. Tệp xuất CSV/Excel cũng chứa ghi chú của mọi giao dịch (gồm giao dịch mua/bán tài sản, ghi chú thường có tên tài sản), nhưng không chứa danh sách tài sản hay các lần mua, lần bán của tài sản. Ngoài ngày, loại, số tiền, danh mục, ví, ghi chú, người và tiền tệ, tệp xuất CSV/Excel còn chứa loại ví, danh mục con, giờ giao dịch, chuyến đi/sự kiện, đánh dấu "Không tính báo cáo" và các dòng điều chỉnh số dư. Tệp xuất CSV/Excel không chứa nguồn giao dịch (ví dụ giao dịch tạo từ thư Gmail), mã tham chiếu giao dịch của Gmail/ngân hàng, mã ngân hàng hay 4 số cuối tài khoản/thẻ. Hãy giữ tệp ở nơi an toàn, vì tệp không được mã hoá.
  • Tệp sao lưu không chứa API key AI, token Gmail, Client ID Google đã dán, thông tin khoá app, cấu hình nhà cung cấp AI, cài đặt tự động cập nhật tỷ giá (gồm đồng ý), cài đặt tự cập nhật giá tài sản và tra giá cổ phiếu, tiền mã hoá bằng AI (gồm đồng ý, phiên bản đồng ý và hàng chờ xác nhận giá), dữ liệu mục "Tiền mã hoá (tham khảo)" ở màn Quy đổi (giá đối chứng, giá AI, hàng chờ), cài đặt và bộ nhớ tạm của phân loại danh mục bằng AI, và không chứa dữ liệu Gmail theo thiết bị: hàng chờ duyệt (tiêu đề, đoạn trích thư), danh sách thư đã bỏ qua, kết quả đồng bộ gần nhất, mốc đồng bộ và địa chỉ Gmail đã kết nối.
  • Tệp sao lưu do phiên bản cũ của app tạo có thể còn chứa hàng chờ duyệt Gmail và địa chỉ Gmail đã kết nối. Khi khôi phục, app bỏ qua các mục này (không đưa vào máy), nhưng chúng vẫn nằm trong tệp cũ; hãy xoá tệp cũ nếu không cần nữa, kể cả các tệp sao lưu tự động trong danh sách sao lưu của app.
  • Sao lưu tự động (nếu bật) ghi tệp vào bộ nhớ của app trên máy bạn.
  • Trước khi khôi phục từ một tệp, và trước khi "Xoá dữ liệu ứng dụng", app tự lưu một bản sao lưu an toàn (tên bắt đầu henryexpense-truoc-khoi-phuc) vào bộ nhớ của app để bạn quay lại được. Bản này chứa toàn bộ dữ liệu thu chi tại thời điểm đó (gồm cả ghi chú của giao dịch tạo từ thư Gmail), không được mã hoá và vẫn còn trên máy sau khi đặt lại; trên iOS nó có thể nằm trong bản sao lưu iCloud/máy tính của chính bạn. Bạn xoá nó trong màn Dữ liệu, mục Dọn dữ liệu cũ (danh sách Các bản sao lưu hiện có) khi không cần nữa.

Quyền của bạn và xoá dữ liệu

  • Bạn sở hữu dữ liệu của mình và có thể xem, sửa, xuất bất cứ lúc nào.
  • Xoá từng giao dịch, ví hay danh mục ngay trong app. Giao dịch bị xoá nằm trong Thùng rác 30 ngày rồi bị xoá hẳn, hoặc bạn tự xoá hẳn sớm hơn.
  • "Xoá dữ liệu ứng dụng" (Cài đặt chung, mục "Cài đặt lại ứng dụng" cuối màn hình; cần xác thực bằng phương thức khoá app đang dùng) đưa app về trạng thái mới cài: xoá mọi giao dịch, ví, danh mục, ngân sách và cài đặt, ngắt kết nối và xoá dữ liệu Gmail như "Xoá toàn bộ dữ liệu Gmail", xoá API key AI, xoá bộ nhớ phân loại (ghi nhớ danh mục, kể cả dòng học từ thư Gmail, và bộ nhớ tạm gợi ý AI) cùng tệp ghi-nho-danh-muc.md, huỷ thông báo đã lên lịch và xoá các tệp sao lưu trong bộ nhớ của app (kể cả bản xuất tay lưu ở đó). Cài đặt khoá app (PIN hoặc sinh trắc học) được giữ. Ngoại lệ: bản sao lưu an toàn vừa tạo (xem mục Sao lưu và xuất dữ liệu) được giữ lại, gồm toàn bộ dữ liệu cũ chưa mã hoá; hãy xoá nó nếu bạn muốn dữ liệu biến mất hẳn. Tệp bạn đã chia sẻ ra ngoài và bản sao lưu của hệ điều hành không bị xoá.
  • Muốn xoá toàn bộ, hãy xoá app khỏi thiết bị. Dữ liệu SQLite của app sẽ bị xoá cùng app. Vì iOS có thể giữ lại mục Keychain sau khi xoá app, hãy dùng "Xoá toàn bộ dữ liệu Gmail" (hoặc ít nhất Ngắt kết nối) và xoá nhà cung cấp AI (cùng API key) trong app trước khi xoá app; quyền Gmail cũng có thể thu hồi tại https://myaccount.google.com/permissions. Cách xoá riêng dữ liệu Gmail xem mục Lưu giữ và xoá dữ liệu Gmail.
  • Bản sao lưu bạn đã tạo hoặc đã gửi cho dịch vụ khác nằm ngoài tầm kiểm soát của app; hãy xoá chúng ở nơi bạn lưu.
  • HenryExpense không thu thập dữ liệu về bạn nên không có dữ liệu nào để chúng tôi xoá hộ trên máy chủ. Ngoại lệ là email mẫu bạn tự gửi cho nhà phát triển (xem mục Gửi email mẫu cho nhà phát triển): thư đó nằm trong hộp thư của nhà phát triển, và bạn có thể yêu cầu xoá bằng cách trả lời cùng thư.

Trẻ em

HenryExpense không hướng tới trẻ em và không cố ý thu thập thông tin của trẻ em. App không thu thập dữ liệu cá nhân của bất kỳ ai; chỉ email bạn tự gửi cho nhà phát triển mới đến được nhà phát triển.

Thay đổi chính sách

Khi tính năng hoặc cách xử lý dữ liệu thay đổi, chính sách này sẽ được cập nhật và ngày "Cập nhật" ở đầu trang đổi theo. Bản mới nhất luôn có trong app (Khác -> Chính sách quyền riêng tư) và trên trang chính sách công khai được liên kết từ trang ứng dụng trên App Store và Google Play.

Liên hệ

Nếu có câu hỏi về quyền riêng tư hoặc muốn yêu cầu hỗ trợ xoá dữ liệu, hãy liên hệ nhà phát triển HenryExpense qua địa chỉ hỗ trợ ghi trên trang ứng dụng trên App Store/Google Play.

Liên hệ về quyền riêng tư

Câu hỏi hoặc yêu cầu hỗ trợ xoá dữ liệu, gửi email cho nhà phát triển:

dannymai2012@gmail.com

Ngân hàng và ví điện tử quen thuộc với HenryExpense