Skip to content
Dakila

Every screen walked by hand. Every document opened and read.

No statutory rate enters this product on somebody’s memory, and no government module is called ready until a person has opened every document it generates and read it page by page. Two reviews so far, 14 findings between them, all 14 on this page with what each one was and what we did about it. Two more are still open, and they are here as well.

No statutory number enters the product on someone’s memory

Every rate, ceiling, factor and bracket in Dakila carries a verification state. A value is either traced to a primary government issuance — the circular, the memorandum, the law — or it is marked unverified and cannot be used in a computation that reaches an employee.

Contribution rates change, and an agency running a stale rate discovers it during a COA audit rather than during a release.

Verified against primary sources

GSIS
9% / 12%
Personal and government share. No salary ceiling.
PhilHealth
5%
Shared premium.
Pag-IBIG
₱200 / ₱200
Flat, employee and employer.
PERA
₱2,000
Standard allowance line.
Leave monetisation factor
×0.0481927
CSC and DBM cited inline on the screen.

Deliberately not published

None of these appears as a figure anywhere on this site, and the product ships no salary grade and step matrix:

  • SSL salary grade and step matrix
  • TRAIN per-period withholding tables
  • PBB tier values and PRIME-HRM maturity scoring

Your agency’s own salary schedule loads at onboarding from the issuance that governs you.

A written record of everywhere we differ

Government HR requirements and general-purpose HR software never line up perfectly. We keep a register of every place they diverge: what the requirement says, what the software does by default, and the ruling we made — configure it, extend it, handle it in the interface, or leave it out and say so.

The register is why the module pages on this site can tell you what is not built. The alternative — discovering the gap during implementation — is how HRIS projects go wrong.

An automated test cannot see a glyph

A test can confirm a file was produced. It will happily pass a certificate that reads “This is to certify that Gavino, , has been employed” and a Personal Data Sheet that breaks a job title across a line in the middle of a word. Both of those are real, both are in the register below, and both were caught by a person opening the file and reading it.

A form that reaches CSC with a dangling comma in it is a form that comes back.

Walked, not sampled
Screen by screen on desktop and on a phone, in every role, including roles that should be refused.
Denials tested on purpose
We sign in with no rights and try each restricted administration screen, recording any control still reachable. A refusal with a live button on it counts as a finding.
Findings written down
Each one recorded with its severity and its fix, then published.

Both reviews, in full

14 findings fixed, two still open. Here they all are.

two that blocked someone, nine wrong or confusing, and three a matter of taste. This is the whole list rather than a selection from it, and it includes the one that was a repeat of a defect we had already fixed once, and the two that our own automated reconciliation could never have caught.

You know no software is perfect. What you are working out is whether we looked, whether we looked properly, and whether we will say so when we find something.

The severity scale, so the labels mean something

S1
Blocks a real user. They cannot complete the task at all.
S2
Friction, or wrong. They can get through, but it is confusing, misleading, or what they are shown is incorrect.
S3
Taste. It works and it is correct, but it reads or looks poorly.

The screens

Reviewed 26 July 2026 · six findings

The government modules, walked on desktop and on a phone, in every role.

  1. 01S2

    Recruitment, onboarding and separations, seen by an employee with no rights

    What we found
    The refusal message appeared, and above it sat a live New button and a Refresh button. On recruitment there was also a working link to the applicant list. The server refused every one of those actions correctly, so nothing could be done with them, but the screen was advertising doors that were not there.
    Fixed
    Those controls now render only when the screen is not a refusal.

    This was a regression. The same class of defect had been found and fixed once already, and it came back on three more screens. It is in this register rather than quietly dropped from it because a sweep that only ever finds new problems is not being run often enough.

  2. 02S2

    Payroll, seen by an employee with no rights

    What we found
    A link to the Salary Register was kept beside the payroll refusal for every account, including ordinary employees, for whom it led to a second refusal. It belonged there for the HR accounts that can actually reach that report, and nowhere else.
    Fixed
    The link is gated to the same roles the navigation uses. The server remains the authority either way.
  3. 03S2

    Personal Data Sheet, on screen

    What we found
    An employee record with no height or weight recorded displayed both as 0, while the printed CS Form 212 left both blank. The same record told two different stories about the same person depending on where you read it.
    Fixed
    An unset measurement and a zero now collapse to the same dash the printed form shows.
  4. 04S2

    Executive dashboard

    What we found
    The browser console logged a markup error on every single load of the dashboard. Nothing was visibly broken, and all eight of the automated checks on that screen passed. But an evaluator from your ICT office opening developer tools on our flagship screen would have seen a red error sitting there.
    Fixed
    The offending wrapper was corrected, and a check now fails if that screen logs an error again.
  5. 05S2

    Certificate prints

    What we found
    For any employee with no designation recorded, three of the four document prints produced “This is to certify that Gavino, , has been employed”. The fields themselves were guarded against being empty. The punctuation around them was not.
    Fixed
    The phrase is now assembled once, and its commas are printed only when there is something between them.

    Found because a person opened the files and read them. Three of the four prints had never been read by a human before that pass. The Service Record was the one that was already right, and its correct handling became the model for the other three.

  6. 06S3

    Personal Data Sheet print, CS Form 212

    What we found
    Words broke in the middle across a line on a signed CSC form. “Administrati / ve Officer V”. “BS Public Administrati / on”. “DEGREE/COURS / E”. A form that reaches CSC looking like that is a form that comes back.
    Fixed
    The four child-record tables on the form size their columns to their content instead of splitting into eight equal ones.

    There is no automated test behind this fix. Catching a mid-word break automatically means rendering the PDF and reading the pixels, which our checks deliberately do not do. It was verified the only way it can be: by re-rendering the form and reading all four pages.

