일정 배치 제안 함수
Suggestion Function은 선택한 일정 블록을 어디에 배치할지 적합도를 보여 주는 TypeScript 함수입니다. 결과의 시간 영역을 색으로 표시하여 선호하는 위치나 피해야 할 위치를 구분할 수 있습니다.
결과는 앱을 처음 로드할 때 계산한 정적 값입니다. 그 이후의 액션 변경을 반영하지 않으므로 계속 바뀌는 일정의 실시간 검증과는 다릅니다.
표시와 강제 설정
가상의 Susan 배정에서는 선호 장소인 Garden City를 녹색, 선호하지 않는 Sandbar를 회색으로 보여 줄 수 있습니다.
항공편 시간이 고정되어 있고 조종사만 바꿀 수 있는 업무에서는 세로로 같은 시간 범위를 강조할 수 있습니다.
Custom Suggestions에 함수를 연결하고 Enforce Suggestions를 켜면 가까운 강조 영역으로 배치를 맞춥니다. Shift를 누르면 재정의할 수 있으므로 이 표시 설정을 변경 불가능한 업무 제약이나 접근 통제로 사용해서는 안 됩니다.
입력과 반환 계약
입력은 일정 객체의 기본 키 목록과 Gantt 전체 시작 및 종료 Timestamp입니다. 반환은 일정 기본 키별 맵이며, 그 안에서 자원 행의 기본 키를 각 시간 슬롯 목록에 매핑합니다.
아래는 TSv1의 입출력 자료형 정의입니다. 조직의 실제 적합도 로직이 이 구조로 결과를 반환하도록 작성합니다.
import { Float, FunctionsMap, Long, Timestamp } from "@foundry/functions-api";
export interface IDomain {
start: Long;
end: Long;
}
export interface ISuggestionSlot {
domain: IDomain;
rating: Float;
}
export type IValidSlots = ISuggestionSlot[];
export type ISlotMappings = FunctionsMap<string, IValidSlots>;
export type ISuggestionResult = FunctionsMap<string, ISlotMappings>;
export type ISuggestion = (
scheduleObjectPrimaryKeys: string[],
domainStart: Timestamp,
domainEnd: Timestamp
) => ISuggestionResult;
export const ALL_ROWS_ID = "__ALL_ROWS";
domain.start와 domain.end는 슬롯의 Long형 시간 경계입니다. rating은 -1부터 1까지이며 1에 가까울수록 진한 녹색, -1에 가까울수록 빨강으로 표시합니다.
시작과 종료를 고정하고 자원만 바꾸는 경우에는 행별 같은 슬롯을 반복하는 대신 ALL_ROWS_ID인 __ALL_ROWS를 사용할 수 있습니다. 입력의 일정 기본 키와 반환 맵의 키를 정확히 대응시켜야 합니다.
편집 후의 상태를 확인할 때는 검증 규칙을, 현재 시나리오를 고려해 새 후보를 찾을 때는 검색 함수를 사용합니다.