Skip to content

Fix bounty mismatch alert on invoice review#2

Open
d4mr wants to merge 16 commits into
mainfrom
fix/bounty-mismatch-alert
Open

Fix bounty mismatch alert on invoice review#2
d4mr wants to merge 16 commits into
mainfrom
fix/bounty-mismatch-alert

Conversation

@d4mr

@d4mr d4mr commented Feb 11, 2026

Copy link
Copy Markdown
Owner

Fixes the bounty mismatch alert that was incorrectly showing on invoices where the bounty matched the line item amount.

d4mr and others added 12 commits January 29, 2026 19:12
To manually handle the case when a company worker moves to the US.

---------

Signed-off-by: Ershad Kunnakkadan <ershad92@gmail.com>
# Problem

A user was unable to log in due to the following validation error:
"Validation failed: Preferred name is too long (maximum is 50
characters)"

<img width="643" height="346" alt="image"
src="https://github.com/user-attachments/assets/aa9b0d1d-45cb-4c55-8023-0fa2909c937c"
/>

# Solution
The only way a user can end up with a `preferred_name` longer than 50
characters is through the CSV investor import.

Added `preferred_name` length validation to the CSV investor import
process to ensure it complies with the 50-character limit and prevents
invalid data from being created.
FIX ISSUE - #1531

Root Cause: Test logged in to /login, waited for redirect, then
navigated again to /settings/administrator/roles. The redirect wait
sometimes timed out on slow CI runners.

Solution: Pass the target URL directly to login() function, navigating
straight to the roles page in one step instead of two.

<img width="1456" height="56" alt="image"
src="https://github.com/user-attachments/assets/c4208bde-8f76-4f87-96c9-f748458aa5fa"
/>

AI Disclosure - I have used Opus 4.5 to understand issue.

---------

Co-authored-by: Sahil Lavingia <sahil.lavingia@gmail.com>
Co-authored-by: Nyoman Jyotisa <jyotisa1616@gmail.com>
Add PR template, mirroring the existing Gumroad PR template to keep
contribution workflows consistent across repositories
Resolves antiwork/flexile#1582

# Problem
Some companies don't have their EIN/TIN configured in Flexile. When
these companies try to issue dividends or make contractor payments, we
cannot generate the required tax forms, causing distribution failures.

# Solution
Add validation to prevent companies from issuing dividends or contractor
payments without a configured EIN/TIN.

# After
## Invoice
<img width="1470" height="799" alt="image"
src="https://github.com/user-attachments/assets/33c185a7-1935-45ef-a5a3-f1aa36b70470"
/>


## Dividend
<img width="1470" height="803" alt="image"
src="https://github.com/user-attachments/assets/98a7f833-657a-4cbd-b398-3bc74c8c7aac"
/>


# AI disclosure
Claude Sonnet 4.5 for code generations. All code self reviewed.

---------

Co-authored-by: Ershad Kunnakkadan <ershad92@gmail.com>
Issue https://github.com/antiwork/accounting/issues/77

# Description
The IRS sent a CP 2100A notice indicating TIN/name mismatches for
certain users on 1099-DIV. We need to:
1. Flag affected users for TIN re-verification
2. Notify them via email to update their tax information
3. Prevent them from receiving payments until they re-verify

# Screenshots
## Tax Setting Page
<img width="1470" height="791" alt="image"
src="https://github.com/user-attachments/assets/2db83690-ea0a-4a02-aaae-424ed6406e51"
/>

## Email
<img width="756" height="619" alt="image"
src="https://github.com/user-attachments/assets/066065c2-2636-4f39-ba1e-9ad825f6e46b"
/>

## One Time Script execution
### Dry run
<img width="1131" height="470" alt="image"
src="https://github.com/user-attachments/assets/c2893e49-99f6-470a-a10b-9a19dbea9dd1"
/>

### Live
<img width="1136" height="588" alt="image"
src="https://github.com/user-attachments/assets/1e646a98-be85-4e12-89f6-e26fbf3d34d7"
/>

# AI disclosure
Claude Sonnet 4.5 used for code generation. All code self reviewed.
Fixes antiwork/flexile#1604

# Description

<!-- Briefly describe the problem and your solution -->

## Problem
The invoices list page loads slowly for companies with many invoices
(e.g. 10k+ paid). The query fetches all invoices regardless of the
active tab filter, so admins who typically only need "Awaiting approval"
invoices wait for the entire dataset.

The invoice detail page has a query waterfall: the parent component
fires `invoices.get` and `expenseCategories.list` in one batch, then
suspends. Only after that resolves does the child `StatusDetails`
component mount and fire `consolidatedInvoices.last` as a second HTTP
request, doubling the perceived load time


## Solution

### List page
Pass the active tab filter to the server as a `status` parameter on
`invoices.list`. The column filter state is lifted from TanStack Table's
`initialState` into controlled React state so that filter changes also
update the query input. A `displayNameToDbStatuses` mapping (derived
from the existing `statusNames` to avoid sync risk) translates UI
display names like "Awaiting approval" into the corresponding database
enum values `(["received", "approved"])`.

### Detail page
Move the `consolidatedInvoices.last` query from the child
`StatusDetails` component into the parent `InvoicePage` component. All
three `useSuspenseQuery` calls now execute in the same component,
allowing tRPC's `httpBatchLink` to batch them into a single HTTP request
instead of two sequential ones. `StatusDetails` receives the data as a
prop instead.



---

# Before/After

## List page
### Before (with 10k paid invoice records)


https://github.com/user-attachments/assets/0637edfc-200b-40cc-b54b-eb211ad7548b

### After (with 10k paid invoice records)


https://github.com/user-attachments/assets/01ff9ec8-6623-4d69-afc1-f006ebd803be

## Detail page
### Before (not reproduced on local)


https://github.com/user-attachments/assets/f41f42f2-e296-46c2-9af1-b0c85d20aa33



### After


https://github.com/user-attachments/assets/cc3afcb8-a439-4525-bf57-689443689684




---


# AI Disclosure
 Claude Opus 4.6 for code generation, all code self reviewed
@d4mr d4mr added the $500 Bounty: $500 label Feb 11, 2026
d4mr and others added 4 commits February 11, 2026 19:10
## Summary
- Fixed PR details not fetching when editing an existing invoice line
item URL
- Updated `shouldFetch` condition to compare stored URL with current
description instead of just checking if stored data exists
- Updated `displayPR` fallback to only use stored data when it matches
the current description

Closes #1576
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

$500 Bounty: $500

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants