견적서 하나 올리면 끝날 줄 알았습니다
타스에게 매출을 물어볼 수 있게 된 뒤에는, 견적서도 한번 맡겨보고 싶었습니다.
영업 업무를 하다 보면 이미 문서에 있는 내용을 다시 입력할 때가 많습니다. Excel 견적서에 고객명과 제품, 수량과 금액이 있는데, 업무 시스템에 기록하려면 같은 내용을 다시 옮겨야 합니다. 파일을 보는 일과 입력하는 일이 계속 번갈아 일어납니다.
LISA도 이 반복을 줄이려고 만들었는데, 문서에 있는 내용을 다시 손으로 넣고 있었습니다. 타스에게 파일을 올리면 필요한 항목을 읽어 견적 초안으로 보여줄 수 있을 것 같았습니다. 제가 보고 고친 뒤 저장하면 되는 흐름을 생각했습니다.
Codex와 함께 LISA의 타스 대화창에 ‘견적 첨부’를 붙였습니다. Excel과 PDF, 이미지를 올릴 수 있게 하고, 읽어낸 고객명과 품목을 미리보기에서 확인하도록 만들었습니다.
파일에서 글자를 읽는 부분보다, 읽은 다음에 어떻게 처리할지를 정하는 데 손이 더 갔습니다.

첨부 파일의 분석이 끝난 상태와 견적이 저장된 상태를 구분했습니다. 실제 화면을 단순화한 설명용 도식입니다.
읽어낸 내용과 저장할 내용
견적서에는 금액이 여러 개 있습니다. 품목별 단가와 합계가 있고, 공급가액과 부가세, 최종 합계가 있습니다. 이 중 무엇을 LISA의 판매단가에 넣을지 정해야 했습니다.
고객에게 주는 견적서에는 매입원가가 없는 경우도 있습니다. 그 칸을 비워둘지, 0원으로 넣을지도 결정해야 했습니다. 입력칸이 숫자를 받는다고 해서 빈칸을 모두 0으로 채우면, 나중에 실제로 원가가 없었던 거래처럼 보일 수 있었습니다.
저희가 필요한 것은 문서에 적힌 내용의 초안이었습니다. 확인되지 않은 원가나 만료일은 비워두고, 사람이 채울 수 있게 했습니다. 제품군도 기존 가격표와 등록 이력에 맞춰 확인하도록 했습니다. 비슷해 보이는 이름만으로 분류가 확정되면 이후 조회에서 다시 문제가 생길 수 있기 때문입니다.
합계도 대조했습니다. 품목의 수량과 판매단가로 계산한 금액이 원본과 맞아야 했습니다. 원화 견적에서 합계가 1원이라도 다르면 검토를 완료하지 못하도록 했습니다. 원본이 부가세 포함 금액인지, LISA에 넣는 값이 부가세 별도인지도 함께 확인했습니다.
처음부터 모든 통화와 모든 양식을 처리하려고 하지는 않았습니다. 우선 원화 신규 견적에 범위를 맞췄습니다. 지원하지 않는 문서는 기존 견적 입력 화면을 쓰도록 남겨뒀습니다.
실제 Excel 파일을 넣고 나서 고친 것
첨부 기능을 만들 때는 AI로 문서를 읽는 경로를 붙였습니다. Excel과 PDF, 이미지로 만든 예시 문서에서 고객명과 수량, 금액이 추출되는 것을 확인했습니다.
PDF에서는 문서 내용을 읽고도 결과를 처리하지 못하는 오류가 있었습니다. 결과 앞에 붙은 초기화 안내 문구를 데이터와 함께 해석한 것이 원인이었습니다. 최종 결과 부분을 구분해서 받도록 고친 뒤 다시 확인했습니다.
이런 부분은 문서를 잘 알아보는 것과 별개였습니다. 인식 결과가 나와도 LISA가 받을 수 있는 형태로 이어지지 않으면 사용자는 결과를 볼 수 없었습니다.
그 뒤에는 익숙한 Excel 견적서부터 코드로 직접 읽는 경로를 추가했습니다. 저희가 쓰는 양식이라면 항목과 합계를 확인해 필요한 셀 값을 가져올 수 있었습니다. 구조가 확인된 파일은 모델 호출 없이 처리하고, PDF나 이미지 등은 기존 분석 경로를 사용하도록 나눴습니다.
그런데 실제 파일을 넣어보니 셀 위치를 고정해둔 가정이 맞지 않았습니다. 품목 행이 추가되면서 합계 위치도 아래로 이동한 견적서가 있었습니다. 늘 같은 줄에서 합계를 찾게 만들어두면 이런 파일을 처리할 수 없었습니다.
합계가 놓일 위치와 품목 구간을 양식 안에서 확인하도록 바꿨습니다. 실제로 올렸던 두 파일에서 각각 여덟 개 품목을 모두 읽고, 원본 합계와 맞는지도 대조했습니다. 아래쪽에 반복되는 발주서 구간은 품목을 다시 세지 않도록 구분했습니다.

