Distribute and view monthly payslips inside DooTask. Reuses DooTask accounts; all data is self-hosted inside the plugin container (SQLite). All amounts are stored as integer cents and only divided by 100 for display, so totals never drift.
- My payslips: each employee sees only their own issued payslips, sorted by month, expandable to the full earning/deduction breakdown and net pay.
- Read tracking: opening a payslip records that it has been viewed, so administrators can see who has and hasn't read theirs.
- Sign-off with signature: confirm receipt by drawing a handwritten signature (touch/mouse) and leaving optional feedback. A re-issued payslip resets the sign-off so it must be confirmed again.
- View password: when an administrator sets a global view password, amounts are hidden until the employee enters it (verified server-side, not just masked in the UI).
- Watermark: payslip details carry a tiled "confidential · name · date" watermark for screenshot traceability.
- Export: download a single payslip as a watermarked PDF, send it to the printer, or generate a salary certificate PDF for yourself.
- Notifications: receive a DooTask bot direct message when a payslip is issued, when a note is added, or when an administrator sends a reminder.
- Issue a payslip: record gross total, deduction total, optional line items (earnings/deductions) and a note for a chosen employee and month. Re-issuing the same employee/month overwrites the previous version.
- Salary item templates: create reusable sets of line items (with optional default amounts) and apply them to the issue form or batch import in one click.
- Status workflow: every payslip moves through draft → issued → revoked, with re-issue and "back to draft" actions. Employees only ever see issued payslips.
- Scheduled issue: pick a future date/time and the payslip is issued automatically (a built-in per-minute scheduler promotes it and notifies the employee). Issue-now or cancel at any time.
- Batch issue from Excel/CSV: upload a spreadsheet (download a ready-made template first), auto-match employees by user ID / email / name, preview and fix each row inline, then save as draft, issue, or schedule (up to 500 rows per batch). A batch list shows every batch with live per-status counts and sign-off state.
- Notifications & reminders: payslips auto-notify on issue; the notification message is template-editable with placeholders. Add a note with optional notification, send reminders, and work an "unviewed" list with one-click batch reminders.
- View password management: set, reset, or disable the global view password (stored only as a salted hash).
- Stats dashboard: per-month KPIs — headcount, payslip count, gross / deduction / net totals, average net, month-over-month deltas, and a line-item distribution breakdown.
- Cost alerts: configure a monthly total-cost cap and a per-person net cap; breaches surface as a banner, inside the dashboard, and as an alert right after issuing.
- Exports (watermarked where applicable): single or whole-month payslip PDF + print, bank disbursement CSV, payroll voucher PDF, and salary certificate PDF for any employee.
- Permissions: administrators are the users chosen in the "Administrator" field at install time. Admins manage every employee's payslips; regular employees only see their own. Leave the field empty to treat everyone as an admin (handy for trials).
- Stack: TanStack Start single-image full-stack app (pages +
src/routes/api/**backend in the same process, port 3000), data in container-local SQLite (volumepayslip-data:/app/data). - DooTask integration: uses the current login identity; employees are picked via the DooTask user selector; the server resolves nicknames and delivers notifications through a dedicated "Payslip bot".
- Money: stored and computed as integer cents end-to-end; only the display/CSV layer converts to yuan.
Install from the DooTask App Store. During installation, choose the payslip administrators in the "Administrator" field (leave empty to treat everyone as admin). Once installed, open Payslip from the application menu — you should see your name and role, confirming the handshake succeeded.
- The bank disbursement CSV outputs employee name/ID, net amount and month; bank account number and bank name are empty placeholder columns (not collected by this plugin) and must be filled in before real disbursement.
- Voucher/certificate company header comes from the dashboard settings (Company name); stamps and signature lines are visual placeholders, not real e-seals.
- The view password is global (one password for all employees), session-cached after unlock, and stored only as a hash — a forgotten password can only be reset.
- Notifications and scheduled issuing depend on the Payslip bot, which is created the first time an administrator triggers a notification; if it cannot be created/reached, payslips are still issued and the failure is only logged.