Private/New-ComplianceResult.ps1

function New-ComplianceResult {
    <#
    .SYNOPSIS
        Creates a standardised compliance-check result object.
    .OUTPUTS
        PSCustomObject (type name: EntraComplianceAuditor.ComplianceResult)
    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param (
        [Parameter(Mandatory)]
        [string]$CheckName,

        [Parameter(Mandatory)]
        [string]$Category,

        [Parameter(Mandatory)]
        [ValidateSet('Pass', 'Fail', 'Warning', 'NotApplicable', 'Error')]
        [string]$Status,

        [Parameter(Mandatory)]
        [string]$Description,

        [string]$Recommendation = '',

        [object]$Details = $null,

        [ValidateSet('Critical', 'High', 'Medium', 'Low', 'Informational')]
        [string]$Severity = 'Medium'
    )

    [PSCustomObject]@{
        PSTypeName     = 'EntraComplianceAuditor.ComplianceResult'
        CheckName      = $CheckName
        Category       = $Category
        Status         = $Status
        Description    = $Description
        Recommendation = $Recommendation
        Details        = $Details
        Severity       = $Severity
        Timestamp      = (Get-Date -Format 'o')
    }
}