Private/Complete-KadenOpenJournal.ps1

function Complete-KadenOpenJournal {
    <#
    .SYNOPSIS
        Mark an open journal completed and retain it for 30 days.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        $OpenJournal,
        $Operations
    )

    $journal = $OpenJournal.Journal
    $completed = [ordered]@{}
    foreach ($prop in @($journal.PSObject.Properties)) {
        $completed[$prop.Name] = $prop.Value
    }
    $completed['status'] = 'completed'
    $completed['operations'] = @($Operations)
    $completed['cleanupEligibleAtUtc'] = [datetime]::UtcNow.AddDays(30).ToString('o')
    Write-KadenJsonAtomic -LiteralPath $OpenJournal.Path -Object $completed
    $txnDir = Split-Path -Parent $OpenJournal.Path
    foreach ($name in @('staging', 'backup')) {
        $dir = Join-Path $txnDir $name
        if (Test-Path -LiteralPath $dir) {
            Remove-Item -LiteralPath $dir -Recurse -Force
        }
    }
}