다중 공급업체 식품 청구서에서품목을 일괄 추출하여 하나의 스프레드시트로

일반적인 레스토랑의 화요일 납품일에는 세 장의 청구서가 들어옵니다. Sysco: 52개 품목, 제품 코드, 포장 크기, 단백질의 실중량 열이 포함된 5페이지 분량의 PDF. US Foods: 완전히 다른 레이아웃의 3페이지짜리 이메일 PDF — 단가 열이 왼쪽으로 두 칸 이동되어 있고, 설명에는 다른 약어가 사용됩니다. 지역 농산물 공급업체: 볼펜으로 수량이 휘갈겨 적힌 15개 품목의 손글씨 납품서. 즉, 세 가지 호환되지 않는 형식으로 약 100개의 품목이 동시에 도착하는 셈입니다. r/smallbusiness에서 한 사업주가 레스토랑 운영자들이 매주 직면하는 질문을 올렸습니다: "공급업체가 PDF로 청구서를 보내는데 엑셀로 변환해야 합니다. 어떤 도구를 사용하시나요?" 해당 게시글의 답변들은 기본적인 방법으로 수동 입력을 지목합니다. 이 글은 자동화된 대안을 설명합니다 — 그리고 식품 유통업체 청구서가 일반 사무용품 청구서보다 추출 도구에 훨씬 더 많은 것을 요구하는 이유를 다룹니다.

수작업 입력은 그만 — AI가 대신 읽어드립니다
이미지나 PDF를 업로드하세요 — 10초 만에 정형 데이터로
지금 체험하기
회원가입 불필요 · 카드 불필요 · 10초 내 결과
AI로 식품 유통업체 청구서 품목을 일괄 추출하여 Excel 스프레드시트로 변환

핵심 요약

  1. Sysco 청구서 한 장에는 52개 품목과 750개 이상의 개별 값이 포함되지만, 템플릿 기반 도구는 실제로 38.7파운드(실중량, 공급업체가 주문량이 아닌 실제 배송된 파운드로 청구하는 방식)로 가격이 책정된 청구서에서 "40파운드 주문"을 조용히 추출하여, 월말 정산에서 드러날 때까지 품목별 차이를 숨깁니다.
  2. 실중량 가격 책정, 공급업체별로 다른 포장 크기, 운전기사의 수기 대체 품목은 드문 예외가 아니라 대부분의 식품 청구서에 나타나며, 템플릿 추출은 이러한 필드가 템플릿이 가리킬 수 있는 고정 그리드 위치에 없기 때문에 체계적으로 실패합니다.
  3. 열 이름(주문 수량, 수령 수량, 실중량 플래그)을 한 번만 정의하면 ImageToTable.ai가 Sysco PDF, US Foods PDF, 수기 작성된 농산물 메모에서 모든 품목을 데이터의 위치가 아닌 의미를 읽어 한 번에 추출하여, 두 시간의 타이핑 작업을 몇 분의 검증으로 바꿉니다.

식품 유통업체 청구서가 일반 청구서보다 까다로운 이유

일반 사무용품 청구서는 간단합니다. 상단에 공급업체 이름, 청구서 번호, 날짜, 그리고 품목 설명, 수량, 단가, 합계가 포함된 짧은 표로 구성됩니다. 문서 전체가 한 페이지에 들어가며, 필드 라벨도 일관됩니다. 데이터 추출은 단순히 레이아웃 문제를 해결하는 수준입니다.

반면 식품 유통업체 청구서는 다섯 가지 문제를 동시에 해결해야 합니다. 첫째, 길이: Sysco 청구서는 보통 4~5페이지에 달하며, 40~60개의 품목이 연속된 표에 걸쳐 있고, 중간 카테고리가 페이지 경계를 넘어 끊기는 경우가 많습니다. 바쁜 레스토랑의 단일 주문에는 농산물, 유제품, 단백질, 건조식품, 종이용품, 세척제가 각각 별도 섹션으로 나뉘어 동일 청구서에 포함되며, 섹션별 소계가 마치 품목처럼 보이기도 합니다.

