gitextract__fbo_k07/ ├── .bandit ├── .coveragerc ├── .editorconfig ├── .flake8 ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── feature_request.md │ │ └── translation_fix.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── workflows/ │ │ ├── build-desktop.yml │ │ ├── build-mobile.yml │ │ ├── cd-development.yml │ │ ├── cd-release.yml │ │ ├── ci-comprehensive.yml │ │ ├── ci.yml │ │ ├── crowdin-sync.yml │ │ ├── migration-check.yml │ │ └── static.yml │ └── workflows-archive/ │ ├── ci.yml.backup │ └── docker-publish.yml.backup ├── .gitignore ├── .pre-commit-config.yaml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── INSTALLATION.md ├── LICENSE ├── Makefile ├── README.md ├── app/ │ ├── __init__.py │ ├── blueprint_registry.py │ ├── config/ │ │ ├── __init__.py │ │ ├── analytics_defaults.py │ │ └── support_ui.py │ ├── config.py │ ├── constants.py │ ├── integrations/ │ │ ├── __init__.py │ │ ├── activitywatch.py │ │ ├── asana.py │ │ ├── base.py │ │ ├── caldav_calendar.py │ │ ├── github.py │ │ ├── gitlab.py │ │ ├── google_calendar.py │ │ ├── jira.py │ │ ├── linear.py │ │ ├── microsoft_teams.py │ │ ├── outlook_calendar.py │ │ ├── peppol.py │ │ ├── peppol_as4.py │ │ ├── peppol_identifiers.py │ │ ├── peppol_smp.py │ │ ├── peppol_transport.py │ │ ├── quickbooks.py │ │ ├── registry.py │ │ ├── slack.py │ │ ├── trello.py │ │ └── xero.py │ ├── models/ │ │ ├── __init__.py │ │ ├── activity.py │ │ ├── api_idempotency_key.py │ │ ├── api_token.py │ │ ├── audit_log.py │ │ ├── budget_alert.py │ │ ├── calendar_event.py │ │ ├── calendar_integration.py │ │ ├── client.py │ │ ├── client_attachment.py │ │ ├── client_note.py │ │ ├── client_notification.py │ │ ├── client_portal_customization.py │ │ ├── client_portal_dashboard_preference.py │ │ ├── client_prepaid_consumption.py │ │ ├── client_time_approval.py │ │ ├── comment.py │ │ ├── comment_attachment.py │ │ ├── contact.py │ │ ├── contact_communication.py │ │ ├── currency.py │ │ ├── custom_field_definition.py │ │ ├── custom_report.py │ │ ├── deal.py │ │ ├── deal_activity.py │ │ ├── donation_interaction.py │ │ ├── expense.py │ │ ├── expense_category.py │ │ ├── expense_gps.py │ │ ├── extra_good.py │ │ ├── focus_session.py │ │ ├── gamification.py │ │ ├── import_export.py │ │ ├── integration.py │ │ ├── integration_external_event_link.py │ │ ├── invoice.py │ │ ├── invoice_approval.py │ │ ├── invoice_email.py │ │ ├── invoice_image.py │ │ ├── invoice_pdf_template.py │ │ ├── invoice_peppol.py │ │ ├── invoice_template.py │ │ ├── issue.py │ │ ├── kanban_column.py │ │ ├── lead.py │ │ ├── lead_activity.py │ │ ├── link_template.py │ │ ├── mileage.py │ │ ├── payment_gateway.py │ │ ├── payments.py │ │ ├── per_diem.py │ │ ├── permission.py │ │ ├── project.py │ │ ├── project_attachment.py │ │ ├── project_cost.py │ │ ├── project_stock_allocation.py │ │ ├── project_template.py │ │ ├── purchase_order.py │ │ ├── push_subscription.py │ │ ├── quote.py │ │ ├── quote_attachment.py │ │ ├── quote_image.py │ │ ├── quote_template.py │ │ ├── quote_version.py │ │ ├── rate_override.py │ │ ├── recurring_block.py │ │ ├── recurring_invoice.py │ │ ├── recurring_task.py │ │ ├── reporting.py │ │ ├── salesman_email_mapping.py │ │ ├── saved_filter.py │ │ ├── settings.py │ │ ├── stock_item.py │ │ ├── stock_lot.py │ │ ├── stock_movement.py │ │ ├── stock_reservation.py │ │ ├── supplier.py │ │ ├── supplier_stock_item.py │ │ ├── task.py │ │ ├── task_activity.py │ │ ├── tax_rule.py │ │ ├── team_chat.py │ │ ├── time_entry.py │ │ ├── time_entry_approval.py │ │ ├── time_entry_template.py │ │ ├── time_off.py │ │ ├── timesheet_period.py │ │ ├── timesheet_policy.py │ │ ├── user.py │ │ ├── user_client.py │ │ ├── user_favorite_project.py │ │ ├── user_smart_notification_dismissal.py │ │ ├── warehouse.py │ │ ├── warehouse_stock.py │ │ ├── webhook.py │ │ ├── weekly_time_goal.py │ │ └── workflow.py │ ├── repositories/ │ │ ├── __init__.py │ │ ├── base_repository.py │ │ ├── client_repository.py │ │ ├── comment_repository.py │ │ ├── expense_repository.py │ │ ├── invoice_repository.py │ │ ├── payment_repository.py │ │ ├── project_repository.py │ │ ├── recurring_invoice_repository.py │ │ ├── task_repository.py │ │ ├── time_entry_repository.py │ │ └── user_repository.py │ ├── resources/ │ │ └── icc/ │ │ ├── LICENSE.txt │ │ └── sRGB-v2-nano.icc │ ├── routes/ │ │ ├── activity_feed.py │ │ ├── admin.py │ │ ├── analytics.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ └── v1/ │ │ │ └── __init__.py │ │ ├── api.py │ │ ├── api_docs.py │ │ ├── api_v1.py │ │ ├── api_v1_ai.py │ │ ├── api_v1_clients.py │ │ ├── api_v1_common.py │ │ ├── api_v1_contacts.py │ │ ├── api_v1_deals.py │ │ ├── api_v1_expenses.py │ │ ├── api_v1_invoices.py │ │ ├── api_v1_leads.py │ │ ├── api_v1_mileage.py │ │ ├── api_v1_payments.py │ │ ├── api_v1_projects.py │ │ ├── api_v1_tasks.py │ │ ├── api_v1_time_entries.py │ │ ├── audit_logs.py │ │ ├── auth.py │ │ ├── budget_alerts.py │ │ ├── calendar.py │ │ ├── client_notes.py │ │ ├── client_portal.py │ │ ├── client_portal_customization.py │ │ ├── clients.py │ │ ├── comments.py │ │ ├── contacts.py │ │ ├── custom_field_definitions.py │ │ ├── custom_reports.py │ │ ├── deals.py │ │ ├── expense_categories.py │ │ ├── expenses.py │ │ ├── gantt.py │ │ ├── import_export.py │ │ ├── integrations.py │ │ ├── inventory.py │ │ ├── invoice_approvals.py │ │ ├── invoices.py │ │ ├── invoices_refactored.py │ │ ├── issues.py │ │ ├── kanban.py │ │ ├── kiosk.py │ │ ├── leads.py │ │ ├── link_templates.py │ │ ├── main.py │ │ ├── mileage.py │ │ ├── offers.py │ │ ├── payment_gateways.py │ │ ├── payments.py │ │ ├── per_diem.py │ │ ├── permissions.py │ │ ├── project_templates.py │ │ ├── projects.py │ │ ├── projects_refactored_example.py │ │ ├── push_notifications.py │ │ ├── quotes.py │ │ ├── recurring_invoices.py │ │ ├── recurring_tasks.py │ │ ├── reports.py │ │ ├── salesman_reports.py │ │ ├── saved_filters.py │ │ ├── scheduled_reports.py │ │ ├── settings.py │ │ ├── setup.py │ │ ├── tasks.py │ │ ├── team_chat.py │ │ ├── time_approvals.py │ │ ├── time_entry_templates.py │ │ ├── timer.py │ │ ├── timer_refactored.py │ │ ├── user.py │ │ ├── webhooks.py │ │ ├── weekly_goals.py │ │ ├── workflows.py │ │ └── workforce.py │ ├── schemas/ │ │ ├── __init__.py │ │ ├── client_schema.py │ │ ├── comment_schema.py │ │ ├── expense_schema.py │ │ ├── invoice_schema.py │ │ ├── payment_schema.py │ │ ├── project_schema.py │ │ ├── task_schema.py │ │ ├── time_entry_schema.py │ │ ├── user_schema.py │ │ └── version_check.py │ ├── services/ │ │ ├── __init__.py │ │ ├── ai_categorization_service.py │ │ ├── ai_suggestion_service.py │ │ ├── analytics_service.py │ │ ├── api_token_service.py │ │ ├── backup_service.py │ │ ├── base_crud_service.py │ │ ├── calendar_integration_service.py │ │ ├── client_activity_feed_service.py │ │ ├── client_approval_service.py │ │ ├── client_notification_service.py │ │ ├── client_report_service.py │ │ ├── client_service.py │ │ ├── comment_service.py │ │ ├── currency_service.py │ │ ├── custom_report_service.py │ │ ├── email_service.py │ │ ├── enhanced_ocr_service.py │ │ ├── expense_service.py │ │ ├── export_service.py │ │ ├── gamification_service.py │ │ ├── gantt_service.py │ │ ├── global_search_service.py │ │ ├── gps_tracking_service.py │ │ ├── health_service.py │ │ ├── import_service.py │ │ ├── integration_service.py │ │ ├── inventory_report_service.py │ │ ├── invoice_approval_service.py │ │ ├── invoice_service.py │ │ ├── ldap_service.py │ │ ├── llm_service.py │ │ ├── notification_service.py │ │ ├── payment_gateway_service.py │ │ ├── payment_service.py │ │ ├── peppol_service.py │ │ ├── permission_service.py │ │ ├── pomodoro_service.py │ │ ├── project_service.py │ │ ├── project_template_service.py │ │ ├── quote_service.py │ │ ├── recurring_invoice_service.py │ │ ├── reporting_service.py │ │ ├── scheduled_report_service.py │ │ ├── stats_service.py │ │ ├── support_prompt_service.py │ │ ├── task_service.py │ │ ├── time_approval_service.py │ │ ├── time_entry_bulk_service.py │ │ ├── time_entry_csv_import_service.py │ │ ├── time_tracking_service.py │ │ ├── unpaid_hours_service.py │ │ ├── usage_stats_service.py │ │ ├── user_service.py │ │ ├── version_service.py │ │ ├── workflow_engine.py │ │ └── workforce_governance_service.py │ ├── static/ │ │ ├── activity-feed.js │ │ ├── admin-version-update.js │ │ ├── ai-helper.js │ │ ├── base-init.js │ │ ├── calendar.css │ │ ├── calendar.js │ │ ├── charts.js │ │ ├── commands.js │ │ ├── css/ │ │ │ ├── brand-colors.css │ │ │ ├── gantt-chart.css │ │ │ └── rtl-support.css │ │ ├── dashboard-enhancements.js │ │ ├── dashboard-widgets.js │ │ ├── data-tables-enhanced.css │ │ ├── data-tables-enhanced.js │ │ ├── date-picker-init.js │ │ ├── enhanced-search.js │ │ ├── enhanced-tables.js │ │ ├── enhanced-ui.css │ │ ├── enhanced-ui.js │ │ ├── error-handling-enhanced.js │ │ ├── floating-actions.js │ │ ├── floating-timer-bar.js │ │ ├── form-bridge.css │ │ ├── form-validation.css │ │ ├── form-validation.js │ │ ├── global-fab.js │ │ ├── idle.js │ │ ├── images/ │ │ │ └── og-image-placeholder.md │ │ ├── interactions.js │ │ ├── js/ │ │ │ ├── command-palette.js │ │ │ ├── gantt-color-picker.js │ │ │ ├── integration_wizard.js │ │ │ ├── ldap_wizard.js │ │ │ ├── oidc_wizard.js │ │ │ ├── setup-wizard.js │ │ │ └── sw.js │ │ ├── keyboard-shortcuts-advanced.js │ │ ├── keyboard-shortcuts-enhanced.js │ │ ├── keyboard-shortcuts.css │ │ ├── keyboard-shortcuts.js │ │ ├── kiosk-barcode.js │ │ ├── kiosk-mode.css │ │ ├── kiosk-mode.js │ │ ├── kiosk-timer.js │ │ ├── manifest.json │ │ ├── mentions.js │ │ ├── mobile.js │ │ ├── offline-sync.js │ │ ├── onboarding-enhanced.js │ │ ├── onboarding.js │ │ ├── pwa-enhancements.js │ │ ├── quick-actions.js │ │ ├── reports-enhanced.js │ │ ├── smart-notifications.js │ │ ├── src/ │ │ │ └── input.css │ │ ├── support-ui.js │ │ ├── test.txt │ │ ├── time-entries-inline-edit.js │ │ ├── toast-notifications.css │ │ ├── toast-notifications.js │ │ ├── typing-utils.js │ │ ├── ui-enhancements.css │ │ ├── ui-enhancements.js │ │ └── uploads/ │ │ └── logos/ │ │ └── .gitkeep │ ├── telemetry/ │ │ ├── __init__.py │ │ ├── otel_setup.py │ │ └── service.py │ ├── templates/ │ │ ├── _components.html │ │ ├── admin/ │ │ │ ├── api_tokens.html │ │ │ ├── backups.html │ │ │ ├── clear_cache.html │ │ │ ├── custom_field_definitions/ │ │ │ │ ├── form.html │ │ │ │ └── list.html │ │ │ ├── dashboard.html │ │ │ ├── email_support.html │ │ │ ├── email_templates/ │ │ │ │ ├── create.html │ │ │ │ ├── edit.html │ │ │ │ ├── list.html │ │ │ │ └── view.html │ │ │ ├── integrations/ │ │ │ │ ├── list.html │ │ │ │ └── setup.html │ │ │ ├── ldap_setup_wizard.html │ │ │ ├── link_templates/ │ │ │ │ ├── form.html │ │ │ │ └── list.html │ │ │ ├── modules.html │ │ │ ├── oidc_debug.html │ │ │ ├── oidc_setup_wizard.html │ │ │ ├── oidc_user_detail.html │ │ │ ├── pdf_layout.html │ │ │ ├── permissions/ │ │ │ │ └── list.html │ │ │ ├── quote_pdf_layout.html │ │ │ ├── restore.html │ │ │ ├── roles/ │ │ │ │ ├── form.html │ │ │ │ ├── list.html │ │ │ │ └── view.html │ │ │ ├── salesman_email_mappings.html │ │ │ ├── settings.html │ │ │ ├── system_info.html │ │ │ ├── telemetry.html │ │ │ ├── user_form.html │ │ │ ├── users/ │ │ │ │ └── roles.html │ │ │ ├── users.html │ │ │ └── webhooks/ │ │ │ ├── form.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── analytics/ │ │ │ ├── dashboard.html │ │ │ ├── dashboard_improved.html │ │ │ └── mobile_dashboard.html │ │ ├── approvals/ │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── audit_logs/ │ │ │ ├── entity_history.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── auth/ │ │ │ ├── change_password.html │ │ │ ├── edit_profile.html │ │ │ ├── emails/ │ │ │ │ └── password_reset.html │ │ │ ├── forgot_password.html │ │ │ ├── login.html │ │ │ ├── profile.html │ │ │ ├── reset_password.html │ │ │ ├── two_factor.html │ │ │ └── two_factor_setup.html │ │ ├── base.html │ │ ├── budget/ │ │ │ ├── dashboard.html │ │ │ └── project_detail.html │ │ ├── calendar/ │ │ │ ├── event_detail.html │ │ │ ├── event_form.html │ │ │ ├── integrations.html │ │ │ └── view.html │ │ ├── chat/ │ │ │ ├── channel.html │ │ │ └── index.html │ │ ├── client_notes/ │ │ │ └── edit.html │ │ ├── client_portal/ │ │ │ ├── activity_feed.html │ │ │ ├── approval_detail.html │ │ │ ├── approvals.html │ │ │ ├── base.html │ │ │ ├── dashboard.html │ │ │ ├── documents.html │ │ │ ├── error.html │ │ │ ├── invoice_detail.html │ │ │ ├── invoices.html │ │ │ ├── issue_detail.html │ │ │ ├── issues.html │ │ │ ├── login.html │ │ │ ├── new_issue.html │ │ │ ├── notifications.html │ │ │ ├── project_comments.html │ │ │ ├── projects.html │ │ │ ├── quote_detail.html │ │ │ ├── quotes.html │ │ │ ├── reports.html │ │ │ ├── set_password.html │ │ │ ├── time_entries.html │ │ │ └── widgets/ │ │ │ ├── invoices.html │ │ │ ├── pending_actions.html │ │ │ ├── projects.html │ │ │ ├── stats.html │ │ │ └── time_entries.html │ │ ├── clients/ │ │ │ ├── _clients_list.html │ │ │ ├── create.html │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── comments/ │ │ │ ├── _comment.html │ │ │ ├── _comments_section.html │ │ │ └── edit.html │ │ ├── components/ │ │ │ ├── activity_feed_widget.html │ │ │ ├── bulk_actions_widget.html │ │ │ ├── cards.html │ │ │ ├── chat_user_selector.html │ │ │ ├── client_select.html │ │ │ ├── keyboard_shortcuts_help.html │ │ │ ├── multi_select.html │ │ │ ├── offline_indicator.html │ │ │ ├── persistent_chat_widget.html │ │ │ ├── save_filter_widget.html │ │ │ ├── support_modal.html │ │ │ └── ui.html │ │ ├── contacts/ │ │ │ ├── communication_form.html │ │ │ ├── form.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── deals/ │ │ │ ├── activity_form.html │ │ │ ├── form.html │ │ │ ├── list.html │ │ │ ├── pipeline.html │ │ │ └── view.html │ │ ├── email/ │ │ │ ├── client_notification.html │ │ │ ├── client_portal_password_setup.html │ │ │ ├── comment_mention.html │ │ │ ├── invoice.html │ │ │ ├── overdue_invoice.html │ │ │ ├── quote.html │ │ │ ├── quote_accepted.html │ │ │ ├── quote_approval_rejected.html │ │ │ ├── quote_approval_request.html │ │ │ ├── quote_approved.html │ │ │ ├── quote_expired.html │ │ │ ├── quote_expiring.html │ │ │ ├── quote_rejected.html │ │ │ ├── quote_sent.html │ │ │ ├── scheduled_report.html │ │ │ ├── task_assigned.html │ │ │ ├── test_email.html │ │ │ ├── unpaid_hours_report.html │ │ │ └── weekly_summary.html │ │ ├── errors/ │ │ │ ├── 400.html │ │ │ ├── 403.html │ │ │ ├── 404.html │ │ │ ├── 500.html │ │ │ └── generic.html │ │ ├── expense_categories/ │ │ │ ├── form.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── expenses/ │ │ │ ├── dashboard.html │ │ │ ├── form.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── gantt/ │ │ │ └── view.html │ │ ├── import_export/ │ │ │ └── index.html │ │ ├── integrations/ │ │ │ ├── activitywatch_setup.html │ │ │ ├── caldav_setup.html │ │ │ ├── health.html │ │ │ ├── list.html │ │ │ ├── manage.html │ │ │ ├── view.html │ │ │ ├── wizard_asana.html │ │ │ ├── wizard_base.html │ │ │ ├── wizard_github.html │ │ │ ├── wizard_gitlab.html │ │ │ ├── wizard_jira.html │ │ │ ├── wizard_microsoft_teams.html │ │ │ ├── wizard_outlook_calendar.html │ │ │ ├── wizard_quickbooks.html │ │ │ ├── wizard_trello.html │ │ │ └── wizard_xero.html │ │ ├── inventory/ │ │ │ ├── adjustments/ │ │ │ │ ├── form.html │ │ │ │ └── list.html │ │ │ ├── low_stock/ │ │ │ │ └── list.html │ │ │ ├── movements/ │ │ │ │ ├── form.html │ │ │ │ └── list.html │ │ │ ├── purchase_orders/ │ │ │ │ ├── form.html │ │ │ │ ├── list.html │ │ │ │ └── view.html │ │ │ ├── reports/ │ │ │ │ ├── dashboard.html │ │ │ │ ├── low_stock.html │ │ │ │ ├── movement_history.html │ │ │ │ ├── turnover.html │ │ │ │ └── valuation.html │ │ │ ├── reservations/ │ │ │ │ └── list.html │ │ │ ├── stock_items/ │ │ │ │ ├── form.html │ │ │ │ ├── history.html │ │ │ │ ├── list.html │ │ │ │ └── view.html │ │ │ ├── stock_levels/ │ │ │ │ ├── item.html │ │ │ │ ├── list.html │ │ │ │ └── warehouse.html │ │ │ ├── suppliers/ │ │ │ │ ├── form.html │ │ │ │ ├── list.html │ │ │ │ └── view.html │ │ │ ├── transfers/ │ │ │ │ ├── form.html │ │ │ │ └── list.html │ │ │ └── warehouses/ │ │ │ ├── form.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── invoice_approvals/ │ │ │ ├── list.html │ │ │ ├── request.html │ │ │ └── view.html │ │ ├── invoices/ │ │ │ ├── _invoices_list.html │ │ │ ├── create.html │ │ │ ├── edit.html │ │ │ ├── generate_from_time.html │ │ │ ├── list.html │ │ │ ├── pdf_default.html │ │ │ ├── pdf_styles_default.css │ │ │ └── view.html │ │ ├── issues/ │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ ├── new.html │ │ │ └── view.html │ │ ├── kanban/ │ │ │ ├── board.html │ │ │ ├── columns.html │ │ │ ├── create_column.html │ │ │ └── edit_column.html │ │ ├── kiosk/ │ │ │ ├── base.html │ │ │ ├── dashboard.html │ │ │ └── login.html │ │ ├── leads/ │ │ │ ├── activity_form.html │ │ │ ├── convert_to_client.html │ │ │ ├── convert_to_deal.html │ │ │ ├── form.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── main/ │ │ │ ├── about.html │ │ │ ├── dashboard.html │ │ │ ├── donate.html │ │ │ ├── help.html │ │ │ └── search.html │ │ ├── mileage/ │ │ │ ├── form.html │ │ │ ├── gps.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── offline.html │ │ ├── partials/ │ │ │ ├── _bottom_nav.html │ │ │ └── _command_palette.html │ │ ├── payment_gateways/ │ │ │ ├── create.html │ │ │ ├── list.html │ │ │ └── pay.html │ │ ├── payments/ │ │ │ ├── create.html │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── per_diem/ │ │ │ ├── form.html │ │ │ ├── list.html │ │ │ ├── rate_form.html │ │ │ ├── rates_list.html │ │ │ └── view.html │ │ ├── project_templates/ │ │ │ ├── create.html │ │ │ ├── create_project.html │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── projects/ │ │ │ ├── _kanban_tailwind.html │ │ │ ├── _projects_list.html │ │ │ ├── add_cost.html │ │ │ ├── add_good.html │ │ │ ├── archive.html │ │ │ ├── create.html │ │ │ ├── dashboard.html │ │ │ ├── edit.html │ │ │ ├── edit_cost.html │ │ │ ├── edit_good.html │ │ │ ├── goods.html │ │ │ ├── list.html │ │ │ ├── time_entries_overview.html │ │ │ └── view.html │ │ ├── quotes/ │ │ │ ├── _edit_quote_form_scripts.html │ │ │ ├── _quotes_list.html │ │ │ ├── accept.html │ │ │ ├── create.html │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ ├── pdf_default.html │ │ │ ├── pdf_styles_default.css │ │ │ └── view.html │ │ ├── recurring_invoices/ │ │ │ ├── create.html │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── recurring_tasks/ │ │ │ ├── form.html │ │ │ └── list.html │ │ ├── reports/ │ │ │ ├── builder.html │ │ │ ├── custom_view.html │ │ │ ├── export_form.html │ │ │ ├── index.html │ │ │ ├── iterative_view.html │ │ │ ├── project_report.html │ │ │ ├── saved_views_list.html │ │ │ ├── schedule_form.html │ │ │ ├── scheduled.html │ │ │ ├── summary.html │ │ │ ├── task_report.html │ │ │ ├── time_entries_report.html │ │ │ ├── unpaid_hours_report.html │ │ │ ├── user_report.html │ │ │ └── week_in_review.html │ │ ├── saved_filters/ │ │ │ └── list.html │ │ ├── settings/ │ │ │ └── keyboard_shortcuts.html │ │ ├── setup/ │ │ │ └── initial_setup.html │ │ ├── tasks/ │ │ │ ├── _kanban.html │ │ │ ├── _tasks_list.html │ │ │ ├── create.html │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ ├── my_tasks.html │ │ │ ├── overdue.html │ │ │ └── view.html │ │ ├── time_entry_templates/ │ │ │ ├── create.html │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ └── view.html │ │ ├── timer/ │ │ │ ├── _time_entries_list.html │ │ │ ├── bulk_entry.html │ │ │ ├── calendar.html │ │ │ ├── edit_timer.html │ │ │ ├── manual_entry.html │ │ │ ├── time_entries_export_pdf.html │ │ │ ├── time_entries_overview.html │ │ │ ├── timer_page.html │ │ │ └── view_timer.html │ │ ├── user/ │ │ │ ├── license.html │ │ │ ├── profile.html │ │ │ └── settings.html │ │ ├── weekly_goals/ │ │ │ ├── create.html │ │ │ ├── edit.html │ │ │ ├── index.html │ │ │ └── view.html │ │ └── workforce/ │ │ └── dashboard.html │ └── utils/ │ ├── api_auth.py │ ├── api_deprecation.py │ ├── api_idempotency.py │ ├── api_rate_limit.py │ ├── api_responses.py │ ├── audit.py │ ├── auth_method.py │ ├── backup.py │ ├── budget_forecasting.py │ ├── cache.py │ ├── cache_redis.py │ ├── cii_invoice.py │ ├── cli.py │ ├── client_lock.py │ ├── config_manager.py │ ├── context_processors.py │ ├── data_export.py │ ├── data_import.py │ ├── datetime_utils.py │ ├── db.py │ ├── decorators.py │ ├── donate_hide_code.py │ ├── email.py │ ├── env_validation.py │ ├── error_handlers.py │ ├── error_handling.py │ ├── event_bus.py │ ├── excel_export.py │ ├── file_upload.py │ ├── i18n.py │ ├── i18n_helpers.py │ ├── installation.py │ ├── integration_http.py │ ├── integration_sync_context.py │ ├── invoice_numbering.py │ ├── invoice_pdf_postprocess.py │ ├── invoice_validators.py │ ├── keyboard_shortcuts_defaults.py │ ├── legacy_migrations.py │ ├── license_utils.py │ ├── logger.py │ ├── mileage_pdf.py │ ├── module_helpers.py │ ├── module_registry.py │ ├── ocr.py │ ├── oidc_metadata.py │ ├── overtime.py │ ├── pagination.py │ ├── pdf_generator.py │ ├── pdf_generator_fallback.py │ ├── pdf_generator_reportlab.py │ ├── pdf_template_schema.py │ ├── pdfa3.py │ ├── per_diem_pdf.py │ ├── performance.py │ ├── permissions.py │ ├── permissions_seed.py │ ├── posthog_funnels.py │ ├── posthog_monitoring.py │ ├── posthog_segmentation.py │ ├── powerpoint_export.py │ ├── prepaid_hours.py │ ├── query_logging.py │ ├── query_optimization.py │ ├── quote_access.py │ ├── rate_limiting.py │ ├── role_migration.py │ ├── route_helpers.py │ ├── safe_template_render.py │ ├── scheduled_tasks.py │ ├── scope_filter.py │ ├── search.py │ ├── secret_crypto.py │ ├── seed_dev_data.py │ ├── setup_logging.py │ ├── stripe_integration.py │ ├── summary_report_pdf.py │ ├── support_report_generation.py │ ├── telemetry.py │ ├── template_filters.py │ ├── time_entries_pdf.py │ ├── time_entry_validation.py │ ├── time_rounding.py │ ├── timezone.py │ ├── transactions.py │ ├── validation.py │ ├── version_compare.py │ ├── webhook_dispatcher.py │ ├── webhook_service.py │ └── zugferd.py ├── app.py ├── babel.cfg ├── crowdin.yml ├── desktop/ │ ├── .npmrc │ ├── README.md │ ├── assets/ │ │ ├── .gitkeep │ │ ├── README.md │ │ └── icon.icns │ ├── dist-renderer/ │ │ ├── assets/ │ │ │ ├── index-BqW2gGjC.js │ │ │ └── index-D2aGha3a.css │ │ └── index.html │ ├── package-lock.json │ ├── package.json │ ├── scripts/ │ │ ├── build-all-platforms.js │ │ └── clean-cache.js │ ├── src/ │ │ ├── main/ │ │ │ ├── main.js │ │ │ ├── preload.js │ │ │ ├── tray.js │ │ │ └── window.js │ │ ├── renderer/ │ │ │ ├── css/ │ │ │ │ ├── brand-colors.css │ │ │ │ ├── splash.css │ │ │ │ └── styles.css │ │ │ ├── index.html │ │ │ ├── js/ │ │ │ │ ├── api/ │ │ │ │ │ └── client.js │ │ │ │ ├── app.js │ │ │ │ ├── bundle.js │ │ │ │ ├── connection/ │ │ │ │ │ ├── connection_manager.js │ │ │ │ │ ├── connection_state.js │ │ │ │ │ ├── request_policy.js │ │ │ │ │ └── timer_operations.js │ │ │ │ ├── state.js │ │ │ │ ├── storage/ │ │ │ │ │ └── storage.js │ │ │ │ ├── ui/ │ │ │ │ │ └── notifications.js │ │ │ │ └── utils/ │ │ │ │ └── helpers.js │ │ │ └── splash.html │ │ ├── renderer-react/ │ │ │ ├── index.html │ │ │ └── src/ │ │ │ ├── main.jsx │ │ │ ├── services/ │ │ │ │ ├── api.js │ │ │ │ ├── diagnostics.js │ │ │ │ └── store.js │ │ │ ├── styles/ │ │ │ │ └── app.css │ │ │ └── sync/ │ │ │ └── syncEngine.js │ │ └── shared/ │ │ └── config.js │ ├── test/ │ │ ├── api-client.test.js │ │ ├── connection_manager.test.js │ │ ├── integration_info_server.test.js │ │ ├── react_renderer_package.test.js │ │ └── timer_operations.test.js │ └── vite.config.mjs ├── docker/ │ ├── Dockerfile.certgen │ ├── Dockerfile.mkcert │ ├── STARTUP_MIGRATION_CONFIG.md │ ├── TROUBLESHOOTING_DB_CONNECTION.md │ ├── debug_startup.sh │ ├── docker-compose.analytics.yml │ ├── docker-compose.https-auto.yml │ ├── docker-compose.https-mkcert.yml │ ├── docker-compose.local-test.yml │ ├── docker-compose.remote-dev.yml │ ├── docker-compose.remote.yml │ ├── docs │ ├── entrypoint-local-test-simple.sh │ ├── entrypoint-local-test.sh │ ├── entrypoint.py │ ├── entrypoint.sh │ ├── entrypoint_fixed.sh │ ├── entrypoint_simple.sh │ ├── fix-all-column-issues.py │ ├── fix-all-issues.py │ ├── fix-column-name-mismatch.py │ ├── fix-docker-permissions.py │ ├── fix-docker-permissions.sh │ ├── fix-duplicate-columns.py │ ├── fix-invoice-tables.py │ ├── fix-invoices-now.py │ ├── fix-permissions-aggressive.py │ ├── fix-schema.py │ ├── fix-settings-table.py │ ├── fix-settings-table.sql │ ├── fix-upload-permissions.py │ ├── fix-upload-permissions.sh │ ├── force-schema-update.py │ ├── generate-mkcert-certs.sh │ ├── init-database-enhanced.py │ ├── init-database-simple.py │ ├── init-database-sql.py │ ├── init-database.py │ ├── init-db.sh │ ├── init.sh │ ├── init.sql │ ├── logrotate.conf.example │ ├── migrate-add-company-branding.py │ ├── migrate-add-missing-settings-columns.py │ ├── migrate-add-project-costs.py │ ├── migrate-add-task-columns.py │ ├── migrate-add-tasks.py │ ├── migrate-avatar-storage.py │ ├── migrate-field-names.py │ ├── migrate-logo-upload.py │ ├── seed-dev-data.sh │ ├── simple_test.sh │ ├── start-enhanced.py │ ├── start-fixed.py │ ├── start-fixed.sh │ ├── start-minimal.sh │ ├── start-new.sh │ ├── start-simple.sh │ ├── start.py │ ├── start.sh │ ├── startup_with_migration.py │ ├── supervisord.conf │ ├── test-database-complete.py │ ├── test-db-simple.py │ ├── test-db.py │ ├── test-packages.py │ ├── test-pdf-generation.py │ ├── test-permissions.py │ ├── test-routing.py │ ├── test-schema-fixed.py │ ├── test-schema.py │ ├── test-startup.sh │ ├── test_db_connection.py │ └── verify-database.py ├── docker-compose.example.yml ├── docker-compose.yml ├── docs/ │ ├── ADVANCED_PERMISSIONS.md │ ├── API.md │ ├── APPLY_FIXES_NOW.md │ ├── APPLY_KANBAN_MIGRATION.md │ ├── ARCHITECTURE.md │ ├── ARCHITECTURE_AUDIT.md │ ├── ASSETS.md │ ├── AVATAR_PERSISTENCE_SUMMARY.md │ ├── AVATAR_STORAGE_MIGRATION.md │ ├── BRANDING.md │ ├── BRAND_GUIDELINES.md │ ├── BREAK_TIME_FEATURE.md │ ├── BUDGET_ALERTS_AND_FORECASTING.md │ ├── BUILD_CONFIGURATION.md │ ├── BUILD_SCRIPTS.md │ ├── BUILD_WINDOWS_PERMISSIONS.md │ ├── BULK_TASK_OPERATIONS.md │ ├── BULK_TIME_ENTRY_README.md │ ├── CALENDAR_AGENDA_FEATURE.md │ ├── CALENDAR_FEATURES_README.md │ ├── CLIENT_FEATURES_COMPLETE_IMPLEMENTATION.md │ ├── CLIENT_FEATURES_FINAL_IMPLEMENTATION.md │ ├── CLIENT_FEATURES_IMPLEMENTATION.md │ ├── CLIENT_FEATURES_IMPLEMENTATION_STATUS.md │ ├── CLIENT_FEATURE_RECOMMENDATIONS.md │ ├── CLIENT_MANAGEMENT_README.md │ ├── CLIENT_NOTES_FEATURE.md │ ├── CLIENT_PORTAL.md │ ├── CODEBASE_AUDIT.md │ ├── CODE_BASED_ANALYSIS_REPORT.md │ ├── COMMAND_PALETTE_DEMO.html │ ├── COMMAND_PALETTE_USAGE.md │ ├── COMPLETE_IMPROVEMENTS_SUMMARY.md │ ├── CONTRIBUTING_TRANSLATIONS.md │ ├── CRM_FEATURES_IMPLEMENTATION.md │ ├── CRM_IMPLEMENTATION_SUMMARY.md │ ├── DATABASE_RECOVERY.md │ ├── DATABASE_STARTUP_FIX_README.md │ ├── DEFAULT_DATA_SEEDING.md │ ├── DESKTOP_SETTINGS.md │ ├── DEVELOPMENT.md │ ├── DIAGNOSIS_STEPS.md │ ├── DOCS_AUDIT.md │ ├── DOCUMENTATION_REORGANIZATION_SUMMARY.md │ ├── DOCUMENTATION_RESTRUCTURE_SUMMARY.md │ ├── ENHANCED_DATABASE_STARTUP.md │ ├── ENHANCED_INVOICE_SYSTEM_README.md │ ├── ERROR_HANDLER_IMPROVEMENTS.md │ ├── EXPENSE_TRACKING.md │ ├── EXTRA_GOODS_FEATURE.md │ ├── FAVORITE_PROJECTS_FEATURE.md │ ├── FEATURES_COMPLETE.md │ ├── FINAL_SYMLINK_FIX.md │ ├── FIX_SYMLINK_ISSUE.md │ ├── FIX_SYMLINK_PERMISSIONS.md │ ├── FRONTEND.md │ ├── GETTING_STARTED.md │ ├── GITHUB_WORKFLOW_IMAGES.md │ ├── IMPLEMENTATION_COMPLETE_SUMMARY.md │ ├── IMPLEMENTATION_STATUS_UPDATE.md │ ├── IMPORT_EXPORT_GUIDE.md │ ├── INCOMPLETE_IMPLEMENTATIONS_ANALYSIS.md │ ├── INVOICE_EXPENSES.md │ ├── INVOICE_EXTRA_GOODS_PDF_EXPORT.md │ ├── INVOICE_FEATURE_README.md │ ├── INVOICE_INTERFACE_IMPROVEMENTS.md │ ├── KEYBOARD_SHORTCUTS_DEVELOPER.md │ ├── KEYBOARD_SHORTCUTS_IMPLEMENTATION.md │ ├── KIOSK_MODE_INVENTORY_ANALYSIS.md │ ├── KIOSK_MODE_INVENTORY_SUMMARY.md │ ├── KIOSK_REVIEW_AND_IMPROVEMENTS.md │ ├── LOGO_UPLOAD_IMPLEMENTATION_SUMMARY.md │ ├── LOGO_UPLOAD_SYSTEM_README.md │ ├── MOBILE_IMPROVEMENTS.md │ ├── MULTISELECT_FILTERS_TESTING.md │ ├── ONEDRIVE_FIX.md │ ├── PAYMENT_TRACKING.md │ ├── PDF_EDITOR_ENHANCED_FEATURES.md │ ├── PDF_EDITOR_QUICK_START.md │ ├── PDF_GENERATION_TROUBLESHOOTING.md │ ├── PDF_LAYOUT_CUSTOMIZATION.md │ ├── PERFORMANCE.md │ ├── PRODUCT_UX_AUDIT.md │ ├── PROFILE_PICTURE_UPLOAD_FIX.md │ ├── PROJECT_ANALYSIS_REPORT.md │ ├── PROJECT_ARCHIVING_GUIDE.md │ ├── QUICK_FIX.md │ ├── QUICK_FIX_SYMLINK.md │ ├── QUICK_REFERENCE_GUIDE.md │ ├── QUICK_START_CODE_SIGNING.md │ ├── QUICK_WINS_IMPLEMENTATION.md │ ├── QUICK_WINS_UI.md │ ├── README.md │ ├── REPORTLAB_MIGRATION_CHECKLIST.md │ ├── REPORTLAB_MIGRATION_SUMMARY.md │ ├── REQUIREMENTS.md │ ├── SOLUTION_GUIDE.md │ ├── SUBCONTRACTOR_ROLE.md │ ├── TASK_MANAGEMENT.md │ ├── TASK_MANAGEMENT_README.md │ ├── TELEMETRY_QUICK_START.md │ ├── TELEMETRY_TRANSPARENCY.md │ ├── TESTING_COVERAGE_GUIDE.md │ ├── TESTING_QUICK_REFERENCE.md │ ├── TEST_AVATAR_PERSISTENCE.md │ ├── TIMETRACKER_TEMPLATES_IMPLEMENTATION.md │ ├── TIME_ENTRY_TEMPLATES.md │ ├── TIME_ROUNDING_PREFERENCES.md │ ├── TOAST_NOTIFICATION_DEMO.html │ ├── TOAST_NOTIFICATION_SYSTEM.md │ ├── TOAST_NOTIFICATION_VISUAL_GUIDE.md │ ├── TRANSLATION_SYSTEM.md │ ├── TROUBLESHOOTING_BUILD.md │ ├── TROUBLESHOOTING_OIDC_DNS.md │ ├── TROUBLESHOOTING_QUOTES_TEMPLATE_ID.md │ ├── TROUBLESHOOTING_TRANSACTION_ERROR.md │ ├── UI_GUIDELINES.md │ ├── UPLOADS_PERSISTENCE.md │ ├── WEEKLY_TIME_GOALS.md │ ├── WINDOWS_BUILD.md │ ├── WINDOWS_CODE_SIGNING.md │ ├── admin/ │ │ ├── README.md │ │ ├── SUPPORT_CONVERSION_AB_TESTS.md │ │ ├── configuration/ │ │ │ ├── DESKTOP_BUILD_WINDOWS_TROUBLESHOOTING.md │ │ │ ├── DOCKER_COMPOSE_SETUP.md │ │ │ ├── DOCKER_PUBLIC_SETUP.md │ │ │ ├── DOCKER_STARTUP_TROUBLESHOOTING.md │ │ │ ├── EMAIL_CONFIGURATION.md │ │ │ ├── LDAP_SETUP.md │ │ │ ├── NGINX_PUBLIC_DOMAIN.md │ │ │ ├── OIDC_SETUP.md │ │ │ ├── PEPPOL_EINVOICING.md │ │ │ └── SUPPORT_VISIBILITY.md │ │ ├── deployment/ │ │ │ ├── OFFICIAL_BUILDS.md │ │ │ ├── PORTAINER_DEPLOYMENT.md │ │ │ ├── RELEASE_PROCESS.md │ │ │ └── VERSION_MANAGEMENT.md │ │ ├── monitoring/ │ │ │ ├── ANALYTICS_FILES_MANIFEST.md │ │ │ ├── ANALYTICS_IMPLEMENTATION_SUMMARY.md │ │ │ ├── ANALYTICS_QUICK_START.md │ │ │ ├── POSTHOG_ADVANCED_FEATURES.md │ │ │ ├── POSTHOG_ENHANCEMENTS_SUMMARY.md │ │ │ ├── POSTHOG_QUICK_REFERENCE.md │ │ │ ├── README_TELEMETRY_POLICY.md │ │ │ ├── TELEMETRY_CHEAT_SHEET.md │ │ │ ├── TELEMETRY_IMPLEMENTATION_SUMMARY.md │ │ │ └── TELEMETRY_POSTHOG_MIGRATION.md │ │ └── security/ │ │ ├── AUTOMATIC_HTTPS_SUMMARY.md │ │ ├── CSRF_CONFIGURATION.md │ │ ├── CSRF_DOCKER_CONFIGURATION_SUMMARY.md │ │ ├── CSRF_INTEGRATION_REVIEW.md │ │ ├── CSRF_IP_ACCESS_FIX.md │ │ ├── CSRF_IP_ACCESS_GUIDE.md │ │ ├── CSRF_IP_FIX_SUMMARY.md │ │ ├── CSRF_TOKEN_FIX_SUMMARY.md │ │ ├── CSRF_TROUBLESHOOTING.md │ │ ├── HTTPS_MKCERT_GUIDE.md │ │ ├── P0_SECURITY_IMPROVEMENTS.md │ │ ├── README_HTTPS.md │ │ └── README_HTTPS_AUTO.md │ ├── all_tracked_events.md │ ├── analytics.md │ ├── api/ │ │ ├── API_CONSISTENCY_AUDIT.md │ │ ├── API_ENHANCEMENTS.md │ │ ├── API_TOKEN_SCOPES.md │ │ ├── API_VERSIONING.md │ │ ├── README.md │ │ ├── RESPONSE_FORMAT.md │ │ └── REST_API.md │ ├── assets/ │ │ └── README.md │ ├── bugfixes/ │ │ └── template_application_fix.md │ ├── cicd/ │ │ ├── BUILD_CONFIGURATION_SUMMARY.md │ │ ├── CI_CD_DOCUMENTATION.md │ │ ├── CI_CD_FIXES.md │ │ ├── CI_CD_FIXES_ROUND_2.md │ │ ├── CI_CD_IMPLEMENTATION_SUMMARY.md │ │ ├── CI_CD_QUICK_START.md │ │ ├── CI_CD_WORKFLOW_ARCHITECTURE.md │ │ ├── FINAL_CI_CD_SUMMARY.md │ │ ├── GITHUB_ACTIONS_SETUP.md │ │ ├── GITHUB_ACTIONS_VERIFICATION.md │ │ ├── PIPELINE_CLEANUP_PLAN.md │ │ ├── QUICK_REFERENCE_TESTING.md │ │ ├── QUICK_START_BUILD.md │ │ ├── README_BUILD_CONFIGURATION.md │ │ ├── README_CI_CD_SECTION.md │ │ ├── STREAMLINED_CI_CD.md │ │ └── TESTING_WORKFLOW_STRATEGY.md │ ├── competitive-analysis/ │ │ ├── GAP_RUBRIC.md │ │ ├── PHASE_1_PRD.md │ │ ├── PHASE_2_PRD.md │ │ └── README.md │ ├── deploy/ │ │ └── RENDER.md │ ├── development/ │ │ ├── CODE_OF_CONDUCT.md │ │ ├── CONTRIBUTING.md │ │ ├── CONTRIBUTOR_GUIDE.md │ │ ├── FRONTEND_QUALITY_GATES.md │ │ ├── LOCAL_DEVELOPMENT_WITH_ANALYTICS.md │ │ ├── LOCAL_TESTING_WITH_SQLITE.md │ │ ├── MODULE_INTEGRATION_IMPLEMENTATION.md │ │ ├── MODULE_INTEGRATION_PLAN.md │ │ ├── MODULE_STRUCTURE_ANALYSIS.md │ │ ├── PROJECT_STRUCTURE.md │ │ ├── RBAC_PERMISSION_MODEL.md │ │ ├── README.md │ │ ├── SEED_DEV_DATA.md │ │ └── SERVICE_LAYER_AND_BASE_CRUD.md │ ├── events.md │ ├── features/ │ │ ├── ALEMBIC_MIGRATION_README.md │ │ ├── ALEMBIC_MIGRATION_SUMMARY.md │ │ ├── BADGES.md │ │ ├── CALDAV_INTEGRATION.md │ │ ├── CALDAV_QUICK_SETUP.md │ │ ├── CALENDAR_QUICK_START.md │ │ ├── CALENDAR_QUICK_WINS_SUMMARY.md │ │ ├── CALENDAR_QUICK_WINS_VISUAL_GUIDE.md │ │ ├── CSV_EXPORT_ENHANCED.md │ │ ├── INVENTORY_IMPLEMENTATION_STATUS.md │ │ ├── INVENTORY_MANAGEMENT_PLAN.md │ │ ├── INVENTORY_MISSING_FEATURES.md │ │ ├── KEYBOARD_AND_NOTIFICATIONS_FIX.md │ │ ├── KEYBOARD_SHORTCUTS_ENHANCED.md │ │ ├── KEYBOARD_SHORTCUTS_FINAL_FIX.md │ │ ├── KEYBOARD_SHORTCUTS_FIXED.md │ │ ├── KEYBOARD_SHORTCUTS_README.md │ │ ├── LAYOUT_IMPROVEMENTS_COMPLETE.md │ │ ├── MIGRATION_INSTRUCTIONS.md │ │ ├── MULTISELECT_FILTERS.md │ │ ├── OVERTIME_TRACKING.md │ │ ├── PROJECT_COSTS_FEATURE.md │ │ ├── PROJECT_COSTS_IMPLEMENTATION_SUMMARY.md │ │ ├── PROJECT_DASHBOARD.md │ │ ├── QUICK_START_PROJECT_COSTS.md │ │ ├── RUN_BLACK_FORMATTING.md │ │ ├── SMART_NOTIFICATIONS.md │ │ ├── TIME_ENTRY_DUPLICATION.md │ │ ├── TIME_ENTRY_TEMPLATES.md │ │ ├── USER_DELETION.md │ │ ├── WORKFORCE_DELETE.md │ │ ├── activity_feed.md │ │ ├── kanban/ │ │ │ ├── CUSTOM_KANBAN_README.md │ │ │ ├── DEBUG_KANBAN_COLUMNS.md │ │ │ ├── KANBAN_AUTO_REFRESH_COMPLETE.md │ │ │ ├── KANBAN_CUSTOMIZATION.md │ │ │ ├── KANBAN_REFRESH_FINAL_FIX.md │ │ │ └── KANBAN_REFRESH_SOLUTION.md │ │ └── webhooks.md │ ├── guides/ │ │ ├── DEPLOYMENT_GUIDE.md │ │ ├── IMPROVEMENTS_QUICK_REFERENCE.md │ │ ├── QUICK_START_GUIDE.md │ │ ├── QUICK_START_LOCAL_DEVELOPMENT.md │ │ └── README.md │ ├── implementation-notes/ │ │ ├── ACTIVITY_LOGGING_INTEGRATION_GUIDE.md │ │ ├── ADVANCED_FEATURES_IMPLEMENTATION_GUIDE.md │ │ ├── ADVANCED_PERMISSIONS_IMPLEMENTATION_SUMMARY.md │ │ ├── ADVANCED_REPORT_BUILDER_IMPLEMENTATION.md │ │ ├── ANALYTICS_IMPROVEMENTS_SUMMARY.md │ │ ├── APPLICATION_REVIEW_2025.md │ │ ├── ARCHITECTURE_MIGRATION_GUIDE.md │ │ ├── AVATAR_PERSISTENCE_CHANGELOG.md │ │ ├── BROWSER_CACHE_FIX.md │ │ ├── BUGFIX_DB_IMPORT.md │ │ ├── BUGFIX_METADATA_RESERVED.md │ │ ├── BULK_OPERATIONS_IMPROVEMENTS.md │ │ ├── CALENDAR_IMPROVEMENTS_SUMMARY.md │ │ ├── CHANGES_SUMMARY.md │ │ ├── CHANGES_SUMMARY_TESTING_WORKFLOW.md │ │ ├── COMMAND_PALETTE_CHANGELOG.md │ │ ├── COMMAND_PALETTE_IMPROVEMENTS.md │ │ ├── COMMENT_ATTACHMENTS_IMPLEMENTATION.md │ │ ├── COMMENT_ATTACHMENTS_OPTIMIZATION.md │ │ ├── COMPLETE_ADVANCED_FEATURES_SUMMARY.md │ │ ├── COMPLETE_IMPLEMENTATION_CHECKLIST.md │ │ ├── COMPLETE_IMPLEMENTATION_FINAL.md │ │ ├── COMPLETE_IMPLEMENTATION_REVIEW.md │ │ ├── COMPLETE_IMPLEMENTATION_SUMMARY.md │ │ ├── COMPREHENSIVE_IMPLEMENTATION_STATUS.md │ │ ├── COMPREHENSIVE_IMPLEMENTATION_SUMMARY.md │ │ ├── CONFIGURATION_FINAL_SUMMARY.md │ │ ├── COVERAGE_FIX_SUMMARY.md │ │ ├── DASHBOARD_NAVBAR_IMPROVEMENTS.md │ │ ├── DEFAULT_DATA_SEEDING_FIX_CHANGELOG.md │ │ ├── DELETION_AND_STATUS_IMPROVEMENTS.md │ │ ├── DOCUMENTATION_RESTRUCTURE_SUMMARY.md │ │ ├── ENHANCEMENT_PLAN_IMPLEMENTATION_STATUS.md │ │ ├── ENHANCEMENT_PLAN_PROGRESS_SUMMARY.md │ │ ├── FEATURE_IMPLEMENTATION_PROGRESS.md │ │ ├── FINAL_IMPLEMENTATION_REPORT.md │ │ ├── FINAL_IMPLEMENTATION_SUMMARY.md │ │ ├── FINAL_SUMMARY.md │ │ ├── FORCE_NO_CACHE_FIX.md │ │ ├── HIGH_IMPACT_FEATURES.md │ │ ├── HIGH_IMPACT_SUMMARY.md │ │ ├── IMPLEMENTATION_COMPLETE.md │ │ ├── IMPLEMENTATION_COMPLETE_SUMMARY.md │ │ ├── IMPLEMENTATION_PROGRESS_2025.md │ │ ├── IMPLEMENTATION_STATUS.md │ │ ├── IMPLEMENTATION_SUMMARY.md │ │ ├── IMPLEMENTATION_SUMMARY_CONTINUED.md │ │ ├── IMPLEMENTATION_SUMMARY_DEFAULT_DATA_SEEDING.md │ │ ├── INTEGRATION_REFACTORING_PLAN.md │ │ ├── INVENTORY_PO_FORM_JSON.md │ │ ├── KANBAN_IMPROVEMENTS.md │ │ ├── KEYBOARD_SHORTCUTS_SUMMARY.md │ │ ├── MANUAL_ENTRY_WORKED_TIME_FIX_559.md │ │ ├── MIGRATION_018_FIX_SUMMARY.md │ │ ├── MIGRATION_VALIDATION_FIX.md │ │ ├── NOTIFICATION_SYSTEM_SUMMARY.md │ │ ├── OIDC_IMPROVEMENTS.md │ │ ├── OIDC_LOGOUT_FIX_SUMMARY.md │ │ ├── PROGRESS_UPDATE.md │ │ ├── PROJECT_ANALYSIS_AND_IMPROVEMENTS.md │ │ ├── QUICK_FIX_SUMMARY.md │ │ ├── QUICK_START_ARCHITECTURE.md │ │ ├── QUICK_WINS_IMPLEMENTATION.md │ │ ├── QUICK_WINS_SUMMARY.md │ │ ├── README_IMPROVEMENTS.md │ │ ├── README_NEW_ARCHITECTURE.md │ │ ├── REPORTS_IMPROVEMENTS_SUMMARY.md │ │ ├── ROUTE_REGISTRATION_AND_TEMPLATES_COMPLETE.md │ │ ├── SESSION_CLOSE_ERROR_FIX.md │ │ ├── SESSION_SUMMARY.md │ │ ├── SMOKETEST_FIXES_SUMMARY.md │ │ ├── STYLING_CONSISTENCY_SUMMARY.md │ │ ├── TESTING_COMPLETE.md │ │ ├── TOAST_NOTIFICATION_IMPROVEMENTS.md │ │ ├── TRANSLATION_FIXES_SUMMARY.md │ │ ├── TRANSLATION_IMPROVEMENTS_SUMMARY.md │ │ ├── UI_IMPROVEMENTS_SUMMARY.md │ │ ├── UX_QUICK_WINS_IMPLEMENTATION.md │ │ └── VERSION_MANAGEMENT_SUMMARY.md │ ├── import_export/ │ │ └── README.md │ ├── integrations/ │ │ ├── ACTIVITYWATCH.md │ │ ├── LINEAR.md │ │ └── XERO.md │ ├── mobile-desktop-apps/ │ │ ├── FINAL_REVIEW.md │ │ ├── IMPLEMENTATION_COMPLETE.md │ │ ├── IMPLEMENTATION_SUMMARY.md │ │ ├── README.md │ │ └── REVIEW.md │ ├── pdf_template_alternatives_research.md │ ├── privacy.md │ ├── reports/ │ │ ├── ALL_BUGFIXES_SUMMARY.md │ │ ├── README.md │ │ ├── TRANSLATION_ANALYSIS_REPORT.md │ │ ├── UNPAID_BY_SALESMAN_AND_SCHEDULED_REPORTS.md │ │ └── i18n_audit_report.md │ ├── telemetry-architecture.md │ ├── testing/ │ │ ├── TESTING_STRATEGY.md │ │ ├── TEST_PERFORMANCE_OPTIMIZATIONS.md │ │ ├── TEST_REPORT.md │ │ └── TEST_RESULTS_AVATAR_PERSISTENCE.md │ └── user-guides/ │ └── DUPLICATING_TIME_ENTRIES.md ├── donate_hide_public.pem ├── env.example ├── env.local-test.example ├── examples/ │ └── zapier/ │ └── webhook_time_entry_created.json ├── grafana/ │ └── provisioning/ │ └── datasources/ │ └── prometheus.yml ├── loki/ │ └── loki-config.yml ├── migrations/ │ ├── MIGRATION_GUIDE.md │ ├── README.md │ ├── add_analytics_column.sql │ ├── add_analytics_setting.py │ ├── add_project_costs.sql │ ├── alembic.ini │ ├── ensure_uploads_persistence.py │ ├── env.py │ ├── fix_invoice_currency.py │ ├── fix_invoice_pdf_template_items_source.py │ ├── legacy_schema_migration.py │ ├── manage_migrations.py │ ├── migrate_existing_database.py │ ├── migrate_to_client_model.py │ ├── migration_019_kanban_columns.py │ ├── script.py.mako │ ├── test_migration_system.py │ └── versions/ │ ├── 001_initial_schema.py │ ├── 002_add_user_full_name.py │ ├── 003_add_user_theme_preference.py │ ├── 004_add_task_activities_table.py │ ├── 005_add_missing_columns.py │ ├── 006_add_logo_and_task_timestamps.py │ ├── 007_add_invoice_and_more_settings_columns.py │ ├── 008_align_invoices_and_settings_more.py │ ├── 009_add_invoice_created_by.py │ ├── 010_enforce_single_active_timer.py │ ├── 011_add_user_preferred_language.py │ ├── 012_add_pdf_template_fields.py │ ├── 013_add_comments_table.py │ ├── 014_add_payment_tracking.py │ ├── 015_add_user_oidc_fields.py │ ├── 016_add_focus_recurring_rates_filters_and_project_budget.py │ ├── 017_reporting_invoicing_extensions.py │ ├── 018_add_project_costs_table.py │ ├── 019_add_kanban_columns_table.py │ ├── 020_add_user_avatar.py │ ├── 021_add_extra_goods_table.py │ ├── 022_add_project_code_field.py │ ├── 023_add_user_favorite_projects.py │ ├── 024_add_client_notes_table.py │ ├── 026_add_project_archiving_metadata.py │ ├── 027_add_user_time_rounding_preferences.py │ ├── 028_add_weekly_time_goals.py │ ├── 029_add_expenses_table.py │ ├── 030_add_permission_system.py │ ├── 031_add_standard_hours_per_day.py │ ├── 032_add_api_tokens.py │ ├── 033_add_email_settings.py │ ├── 034_add_calendar_events_table.py │ ├── 035_enhance_payments_table.py │ ├── 036_add_pdf_design_json.py │ ├── 037_advanced_expenses.py │ ├── 038_fix_advanced_expenses_schema.py │ ├── 039_add_budget_alerts_table.py │ ├── 040_add_import_export_tables.py │ ├── 041_add_invoice_pdf_templates_table.py │ ├── 042_client_prepaid_hours.py │ ├── 043_add_project_id_to_kanban_columns.py │ ├── 044_add_audit_logs_table.py │ ├── 045_add_recurring_invoices_and_email_tracking.py │ ├── 046_add_webhooks_system.py │ ├── 047_add_client_portal_fields.py │ ├── 048_add_client_portal_credentials.py │ ├── 049_add_client_password_setup_token.py │ ├── 050_add_offers_table.py │ ├── 051_rename_offers_to_quotes_and_add_features.py │ ├── 052_add_quote_discount_fields.py │ ├── 053_add_quote_payment_terms.py │ ├── 054_add_quote_comments.py │ ├── 055_add_quote_attachments.py │ ├── 056_add_quote_approval_workflow.py │ ├── 057_add_quote_templates.py │ ├── 058_add_quote_versions.py │ ├── 059_add_inventory_management.py │ ├── 060_add_supplier_management.py │ ├── 061_add_purchase_orders.py │ ├── 062_add_performance_indexes.py │ ├── 063_add_crm_features.py │ ├── 064_add_kiosk_mode_settings.py │ ├── 065_add_new_features.py │ ├── 066_add_integration_framework.py │ ├── 067_add_integration_credentials.py │ ├── 067b_alias_067_add_integration_credentials.py │ ├── 068_add_user_password_hash.py │ ├── 069_add_workflow_automation.py │ ├── 070_add_time_entry_approvals.py │ ├── 071_add_recurring_tasks.py │ ├── 072_add_client_portal_customization_and_team_chat.py │ ├── 073_add_ai_features_and_gps_tracking.py │ ├── 074_add_password_change_required.py │ ├── 075_add_client_custom_fields_and_link_templates.py │ ├── 076_add_client_billing_to_time_entries.py │ ├── 077_add_ui_feature_flags.py │ ├── 078_add_system_ui_feature_flags.py │ ├── 079_rename_user_badges_metadata_column.py │ ├── 080_fix_metadata_column_names.py │ ├── 081_add_all_integration_credentials.py │ ├── 082_add_global_integrations.py │ ├── 083_add_paid_status_to_time_entries.py │ ├── 084_add_custom_field_definitions.py │ ├── 085_add_project_custom_fields.py │ ├── 086_add_project_and_client_attachments.py │ ├── 087_add_salesman_email_mapping.py │ ├── 088_add_salesman_splitting_to_reports.py │ ├── 089_allow_auto_entries_without_project_or_client.py │ ├── 089_fix_roles_permissions_sequences.py │ ├── 090_add_push_subscriptions_table.py │ ├── 090_enhance_report_builder_iteration.py │ ├── 092_add_missing_module_visibility_flags.py │ ├── 093_remove_ui_allow_module_flags.py │ ├── 094_add_donation_interactions.py │ ├── 095_add_missing_ui_show_issues.py │ ├── 096_add_missing_portal_issues_enabled.py │ ├── 097_add_stock_lots_for_devaluation.py │ ├── 098_add_invoice_peppol_transmissions.py │ ├── 099_add_peppol_settings_columns.py │ ├── 100_add_comment_attachments.py │ ├── 100_add_gantt_colors_and_modules_disabled.py │ ├── 101_add_issues_table.py │ ├── 102_add_missing_quotes_template_id.py │ ├── 103_add_missing_quotes_quote_number.py │ ├── 104_add_missing_quotes_columns.py │ ├── 105_fix_client_notifications_cascade_delete.py │ ├── 106_add_reportlab_template_json.py │ ├── 107_increase_invoice_prefix_length.py │ ├── 108_add_decorative_images.py │ ├── 109_add_pdf_template_date_format.py │ ├── 110_add_disabled_module_ids.py │ ├── 111_add_use_last_month_dates.py │ ├── 112_add_invoices_peppol_compliant.py │ ├── 113_add_invoice_buyer_reference.py │ ├── 114_enhance_audit_logs_for_timeentry.py │ ├── 115_add_exclude_weekends_to_weekly_goals.py │ ├── 116_merge_three_heads.py │ ├── 117_add_user_calendar_type_colors.py │ ├── 118_add_locked_client_id.py │ ├── 118_add_role_hidden_module_ids.py │ ├── 119_add_settings_date_time_format.py │ ├── 120_user_nullable_date_time_format.py │ ├── 121_add_ui_show_donate_and_system_instance_id.py │ ├── 122_add_settings_donate_ui_hidden.py │ ├── 123_add_calendar_default_view.py │ ├── 124_add_time_entry_requirements.py │ ├── 125_add_default_daily_working_hours.py │ ├── 126_add_overtime_include_weekends_to_users.py │ ├── 127_add_user_clients_table.py │ ├── 128_add_invoices_zugferd_pdf.py │ ├── 129_add_task_tags.py │ ├── 129_merge_118_128_heads.py │ ├── 130_add_peppol_transport_mode_and_native.py │ ├── 131_add_donation_interaction_variant.py │ ├── 132_add_timesheet_governance_and_time_off.py │ ├── 133_merge_132_and_129_task_tags_heads.py │ ├── 134_add_overtime_weekly_mode.py │ ├── 135_add_remind_to_log_settings.py │ ├── 136_seed_overtime_leave_type.py │ ├── 137_add_break_time_to_time_entries.py │ ├── 138_add_default_break_rules_settings.py │ ├── 139_add_keyboard_shortcuts_overrides.py │ ├── 140_add_client_portal_dashboard_preferences.py │ ├── 141_add_invoice_number_pattern.py │ ├── 142_add_mail_test_recipient.py │ ├── 143_add_task_custom_fields.py │ ├── 144_api_idempotency_keys.py │ ├── 145_add_quotes_requires_approval_columns.py │ ├── 146_add_quote_item_position.py │ ├── 147_add_quote_item_line_kind.py │ ├── 148_add_user_dismissed_release_version.py │ ├── 149_add_user_support_stats_reports_generated.py │ ├── 150_add_smart_notifications.py │ ├── 151_add_ai_helper_settings.py │ ├── 152_add_user_totp_2fa.py │ ├── 153_add_user_auth_provider.py │ ├── 20250127_000001_add_client_features.py │ ├── 20251220_000001_add_integration_external_event_links.py │ └── add_quick_wins_features.py ├── mobile/ │ ├── README.md │ ├── android/ │ │ ├── app/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── io/ │ │ │ │ └── flutter/ │ │ │ │ └── plugins/ │ │ │ │ └── GeneratedPluginRegistrant.java │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── timetracker/ │ │ │ └── mobile/ │ │ │ └── MainActivity.kt │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── local.properties │ │ └── settings.gradle │ ├── assets/ │ │ ├── .gitkeep │ │ └── icon/ │ │ └── README.md │ ├── flutter_launcher_icons_ios.yaml │ ├── ios/ │ │ ├── Flutter/ │ │ │ ├── Generated.xcconfig │ │ │ ├── ephemeral/ │ │ │ │ ├── flutter_lldb_helper.py │ │ │ │ └── flutter_lldbinit │ │ │ └── flutter_export_environment.sh │ │ ├── Podfile │ │ └── Runner/ │ │ ├── Assets.xcassets/ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── GeneratedPluginRegistrant.h │ │ ├── GeneratedPluginRegistrant.m │ │ └── Info.plist │ ├── lib/ │ │ ├── core/ │ │ │ ├── config/ │ │ │ │ └── app_config.dart │ │ │ ├── constants/ │ │ │ │ └── app_constants.dart │ │ │ ├── telemetry/ │ │ │ │ └── mobile_otel.dart │ │ │ └── theme/ │ │ │ ├── app_theme.dart │ │ │ └── app_tokens.dart │ │ ├── data/ │ │ │ ├── api/ │ │ │ │ └── api_client.dart │ │ │ ├── models/ │ │ │ │ ├── project.dart │ │ │ │ ├── task.dart │ │ │ │ ├── time_entry.dart │ │ │ │ ├── time_entry_requirements.dart │ │ │ │ ├── timer.dart │ │ │ │ └── user_prefs.dart │ │ │ └── storage/ │ │ │ ├── local_storage.dart │ │ │ └── sync_service.dart │ │ ├── domain/ │ │ │ ├── repositories/ │ │ │ │ └── time_tracking_repository.dart │ │ │ └── usecases/ │ │ │ └── sync_usecase.dart │ │ ├── main.dart │ │ ├── presentation/ │ │ │ ├── providers/ │ │ │ │ ├── api_provider.dart │ │ │ │ ├── finance_workforce_providers.dart │ │ │ │ ├── projects_provider.dart │ │ │ │ ├── tasks_provider.dart │ │ │ │ ├── theme_mode_provider.dart │ │ │ │ ├── time_entries_provider.dart │ │ │ │ ├── time_entry_requirements_provider.dart │ │ │ │ ├── timer_provider.dart │ │ │ │ └── user_prefs_provider.dart │ │ │ ├── screens/ │ │ │ │ ├── finance_workforce_screen.dart │ │ │ │ ├── home_screen.dart │ │ │ │ ├── login_screen.dart │ │ │ │ ├── projects_screen.dart │ │ │ │ ├── settings_screen.dart │ │ │ │ ├── splash_screen.dart │ │ │ │ ├── time_entries_screen.dart │ │ │ │ ├── time_entry_form_screen.dart │ │ │ │ └── timer_screen.dart │ │ │ └── widgets/ │ │ │ ├── empty_state.dart │ │ │ ├── error_view.dart │ │ │ ├── start_timer_sheet.dart │ │ │ ├── time_entry_card.dart │ │ │ └── timer_widget.dart │ │ └── utils/ │ │ ├── auth/ │ │ │ └── auth_service.dart │ │ ├── date_format_utils.dart │ │ ├── network/ │ │ │ ├── connection_diagnostics.dart │ │ │ ├── connection_diagnostics_io.dart │ │ │ └── connection_diagnostics_stub.dart │ │ └── ssl/ │ │ ├── certificate_error.dart │ │ ├── certificate_error_io.dart │ │ ├── certificate_error_stub.dart │ │ └── ssl_utils.dart │ ├── pubspec.yaml │ └── test/ │ ├── api_client_test.dart │ ├── models_test.dart │ └── widget_test.dart ├── nginx/ │ └── conf.d/ │ ├── example-public-domain.conf │ └── https.conf ├── package.json ├── postcss.config.js ├── prometheus/ │ └── prometheus.yml ├── promtail/ │ └── promtail-config.yml ├── pyproject.toml ├── pytest.ini ├── render.yaml ├── requirements-dev.txt ├── requirements-test.txt ├── requirements.txt ├── scripts/ │ ├── README-BUILD.md │ ├── apply_migration.py │ ├── audit_i18n.py │ ├── audit_migrations_portability.py │ ├── build-all.bat │ ├── build-all.sh │ ├── build-desktop-no-sign.bat │ ├── build-desktop-no-sign.sh │ ├── build-desktop-simple.bat │ ├── build-desktop-windows.bat │ ├── build-desktop-windows.ps1 │ ├── build-desktop.bat │ ├── build-desktop.sh │ ├── build-mobile.bat │ ├── build-mobile.sh │ ├── check-desktop-assets.sh │ ├── check_audit_logging.py │ ├── check_audit_logs.py │ ├── check_routes.py │ ├── clear-all-electron-cache.bat │ ├── clear-all-electron-cache.sh │ ├── clear-electron-builder-cache.bat │ ├── clear-electron-builder-cache.sh │ ├── complete_all_translations.py │ ├── complete_dutch_translations.py │ ├── complete_nl_translations.py │ ├── complete_spanish_translations.py │ ├── complete_spanish_translations_final.py │ ├── deploy-public.bat │ ├── deploy-public.sh │ ├── extract_translations.py │ ├── fill_po_argos.py │ ├── fix-desktop-build.bat │ ├── fix-desktop-build.sh │ ├── fix-onedrive-lock.ps1 │ ├── fix-windows-build.bat │ ├── fix-windows-build.sh │ ├── fix_missing_columns.py │ ├── fix_quotes_template_id.py │ ├── fix_translation_placeholders.py │ ├── generate-certs.sh │ ├── generate-changelog.py │ ├── generate-icons.js │ ├── generate-macos-icon.sh │ ├── generate-mobile-icon.bat │ ├── generate-mobile-icon.py │ ├── generate-mobile-icon.sh │ ├── generate_pwa_icons.py │ ├── prepare-desktop-assets.sh │ ├── quick_test_summary.py │ ├── reset-dev-db.bat │ ├── reset-dev-db.py │ ├── reset-dev-db.sh │ ├── run-tests.bat │ ├── run-tests.sh │ ├── run_model_tests.py │ ├── run_tests.sh │ ├── run_tests_individually.py │ ├── run_tests_script.py │ ├── sanitize_po_format_strings.py │ ├── seed-dev-data.py │ ├── setup-dev-analytics.bat │ ├── setup-dev-analytics.sh │ ├── setup-https-mkcert.bat │ ├── setup-https-mkcert.sh │ ├── setup-migrations.bat │ ├── setup-migrations.sh │ ├── start-https.bat │ ├── start-https.sh │ ├── start-local-test.bat │ ├── start-local-test.ps1 │ ├── start-local-test.sh │ ├── sync-desktop-version.py │ ├── sync-mobile-version.py │ ├── sync_translations.py │ ├── test-build-desktop.bat │ ├── test-docker-network.bat │ ├── test-docker-network.sh │ ├── test_audit_routes.py │ ├── translate_all_spanish.py │ ├── translate_dutch.py │ ├── translate_spanish.py │ ├── validate-setup.bat │ ├── validate-setup.py │ ├── validate-setup.sh │ ├── verify-desktop-setup.sh │ ├── verify_and_fix_schema.py │ ├── verify_audit_setup.py │ ├── verify_csrf_config.bat │ ├── verify_csrf_config.sh │ ├── version-manager.bat │ ├── version-manager.ps1 │ ├── version-manager.py │ └── version-manager.sh ├── setup.py ├── tailwind.config.js ├── tests/ │ ├── conftest.py │ ├── factories.py │ ├── models/ │ │ └── test_import_export_models.py │ ├── smoke_test_email.py │ ├── smoke_test_prepaid_hours.py │ ├── smoke_test_project_dashboard.py │ ├── smoke_test_user_settings.py │ ├── test_activity_feed.py │ ├── test_admin_dashboard_charts.py │ ├── test_admin_email_routes.py │ ├── test_admin_settings_logo.py │ ├── test_admin_users.py │ ├── test_analytics.py │ ├── test_api_audit_activities_v1.py │ ├── test_api_budget_alerts_v1.py │ ├── test_api_calendar_v1.py │ ├── test_api_client_notes_v1.py │ ├── test_api_comments_v1.py │ ├── test_api_comprehensive.py │ ├── test_api_contract.py │ ├── test_api_credit_notes_v1.py │ ├── test_api_deprecation_headers.py │ ├── test_api_expenses_v1.py │ ├── test_api_favorites_v1.py │ ├── test_api_invoice_templates_api_v1.py │ ├── test_api_invoice_templates_v1.py │ ├── test_api_invoices_v1.py │ ├── test_api_kanban_v1.py │ ├── test_api_mileage_v1.py │ ├── test_api_payments_v1.py │ ├── test_api_per_diem_v1.py │ ├── test_api_project_costs_v1.py │ ├── test_api_purchase_orders_v1.py │ ├── test_api_recurring_invoices_v1.py │ ├── test_api_route_contract.py │ ├── test_api_saved_filters_v1.py │ ├── test_api_tax_currency_v1.py │ ├── test_api_time_entry_templates_v1.py │ ├── test_api_v1.py │ ├── test_api_v1_inventory_movements.py │ ├── test_audit_log_model.py │ ├── test_audit_log_routes.py │ ├── test_audit_logging.py │ ├── test_audit_trail_smoke.py │ ├── test_basic.py │ ├── test_budget_alert_model.py │ ├── test_budget_alerts_smoke.py │ ├── test_budget_forecasting.py │ ├── test_bulk_task_operations.py │ ├── test_calendar_event_model.py │ ├── test_calendar_routes.py │ ├── test_cii_invoice.py │ ├── test_client_note_model.py │ ├── test_client_notes_routes.py │ ├── test_client_portal.py │ ├── test_client_prepaid_model.py │ ├── test_client_single_simplification.py │ ├── test_comprehensive_tracking.py │ ├── test_config_priority.py │ ├── test_currency_display.py │ ├── test_custom_field_definitions.py │ ├── test_delete_actions.py │ ├── test_demo_mode_and_safe_templates.py │ ├── test_email.py │ ├── test_enhanced_ui.py │ ├── test_error_handling.py │ ├── test_excel_export.py │ ├── test_expenses.py │ ├── test_extra_good_model.py │ ├── test_factories_smoke.py │ ├── test_favorite_projects.py │ ├── test_i18n.py │ ├── test_import_export.py │ ├── test_installation_config.py │ ├── test_integration/ │ │ ├── test_activitywatch_integration.py │ │ ├── test_caldav_integration.py │ │ ├── test_inventory_integration.py │ │ └── test_jira_integration.py │ ├── test_invoice_currency_fix.py │ ├── test_invoice_currency_smoke.py │ ├── test_invoice_email.py │ ├── test_invoice_expenses.py │ ├── test_invoice_numbering.py │ ├── test_invoice_pdf_postprocess.py │ ├── test_invoice_validators.py │ ├── test_invoices.py │ ├── test_keyboard_shortcuts.py │ ├── test_keyboard_shortcuts_api.py │ ├── test_keyboard_shortcuts_input_fix.py │ ├── test_ldap_auth.py │ ├── test_ldap_setup_wizard.py │ ├── test_logo_pdf.py │ ├── test_models/ │ │ ├── test_expense_category.py │ │ ├── test_inventory_models.py │ │ ├── test_mileage.py │ │ ├── test_per_diem.py │ │ ├── test_purchase_order.py │ │ ├── test_supplier.py │ │ └── test_webhook.py │ ├── test_models_comprehensive.py │ ├── test_models_extended.py │ ├── test_multiselect_filters.py │ ├── test_new_features.py │ ├── test_oidc_logout.py │ ├── test_oidc_session_cookie_bloat.py │ ├── test_onboarding.py │ ├── test_otel_integration.py │ ├── test_overtime.py │ ├── test_overtime_leave.py │ ├── test_overtime_smoke.py │ ├── test_payment_model.py │ ├── test_payment_routes.py │ ├── test_payment_smoke.py │ ├── test_pdf_layout.py │ ├── test_pdfa3.py │ ├── test_peppol_identifiers.py │ ├── test_peppol_service.py │ ├── test_permissions.py │ ├── test_permissions_routes.py │ ├── test_prepaid_allocator.py │ ├── test_profile_avatar.py │ ├── test_project_archiving.py │ ├── test_project_archiving_models.py │ ├── test_project_costs.py │ ├── test_project_dashboard.py │ ├── test_project_inactive_status.py │ ├── test_quick_wins.py │ ├── test_reports_task_report.py │ ├── test_repositories/ │ │ ├── __init__.py │ │ ├── test_base_repository.py │ │ └── test_time_entry_repository.py │ ├── test_role_module_visibility.py │ ├── test_routes/ │ │ ├── test_api_search.py │ │ ├── test_api_smart_notifications.py │ │ ├── test_api_v1_calendar_templates_refactored.py │ │ ├── test_api_v1_expenses_complete.py │ │ ├── test_api_v1_inventory_reports.py │ │ ├── test_api_v1_inventory_transfers.py │ │ ├── test_api_v1_invoices_tasks_expenses_refactored.py │ │ ├── test_api_v1_mileage_refactored.py │ │ ├── test_api_v1_payments_refactored.py │ │ ├── test_api_v1_projects_refactored.py │ │ ├── test_api_v1_quotes_refactored.py │ │ ├── test_api_v1_recurring_invoices_credit_notes.py │ │ ├── test_api_v1_reports_refactored.py │ │ ├── test_api_v1_time_entries_complete.py │ │ ├── test_api_v1_time_entries_refactored.py │ │ ├── test_api_version_check.py │ │ ├── test_auth.py │ │ ├── test_inventory_routes.py │ │ ├── test_main_dashboard_cached.py │ │ ├── test_purchase_order_routes.py │ │ ├── test_quotes_web.py │ │ ├── test_reports_scope.py │ │ ├── test_supplier_routes.py │ │ └── test_timer_scope.py │ ├── test_routes.py │ ├── test_security.py │ ├── test_service_worker.py │ ├── test_services/ │ │ ├── __init__.py │ │ ├── test_api_token_service.py │ │ ├── test_comment_service.py │ │ ├── test_export_service.py │ │ ├── test_invoice_service.py │ │ ├── test_notification_service.py │ │ ├── test_payment_service.py │ │ ├── test_payment_service_complete.py │ │ ├── test_project_service.py │ │ ├── test_recurring_invoice_service.py │ │ ├── test_reporting_service.py │ │ ├── test_stats_service.py │ │ ├── test_task_service.py │ │ ├── test_time_entry_bulk_service.py │ │ ├── test_time_tracking_service.py │ │ ├── test_time_tracking_service_complete.py │ │ └── test_version_service.py │ ├── test_silent_exception_fixes.py │ ├── test_single_active_timer_setting.py │ ├── test_support_services.py │ ├── test_system_ui_flags.py │ ├── test_task_edit_project.py │ ├── test_tasks_filters_ui.py │ ├── test_tasks_templates.py │ ├── test_telemetry.py │ ├── test_telemetry_consent_and_base.py │ ├── test_time_entry_duplication.py │ ├── test_time_entry_freeze.py │ ├── test_time_entry_resume.py │ ├── test_time_entry_templates.py │ ├── test_time_rounding.py │ ├── test_time_rounding_param.py │ ├── test_timer_edit_own_time_entries.py │ ├── test_timezone.py │ ├── test_ui_quick_wins.py │ ├── test_uploads_persistence.py │ ├── test_user_report_entries_export_excel.py │ ├── test_user_settings.py │ ├── test_utils/ │ │ ├── test_api_auth_enhanced.py │ │ ├── test_cache.py │ │ ├── test_integration_sync_context.py │ │ ├── test_scope_filter.py │ │ ├── test_version_compare.py │ │ └── test_webhook_service.py │ ├── test_utils.py │ ├── test_version_reading.py │ ├── test_weekly_goals.py │ └── test_zugferd.py └── translations/ ├── .keep ├── ar/ │ └── LC_MESSAGES/ │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── de/ │ └── LC_MESSAGES/ │ ├── .keep │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── en/ │ └── LC_MESSAGES/ │ └── messages.po ├── es/ │ └── LC_MESSAGES/ │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── fi/ │ └── LC_MESSAGES/ │ ├── .keep │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── fr/ │ └── LC_MESSAGES/ │ ├── .keep │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── he/ │ └── LC_MESSAGES/ │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── it/ │ └── LC_MESSAGES/ │ ├── .keep │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── nb/ │ └── LC_MESSAGES/ │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── nl/ │ └── LC_MESSAGES/ │ ├── .keep │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 ├── no/ │ └── LC_MESSAGES/ │ ├── messages.po │ ├── messages.po.bak │ └── messages.po.bak2 └── pt/ └── LC_MESSAGES/ └── messages.po