The files

Reviewed 2 August 2026 · eight findings

The generated documents themselves — the print formats and the tax exports — produced on the demo bureau and read the way a government HR officer reads them.

  1. 01S1

    Every published tax figure, across two BIR filings and a payslip

    What we found
    The withholding was half. A monthly payslip was taxed against the table for a half-month period, while every other line on it — basic pay, PERA, all three premiums — was a full month. The annual return filed ₱696,075.78 where ₱1,392,197.10 was due, 49.998% short, and one employee's slip withheld ₱10,387.45 against the table's ₱20,775.05. Ten of the fifty-two sat in the zero bracket and were unaffected either way.
    Fixed
    The pack selects the monthly table, because the revenue regulation prints one table per payroll period and says to use the one you actually pay. Every affected slip was re-cut and both filings regenerated from them.

    This is the finding that justifies the whole practice. This site's own build recomputes the reconciliation between the two filings on every deploy, and it passed throughout — because the two files agreed with each other exactly, and were both wrong. Two derived files checked against each other can only ever prove they came from the same source, never that the source was right.

  2. 02S2

    The annual filings, for every employee

    What we found
    PERA was taxed. It is a non-taxable allowance, but the step that splits a year's pay into taxable and non-taxable had no non-taxable set at all, so PERA fell through to the taxable side. The certificate's taxable figure then disagreed with the base its own withholding had been computed on.
    Fixed
    PERA is classified non-taxable and prints in its own box on the certificate, where a government reader looks for it.
  3. 03S1

    The payslip PDF

    What we found
    It was the stock, generic payroll layout: three pages, with Cost to Company, Income from Other Sources, Standard Tax Exemption Amount and Future Income Tax all printing ₱0.00, half of page two blank, no PERA line, and no split between what the employee pays and what the agency remits.
    Fixed
    A government payslip format, one page, now the default for every path that prints a slip.

    This is the document an HR officer judges fastest, because it either speaks government or it does not. Until it was fixed the payslip was the one exhibit kept off this site.

  4. 04S2

    BIR Form 2316, item 3

    What we found
    The employee's own TIN box printed blank. A certificate handed to a bank or to a new employer with that box empty gets handed back.
    Fixed
    The certificate reads the TIN from the employee's Personal Data Sheet, and the subject of the published certificate now has one. A check fails if he ever does not.

    The first fix went to the code that prints the box, and it was already live when this was reported. The cause was the record, not the printer: the subject had no sheet to read a TIN from — a state a real agency never reaches, because the sheet is required at appointment. Fixing the wrong layer first is why this one carries its history.

  5. 05S2

    CS Form 212, Section V

    What we found
    A work-experience row printed its FROM date as 07-01-2008 and its TO date as 2013-06-30 — two different formats side by side in one row, on a form a CSC reviewer reads column against column.
    Fixed
    Both columns are reformatted as the form is printed.

    The first fix shipped and changed nothing at all. The cause written down at the time was wrong: the TO column is not a date field, because it has to be able to hold a blank or the word PRESENT for a post someone still holds. Writing a cause into a findings file does not make it the cause — the re-render is what checks.

  6. 06S3

    CS Form 212, Section V

    What we found
    The monthly salary column broke between the peso sign and the figure, printing ₱ on one line and 28,000.00 on the next.
    Fixed
    That column no longer wraps between the two.
  7. 07S2

    The Service Record print

    What we found
    The office printed as “Collection Division - BRA”, carrying a suffix the software appends to a department name rather than the office's actual name, and the date of original appointment printed in raw numeric form beside nothing else in that format.
    Fixed
    The suffix is stripped and the date is formatted. The document now carries one caveat stamp rather than two.

    The finding as reported was that Present Position and Office both printed blank. That did not reproduce: the captures showing it predated a data refresh. What was actually wrong was smaller, and real, and would have gone unfound if the headline had been taken at face value.

  8. 08S3

    Notifications and the approvals queue

    What we found
    An approval by Rogelio Reyes carried an avatar circle stamped H. Other rows showed a question mark.
    Fixed
    The initial comes from the name in the message rather than from the account that sent it.

    The H was the first letter of the sending account's address, not of anyone's name. The question marks were employees with no account at all.

Still open

From the same reviews, not fixed, and listed here because a page that only shows what we closed is telling you half of it.

  • The Certificate of Employment

    It prints “for For a GSIS multi-purpose loan application” — the template puts the word for in front of a purpose that already begins with For. Cosmetic, on a document this site does not publish, and not yet fixed.

  • Two checks on the statutory pack

    They are written and have not been run. They need a development bench, and the demo bureau is not a place to run them.

Every one of these was found by hand. Opening the files and reading them, and signing in with no rights and trying every screen that should refuse. The automated checks passed throughout — including, on the two tax findings, a check this site runs on every deploy that proves the two filings agree with each other. They did agree. They were both wrong. That is not an argument against automated checks, which catch the things they are pointed at every time. It is the reason we do not stop at them before telling you a government form is ready.

On having no agency to name yet

We have no completed government contracts, and we are not going to invent any. A fabricated case study on a page an auditor might read is a worse problem than an honest gap, and you would find out either way.

A logo wall would tell you that somebody else signed. It would not tell you whether anybody read the printed CS Form 212 before it went out.

Ask us the hard version

If you are evaluating Dakila, the useful questions are the uncomfortable ones. Which statutory values are still unverified. What the software cannot do that your office needs. What breaks if your ICT policy forbids something we assumed. What the next review turns up.

We will answer those in writing.