둘째, 포장 단위의 다양성: 동일한 식자재도 공급업체마다 다른 단위로 표시됩니다. Sysco의 닭가슴살은 40파운드 케이스로 판매되지만, US Foods의 동일 제품은 50파운드 케이스입니다. 지역 가금류 공급업체는 파운드 단위로 직접 판매합니다. 품목 추출 시 청구서 가격뿐만 아니라 모든 품목의 포장 단위와 측정 단위를 캡처해야 합니다. 공급업체 간 가격 비교는 공통 단위로 정규화해야 하기 때문입니다. 청구서 총액만 캡처하는 헤더 수준의 추출은 다운스트림 비용 분석에 전혀 쓸모가 없습니다.

셋째, 실중량 기준: 단백질(소고기, 닭고기, 생선)은 주문 중량이 아닌 실제 중량으로 가격이 책정되는 경우가 많습니다. 인보이스에는 같은 줄에 "주문: 40파운드"와 "수령: 38.7파운드"가 표시되며, 인보이스 가격은 실제 중량을 기준으로 계산됩니다. 중량 필드 옆에 보이는 첫 번째 숫자를 무조건 읽어들이는 도구는 잘못된 가격 기준을 추출하게 됩니다. 추출 과정에서는 어떤 중량 필드가 가격을 결정하는지 식별하고 해당 필드만 추출해야 합니다.

넷째, 수기 조정: 식품 배송에는 종종 대체 품목이 포함됩니다. 운전기사가 "80/20 갈은 소고기 — 2박스"를 지우고 "85/20으로 대체 — 동일 가격"이라고 적습니다. 또는 농산물이 부족한 경우: "로마 토마토 — 25파운드 주문, 5파운드 부족." 이러한 메모는 인쇄된 인보이스에 직접 손으로 작성됩니다. 기존 OCR은 인쇄된 텍스트와 손글씨 텍스트를 서로 관련 없는 덩어리로 읽어 "대체"라는 단어를 위의 항목과 연결하지 못합니다. 의미를 읽는 비전 모델은 손글씨가 인접한 항목에 속한다는 것을 식별하고 그에 따라 추출을 조정할 수 있습니다.

다섯째, 다중 공급업체 배치 처리: 화요일의 세 장의 인보이스는 형식이 각기 다릅니다. Sysco는 한 가지 레이아웃을 사용합니다. US Foods는 다른 레이아웃을 사용합니다. 농산물 공급업체의 수기 메모는 둘 다 사용하지 않습니다. 템플릿 기반 추출 도구는 세 가지 개별 설정이 필요하며, 자유 형식의 손글씨에는 템플릿을 만들 수 없기 때문에 수기 메모는 설정이 전혀 적용되지 않습니다. 각 공급업체를 개별적으로 구성해야 한다면 전체 배치 처리의 장점은 무너집니다.

식품 유통업체 청구서는 "음식이 적힌 청구서"가 아닙니다. 여러 페이지로 구성된 구조화된 문서로, 예외 사항이 포함되어 있고, 글과 인쇄된 내용이 같은 페이지에 공존하며, 공급업체별 설정이 반복 비용이 되는 다양한 형식을 가지고 있습니다. 이를 일반 청구서처럼 처리하는 추출 방식은 가장 중요한 데이터를 놓치게 됩니다.

실제로 추출하는 대상 — 헤더 데이터 vs. 라인 항목

청구서 추출은 두 가지 계층으로 나뉩니다. 헤더 데이터는 "누가, 언제 보냈는지"를 알려줍니다: 공급업체명, 청구서 번호, 청구서 날짜, 납기일, 구매 주문 번호, 청구서 총액. 식품 유통업체 청구서의 경우 헤더 추출만으로는 거의 아무것도 얻을 수 없습니다 — 이번 주에 Sysco에 얼마를 썼는지는 알 수 있지만, 무엇에 썼는지는 알 수 없습니다.

라인 항목 추출은 "무엇을 샀고, 각 항목의 비용은 얼마인지"를 알려줍니다. 출력의 각 행은 청구서의 한 라인을 나타내며, 다음 열을 포함합니다:

헤더 수준 필드 (송장당 하나의 값):

공급업체명  |  송장 번호  |  송장 날짜  |  배송 날짜

라인 항목 필드 (항목당 한 행, 각 라인마다 반복):

품목 코드 / SKU  |  품목 설명  |  카테고리 (농산물/유제품/단백질/건조식품/종이)
주문 수량  |  수령 수량  |  단위 (lb/케이스/개/갤런)
포장 크기  |  단가  |  라인 합계
실중량 여부 (Y/N)  |  수령 중량  |  가격 기준 (주문/실제)
대체 메모  |  로트/배치 번호

