Back to projects

Income-Tax Review (Desktop)

Vetor

A desktop app for accounting offices that reads the raw income-tax declaration file, an undocumented fixed-width format, and lists the key figures per client. Published as a working core, not a finished product.

TauriRustReactTypeScriptSQLiteNestJSPostgreSQLPrismaJWT

Some details omitted under NDA

Vetor

The problem it solved

An accounting office that has to double-check its clients' income-tax returns opens each one inside the government tax program, one at a time, just to read half a dozen figures.

The file that program writes holds those figures, but in an undocumented fixed-width format: each record is 1,203 characters and every field sits at an exact position. Reading that reliably is the hard part, and it is what this project solves.

What the app does

Reads the raw declaration file

Parses the file produced by the Brazilian income-tax program and pulls out nine fields per return.

Review by taxpayer and tax year

Lists returns per taxpayer and year, with taxable, exempt and separately taxed income.

Everything stays on the machine

Data sits in a local database on the computer itself. No client data leaves for a server.

Licence tied to the machines

One licence covers up to five registered computers, with the count held inside a database transaction.

A desktop application

A native program installed on the machine, not a browser tab.

Sign in
01

Sign in

Email and password sign-in, with the licence tied to the machine.

Taxpayer search
02

Taxpayer search

Taxpayer list filtered by tax year, name and taxpayer number.

Return detail
03

Return detail

Income (taxable, exempt and exclusively-taxed) and payments/deductions per tax year.

How it turned out, honestly

  • The core works: the file reader was verified against a real declaration and extracts the right figures.
  • The licensing is serious, with three independent layers of checking and a hard five-machine cap per licence.
  • What is missing before it can be installed in an office: today the reading runs once at startup, against a path fixed at build time. There is no import button and no file picker, so on another computer nothing is loaded.
  • And the application points at a local server in three places, so a distributed build would not reach a hosted licence server.
  • It is also fair to say: three table columns (Grupo, Ativo and Status Financeiro) are demonstration data generated on screen, and the licence amount is fixed in code.
  • We publish this as a working core, not a finished product. The hard part, reading an undocumented format and binding a licence to a machine, is already done.

In numbers

9

figures read per return

5

machines per licence

1203

characters per record in the file

For technical visitors

The rest of this page is written for whoever decides the purchase. This block is for whoever has to maintain the project.

  • 683 lines of Rust across 5 modules, 4 Tauri commands, 9 extracted fields per return and 4 React routes. The licence backend has 10 endpoints, 4 Prisma models and 12 unit test cases.
  • Byte-offset parsing of an undocumented government fixed-width format, with 1,203-character records.
  • Licensing in three layers: an RS256 signature verified in native Rust against a public key compiled into the binary, a server-side validity check, and a MAC-address device registry with a hard five-machine cap whose counter is maintained in a database transaction.
  • Known limitation: the parser runs once at startup against a path fixed at build time. There is no file picker and no Tauri import command.
  • Known limitation: the app calls http://localhost:3333 in three hardcoded places, so a distributed build cannot reach a hosted licence server.
  • Known limitation: the Grupo, Ativo and Status Financeiro columns are generated client-side as a demonstration, and the licence amount is hardcoded.

Ready to build your project?

Let's turn your idea into a tailored digital solution.

Get in touch