Lyotic · 참조 사례
5,400 / 1,620
서로 다른 수량을 같은 값으로 만드는 사례가 아닙니다. 생산 수량과 판매 가능 수량의 의미를 확인하고, 허용된 매핑 변경과 검증을 연결하는 참조 픽스처입니다.
단계별 흐름
ERP·Excel의 5,400과 Shopify·Amazon의 1,620은 시험용 값입니다. 같은 품목을 가리키는지와 같은 의미의 수량인지부터 따로 확인합니다. 숫자를 같게 만드는 것이 목표가 아닙니다.
1 · 요약: 비교할 기록
요약 상태는 비교할 기록이 있다는 사실을 알립니다. 네 레코드가 어떤 품목과 재고 관계를 뜻하는지 아직 확인해야 하므로, 수량 오류가 발견되었다고 단정하지 않습니다.
2 · 비교: 미해결 주장에 기대는 제안
두 주장을 분리합니다. 첫째는 기록들이 같은 품목과 관련된다는 주장이고, 둘째는 수치들이 직접 비교 가능한 같은 종류의 값이라는 주장입니다. 식별자로 첫 주장이 지지되어도 두 번째 주장은 별도 근거가 필요합니다.
3 · 해석 전환: 필드의 의미가 다릅니다
ERP의 5,400은 Produced Quantity이고 Shopify의 1,620은 Available to Sell입니다. 두 값은 서로 다른 질문에 대한 답입니다. 숫자를 수정하기 전에 비교한 필드의 의미와 제안을 바꿔야 합니다.
ERP에 실제 판매 가능 수량 필드나 승인된 계산 규칙이 없다면 이름만 바꾸거나 임의의 값을 만들지 않습니다. 필요한 의미가 정의될 때까지 업무는 도메인 판단 단계에 머뭅니다.
4 · 실제 대안
판매 가능 수량을 뜻하는 올바른 필드나 승인된 계산 규칙이 확인되면 매핑 변경을 제안할 수 있습니다. 기존 상태 유지, 임시 수동 조정, 매핑 수정처럼 실제 대안을 비교하고 무엇을 왜 선택했는지 기록합니다.
5 · v3 승인
승인은 제안 v3, 대상, 관련 기록 버전과 정책 조건에 묶입니다. 실행 시점에도 이 전제가 유효해야 합니다. 대상이나 권한이 달라지면 이전 승인을 그대로 사용하지 않습니다.
6 · 적용 중
승인된 버전과 권한을 실행 시 다시 확인하고 각 대상에 보낸 작업을 기록합니다. 접수되거나 적용된 것은 read-back 검증과 다릅니다.
7 · Amazon 결과 미확정
Shopify에는 반영되었지만 Amazon의 응답이 사라졌다면 결과는 대상별로 다릅니다. Amazon은 미확정으로 남기고 확인 가능한 상태를 먼저 재조정합니다. 전체 성공이나 전체 실패로 합치거나, 안전성이 확인되지 않은 재시도를 반복하지 않습니다.
8 · 다시 읽어 확인
실행 이후 올바른 매핑과 대상 값, 보호해야 할 값, 관찰 시점을 확인합니다. 읽기 전용 Excel에 쓰기가 성공했다고 주장하지 않습니다. 관찰할 수 없는 부수 효과는 검증 범위 밖으로 명시합니다.
9 · 차이를 보존한 범위 검증
생산 수량 5,400과 판매 가능 수량 1,620은 계속 다를 수 있습니다. 검증된 것은 서로 다른 의미의 필드를 잘못 연결하던 매핑의 수정 범위입니다. 요약으로 접힌 뒤에도 출처, 차이의 이유와 확인한 범위를 다시 볼 수 있어야 합니다.
승인이 오래된 상태가 되는 분기
Dana가 승인 뒤 매핑을 바꾸면 v3에 묶인 승인은 새 버전을 허용하지 않습니다. 달라진 전제를 드러내고 다시 판단한 뒤 승인·실행·검증을 진행합니다. 이 분기는 추가 확인 경로를 보여줍니다.
각 단계의 필수 정보
각 단계에서 같은 Case와 Work Object를 유지하고 현재 계획의 필수 정보를 드러냅니다. 비교에서는 출처와 주장, 승인에서는 영향 범위와 버전, 실행에서는 대상별 결과, 검증에서는 확인·보존·관찰 불가 범위를 구분합니다. INV-01/02/03/04/06/10/11.
Amazon의 응답이 없으면 미확정으로 남깁니다. 읽기 전용 Excel은 쓰기 성공으로 표현하지 않습니다. 검증 후에도 생산 수량 5,400과 판매 가능 수량 1,620의 차이는 보존됩니다.
직접 실행하기
저장소를 웹 서버로 열고 위의 Main path와 Dana edits after approval을 각각 끝까지 확인합니다. 오른쪽 inspector는 plan과 DOM 검사를 보여줍니다. 검사 한계와 실패도 함께 기록해야 하며, 숫자가 같아졌다는 이유로 매핑이 검증되었다고 결론내리지 않습니다.
import { resolve, checkPlan } from '@lyotic/core';
import { buildSteps } from '@lyotic/core/fixtures/mapping-case';
for (const step of buildSteps()) {
const plan = resolve(step.state);
console.log(step.id, plan.mode, plan.attention.level, checkPlan(step.state, plan).violations);
}