52개 라인 항목이 있는 Sysco 송장의 경우, 52개 출력 행 × 약 15개 열 = 단일 송장에서 780개의 개별 추출 값이 생성됩니다. 세 공급업체에 걸쳐 하루 배송 시 약 1,500개의 추출 데이터 포인트가 발생합니다. 값을 하나당 5초씩 수동 입력하면 2시간 이상 소요됩니다. 아래 설명된 추출 방식은 몇 초 만에 처리하며, 검증도 몇 시간이 아닌 몇 분 만에 완료됩니다.

굵게 표시된 필드 — 수량(수취), 실중량, 가격 기준, 대체 메모 — 는 식품 유통업체 추출을 일반 인보이스 추출과 구분짓는 항목입니다. 대부분의 도구가 이 필드에서 조용히 실패합니다. 첫 번째 숫자만 보고 주문 수량을 추출하지만, 인보이스 가격은 수취 수량을 기준으로 계산되며, 그 차이는 월말 재고 조정 때까지 발견되지 않습니다.

단계별 추출 워크플로우

아래 워크플로우는 열 이름 추출 방식을 사용합니다. 각 공급업체 인보이스 레이아웃에 양식 필드를 표시하는 대신, 원하는 열 이름을 입력하면 AI가 각 페이지에서 일치하는 데이터를 찾습니다. 정보가 어디에 있는지가 아니라 무엇을 의미하는지 이해하기 때문입니다. 하나의 열 정의가 Sysco의 PDF, US Foods의 PDF, 지역 공급업체의 손글씨 메모에서 모두 작동하며, 공급업체별 설정이 필요 없습니다.

1단계 — 열 이름을 한 번 정의합니다. 이는 템플릿으로 저장되어 모든 배송 배치에 재사용됩니다:

공급업체명  |  인보이스 번호  |  인보이스 일자  |  배송 일자
품목 코드  |  품목 설명  |  카테고리
주문 수량  |  수취 수량  |  단위 (lb/box/개)
포장 크기  |  단가  |  총 금액 (라인 합계)
실중량 여부 (Y/N)  |  실제 수취 중량
대체/조정 메모

2단계 — 모든 인보이스를 한 번에 업로드하세요. Sysco PDF(5페이지), US Foods PDF(3페이지), 수기로 작성한 농산물 메모 사진을 하나의 배치 업로드로 끌어다 놓으세요. 공급업체별 설정이나 템플릿 생성이 필요 없습니다. AI가 세 문서를 동시에 읽으며 각 공급업체 이름을 해당 인보이스에 자동으로 매칭합니다.

3단계 — 결과를 검토하세요, 직접 입력하지 마세요. 결과는 하나의 Excel 파일로, 각 행은 개별 품목이며, 각 열은 사용자가 정의한 필드 이름과 일치하고, 공급업체 이름 열은 각 행이 어떤 인보이스에서 왔는지 알려줍니다. 검증 단계 — 플래그가 지정되거나 신뢰도가 낮은 값을 스캔하는 과정 — 배치당 몇 분이면 완료되며, 수동 입력에 필요한 몇 시간을 대체합니다:

공급업체품목 코드품목 설명카테고리주문 수량수령 수량단위팩 크기단가총 가격포획 중량하위 참고
시스코472819닭가슴살 뼈없음 껍질없음 6온스단백질22박스40파운드$2.82$225.60아니오
시스코883412갈은 소고기 80/20 10파운드단백질33박스10파운드$3.45$103.50아니오
시스코556201로마 토마토 25파운드농산물22박스25파운드$1.50$75.00아니오
US 푸즈CHK-BR-6닭가슴살 뼈없음 6온스단백질22박스50파운드$2.70$270.00아니오
US 푸즈BEEF-8020갈은 소고기 80/20 신선단백질33박스10파운드$3.60$108.00아니오
US 푸즈SALM-ATL-8대서양 연어 필렛 8온스단백질1514.3파운드$12.50$178.75실제 중량: 14.3파운드
로컬 프로듀스로마 토마토농산물2018파운드$1.35$24.30아니오2파운드 부족