행 번호와 금액은 이해를 돕기 위한 가상 예시입니다. 품목이 늘어나면 같은 셀을 읽는 방식으로는 합계를 찾을 수 없었습니다.
파일이 Excel이라는 이유만으로 모두 이 경로를 타는 것은 아닙니다. 양식을 확인할 수 있어야 했고, 저장된 셀 값과 합계가 맞아야 했습니다. 수식 결과가 남아 있지 않거나 파일 구조를 안전하게 읽을 수 없는 경우에는 억지로 값을 채우지 않도록 했습니다.
AI를 붙인 기능 안에서도 익숙한 양식은 코드가 맡는 쪽이 나았습니다. 파일을 분류하는 방식이 달라도, 마지막에는 같은 검토 화면에서 확인하도록 맞췄습니다.
확인 버튼을 누르는 시점
첨부한 파일에서 항목을 읽었다고 견적이 바로 저장되지는 않게 했습니다. 분석 결과를 보고 고객과 품목, 금액을 수정한 다음 검토를 거쳐 별도로 저장하도록 했습니다.
여기서 한 가지를 더 정해야 했습니다. 검토가 끝난 뒤 금액을 고치면, 앞서 확인한 내용과 실제 저장되는 내용이 달라질 수 있었습니다. 수정한 경우에는 다시 검토하도록 하고, 최종 저장은 확인을 마친 버전만 받게 했습니다.
저장 버튼을 다시 누르거나 같은 파일을 다시 올릴 때도 같은 견적이 여러 개 생기면 곤란했습니다. 같은 파일과 저장 요청을 구분할 수 있도록 하고, 재시도에는 이미 만들어진 결과를 돌려주도록 했습니다.
견적과 품목이 일부만 저장되는 경우도 막아야 했습니다. 하나의 저장 작업으로 묶어, 중간에 실패하면 일부 자료만 남지 않게 했습니다. 초안에서 견적을 만드는 이 경로가 기존 고객 정보나 갱신 내역까지 덮어쓰지는 않도록 범위도 정했습니다.
이런 조건은 처음 머릿속에 그렸던 ‘파일 올리면 알아서 입력’이라는 그림에는 잘 보이지 않았습니다. 실제 데이터를 남기는 버튼을 만들고 나니, 두 번 눌렀을 때와 중간에 끊겼을 때까지 생각하게 됐습니다.
저장됐다는 것을 알 수 있어야 했습니다
기능을 붙인 다음에는 타스 대화에도 첨부와 등록 결과를 남겼습니다. 파일을 올린 기록이 있고, 저장이 성공한 뒤에는 등록한 품목과 견적으로 이동하는 링크가 보이도록 했습니다.
그 안내는 AI가 상황을 보고 만들어내는 문장으로 처리하지 않았습니다. 실제 저장 성공 결과를 받아 표시하게 했습니다. 견적이 저장되지 않았는데 채팅창에 완료 안내부터 뜨면, 결국 사람이 다시 찾아다니며 확인해야 합니다.
사용 가이드도 붙였습니다. 첨부하고, 초안을 확인하고, 저장한 뒤 결과를 여는 순서를 예시 화면으로 정리했습니다. 제가 만든 흐름을 다른 사람이 처음 봐도 따라갈 수 있는지 확인하는 작업이었습니다.
지금은 익숙한 원화 견적서부터 이 방식으로 가져올 수 있습니다. PDF와 이미지에서 읽은 내용은 검토가 필요하고, 기존 견적 입력 화면을 써야 하는 문서도 남아 있습니다. 파일을 올린 뒤 확인하고 고치는 시간까지 포함해 봐야 실제로 일이 줄었는지 알 수 있을 것 같습니다.
처음에는 타스가 견적서를 얼마나 잘 읽을지가 가장 궁금했습니다. 만들면서 자주 확인한 것은 조금 더 구체적이었습니다. 빠진 원가를 그대로 비워뒀는지, 원본 합계가 맞는지, 제가 확인한 내용으로 한 번만 저장됐는지였습니다.
다음 글에서는 이 견적과 매출을 한 화면에서 보기 시작하면서, 숫자의 기준을 다시 정리했던 이야기를 남겨보겠습니다.