AnalysisStreamEvent.java

package com.taxonomy.analysis.usecase;

import com.taxonomy.dto.LlmCallDetail;
import com.taxonomy.dto.ProductCoverageGap;
import com.taxonomy.dto.TaxonomyDiscrepancy;

import java.util.List;
import java.util.Map;

public sealed interface AnalysisStreamEvent
        permits AnalysisStreamEvent.Phase,
        AnalysisStreamEvent.Scores,
        AnalysisStreamEvent.Expanding,
        AnalysisStreamEvent.Complete,
        AnalysisStreamEvent.Error {

    record Phase(String message, int progressPercent) implements AnalysisStreamEvent {
    }

    record Scores(Map<String, Integer> newScores,
                  Map<String, String> reasons,
                  String description,
                  LlmCallDetail detail) implements AnalysisStreamEvent {
    }

    record Expanding(String parentCode, List<String> childCodes) implements AnalysisStreamEvent {
    }

    record Complete(String status,
                    Map<String, Integer> allScores,
                    List<String> warnings,
                    List<TaxonomyDiscrepancy> discrepancies,
                    List<ProductCoverageGap> productCoverageGaps) implements AnalysisStreamEvent {
    }

    record Error(String status,
                 String errorMessage,
                 Map<String, Integer> partialScores,
                 List<String> warnings,
                 List<TaxonomyDiscrepancy> discrepancies,
                 List<ProductCoverageGap> productCoverageGaps) implements AnalysisStreamEvent {
    }
}