AI가 자동으로 해결하는 차이점을 확인하세요. Sysco는 닭가슴살을 "472819"로 코드화하고 12자 약어를 사용합니다. US Foods는 "CHK-BR-6"으로 코드화하고 더 긴 설명을 사용합니다. 품목명은 다르게 보이지만 둘 다 동일한 카테고리(단백질)에 매핑되며 피벗 테이블에서 비교할 수 있습니다. US Foods의 대서양 연어는 실중량 기준으로 15파운드 주문, 14.3파운드 수령, 실제 중량으로 가격이 책정됩니다. 현지 로마 토마토는 2파운드 부족하며, 대체 메모에 그 내용이 기록됩니다. 추출 과정은 세 가지 다른 인보이스 형식을 한 번에 처리하면서 이러한 모든 예외 사례를 포착합니다.

수작업 입력은 그만 — AI가 대신 읽어드립니다
이미지나 PDF를 업로드하세요 — 10초 만에 정형 데이터로
지금 체험하기
회원가입 불필요 · 카드 불필요 · 10초 내 결과

템플릿 기반 추출을 무너뜨리는 예외 사례 — AI가 이를 처리하는 방법

식품 유통업체 인보이스에는 일반 인보이스에는 없는 오류 유형이 있습니다. 이를 이해하면 템플릿 기반 도구가 지속적인 유지보수를 필요로 하는 이유와 의미 기반 추출 방식이 그렇지 않은 이유를 알 수 있습니다.

수기로 작성된 라인 항목 조정. 운전자가 갈은 소고기 항목 옆에 "80/20 대신 85/15로 대체 — 가격 동일"이라고 적습니다. 템플릿 도구에게 이는 잡음일 뿐입니다. OCR이 문자를 읽을 수는 있지만, 템플릿은 "라인 합계" 셀에 특정 값이 있을 것으로 예상하고 옆에 있는 자유 형식 텍스트를 처리할 방법을 모릅니다. 의미론적으로 읽는 비전 모델은 손글씨 텍스트가 인접한 라인 항목에 문맥상 속한다는 것을 인식하여 "대체 메모" 열로 추출합니다. 원래 주문(80/20 갈은 소고기)은 여전히 캡처됩니다. 대체되었다는 사실도 캡처됩니다. 주방은 실제로 무엇을 받았는지 알게 됩니다.

실중량 가격 책정. 연어, 스테이크 또는 치즈가 실제 중량으로 가격이 책정될 때, 송장에는 동일한 라인에 대해 주문 중량과 수령 중량이라는 두 개의 중량 열이 표시됩니다. 송장 합계는 수령 중량을 사용합니다. 두 숫자를 모두 추출하지만 어느 것이 가격을 결정하는지 식별하지 못하는 도구는 재고 실사 시 조정 오류를 발생시킵니다. 명확한 열 이름("주문 수량" 및 "수령 수량"을 별도 열로, "실중량(Y/N)" 플래그 추가)을 사용한 AI 추출은 두 값을 모두 보존하고 가격 기준을 명확하게 합니다.

표 중간의 페이지 나누기. Sysco 송장의 라인 항목 표가 2페이지와 3페이지에 걸쳐 있고, 페이지 나누기가 28번과 29번 라인 항목 사이에 있습니다. 열 머리글은 3페이지에서 반복되지 않습니다. 표가 1페이지의 고정된 위치에서 시작할 것으로 예상하는 템플릿은 페이지 나누기 이후의 모든 라인을 놓칩니다. 항목 설명과 관련 숫자 값을 검색하는 AI 추출은 페이지 경계를 신경 쓰지 않습니다. 문서를 연속적인 스트림으로 계속 읽습니다.

혼합된 측정 단위. 동일한 인보이스에 농산물은 상자(로마 토마토 25lb), 유제품은 갤런(전유), 단백질은 파운드(연어), 건조식품은 개수(밀가루 50lb 봉지)로 표시될 수 있습니다. 단위 열은 줄마다 의미가 달라집니다. 템플릿 기반 추출은 종종 인보이스당 단일 측정 단위를 가정하고 값을 잘못 분류합니다. 각 줄의 단위 필드를 독립적으로 읽는 AI 추출은 모든 행을 자체 추출 컨텍스트로 처리하기 때문에 혼합을 올바르게 처리합니다.

