openapi: 3.2.0 info: title: Operations Hub Accounting API version: 0.1.1 description: '' servers: [] tags: - name: Accounting paths: /api/accounting/overview: get: operationId: accounting_api_v2_get_accounting_overview summary: Get Accounting Overview parameters: - in: query name: start_date schema: anyOf: - format: date type: string - type: 'null' description: Start date for filtering charges title: Start Date required: false description: Start date for filtering charges - in: query name: end_date schema: anyOf: - format: date type: string - type: 'null' description: End date for filtering charges title: End Date required: false description: End date for filtering charges - in: query name: search schema: anyOf: - type: string - type: 'null' description: Search by project code (partial matching) title: Search required: false description: Search by project code (partial matching) - in: query name: clients schema: anyOf: - type: string - type: 'null' description: Filter by client names (comma-separated) title: Clients required: false description: Filter by client names (comma-separated) - in: query name: pm schema: anyOf: - type: string - type: 'null' description: Filter by project managers (comma-separated) title: Pm required: false description: Filter by project managers (comma-separated) - in: query name: region schema: anyOf: - type: string - type: 'null' description: Filter by regions (comma-separated) title: Region required: false description: Filter by regions (comma-separated) - in: query name: country schema: anyOf: - type: string - type: 'null' description: Filter by countries (comma-separated) title: Country required: false description: Filter by countries (comma-separated) - in: query name: project_status schema: anyOf: - type: string - type: 'null' description: Filter by core project status (comma-separated) title: Project Status required: false description: Filter by core project status (comma-separated) - in: query name: service_code schema: anyOf: - type: string - type: 'null' description: Filter by billable service code (comma-separated) title: Service Code required: false description: Filter by billable service code (comma-separated) - in: query name: service_unit_type schema: anyOf: - type: string - type: 'null' description: Filter by service unit type (comma-separated) title: Service Unit Type required: false description: Filter by service unit type (comma-separated) - in: query name: robot_set schema: anyOf: - type: string - type: 'null' description: Filter by robot set (comma-separated) title: Robot Set required: false description: Filter by robot set (comma-separated) - in: query name: total_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue (in project currency) title: Total Revenue Min required: false description: Minimum total revenue (in project currency) - in: query name: total_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue (in project currency) title: Total Revenue Max required: false description: Maximum total revenue (in project currency) - in: query name: total_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in EUR title: Total Revenue Eur Min required: false description: Minimum total revenue in EUR - in: query name: total_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in EUR title: Total Revenue Eur Max required: false description: Maximum total revenue in EUR - in: query name: total_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in USD title: Total Revenue Usd Min required: false description: Minimum total revenue in USD - in: query name: total_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in USD title: Total Revenue Usd Max required: false description: Maximum total revenue in USD - in: query name: total_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in AUD title: Total Revenue Aud Min required: false description: Minimum total revenue in AUD - in: query name: total_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in AUD title: Total Revenue Aud Max required: false description: Maximum total revenue in AUD - in: query name: added_to_invoice_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue (in project currency) title: Added To Invoice Revenue Min required: false description: Minimum added to invoice revenue (in project currency) - in: query name: added_to_invoice_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue (in project currency) title: Added To Invoice Revenue Max required: false description: Maximum added to invoice revenue (in project currency) - in: query name: added_to_invoice_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in EUR title: Added To Invoice Revenue Eur Min required: false description: Minimum added to invoice revenue in EUR - in: query name: added_to_invoice_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in EUR title: Added To Invoice Revenue Eur Max required: false description: Maximum added to invoice revenue in EUR - in: query name: added_to_invoice_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in USD title: Added To Invoice Revenue Usd Min required: false description: Minimum added to invoice revenue in USD - in: query name: added_to_invoice_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in USD title: Added To Invoice Revenue Usd Max required: false description: Maximum added to invoice revenue in USD - in: query name: added_to_invoice_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in AUD title: Added To Invoice Revenue Aud Min required: false description: Minimum added to invoice revenue in AUD - in: query name: added_to_invoice_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in AUD title: Added To Invoice Revenue Aud Max required: false description: Maximum added to invoice revenue in AUD - in: query name: actual_planned_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue (in project currency) title: Actual Planned Revenue Min required: false description: Minimum actual planned revenue (in project currency) - in: query name: actual_planned_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue (in project currency) title: Actual Planned Revenue Max required: false description: Maximum actual planned revenue (in project currency) - in: query name: actual_planned_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in EUR title: Actual Planned Revenue Eur Min required: false description: Minimum actual planned revenue in EUR - in: query name: actual_planned_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in EUR title: Actual Planned Revenue Eur Max required: false description: Maximum actual planned revenue in EUR - in: query name: actual_planned_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in USD title: Actual Planned Revenue Usd Min required: false description: Minimum actual planned revenue in USD - in: query name: actual_planned_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in USD title: Actual Planned Revenue Usd Max required: false description: Maximum actual planned revenue in USD - in: query name: actual_planned_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in AUD title: Actual Planned Revenue Aud Min required: false description: Minimum actual planned revenue in AUD - in: query name: actual_planned_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in AUD title: Actual Planned Revenue Aud Max required: false description: Maximum actual planned revenue in AUD - in: query name: total_quantity_min schema: anyOf: - type: integer - type: 'null' description: Minimum total quantity title: Total Quantity Min required: false description: Minimum total quantity - in: query name: total_quantity_max schema: anyOf: - type: integer - type: 'null' description: Maximum total quantity title: Total Quantity Max required: false description: Maximum total quantity - in: query name: actual_planned_quantity_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned quantity title: Actual Planned Quantity Min required: false description: Minimum actual planned quantity - in: query name: actual_planned_quantity_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned quantity title: Actual Planned Quantity Max required: false description: Maximum actual planned quantity - in: query name: fixed_planned_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue (in project currency) title: Fixed Planned Revenue Min required: false description: Minimum fixed planned revenue (in project currency) - in: query name: fixed_planned_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue (in project currency) title: Fixed Planned Revenue Max required: false description: Maximum fixed planned revenue (in project currency) - in: query name: fixed_planned_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in EUR title: Fixed Planned Revenue Eur Min required: false description: Minimum fixed planned revenue in EUR - in: query name: fixed_planned_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in EUR title: Fixed Planned Revenue Eur Max required: false description: Maximum fixed planned revenue in EUR - in: query name: fixed_planned_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in USD title: Fixed Planned Revenue Usd Min required: false description: Minimum fixed planned revenue in USD - in: query name: fixed_planned_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in USD title: Fixed Planned Revenue Usd Max required: false description: Maximum fixed planned revenue in USD - in: query name: fixed_planned_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in AUD title: Fixed Planned Revenue Aud Min required: false description: Minimum fixed planned revenue in AUD - in: query name: fixed_planned_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in AUD title: Fixed Planned Revenue Aud Max required: false description: Maximum fixed planned revenue in AUD - in: query name: invoiced_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue (in project currency) title: Invoiced Revenue Min required: false description: Minimum invoiced revenue (in project currency) - in: query name: invoiced_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue (in project currency) title: Invoiced Revenue Max required: false description: Maximum invoiced revenue (in project currency) - in: query name: invoiced_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in EUR title: Invoiced Revenue Eur Min required: false description: Minimum invoiced revenue in EUR - in: query name: invoiced_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in EUR title: Invoiced Revenue Eur Max required: false description: Maximum invoiced revenue in EUR - in: query name: invoiced_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in USD title: Invoiced Revenue Usd Min required: false description: Minimum invoiced revenue in USD - in: query name: invoiced_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in USD title: Invoiced Revenue Usd Max required: false description: Maximum invoiced revenue in USD - in: query name: invoiced_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in AUD title: Invoiced Revenue Aud Min required: false description: Minimum invoiced revenue in AUD - in: query name: invoiced_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in AUD title: Invoiced Revenue Aud Max required: false description: Maximum invoiced revenue in AUD - in: query name: draft_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges (in project currency) title: Draft Charges Min required: false description: Minimum draft charges (in project currency) - in: query name: draft_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges (in project currency) title: Draft Charges Max required: false description: Maximum draft charges (in project currency) - in: query name: draft_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in EUR title: Draft Charges Eur Min required: false description: Minimum draft charges in EUR - in: query name: draft_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in EUR title: Draft Charges Eur Max required: false description: Maximum draft charges in EUR - in: query name: draft_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in USD title: Draft Charges Usd Min required: false description: Minimum draft charges in USD - in: query name: draft_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in USD title: Draft Charges Usd Max required: false description: Maximum draft charges in USD - in: query name: draft_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in AUD title: Draft Charges Aud Min required: false description: Minimum draft charges in AUD - in: query name: draft_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in AUD title: Draft Charges Aud Max required: false description: Maximum draft charges in AUD - in: query name: approved_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges (in project currency) title: Approved Charges Min required: false description: Minimum approved charges (in project currency) - in: query name: approved_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges (in project currency) title: Approved Charges Max required: false description: Maximum approved charges (in project currency) - in: query name: approved_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in EUR title: Approved Charges Eur Min required: false description: Minimum approved charges in EUR - in: query name: approved_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in EUR title: Approved Charges Eur Max required: false description: Maximum approved charges in EUR - in: query name: approved_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in USD title: Approved Charges Usd Min required: false description: Minimum approved charges in USD - in: query name: approved_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in USD title: Approved Charges Usd Max required: false description: Maximum approved charges in USD - in: query name: approved_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in AUD title: Approved Charges Aud Min required: false description: Minimum approved charges in AUD - in: query name: approved_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in AUD title: Approved Charges Aud Max required: false description: Maximum approved charges in AUD - in: query name: require_po_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges (in project currency) title: Require Po Charges Min required: false description: Minimum require-PO charges (in project currency) - in: query name: require_po_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges (in project currency) title: Require Po Charges Max required: false description: Maximum require-PO charges (in project currency) - in: query name: require_po_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in EUR title: Require Po Charges Eur Min required: false description: Minimum require-PO charges in EUR - in: query name: require_po_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in EUR title: Require Po Charges Eur Max required: false description: Maximum require-PO charges in EUR - in: query name: require_po_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in USD title: Require Po Charges Usd Min required: false description: Minimum require-PO charges in USD - in: query name: require_po_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in USD title: Require Po Charges Usd Max required: false description: Maximum require-PO charges in USD - in: query name: require_po_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in AUD title: Require Po Charges Aud Min required: false description: Minimum require-PO charges in AUD - in: query name: require_po_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in AUD title: Require Po Charges Aud Max required: false description: Maximum require-PO charges in AUD - in: query name: closure_start_date schema: anyOf: - format: date type: string - type: 'null' description: Filter by project closure date start title: Closure Start Date required: false description: Filter by project closure date start - in: query name: closure_end_date schema: anyOf: - format: date type: string - type: 'null' description: Filter by project closure date end title: Closure End Date required: false description: Filter by project closure date end - in: query name: has_unresolved_comments schema: anyOf: - type: boolean - type: 'null' description: Filter by projects with unresolved comments title: Has Unresolved Comments required: false description: Filter by projects with unresolved comments - in: query name: page schema: anyOf: - type: integer - type: 'null' default: 1 description: Page number for pagination title: Page required: false description: Page number for pagination - in: query name: page_size schema: anyOf: - type: integer - type: 'null' default: 1000 description: Number of items per page title: Page Size required: false description: Number of items per page - in: query name: sort_by schema: anyOf: - $ref: '#/components/schemas/AccountingOverviewSortBy' - type: 'null' description: Field to sort by required: false description: Field to sort by - in: query name: sort_order schema: anyOf: - enum: - asc - desc type: string - type: 'null' default: asc description: Sort order (asc or desc) title: Sort Order required: false description: Sort order (asc or desc) responses: '200': description: OK content: application/json: schema: items: $ref: '#/components/schemas/ProjectRevenue' title: Response type: array '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Get accounting overview of revenue with filtering and pagination. Args: request: The HTTP request object. params: Query parameters for filtering and pagination. Supports filtering by: - search: Search by project code (partial matching) - clients: Filter by client names (comma-separated) - pm: Filter by project managers (comma-separated) - region: Filter by regions (comma-separated) - country: Filter by countries (comma-separated) - start_date/end_date: Date range filtering - project_status: Filter by core project status (comma-separated) - service_code: Filter by billable service code (comma-separated) - Revenue range filters (min/max): total_revenue, added_to_invoice_revenue, actual_planned_revenue (all with _eur/_usd/_aud variants) - Quantity range filters (min/max): total_quantity, actual_planned_quantity Pagination is handled automatically with page/page_size parameters. Response headers include Page, Page-Size, and Total-Count.' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/overview/summary: get: operationId: accounting_api_v2_get_accounting_overview_summary summary: Get Accounting Overview Summary parameters: - in: query name: start_date schema: anyOf: - format: date type: string - type: 'null' description: Start date for filtering charges title: Start Date required: false description: Start date for filtering charges - in: query name: end_date schema: anyOf: - format: date type: string - type: 'null' description: End date for filtering charges title: End Date required: false description: End date for filtering charges - in: query name: search schema: anyOf: - type: string - type: 'null' description: Search by project code (partial matching) title: Search required: false description: Search by project code (partial matching) - in: query name: clients schema: anyOf: - type: string - type: 'null' description: Filter by client names (comma-separated) title: Clients required: false description: Filter by client names (comma-separated) - in: query name: pm schema: anyOf: - type: string - type: 'null' description: Filter by project managers (comma-separated) title: Pm required: false description: Filter by project managers (comma-separated) - in: query name: region schema: anyOf: - type: string - type: 'null' description: Filter by regions (comma-separated) title: Region required: false description: Filter by regions (comma-separated) - in: query name: country schema: anyOf: - type: string - type: 'null' description: Filter by countries (comma-separated) title: Country required: false description: Filter by countries (comma-separated) - in: query name: project_status schema: anyOf: - type: string - type: 'null' description: Filter by core project status (comma-separated) title: Project Status required: false description: Filter by core project status (comma-separated) - in: query name: service_code schema: anyOf: - type: string - type: 'null' description: Filter by billable service code (comma-separated) title: Service Code required: false description: Filter by billable service code (comma-separated) - in: query name: service_unit_type schema: anyOf: - type: string - type: 'null' description: Filter by service unit type (comma-separated) title: Service Unit Type required: false description: Filter by service unit type (comma-separated) - in: query name: robot_set schema: anyOf: - type: string - type: 'null' description: Filter by robot set (comma-separated) title: Robot Set required: false description: Filter by robot set (comma-separated) - in: query name: total_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue (in project currency) title: Total Revenue Min required: false description: Minimum total revenue (in project currency) - in: query name: total_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue (in project currency) title: Total Revenue Max required: false description: Maximum total revenue (in project currency) - in: query name: total_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in EUR title: Total Revenue Eur Min required: false description: Minimum total revenue in EUR - in: query name: total_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in EUR title: Total Revenue Eur Max required: false description: Maximum total revenue in EUR - in: query name: total_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in USD title: Total Revenue Usd Min required: false description: Minimum total revenue in USD - in: query name: total_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in USD title: Total Revenue Usd Max required: false description: Maximum total revenue in USD - in: query name: total_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in AUD title: Total Revenue Aud Min required: false description: Minimum total revenue in AUD - in: query name: total_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in AUD title: Total Revenue Aud Max required: false description: Maximum total revenue in AUD - in: query name: added_to_invoice_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue (in project currency) title: Added To Invoice Revenue Min required: false description: Minimum added to invoice revenue (in project currency) - in: query name: added_to_invoice_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue (in project currency) title: Added To Invoice Revenue Max required: false description: Maximum added to invoice revenue (in project currency) - in: query name: added_to_invoice_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in EUR title: Added To Invoice Revenue Eur Min required: false description: Minimum added to invoice revenue in EUR - in: query name: added_to_invoice_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in EUR title: Added To Invoice Revenue Eur Max required: false description: Maximum added to invoice revenue in EUR - in: query name: added_to_invoice_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in USD title: Added To Invoice Revenue Usd Min required: false description: Minimum added to invoice revenue in USD - in: query name: added_to_invoice_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in USD title: Added To Invoice Revenue Usd Max required: false description: Maximum added to invoice revenue in USD - in: query name: added_to_invoice_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in AUD title: Added To Invoice Revenue Aud Min required: false description: Minimum added to invoice revenue in AUD - in: query name: added_to_invoice_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in AUD title: Added To Invoice Revenue Aud Max required: false description: Maximum added to invoice revenue in AUD - in: query name: actual_planned_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue (in project currency) title: Actual Planned Revenue Min required: false description: Minimum actual planned revenue (in project currency) - in: query name: actual_planned_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue (in project currency) title: Actual Planned Revenue Max required: false description: Maximum actual planned revenue (in project currency) - in: query name: actual_planned_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in EUR title: Actual Planned Revenue Eur Min required: false description: Minimum actual planned revenue in EUR - in: query name: actual_planned_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in EUR title: Actual Planned Revenue Eur Max required: false description: Maximum actual planned revenue in EUR - in: query name: actual_planned_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in USD title: Actual Planned Revenue Usd Min required: false description: Minimum actual planned revenue in USD - in: query name: actual_planned_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in USD title: Actual Planned Revenue Usd Max required: false description: Maximum actual planned revenue in USD - in: query name: actual_planned_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in AUD title: Actual Planned Revenue Aud Min required: false description: Minimum actual planned revenue in AUD - in: query name: actual_planned_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in AUD title: Actual Planned Revenue Aud Max required: false description: Maximum actual planned revenue in AUD - in: query name: total_quantity_min schema: anyOf: - type: integer - type: 'null' description: Minimum total quantity title: Total Quantity Min required: false description: Minimum total quantity - in: query name: total_quantity_max schema: anyOf: - type: integer - type: 'null' description: Maximum total quantity title: Total Quantity Max required: false description: Maximum total quantity - in: query name: actual_planned_quantity_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned quantity title: Actual Planned Quantity Min required: false description: Minimum actual planned quantity - in: query name: actual_planned_quantity_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned quantity title: Actual Planned Quantity Max required: false description: Maximum actual planned quantity - in: query name: fixed_planned_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue (in project currency) title: Fixed Planned Revenue Min required: false description: Minimum fixed planned revenue (in project currency) - in: query name: fixed_planned_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue (in project currency) title: Fixed Planned Revenue Max required: false description: Maximum fixed planned revenue (in project currency) - in: query name: fixed_planned_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in EUR title: Fixed Planned Revenue Eur Min required: false description: Minimum fixed planned revenue in EUR - in: query name: fixed_planned_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in EUR title: Fixed Planned Revenue Eur Max required: false description: Maximum fixed planned revenue in EUR - in: query name: fixed_planned_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in USD title: Fixed Planned Revenue Usd Min required: false description: Minimum fixed planned revenue in USD - in: query name: fixed_planned_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in USD title: Fixed Planned Revenue Usd Max required: false description: Maximum fixed planned revenue in USD - in: query name: fixed_planned_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in AUD title: Fixed Planned Revenue Aud Min required: false description: Minimum fixed planned revenue in AUD - in: query name: fixed_planned_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in AUD title: Fixed Planned Revenue Aud Max required: false description: Maximum fixed planned revenue in AUD - in: query name: invoiced_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue (in project currency) title: Invoiced Revenue Min required: false description: Minimum invoiced revenue (in project currency) - in: query name: invoiced_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue (in project currency) title: Invoiced Revenue Max required: false description: Maximum invoiced revenue (in project currency) - in: query name: invoiced_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in EUR title: Invoiced Revenue Eur Min required: false description: Minimum invoiced revenue in EUR - in: query name: invoiced_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in EUR title: Invoiced Revenue Eur Max required: false description: Maximum invoiced revenue in EUR - in: query name: invoiced_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in USD title: Invoiced Revenue Usd Min required: false description: Minimum invoiced revenue in USD - in: query name: invoiced_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in USD title: Invoiced Revenue Usd Max required: false description: Maximum invoiced revenue in USD - in: query name: invoiced_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in AUD title: Invoiced Revenue Aud Min required: false description: Minimum invoiced revenue in AUD - in: query name: invoiced_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in AUD title: Invoiced Revenue Aud Max required: false description: Maximum invoiced revenue in AUD - in: query name: draft_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges (in project currency) title: Draft Charges Min required: false description: Minimum draft charges (in project currency) - in: query name: draft_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges (in project currency) title: Draft Charges Max required: false description: Maximum draft charges (in project currency) - in: query name: draft_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in EUR title: Draft Charges Eur Min required: false description: Minimum draft charges in EUR - in: query name: draft_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in EUR title: Draft Charges Eur Max required: false description: Maximum draft charges in EUR - in: query name: draft_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in USD title: Draft Charges Usd Min required: false description: Minimum draft charges in USD - in: query name: draft_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in USD title: Draft Charges Usd Max required: false description: Maximum draft charges in USD - in: query name: draft_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in AUD title: Draft Charges Aud Min required: false description: Minimum draft charges in AUD - in: query name: draft_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in AUD title: Draft Charges Aud Max required: false description: Maximum draft charges in AUD - in: query name: approved_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges (in project currency) title: Approved Charges Min required: false description: Minimum approved charges (in project currency) - in: query name: approved_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges (in project currency) title: Approved Charges Max required: false description: Maximum approved charges (in project currency) - in: query name: approved_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in EUR title: Approved Charges Eur Min required: false description: Minimum approved charges in EUR - in: query name: approved_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in EUR title: Approved Charges Eur Max required: false description: Maximum approved charges in EUR - in: query name: approved_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in USD title: Approved Charges Usd Min required: false description: Minimum approved charges in USD - in: query name: approved_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in USD title: Approved Charges Usd Max required: false description: Maximum approved charges in USD - in: query name: approved_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in AUD title: Approved Charges Aud Min required: false description: Minimum approved charges in AUD - in: query name: approved_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in AUD title: Approved Charges Aud Max required: false description: Maximum approved charges in AUD - in: query name: require_po_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges (in project currency) title: Require Po Charges Min required: false description: Minimum require-PO charges (in project currency) - in: query name: require_po_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges (in project currency) title: Require Po Charges Max required: false description: Maximum require-PO charges (in project currency) - in: query name: require_po_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in EUR title: Require Po Charges Eur Min required: false description: Minimum require-PO charges in EUR - in: query name: require_po_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in EUR title: Require Po Charges Eur Max required: false description: Maximum require-PO charges in EUR - in: query name: require_po_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in USD title: Require Po Charges Usd Min required: false description: Minimum require-PO charges in USD - in: query name: require_po_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in USD title: Require Po Charges Usd Max required: false description: Maximum require-PO charges in USD - in: query name: require_po_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in AUD title: Require Po Charges Aud Min required: false description: Minimum require-PO charges in AUD - in: query name: require_po_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in AUD title: Require Po Charges Aud Max required: false description: Maximum require-PO charges in AUD - in: query name: closure_start_date schema: anyOf: - format: date type: string - type: 'null' description: Filter by project closure date start title: Closure Start Date required: false description: Filter by project closure date start - in: query name: closure_end_date schema: anyOf: - format: date type: string - type: 'null' description: Filter by project closure date end title: Closure End Date required: false description: Filter by project closure date end - in: query name: has_unresolved_comments schema: anyOf: - type: boolean - type: 'null' description: Filter by projects with unresolved comments title: Has Unresolved Comments required: false description: Filter by projects with unresolved comments responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AccountingOverviewSummary' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Get aggregated summary of accounting overview data with the same filtering as /overview/. Args: request: The HTTP request object. params: Query parameters for filtering (same as overview endpoint except pagination). Returns aggregated data: - client_count: Total number of unique clients - project_count: Total number of projects (same as total-count in /overview/) - total_revenue_eur/usd/aud: Summed revenue by currency - added_to_invoice_revenue_eur/usd/aud: Summed added to invoice revenue by currency - actual_planned_revenue_eur/usd/aud: Summed planned revenue by currency - fixed_planned_revenue_eur/usd/aud: Summed fixed planned revenue by currency Supports the same filtering as /overview/: - search: Search by project code (partial matching) - clients: Filter by client names (comma-separated) - pm: Filter by project managers (comma-separated) - region: Filter by regions (comma-separated) - country: Filter by countries (comma-separated) - start_date/end_date: Date range filtering - project_status: Filter by core project status (comma-separated) - service_code: Filter by billable service code (comma-separated) - Revenue range filters (min/max): total_revenue, added_to_invoice_revenue, actual_planned_revenue, fixed_planned_revenue (all with _eur/_usd/_aud variants) - Quantity range filters (min/max): total_quantity, actual_planned_quantity - Closure date filters: closure_start_date, closure_end_date' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/overview/filters: get: operationId: accounting_api_v2_get_accounting_overview_filters summary: Get Accounting Overview Filters parameters: - in: query name: start_date schema: anyOf: - format: date type: string - type: 'null' description: Start date for filtering charges title: Start Date required: false description: Start date for filtering charges - in: query name: end_date schema: anyOf: - format: date type: string - type: 'null' description: End date for filtering charges title: End Date required: false description: End date for filtering charges responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AccountingOverviewFilters' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Get available filter values for accounting overview data. Args: request: The HTTP request object. params: Query parameters for date range filtering (optional). Returns unique values for filtering: - clients: List of all unique client names - pm: List of all unique project managers - regions: List of all unique regions (continents) - countries: List of all unique countries - project_status: List of all unique core project statuses - service_code: List of all unique billable service codes Supports optional date range filtering: - start_date/end_date: Limit results to projects within date range' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/overview/export: get: operationId: accounting_api_v2_export_accounting_overview_to_excel summary: Export Accounting Overview To Excel parameters: - in: query name: start_date schema: anyOf: - format: date type: string - type: 'null' description: Start date for filtering charges title: Start Date required: false description: Start date for filtering charges - in: query name: end_date schema: anyOf: - format: date type: string - type: 'null' description: End date for filtering charges title: End Date required: false description: End date for filtering charges - in: query name: search schema: anyOf: - type: string - type: 'null' description: Search by project code (partial matching) title: Search required: false description: Search by project code (partial matching) - in: query name: clients schema: anyOf: - type: string - type: 'null' description: Filter by client names (comma-separated) title: Clients required: false description: Filter by client names (comma-separated) - in: query name: pm schema: anyOf: - type: string - type: 'null' description: Filter by project managers (comma-separated) title: Pm required: false description: Filter by project managers (comma-separated) - in: query name: region schema: anyOf: - type: string - type: 'null' description: Filter by regions (comma-separated) title: Region required: false description: Filter by regions (comma-separated) - in: query name: country schema: anyOf: - type: string - type: 'null' description: Filter by countries (comma-separated) title: Country required: false description: Filter by countries (comma-separated) - in: query name: project_status schema: anyOf: - type: string - type: 'null' description: Filter by core project status (comma-separated) title: Project Status required: false description: Filter by core project status (comma-separated) - in: query name: service_code schema: anyOf: - type: string - type: 'null' description: Filter by billable service code (comma-separated) title: Service Code required: false description: Filter by billable service code (comma-separated) - in: query name: service_unit_type schema: anyOf: - type: string - type: 'null' description: Filter by service unit type (comma-separated) title: Service Unit Type required: false description: Filter by service unit type (comma-separated) - in: query name: robot_set schema: anyOf: - type: string - type: 'null' description: Filter by robot set (comma-separated) title: Robot Set required: false description: Filter by robot set (comma-separated) - in: query name: total_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue (in project currency) title: Total Revenue Min required: false description: Minimum total revenue (in project currency) - in: query name: total_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue (in project currency) title: Total Revenue Max required: false description: Maximum total revenue (in project currency) - in: query name: total_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in EUR title: Total Revenue Eur Min required: false description: Minimum total revenue in EUR - in: query name: total_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in EUR title: Total Revenue Eur Max required: false description: Maximum total revenue in EUR - in: query name: total_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in USD title: Total Revenue Usd Min required: false description: Minimum total revenue in USD - in: query name: total_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in USD title: Total Revenue Usd Max required: false description: Maximum total revenue in USD - in: query name: total_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum total revenue in AUD title: Total Revenue Aud Min required: false description: Minimum total revenue in AUD - in: query name: total_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum total revenue in AUD title: Total Revenue Aud Max required: false description: Maximum total revenue in AUD - in: query name: added_to_invoice_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue (in project currency) title: Added To Invoice Revenue Min required: false description: Minimum added to invoice revenue (in project currency) - in: query name: added_to_invoice_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue (in project currency) title: Added To Invoice Revenue Max required: false description: Maximum added to invoice revenue (in project currency) - in: query name: added_to_invoice_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in EUR title: Added To Invoice Revenue Eur Min required: false description: Minimum added to invoice revenue in EUR - in: query name: added_to_invoice_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in EUR title: Added To Invoice Revenue Eur Max required: false description: Maximum added to invoice revenue in EUR - in: query name: added_to_invoice_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in USD title: Added To Invoice Revenue Usd Min required: false description: Minimum added to invoice revenue in USD - in: query name: added_to_invoice_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in USD title: Added To Invoice Revenue Usd Max required: false description: Maximum added to invoice revenue in USD - in: query name: added_to_invoice_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum added to invoice revenue in AUD title: Added To Invoice Revenue Aud Min required: false description: Minimum added to invoice revenue in AUD - in: query name: added_to_invoice_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum added to invoice revenue in AUD title: Added To Invoice Revenue Aud Max required: false description: Maximum added to invoice revenue in AUD - in: query name: actual_planned_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue (in project currency) title: Actual Planned Revenue Min required: false description: Minimum actual planned revenue (in project currency) - in: query name: actual_planned_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue (in project currency) title: Actual Planned Revenue Max required: false description: Maximum actual planned revenue (in project currency) - in: query name: actual_planned_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in EUR title: Actual Planned Revenue Eur Min required: false description: Minimum actual planned revenue in EUR - in: query name: actual_planned_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in EUR title: Actual Planned Revenue Eur Max required: false description: Maximum actual planned revenue in EUR - in: query name: actual_planned_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in USD title: Actual Planned Revenue Usd Min required: false description: Minimum actual planned revenue in USD - in: query name: actual_planned_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in USD title: Actual Planned Revenue Usd Max required: false description: Maximum actual planned revenue in USD - in: query name: actual_planned_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned revenue in AUD title: Actual Planned Revenue Aud Min required: false description: Minimum actual planned revenue in AUD - in: query name: actual_planned_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned revenue in AUD title: Actual Planned Revenue Aud Max required: false description: Maximum actual planned revenue in AUD - in: query name: total_quantity_min schema: anyOf: - type: integer - type: 'null' description: Minimum total quantity title: Total Quantity Min required: false description: Minimum total quantity - in: query name: total_quantity_max schema: anyOf: - type: integer - type: 'null' description: Maximum total quantity title: Total Quantity Max required: false description: Maximum total quantity - in: query name: actual_planned_quantity_min schema: anyOf: - type: number - type: 'null' description: Minimum actual planned quantity title: Actual Planned Quantity Min required: false description: Minimum actual planned quantity - in: query name: actual_planned_quantity_max schema: anyOf: - type: number - type: 'null' description: Maximum actual planned quantity title: Actual Planned Quantity Max required: false description: Maximum actual planned quantity - in: query name: fixed_planned_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue (in project currency) title: Fixed Planned Revenue Min required: false description: Minimum fixed planned revenue (in project currency) - in: query name: fixed_planned_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue (in project currency) title: Fixed Planned Revenue Max required: false description: Maximum fixed planned revenue (in project currency) - in: query name: fixed_planned_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in EUR title: Fixed Planned Revenue Eur Min required: false description: Minimum fixed planned revenue in EUR - in: query name: fixed_planned_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in EUR title: Fixed Planned Revenue Eur Max required: false description: Maximum fixed planned revenue in EUR - in: query name: fixed_planned_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in USD title: Fixed Planned Revenue Usd Min required: false description: Minimum fixed planned revenue in USD - in: query name: fixed_planned_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in USD title: Fixed Planned Revenue Usd Max required: false description: Maximum fixed planned revenue in USD - in: query name: fixed_planned_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum fixed planned revenue in AUD title: Fixed Planned Revenue Aud Min required: false description: Minimum fixed planned revenue in AUD - in: query name: fixed_planned_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum fixed planned revenue in AUD title: Fixed Planned Revenue Aud Max required: false description: Maximum fixed planned revenue in AUD - in: query name: invoiced_revenue_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue (in project currency) title: Invoiced Revenue Min required: false description: Minimum invoiced revenue (in project currency) - in: query name: invoiced_revenue_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue (in project currency) title: Invoiced Revenue Max required: false description: Maximum invoiced revenue (in project currency) - in: query name: invoiced_revenue_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in EUR title: Invoiced Revenue Eur Min required: false description: Minimum invoiced revenue in EUR - in: query name: invoiced_revenue_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in EUR title: Invoiced Revenue Eur Max required: false description: Maximum invoiced revenue in EUR - in: query name: invoiced_revenue_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in USD title: Invoiced Revenue Usd Min required: false description: Minimum invoiced revenue in USD - in: query name: invoiced_revenue_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in USD title: Invoiced Revenue Usd Max required: false description: Maximum invoiced revenue in USD - in: query name: invoiced_revenue_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum invoiced revenue in AUD title: Invoiced Revenue Aud Min required: false description: Minimum invoiced revenue in AUD - in: query name: invoiced_revenue_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum invoiced revenue in AUD title: Invoiced Revenue Aud Max required: false description: Maximum invoiced revenue in AUD - in: query name: draft_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges (in project currency) title: Draft Charges Min required: false description: Minimum draft charges (in project currency) - in: query name: draft_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges (in project currency) title: Draft Charges Max required: false description: Maximum draft charges (in project currency) - in: query name: draft_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in EUR title: Draft Charges Eur Min required: false description: Minimum draft charges in EUR - in: query name: draft_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in EUR title: Draft Charges Eur Max required: false description: Maximum draft charges in EUR - in: query name: draft_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in USD title: Draft Charges Usd Min required: false description: Minimum draft charges in USD - in: query name: draft_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in USD title: Draft Charges Usd Max required: false description: Maximum draft charges in USD - in: query name: draft_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum draft charges in AUD title: Draft Charges Aud Min required: false description: Minimum draft charges in AUD - in: query name: draft_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum draft charges in AUD title: Draft Charges Aud Max required: false description: Maximum draft charges in AUD - in: query name: approved_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges (in project currency) title: Approved Charges Min required: false description: Minimum approved charges (in project currency) - in: query name: approved_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges (in project currency) title: Approved Charges Max required: false description: Maximum approved charges (in project currency) - in: query name: approved_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in EUR title: Approved Charges Eur Min required: false description: Minimum approved charges in EUR - in: query name: approved_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in EUR title: Approved Charges Eur Max required: false description: Maximum approved charges in EUR - in: query name: approved_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in USD title: Approved Charges Usd Min required: false description: Minimum approved charges in USD - in: query name: approved_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in USD title: Approved Charges Usd Max required: false description: Maximum approved charges in USD - in: query name: approved_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum approved charges in AUD title: Approved Charges Aud Min required: false description: Minimum approved charges in AUD - in: query name: approved_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum approved charges in AUD title: Approved Charges Aud Max required: false description: Maximum approved charges in AUD - in: query name: require_po_charges_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges (in project currency) title: Require Po Charges Min required: false description: Minimum require-PO charges (in project currency) - in: query name: require_po_charges_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges (in project currency) title: Require Po Charges Max required: false description: Maximum require-PO charges (in project currency) - in: query name: require_po_charges_eur_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in EUR title: Require Po Charges Eur Min required: false description: Minimum require-PO charges in EUR - in: query name: require_po_charges_eur_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in EUR title: Require Po Charges Eur Max required: false description: Maximum require-PO charges in EUR - in: query name: require_po_charges_usd_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in USD title: Require Po Charges Usd Min required: false description: Minimum require-PO charges in USD - in: query name: require_po_charges_usd_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in USD title: Require Po Charges Usd Max required: false description: Maximum require-PO charges in USD - in: query name: require_po_charges_aud_min schema: anyOf: - type: number - type: 'null' description: Minimum require-PO charges in AUD title: Require Po Charges Aud Min required: false description: Minimum require-PO charges in AUD - in: query name: require_po_charges_aud_max schema: anyOf: - type: number - type: 'null' description: Maximum require-PO charges in AUD title: Require Po Charges Aud Max required: false description: Maximum require-PO charges in AUD - in: query name: closure_start_date schema: anyOf: - format: date type: string - type: 'null' description: Filter by project closure date start title: Closure Start Date required: false description: Filter by project closure date start - in: query name: closure_end_date schema: anyOf: - format: date type: string - type: 'null' description: Filter by project closure date end title: Closure End Date required: false description: Filter by project closure date end - in: query name: has_unresolved_comments schema: anyOf: - type: boolean - type: 'null' description: Filter by projects with unresolved comments title: Has Unresolved Comments required: false description: Filter by projects with unresolved comments - in: query name: page schema: anyOf: - type: integer - type: 'null' default: 1 description: Page number for pagination title: Page required: false description: Page number for pagination - in: query name: page_size schema: anyOf: - type: integer - type: 'null' default: 1000 description: Number of items per page title: Page Size required: false description: Number of items per page - in: query name: sort_by schema: anyOf: - $ref: '#/components/schemas/AccountingOverviewSortBy' - type: 'null' description: Field to sort by required: false description: Field to sort by - in: query name: sort_order schema: anyOf: - enum: - asc - desc type: string - type: 'null' default: asc description: Sort order (asc or desc) title: Sort Order required: false description: Sort order (asc or desc) responses: '200': description: OK description: 'Export accounting overview data to Excel file. Args: request: The HTTP request object. params: Query parameters for filtering (same as /overview/ endpoint). Supports the same filtering as /overview/ endpoint: - search: Search by project code (partial matching) - clients: Filter by client names (comma-separated) - pm: Filter by project managers (comma-separated) - region: Filter by regions (comma-separated) - country: Filter by countries (comma-separated) - start_date/end_date: Date range filtering - project_status: Filter by core project status (comma-separated) Returns all matching records (no pagination). Response is an Excel file with filename: accounting_overview_{YYYY-MM-DD}.xlsx' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/missing-charges-tracker: get: operationId: accounting_api_v2_get_missing_charges_tracker summary: Get Missing Charges Tracker parameters: - in: query name: search schema: anyOf: - type: string - type: 'null' description: Search term for project code or set name title: Search required: false description: Search term for project code or set name - in: query name: reason_filter schema: anyOf: - type: string - type: 'null' description: 'Filter by reason type: ''charge-entry'', ''sales-order-missing'', or None for all.' title: Reason Filter required: false description: 'Filter by reason type: ''charge-entry'', ''sales-order-missing'', or None for all.' - in: query name: project_codes schema: anyOf: - type: string - type: 'null' description: Comma-separated list of project codes to filter by title: Project Codes required: false description: Comma-separated list of project codes to filter by - in: query name: set_names schema: anyOf: - type: string - type: 'null' description: Comma-separated list of set names to filter by title: Set Names required: false description: Comma-separated list of set names to filter by - in: query name: project_managers schema: anyOf: - type: string - type: 'null' description: Comma-separated list of project manager names to filter by title: Project Managers required: false description: Comma-separated list of project manager names to filter by - in: query name: delay_days_min schema: anyOf: - type: integer - type: 'null' description: Minimum delay days filter title: Delay Days Min required: false description: Minimum delay days filter - in: query name: delay_days_max schema: anyOf: - type: integer - type: 'null' description: Maximum delay days filter title: Delay Days Max required: false description: Maximum delay days filter - in: query name: date_from schema: anyOf: - format: date type: string - type: 'null' description: Filter work dates from this date (inclusive) title: Date From required: false description: Filter work dates from this date (inclusive) - in: query name: date_to schema: anyOf: - format: date type: string - type: 'null' description: Filter work dates to this date (inclusive) title: Date To required: false description: Filter work dates to this date (inclusive) - in: query name: sort_field schema: anyOf: - type: string - type: 'null' description: 'Field to sort by: projectCode, setName, delayDays, workDate, suggestedAmount, reasons, comment' title: Sort Field required: false description: 'Field to sort by: projectCode, setName, delayDays, workDate, suggestedAmount, reasons, comment' - in: query name: sort_order schema: anyOf: - type: string - type: 'null' description: 'Sort order: ''ascend'' or ''descend''' title: Sort Order required: false description: 'Sort order: ''ascend'' or ''descend''' - in: query name: currency schema: anyOf: - type: string - type: 'null' default: EUR description: 'Display currency for approximate amounts: EUR, USD, or AUD' title: Currency required: false description: 'Display currency for approximate amounts: EUR, USD, or AUD' - in: query name: exclude_sundays schema: default: false description: If True, exclude Sunday records from results. title: Exclude Sundays type: boolean required: false description: If True, exclude Sunday records from results. - in: query name: hide_with_comments schema: default: false description: If True, exclude records that have a comment. title: Hide With Comments type: boolean required: false description: If True, exclude records that have a comment. - in: query name: page schema: default: 1 description: Page number minimum: 1 title: Page type: integer required: false description: Page number - in: query name: page_size schema: default: 10 description: Items per page maximum: 1000 minimum: 1 title: Page Size type: integer required: false description: Items per page - in: query name: use_cache schema: default: true description: If True, read from cache. If False, fetch live data. title: Use Cache type: boolean required: false description: If True, read from cache. If False, fetch live data. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MissingChargesTrackerResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Get missing charges tracker data for all projects. Returns projects with missing charge entries, organized by robot set with delay calculations. By default reads from cache (fast). Set use_cache=false to fetch live data. Data sources: - Cache: Local database table (fast, updated hourly) - Live: Platform API + NetSuite API (slow, real-time) Args: request: HTTP request object. params: Query parameters including pagination, search, filters. Query params: - page: Page number (default 1). - page_size: Items per page (default 10). - search: Search term for project code or set name (optional). - reason_filter: Filter by reason type: ''charge-entry'' or ''sales-order-missing'' (optional). - use_cache: If True (default), read from cache. If False, fetch live data. Returns: MissingChargesTrackerResponse with summary stats and paginated items.' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/missing-charges-tracker/sync: post: operationId: accounting_api_v2_sync_missing_charges_tracker summary: Sync Missing Charges Tracker parameters: - in: query name: days_back schema: anyOf: - type: integer - type: 'null' title: Days Back required: false - in: query name: date_from schema: anyOf: - format: date type: string - type: 'null' title: Date From required: false - in: query name: date_to schema: anyOf: - format: date type: string - type: 'null' title: Date To required: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MissingChargesSyncResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Manually trigger sync of missing charges data to cache. Fetches fresh data from Platform and NetSuite APIs, then updates the local cache table. Use this for manual refresh. Args: days_back: Number of days to look back (default: covers this and last month, max 180). date_from: Optional start date for syncing (inclusive). date_to: Optional end date for syncing (inclusive). Returns: Sync statistics (records synced, duration, etc.).' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/missing-charges-tracker/status: get: operationId: accounting_api_v2_get_missing_charges_cache_status summary: Get Missing Charges Cache Status parameters: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MissingChargesCacheStatus' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Get cache status for missing charges tracker. Returns: Cache statistics (record count, last sync time, etc.).' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/charges/bulk-mark-pm-review: post: operationId: accounting_api_v2_bulk_mark_charges_pm_review summary: Bulk Mark Charges Pm Review parameters: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ChargeBulkReviewResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Mark charges as queued for PM review (draft-charges heads-up step). Pushes NSChargeStatusEnum.PENDING_PM_REVIEW to NetSuite for each charge, then mirrors the value locally.' tags: - Accounting requestBody: content: application/json: schema: $ref: '#/components/schemas/ChargeBulkReview' required: true security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/charges/bulk-mark-customer-review: post: operationId: accounting_api_v2_bulk_mark_charges_customer_review summary: Bulk Mark Charges Customer Review parameters: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ChargeBulkReviewResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: Mark charges as included in a sent client statement (draft-charges client send). tags: - Accounting requestBody: content: application/json: schema: $ref: '#/components/schemas/ChargeBulkReview' required: true security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/netsuite-local-sync: post: operationId: accounting_api_v2_trigger_netsuite_local_sync summary: Trigger Netsuite Local Sync parameters: - in: query name: project_id schema: anyOf: - type: string - type: 'null' title: Project Id required: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/NetSuiteLocalSyncResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Manually trigger sync of NetSuite data into local DB. Fetches SOs, line items and charges from NetSuite and upserts them into the local accounting tables. Pass project_id to sync a single project, or omit to sync all projects with so_created=True.' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] /api/accounting/missing-charges-tracker/export: get: operationId: accounting_api_v2_export_missing_charges_tracker summary: Export Missing Charges Tracker parameters: - in: query name: search schema: anyOf: - type: string - type: 'null' description: Search term for project code or set name title: Search required: false description: Search term for project code or set name - in: query name: reason_filter schema: anyOf: - type: string - type: 'null' description: 'Filter by reason type: ''charge-entry'', ''sales-order-missing'', or None for all.' title: Reason Filter required: false description: 'Filter by reason type: ''charge-entry'', ''sales-order-missing'', or None for all.' - in: query name: project_codes schema: anyOf: - type: string - type: 'null' description: Comma-separated list of project codes to filter by title: Project Codes required: false description: Comma-separated list of project codes to filter by - in: query name: set_names schema: anyOf: - type: string - type: 'null' description: Comma-separated list of set names to filter by title: Set Names required: false description: Comma-separated list of set names to filter by - in: query name: project_managers schema: anyOf: - type: string - type: 'null' description: Comma-separated list of project manager names to filter by title: Project Managers required: false description: Comma-separated list of project manager names to filter by - in: query name: delay_days_min schema: anyOf: - type: integer - type: 'null' description: Minimum delay days filter title: Delay Days Min required: false description: Minimum delay days filter - in: query name: delay_days_max schema: anyOf: - type: integer - type: 'null' description: Maximum delay days filter title: Delay Days Max required: false description: Maximum delay days filter - in: query name: date_from schema: anyOf: - format: date type: string - type: 'null' description: Filter work dates from this date (inclusive) title: Date From required: false description: Filter work dates from this date (inclusive) - in: query name: date_to schema: anyOf: - format: date type: string - type: 'null' description: Filter work dates to this date (inclusive) title: Date To required: false description: Filter work dates to this date (inclusive) - in: query name: sort_field schema: anyOf: - type: string - type: 'null' description: 'Field to sort by: projectCode, setName, delayDays, workDate, suggestedAmount, reasons, comment' title: Sort Field required: false description: 'Field to sort by: projectCode, setName, delayDays, workDate, suggestedAmount, reasons, comment' - in: query name: sort_order schema: anyOf: - type: string - type: 'null' description: 'Sort order: ''ascend'' or ''descend''' title: Sort Order required: false description: 'Sort order: ''ascend'' or ''descend''' - in: query name: currency schema: anyOf: - type: string - type: 'null' default: EUR description: 'Display currency for approximate amounts: EUR, USD, or AUD' title: Currency required: false description: 'Display currency for approximate amounts: EUR, USD, or AUD' - in: query name: exclude_sundays schema: default: false description: If True, exclude Sunday records from results. title: Exclude Sundays type: boolean required: false description: If True, exclude Sunday records from results. - in: query name: hide_with_comments schema: default: false description: If True, exclude records that have a comment. title: Hide With Comments type: boolean required: false description: If True, exclude records that have a comment. responses: '200': description: OK description: 'Export missing charges tracker data to Excel file. Returns all records (no pagination) with current filters applied. Args: request: HTTP request object. params: Export filters for missing charges tracker data. Returns: Excel file with all matching records.' tags: - Accounting security: - APIKeyAuth: [] - CookieAuth: [] components: schemas: Country: additionalProperties: false description: Schema for Country. properties: code: description: Country code in alpha-2. title: Code type: string name: description: Human readable country name. title: Name type: string region: anyOf: - type: string - type: 'null' description: Custom region name a country belongs to. title: Region required: - code - name title: Country type: object MissingChargesAffectedProject: additionalProperties: false description: Project impacted by missing charges. properties: project_code: description: Project code title: Project Code type: string project_id: description: Project UUID title: Project Id type: string required: - project_code - project_id title: MissingChargesAffectedProject type: object AccountingOverviewSummary: additionalProperties: false description: Summary schema for accounting overview aggregated data. properties: client_count: description: Total amount of unique clients title: Client Count type: integer project_count: description: Total amount of projects title: Project Count type: integer total_revenue_eur: anyOf: - type: number - type: 'null' description: Total revenue in EUR title: Total Revenue Eur total_revenue_usd: anyOf: - type: number - type: 'null' description: Total revenue in USD title: Total Revenue Usd total_revenue_aud: anyOf: - type: number - type: 'null' description: Total revenue in AUD title: Total Revenue Aud added_to_invoice_revenue_eur: anyOf: - type: number - type: 'null' description: Added to invoice revenue in EUR title: Added To Invoice Revenue Eur added_to_invoice_revenue_usd: anyOf: - type: number - type: 'null' description: Added to invoice revenue in USD title: Added To Invoice Revenue Usd added_to_invoice_revenue_aud: anyOf: - type: number - type: 'null' description: Added to invoice revenue in AUD title: Added To Invoice Revenue Aud invoiced_revenue_eur: anyOf: - type: number - type: 'null' description: Invoiced revenue in EUR (invoice_sent_status=Final) title: Invoiced Revenue Eur invoiced_revenue_usd: anyOf: - type: number - type: 'null' description: Invoiced revenue in USD (invoice_sent_status=Final) title: Invoiced Revenue Usd invoiced_revenue_aud: anyOf: - type: number - type: 'null' description: Invoiced revenue in AUD (invoice_sent_status=Final) title: Invoiced Revenue Aud draft_charges_eur: anyOf: - type: number - type: 'null' description: Draft charges in EUR title: Draft Charges Eur draft_charges_usd: anyOf: - type: number - type: 'null' description: Draft charges in USD title: Draft Charges Usd draft_charges_aud: anyOf: - type: number - type: 'null' description: Draft charges in AUD title: Draft Charges Aud approved_charges_eur: anyOf: - type: number - type: 'null' description: Approved charges in EUR title: Approved Charges Eur approved_charges_usd: anyOf: - type: number - type: 'null' description: Approved charges in USD title: Approved Charges Usd approved_charges_aud: anyOf: - type: number - type: 'null' description: Approved charges in AUD title: Approved Charges Aud require_po_charges_eur: anyOf: - type: number - type: 'null' description: Require-PO charges in EUR title: Require Po Charges Eur require_po_charges_usd: anyOf: - type: number - type: 'null' description: Require-PO charges in USD title: Require Po Charges Usd require_po_charges_aud: anyOf: - type: number - type: 'null' description: Require-PO charges in AUD title: Require Po Charges Aud actual_planned_revenue_eur: anyOf: - type: number - type: 'null' description: Actual planned revenue in EUR title: Actual Planned Revenue Eur actual_planned_revenue_usd: anyOf: - type: number - type: 'null' description: Actual planned revenue in USD title: Actual Planned Revenue Usd actual_planned_revenue_aud: anyOf: - type: number - type: 'null' description: Actual planned revenue in AUD title: Actual Planned Revenue Aud fixed_planned_revenue_eur: anyOf: - type: number - type: 'null' description: Fixed planned revenue in EUR title: Fixed Planned Revenue Eur fixed_planned_revenue_usd: anyOf: - type: number - type: 'null' description: Fixed planned revenue in USD title: Fixed Planned Revenue Usd fixed_planned_revenue_aud: anyOf: - type: number - type: 'null' description: Fixed planned revenue in AUD title: Fixed Planned Revenue Aud required: - client_count - project_count title: AccountingOverviewSummary type: object ChargeBulkReviewResponse: additionalProperties: false description: Response for bulk PM/customer review-status transitions. properties: updated_ids: description: IDs of charges that were transitioned items: type: integer title: Updated Ids type: array required: - updated_ids title: ChargeBulkReviewResponse type: object ProjectRevenue: additionalProperties: false description: Schema for project revenue. properties: id: description: UUID of the project format: uuid title: Id type: string code: description: Code of the project title: Code type: string robot_set_name: anyOf: - type: string - type: 'null' description: Name of robot set title: Robot Set Name client: anyOf: - $ref: '#/components/schemas/Client' - type: 'null' description: Client of the project country: anyOf: - $ref: '#/components/schemas/Country' - type: 'null' description: Country of the project total_quantity: anyOf: - type: integer - type: 'null' description: Total quantity of unique assets charged title: Total Quantity blade_count: anyOf: - type: integer - type: 'null' description: Count of unique blades (turbine components) charged title: Blade Count wtg_count: anyOf: - type: integer - type: 'null' description: Count of unique WTGs (turbines) charged via WTG-level scope items title: Wtg Count total_revenue: anyOf: - type: number - type: 'null' description: Total revenue in project's currency title: Total Revenue total_revenue_eur: anyOf: - type: number - type: 'null' description: Total revenue in EUR title: Total Revenue Eur total_revenue_usd: anyOf: - type: number - type: 'null' description: Total revenue in USD title: Total Revenue Usd total_revenue_aud: anyOf: - type: number - type: 'null' description: Total revenue in AUD title: Total Revenue Aud added_to_invoice_revenue: anyOf: - type: number - type: 'null' description: Total added to invoice revenue in project's currency title: Added To Invoice Revenue added_to_invoice_revenue_eur: anyOf: - type: number - type: 'null' description: Total added to invoice revenue in EUR title: Added To Invoice Revenue Eur added_to_invoice_revenue_usd: anyOf: - type: number - type: 'null' description: Total added to invoice revenue in USD title: Added To Invoice Revenue Usd added_to_invoice_revenue_aud: anyOf: - type: number - type: 'null' description: Total added to invoice revenue in AUD title: Added To Invoice Revenue Aud invoiced_revenue: anyOf: - type: number - type: 'null' description: Sum of charges where invoice_sent_status is Final (project currency) title: Invoiced Revenue invoiced_revenue_eur: anyOf: - type: number - type: 'null' description: Sum of charges where invoice_sent_status is Final (EUR) title: Invoiced Revenue Eur invoiced_revenue_usd: anyOf: - type: number - type: 'null' description: Sum of charges where invoice_sent_status is Final (USD) title: Invoiced Revenue Usd invoiced_revenue_aud: anyOf: - type: number - type: 'null' description: Sum of charges where invoice_sent_status is Final (AUD) title: Invoiced Revenue Aud draft_charges: anyOf: - type: number - type: 'null' description: Sum of charges in DRAFT status (project currency) title: Draft Charges draft_charges_eur: anyOf: - type: number - type: 'null' description: Sum of charges in DRAFT status (EUR) title: Draft Charges Eur draft_charges_usd: anyOf: - type: number - type: 'null' description: Sum of charges in DRAFT status (USD) title: Draft Charges Usd draft_charges_aud: anyOf: - type: number - type: 'null' description: Sum of charges in DRAFT status (AUD) title: Draft Charges Aud approved_charges: anyOf: - type: number - type: 'null' description: Sum of charges in APPROVED status (project currency) title: Approved Charges approved_charges_eur: anyOf: - type: number - type: 'null' description: Sum of charges in APPROVED status (EUR) title: Approved Charges Eur approved_charges_usd: anyOf: - type: number - type: 'null' description: Sum of charges in APPROVED status (USD) title: Approved Charges Usd approved_charges_aud: anyOf: - type: number - type: 'null' description: Sum of charges in APPROVED status (AUD) title: Approved Charges Aud require_po_charges: anyOf: - type: number - type: 'null' description: Sum of charges in REQUIRE_PO status (project currency) title: Require Po Charges require_po_charges_eur: anyOf: - type: number - type: 'null' description: Sum of charges in REQUIRE_PO status (EUR) title: Require Po Charges Eur require_po_charges_usd: anyOf: - type: number - type: 'null' description: Sum of charges in REQUIRE_PO status (USD) title: Require Po Charges Usd require_po_charges_aud: anyOf: - type: number - type: 'null' description: Sum of charges in REQUIRE_PO status (AUD) title: Require Po Charges Aud currency: anyOf: - type: string - type: 'null' description: Currency name title: Currency actual_planned_quantity: anyOf: - type: number - type: 'null' description: Actual planned quantity title: Actual Planned Quantity actual_planned_revenue: anyOf: - type: number - type: 'null' description: Actual planned revenue title: Actual Planned Revenue actual_planned_revenue_eur: anyOf: - type: number - type: 'null' description: Actual planned revenue in EUR title: Actual Planned Revenue Eur actual_planned_revenue_usd: anyOf: - type: number - type: 'null' description: Actual planned revenue in USD title: Actual Planned Revenue Usd actual_planned_revenue_aud: anyOf: - type: number - type: 'null' description: Actual planned revenue in AUD title: Actual Planned Revenue Aud fixed_planned_revenue: anyOf: - type: number - type: 'null' description: Fixed planned revenue (based on month start dates) title: Fixed Planned Revenue fixed_planned_revenue_eur: anyOf: - type: number - type: 'null' description: Fixed planned revenue in EUR title: Fixed Planned Revenue Eur fixed_planned_revenue_usd: anyOf: - type: number - type: 'null' description: Fixed planned revenue in USD title: Fixed Planned Revenue Usd fixed_planned_revenue_aud: anyOf: - type: number - type: 'null' description: Fixed planned revenue in AUD title: Fixed Planned Revenue Aud project_managers: default: [] description: Project manager from core.Project (at most one) items: type: string title: Project Managers type: array project_status: anyOf: - type: string - type: 'null' description: Core project status code, canonicalized (e.g. EXECUTION) title: Project Status service_codes: default: [] description: Billable service codes charged on this project/robot-set items: type: string title: Service Codes type: array service_unit_types: default: [] description: Component types the charged services are performed on (WTG when untied) items: type: string title: Service Unit Types type: array closure_date: anyOf: - format: date-time type: string - type: 'null' description: When the project most recently entered 'Closure' title: Closure Date has_unresolved_comments: default: false description: Project has unresolved comments in date range title: Has Unresolved Comments type: boolean project_description: anyOf: - type: string - type: 'null' description: Truncated project description from project overview info title: Project Description project_overview_link: anyOf: - type: string - type: 'null' description: Link to project overview page title: Project Overview Link required: - id - code title: ProjectRevenue type: object MissingChargesTrackerResponse: additionalProperties: false description: Response for missing charges tracker endpoint. properties: total_missing_records: description: Total number of robot sets with missing data title: Total Missing Records type: integer projects_affected: description: Number of unique projects affected title: Projects Affected type: integer critical_count: description: Number of records with 3+ days delay title: Critical Count type: integer total_suggested_amount: default: 0.0 description: Sum of suggested amounts across all missing records in project currency title: Total Suggested Amount type: number total_suggested_amount_eur: default: 0.0 description: Sum of suggested amounts converted to EUR title: Total Suggested Amount Eur type: number total_suggested_amount_usd: default: 0.0 description: Sum of suggested amounts converted to USD title: Total Suggested Amount Usd type: number total_suggested_amount_aud: default: 0.0 description: Sum of suggested amounts converted to AUD title: Total Suggested Amount Aud type: number daily_reports_missing: description: Legacy metric, kept for compatibility (always 0) title: Daily Reports Missing type: integer available_project_codes: description: List of available project codes after filters items: type: string title: Available Project Codes type: array available_set_names: description: List of available set names after filters items: type: string title: Available Set Names type: array available_project_managers: description: List of available project managers for filtering items: type: string title: Available Project Managers type: array affected_projects: description: List of affected projects after filters items: $ref: '#/components/schemas/MissingChargesAffectedProject' title: Affected Projects type: array available_reasons: description: List of all available reason badges for filtering items: $ref: '#/components/schemas/MissingDataReasonBadge' title: Available Reasons type: array items: description: List of robot sets with missing data items: $ref: '#/components/schemas/RobotSetMissingData' title: Items type: array last_synced_at: anyOf: - format: date-time type: string - type: 'null' description: Timestamp of last cache sync (None if using live data) title: Last Synced At platform_projects_not_found: description: Project codes not found in Platform API items: type: string title: Platform Projects Not Found type: array projects_mapped: default: 0 description: Projects mapped to internal IDs title: Projects Mapped type: integer projects_total: default: 0 description: Total projects observed in the data set title: Projects Total type: integer workload_fetch_failed_count: default: 0 description: Number of projects where workload fetch failed title: Workload Fetch Failed Count type: integer workload_auth_missing: default: false description: True if workload fetch skipped due to missing auth title: Workload Auth Missing type: boolean projects_missing_in_db: description: Project codes missing in internal Projects table items: type: string title: Projects Missing In Db type: array planned_projects_discovered: default: 0 description: Number of project codes discovered from planned resource sets title: Planned Projects Discovered type: integer planned_only_projects: default: 0 description: Projects found via planned resource sets but not in NetSuite charges title: Planned Only Projects type: integer required: - total_missing_records - projects_affected - critical_count - daily_reports_missing - available_project_codes - available_set_names - affected_projects - available_reasons - items title: MissingChargesTrackerResponse type: object NetSuiteLocalSyncResponse: additionalProperties: false description: Response schema for the NetSuite local DB sync operation. properties: projects_synced: description: Number of projects synced title: Projects Synced type: integer sales_orders_upserted: description: Sales orders upserted title: Sales Orders Upserted type: integer line_items_upserted: description: Line items upserted title: Line Items Upserted type: integer charges_upserted: description: Charges upserted title: Charges Upserted type: integer invoices_upserted: description: Invoices upserted title: Invoices Upserted type: integer duration_seconds: description: Sync duration in seconds title: Duration Seconds type: number errors: description: Per-project error messages items: type: string title: Errors type: array required: - projects_synced - sales_orders_upserted - line_items_upserted - charges_upserted - invoices_upserted - duration_seconds - errors title: NetSuiteLocalSyncResponse type: object AccountingOverviewFilters: additionalProperties: false description: Filters schema for accounting overview unique values. properties: clients: description: All client names found in accounting overview dataset items: type: string title: Clients type: array pm: description: All project managers found in projects items: type: string title: Pm type: array regions: description: All regions (continents) from projects items: type: string title: Regions type: array countries: description: All countries used in projects items: type: string title: Countries type: array project_status: description: All core project statuses found in projects items: type: string title: Project Status type: array service_code: description: All billable service codes found in charges items: type: string title: Service Code type: array service_unit_type: description: All service unit types found in charges items: type: string title: Service Unit Type type: array robot_set: description: All robot sets found in projects items: type: string title: Robot Set type: array required: - clients - pm - regions - countries - project_status - service_code - service_unit_type - robot_set title: AccountingOverviewFilters type: object MissingDataReasonBadge: additionalProperties: false description: Badge showing reason for missing data. properties: type: description: 'Reason type: ''charge-entry'' or ''sales-order-missing''' title: Type type: string label: description: Display text for the reason badge title: Label type: string required: - type - label title: MissingDataReasonBadge type: object MissingChargesCacheStatus: additionalProperties: false description: Response for cache status endpoint. properties: cached_records: description: Number of cached records title: Cached Records type: integer last_synced_at: anyOf: - type: string - type: 'null' description: Last sync timestamp (ISO format) title: Last Synced At is_empty: description: True if cache is empty title: Is Empty type: boolean required: - cached_records - is_empty title: MissingChargesCacheStatus type: object Client: additionalProperties: false description: Schema for client. properties: id: anyOf: - type: integer - type: 'null' title: Id name: anyOf: - type: string - type: 'null' description: Client name. title: Name title: Client type: object RobotSetMissingData: additionalProperties: false description: Missing data tracking for a robot set. properties: project_code: description: Project code title: Project Code type: string project_id: description: Project UUID title: Project Id type: string set_name: description: Robot set name title: Set Name type: string set_id: description: core.RobotSet id title: Set Id type: integer work_date: description: Date of the work being tracked format: date title: Work Date type: string delay_days: description: Days since last work performed title: Delay Days type: integer last_charge_date: anyOf: - format: date type: string - type: 'null' description: Most recent date with charge entry title: Last Charge Date reasons: description: List of reasons for missing data items: $ref: '#/components/schemas/MissingDataReasonBadge' title: Reasons type: array project_managers: default: [] description: List of project managers for this project (from core.Project) items: type: string title: Project Managers type: array comment: anyOf: - type: string - type: 'null' description: Comment from accounting notes title: Comment expected_charges: default: [] description: List of expected charge types based on set status and CO line items items: type: string title: Expected Charges type: array suggested_amount: anyOf: - type: number - type: 'null' description: Approximate revenue from suggested charges title: Suggested Amount suggested_amount_eur: anyOf: - type: number - type: 'null' description: Approximate revenue converted to EUR title: Suggested Amount Eur suggested_amount_usd: anyOf: - type: number - type: 'null' description: Approximate revenue converted to USD title: Suggested Amount Usd suggested_amount_aud: anyOf: - type: number - type: 'null' description: Approximate revenue converted to AUD title: Suggested Amount Aud required: - project_code - project_id - set_name - set_id - work_date - delay_days - reasons title: RobotSetMissingData type: object Error: additionalProperties: false description: Error response schema. properties: code: $ref: '#/components/schemas/ErrorCode' message: title: Message type: string required: - code - message title: Error type: object MissingChargesSyncResponse: additionalProperties: false description: Response for missing charges sync endpoint. properties: total_records: description: Total records synced title: Total Records type: integer deleted: description: Records deleted from cache title: Deleted type: integer created: description: Records created in cache title: Created type: integer duration_seconds: description: Sync duration in seconds title: Duration Seconds type: number synced_at: description: Sync timestamp (ISO format) title: Synced At type: string required: - total_records - deleted - created - duration_seconds - synced_at title: MissingChargesSyncResponse type: object ChargeBulkReview: additionalProperties: false description: 'Input for bulk PM/customer review-status transitions. Exactly one of `ids` or `email_send_log_id` must be set. `ids` names the charges directly; `email_send_log_id` resolves to every charge linked to that sent email (`EmailSendLogCharge`).' properties: ids: anyOf: - items: type: integer minItems: 1 type: array - type: 'null' description: List of charge IDs to transition title: Ids email_send_log_id: anyOf: - format: uuid type: string - type: 'null' description: Transition every charge linked to this sent email title: Email Send Log Id title: ChargeBulkReview type: object ErrorCode: description: Error codes for API errors. enum: - validation - server - auth - unknown - external - generic title: ErrorCode type: string AccountingOverviewSortBy: description: Sortable fields for accounting overview. enum: - code - robot_set_name - client - country - total_quantity - total_revenue - total_revenue_eur - total_revenue_usd - total_revenue_aud - added_to_invoice_revenue - added_to_invoice_revenue_eur - added_to_invoice_revenue_usd - added_to_invoice_revenue_aud - invoiced_revenue - invoiced_revenue_eur - invoiced_revenue_usd - invoiced_revenue_aud - draft_charges - draft_charges_eur - draft_charges_usd - draft_charges_aud - approved_charges - approved_charges_eur - approved_charges_usd - approved_charges_aud - require_po_charges - require_po_charges_eur - require_po_charges_usd - require_po_charges_aud - currency - actual_planned_quantity - actual_planned_revenue - actual_planned_revenue_eur - actual_planned_revenue_usd - actual_planned_revenue_aud - fixed_planned_revenue - fixed_planned_revenue_eur - fixed_planned_revenue_usd - fixed_planned_revenue_aud - project_status - service_codes - service_unit_types - closure_date title: AccountingOverviewSortBy type: string securitySchemes: APIKeyAuth: type: http scheme: bearer CookieAuth: type: apiKey in: cookie name: opshub_prod_sessionid AuthBearer: type: http scheme: bearer