# TechnicallyCompleteInternalOrder

## Permission Scope

accounting

## Overview

technicallyCompleteInternalOrder transitions an internal order from RELEASED status to TECHNICALLY_COMPLETED status. This indicates that the activity tracked by the order is complete and no further cost postings are expected, though the order remains open for final review before closure.

## Business Rules

- Internal order must exist
- Internal order must be in RELEASED status to be technically completed
- Technically completing a CREATED, already TECHNICALLY_COMPLETED, or CLOSED order is rejected as an invalid state transition
- Once technically completed, no further cost postings are accepted
- Emits an audit event recording the status transition and acting user

## Process Flow

```mermaid
flowchart TD
    A[Receive technically complete internal order request] --> B{Internal order exists?}
    B -->|No| C[Return error: INTERNAL_ORDER_NOT_FOUND]
    B -->|Yes| D{Status is RELEASED?}
    D -->|No| E[Return error: INVALID_STATE]
    D -->|Yes| F[Transition status from RELEASED to TECHNICALLY_COMPLETED]
    F --> G[Emit audit event]
    G --> H[Return technically completed internal order]
```

## External Dependencies

- None

## Error Scenarios

- **INTERNAL_ORDER_NOT_FOUND**: Internal order with the specified ID does not exist
- **INVALID_STATE**: Target entity is not in a valid status for this operation

## Test Cases

- technically completes a RELEASED internal order transitioning it to TECHNICALLY_COMPLETED status
- returns error when internal order does not exist
- returns error when internal order is in CREATED status
- returns error when internal order is already TECHNICALLY_COMPLETED
- returns error when internal order is CLOSED
- emits audit event recording the status transition and acting user