추출된 라인 항목에서 실행 가능한 스프레드시트로

라인 항목을 추출하는 것은 주간 운영 리듬의 첫 단계입니다. 그 다음에 일어나는 일이 데이터를 의사 결정으로 전환합니다.

레시피 비용 업데이트. 추출된 각 라인 항목에는 단가가 포함됩니다. 접시 비용을 추적하는 레스토랑의 경우, 이는 식재료비율 계산의 입력값입니다. Sysco 인보이스에 닭가슴살이 $2.82/lb로 표시되지만 US Foods에서는 $2.70/lb인 경우, 더 저렴한 공급업체의 가격이 치킨 요리의 레시피 비용에 반영되어 인분 크기를 곱한 차액만큼 접시 비용이 낮아집니다. 주간 추출은 레시피 비용이 항상 최신 상태로 유지되며, 3개월 전 마지막 메뉴 업데이트 시 입력된 가격에 기반하지 않도록 합니다.

각 식재료의 가격 내역 구축. 일관된 열 구조로 매주 추출 결과를 저장하면 모든 공급업체의 모든 식재료 가격을 주별로 검색 가능한 기록으로 만들 수 있습니다. 12주 동안 닭가슴살 행을 내보내고 단가를 차트로 표시하면 가격 변동의 시각적 이력을 확인할 수 있습니다. 차트는 Sysco 담당자의 "가격이 안정적이었다"는 주장이 데이터와 일치하는지 알려줍니다.

재고 조정. 카테고리별로 합산된 수량 수령 열은 주간 재고의 입력값입니다. 추출 결과 이번 주 모든 공급업체로부터 80파운드의 닭가슴살을 수령했고, 냉장고에 55파운드가 남아 있다면, 그 차이가 이번 주 실제 사용량이며, 실제 식재료비와 이론적 식재료비를 계산하는 기초가 됩니다. 수동 데이터 입력은 전사 오류를 발생시켜 이 조정을 신뢰할 수 없게 만듭니다. 추출된 데이터는 전사 변수를 제거합니다.

공급업체 협상 지원. 공급업체가 가격 인상을 제안할 때, 추출 이력은 객관적인 데이터를 제공합니다. "귀사의 닭가슴살 가격이 지난 6주 동안 $2.70에서 $2.95로 9.2% 상승했습니다. 같은 기간 뼈 없는 가슴살 상품 지수는 3.1% 움직였습니다. 차이를 설명해 주시겠습니까?" 대화가 의견에서 증거로 전환되며, 공급업체는 문서 기록이 있다는 것을 알게 됩니다.

템플릿을 구성하지 않고 송장 데이터 추출을 시작하는 실용적인 방법으로 AI 송장 데이터 추출 도구를 사용해 보세요. 이 도구는 단일 배치에서 다중 공급업체 식품 송장, 수기 메모, 캐치웨이트 가격을 처리합니다.

자주 묻는 질문

표가 여러 페이지에 걸쳐 있는 다중 페이지 송장도 처리할 수 있나요?

네. AI는 전체 문서를 연속적인 정보 흐름으로 읽습니다. 각 페이지를 별도 문서로 취급하거나 표가 한 페이지에만 국한될 것으로 예상하지 않습니다. Sysco 송장의 라인 항목 표가 2페이지와 3페이지에 걸쳐 있고(3페이지에 열 헤더가 반복되지 않음) AI는 표가 중단된 부분부터 항목 추출을 계속합니다. 페이지를 따로 업로드하거나 페이지 범위를 구성할 필요가 없습니다. 모든 송장의 모든 페이지를 함께 배치 업로드하면 추출 시 모든 페이지의 모든 라인 항목이 포함된 단일 출력 파일이 생성됩니다.

AI가 다양한 포장 크기와 측정 단위 변환을 이해하나요?

AI는 송장에 인쇄된 그대로 포장 크기와 단위를 추출합니다. 예를 들어 lbs를 kg으로 변환하는 등 단위를 자동 변환하지는 않습니다. 대신 두 값을 모두 캡처하여 스프레드시트에서 정규화할 수 있도록 합니다. "포장 크기: 40"과 "단위: lb"가 각각 자체 열로 추출되어 다운스트림 변환이나 단가 계산에 필요한 원시 데이터를 제공합니다. 추출 중 변환을 처리하려는 팀을 위해 계산 열을 정의할 수 있습니다. 예를 들어 "단가(확장 가격 ÷ 수령 수량, 소수점 두 자리)"와 같이 정의하면 AI가 출력 전에 계산을 수행하므로 포장 크기와 관계없이 모든 라인 항목에 이미 정규화된 단위당 가격이 포함됩니다.

