Skip to content

TMS / EDI / EDI 210

EDI 210

1. 기본 정보

항목 내용
작성자 이샘미
최초 작성일 2025-12-30
최종 변경일 2025-12-30

2. 요약 및 산출물

요약

EDI 210을 생성하며, 생성된 EDI 210에 대해 목록 조회 및 전송이 가능합니다.

주요 산출물

  • EDI 210 생성
    EDI 204 Accept 시 charges 정보가 포함된 경우, AR과 EDI 210이 생성됩니다.

  • EDI 210 목록 조회 API

    GET edi/210
    

  • EDI 210 송신 API

    PATCH edi/210/{wo_no}/{ts}
    


3. 타당성

EDI 210을 통해 고객이 요청한 AR 내용을 확인할 수 있으며, NGL 측에서 AR에 대한 제안도 가능합니다. 제안된 AR에 대한 고객의 승인 또는 거부 결과는 EDI 990을 통해 확인할 수 있습니다.


4. 기술 설명

Workflow

graph TB
  A[EDI 204 Received]

  A --> B[EDI 204 Accept]

  B --> C{updateFlag}

  %% N (New)
  C -->|N| D[Work Order 생성]

  D --> E{charges 포함?}

  E -->|Yes| F[AR 생성<br/>edi_sync = True]
  F --> G[EDI 210 생성<br/>active = True<br/>status = PENDING]

  E -->|No| H[WO 생성 완료]

  %% U (Update)
  C -->|U| I[기존 Work Order 업데이트]

  I --> J[charges 비교<br/>이미 저장된 값 vs 현재 값]

  J -->|동일| K[AR, EDI 210 변경 없음]

  J -->|다름| L[기존 AR 수정<br/>edi_sync = False]
  L --> M[신규 AR 생성<br/>edi_sync = True]

  M --> N[기존 EDI 210 수정<br/>active = False]
  N --> O[신규 EDI 210 생성<br/>active = True]

  %% 공통 후처리
  G --> P[Billing Info<br/>AR 조회 및 수정]
  O --> P

  P --> Q[연결된 AR 기반 EDI 210 전송<br/>status = SENT]

  Q --> R[EDI 990 수신]
  R --> S{승인 여부}

  S -->|Accept| T[처리 완료<br/>status = APPROVED]
  S -->|Decline| U[거부 처리<br/>status = REJECTED]

DynamoDB 설계

이름 설명 비고
wo_no Work Order를 식별하는 고유 번호 PK
ts 데이터 생성 기준 Unix timestamp Local Sort Key, 모든 Global Secondary Index의 Sort Key
wo_number EDI 204의 woNumber WoNumberIndex의 Partition Key
transaction_number NGL에서 생성한 식별자 TransactionIndex의 Partition Key
category 고정 상수 CategoryIndex의 Partition Key
sender_div EDI 204 송신자 및 Division 값 SenderIndex의 Partition Key
active 해당 데이터의 활성화 여부
created_by 데이터 생성 주체
created_date 데이터 생성 일시
div Division 정보
file_name SFTP를 통해 전송된 파일명
flag EDI 204의 updateFlag
info 생성된 EDI 210 관련 원본
sender EDI 204 송신자 정보
sent_date EDI 210이 전송된 일시
status EdiStatusEnum으로 표현된 EDI 210 처리 상태
  • SenderIndex, TransactionIndex, WoNumberIndex는 요구사항에 따른 검색 기능을 구현하기 위해 생성되었습니다.
  • EDI 210을 전송하기 위해서는 transactionNumber가 필요하며, 이를 생성하기 위해 CategoryIndex가 설정되었습니다.

How to generate the transaction number

EDI 210, 214, 322를 고객에게 전달하기 위해 transactionNumber가 필요하며, 생성 규칙은 모두 동일합니다.
규칙은 다음과 같습니다:

  1. 날짜 접두사 생성
    Division을 기준으로 YYMMDD 형식의 날짜 접두사를 생성합니다.

  2. 시퀀스 번호 생성
    해당 날짜에 테이블에 존재하는 트랜잭션 수에 1을 더하고, 3자리 0 패딩을 적용합니다.

  3. 최종 결합
    날짜 접두사와 시퀀스 번호를 결합하여 최종 transactionNumber를 생성합니다.

EDI 210 목록 조회를 위한 Query

요구사항에 따르면 Division과 Sender별로 EDI 204 목록을 확인할 수 있습니다. 이를 위해 DynamoDB EDI 210 테이블에 SenderIndex를 설정하였습니다. 해당 PK는 데이터가 계속 누적되므로, DynamoDB의 특성에 맞춰 아래와 같이 구현하였습니다.

DynamoDB Query 결과 용량 제한

DynamoDB Query의 결과는 최대 1MB로 제한되며, 이 용량을 넘어서는 경우 자동으로 Pagination이 발생합니다.

EDI 210 목록 조회 일부
filtered_210 = []
last_key = None

while True:
    query_kwargs = {
        'IndexName': 'SenderIndex',
        'KeyConditionExpression': key_expr,
        'FilterExpression': filter_expr,
    }

    if last_key:
        query_kwargs['ExclusiveStartKey'] = last_key

    response = dynamo_210.query(**query_kwargs)
    filtered_210.extend(response.get('Items', []))

    last_key = response.get('LastEvaluatedKey')
    if not last_key:
        break

5. 위험성 평가

-


🧩 추가 정보

-