Playwright Tests / test (push) Canceled after 0s
- Added a new SQL script to address the "String or binary data would be truncated" error in mfr sync by widening the Note fields in service objects and companies to NVARCHAR(MAX). - Updated the table types and associated stored procedures to accommodate the changes, ensuring compatibility with existing data. - Queued a re-sync for previously rejected rows due to truncation issues. - Created application logins for fuchs_fds and fuchs_web with placeholder passwords for initial setup. - Introduced functions for invoice backdating and invoice date retrieval to streamline invoice processing. - Developed a password generation function with customizable parameters for length and character types. - Added a random number generation function to support password creation.
64 lines
3.7 KiB
Markdown
64 lines
3.7 KiB
Markdown
---
|
|
status: Accepted
|
|
date: 2026-09-30
|
|
applyTo:
|
|
- "Fuchs_Database/dbo/Functions/fds__fn_invoiceDate.sql"
|
|
- "Fuchs_Database/dbo/Functions/fds__r_getBalanceThisMonth.sql"
|
|
- "Fuchs_Database/dbo/Stored Procedures/fds__getDatevExports.sql"
|
|
- "Fuchs_Database/dbo/Stored Procedures/fds__getInvoices_list*.sql"
|
|
- "Fuchs_Database/dbo/Stored Procedures/fds__getFDSDocument.sql"
|
|
- "Fuchs_Database/dbo/Stored Procedures/fds__getReportDocument.sql"
|
|
- "Fuchs_Database/dbo/Stored Procedures/fds__getRequest_details.sql"
|
|
- "Fuchs_Database/dbo/Stored Procedures/fds__r_*.sql"
|
|
- "Fuchs_Database/dbo/Stored Procedures/fds__*Reminder*.sql"
|
|
- "Fuchs/code/InvoiceDates.cs"
|
|
- "Fuchs/Services/ReminderService.cs"
|
|
- "Fuchs/Services/*DraftEditService.cs"
|
|
supersededBy: ""
|
|
---
|
|
|
|
# 0035 — The invoice date is `DateFinalized` everywhere
|
|
|
|
## Context
|
|
|
|
ADR 0032 made `DateFinalized` the invoice date for the PDF, the e-invoice (BT-2) and the number
|
|
sequence, and introduced backdating (which only moves `DateFinalized`). Everything else — invoice
|
|
lists, revenue reports and charts, the DATEV export, document lookups, the request details — still
|
|
dated and grouped invoices by `DateCreated`, the moment the *draft* was created. A backdated invoice
|
|
therefore showed September on the document and October in every list, report and in DATEV, and any
|
|
invoice drafted in one month and finalised in the next had the same split.
|
|
|
|
## Decision
|
|
|
|
- **One invoice date, everywhere:** the German calendar day of `DateFinalized`, falling back to
|
|
`DateCreated` only for drafts. Both columns are stored in UTC.
|
|
- **One implementation per side:** `[dbo].[fds__fn_invoiceDate](DateFinalized, DateCreated)` in SQL and
|
|
`InvoiceDates.IssueDate` in C#. No proc converts or picks the date itself.
|
|
- Applies to: the DATEV export (period filter, `Belegdatum`, `Belegfeld 2`), the invoice lists
|
|
(`fds__getInvoices_list`, `list2`, `list_vario`: period filter, `Belegdatum`, `DateOfCreation`,
|
|
ordering, overdue fallback), the revenue reports (`fds__r_*`: year/month filters and grouping,
|
|
`fds__r_getBalanceThisMonth`), document lookups (`fds__getFDSDocument`, `fds__getReportDocument`),
|
|
`fds__getRequest_details` (new column `InvoiceDate`, shown in the request's invoice list), and the
|
|
invoice date shown in reminders (`fds__prepReminder`, `fds__createReminder`, `fds__getReminder`).
|
|
- **Reminders use the same rule for their own date:** the reminder PDF's date is the reminder's
|
|
`DateFinalized` (German day), draft: `DateCreated`.
|
|
- **No transition safeguard.** The switch applies to all periods, past and future; already exported
|
|
DATEV periods are not reconciled (confirmed by the business owner, 2026-09-30).
|
|
- `DateCreated` keeps its meaning — the creation timestamp of the row — and is still returned where
|
|
callers read it as such. Draft previews stamp it with `DateTime.UtcNow` to match the stored column.
|
|
|
|
## Consequences
|
|
|
|
- Reports and exports for a past period can differ from what they showed before this change: an
|
|
invoice drafted in month M and finalised in M+1 now counts in M+1.
|
|
- Filters on the invoice date are not SARGable (they were not before either: `CAST(DateCreated as date)`).
|
|
Acceptable at the current table size; an indexed computed column is the follow-up if it matters.
|
|
- Any new list, report or export that shows or groups invoices by date must use
|
|
`fds__fn_invoiceDate` — never `DateCreated` or a raw `DateFinalized`.
|
|
|
|
## Alternatives considered
|
|
|
|
- **Keep `DateCreated` in lists/reports, `DateFinalized` only on documents** — rejected: the same
|
|
invoice would carry two dates, and backdating would never reach the books.
|
|
- **Transition safeguard for already exported DATEV periods** — rejected by the business owner.
|