운전기사가 인쇄된 송장에 직접 대체 품목 메모를 작성하면 어떻게 되나요?

인쇄된 송장에 배송 기사가 직접 적은 수량 변경, 부족, 가격 조정 등의 손글씨 메모를 AI가 읽어 결과에 반영합니다. 예를 들어 "80/20 갈은 소고기 — 2박스" 항목에 "85/15로 대체 — 동일 가격"이라고 적혀 있으면, 원래 품목(80/20 갈은 소고기)은 그대로 추출되고 대체 메모는 지정된 열에 표시됩니다. 이는 인쇄된 텍스트와 손글씨를 각각 독립적으로 읽어 맥락적으로 연결하지 못하는 기존 OCR과 차별화되는 비전 모델 추출의 기능입니다. 실제 한계는 손글씨가 어느 정도 읽기 쉬워야 하고 사진에 메모가 선명하게 보여야 한다는 점입니다. 평평한 송장을 정면에서 밝은 조명으로 찍은 사진은 신뢰할 수 있는 결과를 제공하지만, 접힌 송장을 어두운 곳에서 비스듬히 찍은 사진은 손글씨 부분의 정확도가 낮아집니다.

Restaurant365나 xtraCHEF 같은 AP 자동화 플랫폼과 어떻게 다른가요?

AP 자동화 플랫폼은 송장 입력, 품목별 계정코드 매핑, 승인 라우팅, 회계 시스템 연동 등 전체 미지급금 업무를 처리합니다. 월 수백 건의 송장을 처리하는 다지점 레스토랑 그룹에게는 통합 깊이와 자동화 이점이 플랫폼 비용을 정당화합니다. 단일 레스토랑이나 소규모 그룹이 세 곳의 공급업체로부터 주당 10~20건의 송장을 처리하는 경우, AI 사진-스프레드시트 추출로 동일한 품목별 데이터를 얻을 수 있으며, 기존 스프레드시트 기반 추적 시스템과 호환되는 표준 Excel 출력을 제공합니다. 차이는 범위에 있습니다. AP 플랫폼은 전체 지급 프로세스를 자동화하는 반면, 품목별 추출은 송장 데이터를 스프레드시트에 옮기는 특정 문제를 해결하며, 규모에 따라 본격적인 플랫폼으로 가는 디딤돌이거나 영구적인 경량 솔루션이 될 수 있습니다.

공급업체가 일반 인보이스 대신 대변 메모나 조정 인보이스를 보내면 어떻게 되나요?

대변 메모, 차변 메모, 조정 인보이스는 일반 인보이스와 동일하게 처리됩니다. AI가 문서를 읽고 사용자가 정의한 필드를 추출합니다. 대변 메모에 원본 인보이스 번호가 참조되어 있으면 해당 참조도 출력에 포함됩니다. 핵심은 문서 유형 열(예: "문서 유형(인보이스/대변 메모/조정)")을 포함하여 출력에서 청구와 대변을 구분하는 것입니다. 반품이나 가격 조정에 대한 대변 메모는 일반 인보이스와 동일한 스프레드시트 구조로 입력되며, 문서 유형 열을 통해 정확한 순비용 계산이 가능합니다.

열 템플릿을 저장해서 매주 재사용할 수 있나요?

네. 사용자가 정의한 열 이름(공급업체명, 품목 코드, 품목 설명, 수령 수량, 단가 및 기타 모든 필드)은 최초 사용 후 템플릿으로 저장됩니다. 이후 매주 배치 작업 시 동일한 템플릿을 한 번의 클릭으로 사용하여 매주 동일한 구조의 출력을 생성합니다. 이는 위에서 설명한 가격 이력 및 추세 추적을 실용적으로 만드는 핵심입니다. 주간별로 일관된 열 구조가 유지되므로 데이터를 자동으로 마스터 시트에 통합할 수 있으며, 배치 간 재포맷이 필요 없습니다.

📮 contact email: [email protected]