Odoo 판매 관리
Bahmni는 Odoo의 판매, 배송 및 송장 발행 기능을 활성화하고 개선하는 추가 기능을 제공합니다. 예를 들어 견적 자동 생성, 의약품 가격 결정, 배송 자동화 등이 있습니다. 또한 Odoo의 핵심 프로세스나 워크플로를 변경하지 않는 방식으로 편의 기능과 최적화를 제공합니다.
판매를 등록하기 전에 먼저 판매 설정을 구성해야 합니다.
"Menu / Sales/ Configuration / Settings"로 이동하여 제품, 가격, 고객, 판매, 배송 관련 설정을 검토합니다. 할인을 설정하려면 "Allow discounts on sales order lines"를 활성화할 수 있습니다.
배송 품목의 판매 거래를 완료하는 기본 Odoo 워크플로는 두 단계입니다. 먼저 견적과 배송 주문을 확정하고, 다음으로 송장을 전기한 뒤 결제를 기록합니다.
대부분 전체 과정은 약국에서 한두 명의 사용자가 처리합니다. 사용자 정의 모듈 확장에 통합된 토글을 활성화하면 이 단계를 자동화할 수 있습니다. 아래에서 관련 Bahmni 기능과 설정을 자세히 설명합니다.
Odoo 16부터 이러한 설정은 모두 Menu -> Settings -> Bahmni에서 찾을 수 있습니다.

이 페이지의 내용
white #1FA5A0 ?? ??: Odoo 10 ?? - ??, ??
Odoo 16 ?? ??
주문 유형(Order Types)
Bahmni Clinical Systems의 여러 주문 유형을 나타냅니다. 현재 Bahmni는 다음 주문 유형의 동기화를 지원합니다.
- 약물 오더 검사실 오더 영상의학 오더
일치하는 주문 유형만 처리됩니다. 주문의 “Order type”을 Odoo에서 찾지 못하면 해당 주문을 건너뜁니다. 다음 쿼리로 OpenMRS 데이터베이스에서 주문 유형 이름을 확인할 수 있습니다.
$ mysql -uroot -p<password> openmrs
> select name from order_type;위에서 확인한 이름에 대응하는 Order Type을 Odoo에 생성해야 합니다. 방법은 다음과 같습니다.
- Odoo 16: Menu → Bahmni → Bahmni Masters → Order Type으로 이동합니다.
- Odoo 10: "Menu / Sales / Configuration /Order Types"로 이동합니다.
- Order Type이 없으면 생성합니다.
참고: Order Type 이름은 OpenMRS에 정의된 이름과 대소문자 및 공백까지 정확히 일치해야 합니다.
??(Shop)
“Shops”는 청구 지점별 재고 위치를 지정하고 Odoo 재고를 관리하며 기본 결제 조건과 가격표 연결을 정의합니다. 재고 로그인 위치를 Shop에 매핑합니다. 의약품을 배송하거나 조제하는 재고 위치(예: OPD Pharmacy)에 매핑된 Shop(예: OPD Billing)에 견적이 생성됩니다.
Odoo 16에서는 Menu → Bahmni → Bahmni Masters → Shop으로, Odoo 10에서는 "Menu / Sales / Configuration / Shop"으로 이동합니다.
예를 들어 OPD Billing Shop은 다음과 같이 생성합니다.
- Shop Name = OPD Billing. (“IPD Pharmacy”, “Special Billing” 등의 Shop도 같은 방식으로 생성할 수 있습니다.)
- Warehouse = Main WH (재고가 관리되는 창고)
- Location = WH/OPD Pharmacy (제품을 배송할 내부 재고 위치)
- Default Payment Term: Immediate Payment
- Pricelist = 이 Shop에 적용할 가격표를 선택하거나 생성합니다. 제품이 해당 가격표에 연결되면 판매 가격의 기준이 될 수 있습니다. (Sales 설정에서 Advanced Pricelist를 활성화한 경우에만 사용 가능)


Order Type - Shop 매핑
“Order Types”와 "Shops"를 정의한 뒤 어떤 주문 유형을 어디서 처리하고 의약품이나 소모품을 어느 재고 위치에서 배송할지 구성합니다. Order Type과 Shop을 매핑하며 주문자의 위치와도 연결할 수 있습니다.
- Odoo 16: Menu ? Bahmni ? Bahmni Masters ? Order Type - Shop mapping
- Odoo 10: Menu / Sales / Configuration / Order Type - Shop mapping
기본 매핑부터 시작한 다음 주문자의 위치에 맞는 더 구체적인 매핑을 정의합니다.
다음과 같이 항목을 추가합니다.
- Order Type = 드롭다운에서 선택
- Shop = 드롭다운에서 선택
- Location Name = 재고 위치 선택. Shop에 연결된 재고 위치가 기본값이지만 다른 위치도 지정할 수 있습니다.
- Order Location Name = “order location” 이름 입력. 주문자의 위치는 Bahmni Clinical의 Login location에 해당합니다.
예를 들어 "OPD Pharmacy"와 "IPD Pharmacy"에 각각 연결된 "OPD Billing"과 "IPD BIlling"이라는 두 Shop이 있다면 다음과 같이 시작할 수 있습니다.
- 기본적으로 모든 주문은 'OPD Billing'에서 처리하고 'OPD Pharmacy'를 기본 배송 위치로 사용합니다.
- 'General Ward', 'Labour Ward', 'Operation Theatre'에서 주문하면 'IPD Billing'에서 처리하고 'IPD Pharmacy'를 기본 배송 위치로 사용합니다.
'Order Types'를 여러 Shop과 배송 위치로 나눌 수도 있습니다. 예를 들어 “Special OPD”의 의사가 생성한 “Drug Order”를 “Special Billing”에서 처리하고 “Doctor's Samples Stock”에서 배송하도록 매핑할 수 있습니다. "Special Billing"에 "Discounted Price List"를 연결하면 다른 가격도 적용할 수 있습니다.

Odoo 16

의료 제공자가 의약품, 검사실 검사, 영상 검사 또는 시술을 주문하면 OpenMRS에서 주문이 생성됩니다. Bahmni는 먼저 'Order Location Name'과 'Order Type'이 모두 일치하는 매핑을 찾고, 없으면 'Order Type'이 일치하는 첫 매핑을 사용합니다.
참고: 특정 Order Type의 Shop 매핑이 없으면 정의된 첫 번째 Shop을 사용하여 판매 견적을 생성합니다.
동기화 가능 단위 매핑
OpenMRS의 주문 수량 단위를 Odoo와 동기화합니다. 재고를 효율적으로 추적하려면 Odoo의 적절한 범주에 필요한 Unit Of Measures를 올바른 비율로 정의해야 합니다. 재고 항목을 추가하기 전에 제품의 UoM도 업데이트하십시오.
OpenMRS에서 사용 가능한 단위 목록 확인
주문 수량 단위는 OpenMRS의 Dosing Units 개념 집합을 통해 지정됩니다.
- OpenMRS 개념 사전에서 “Dosing Units”를 검색합니다.
- 결과를 클릭하면 "Dosing Units" 개념과 연결된 모든 "Set Members"가 표시됩니다.

Odoo에서 확장 단위 지원 활성화
먼저 해당 설정을 선택하여 Odoo에서 확장 단위 지원을 활성화해야 합니다.
Menu → Settings → Sales로 이동하여 Unit of Measure 토글을 활성화합니다.

Odoo에서 OpenMRS 단위와 Odoo 단위 간 매핑 설정
- Odoo 16: Menu ? Bahmni ? Bahmni Masters ? Syncable Units Mapping
- Odoo 10: Menu / Sales / Configuration / Syncable Units Mapping
OpenMRS 수량 단위의 개념 FSN(기본 로캘)을 정확히 일치시킨 항목을 만들고 Odoo의 대응 단위와 연결합니다. 필요한 경우 Odoo 단위를 생성합니다.
?:

Odoo 16

Odoo에서 제품 단위를 재고 단위와 일치하도록 업데이트
제품 단위도 재고 단위에 맞게 업데이트합니다. OpenMRS 주문 단위와 정확히 같을 필요는 없지만 Volume, Length, Weight 등 동일한 Unit Of Measure Category에 속해야 합니다.
?:


제품 판매 가격
Odoo는 제품 판매 가격을 정의하는 여러 방법을 제공합니다. 개별 제품에도 다양한 옵션을 적용할 수 있습니다. 여기서는 핵심만 설명하며, 자세한 내용은 가격 및 판매 관련 Odoo 웨비나를 참조하십시오.
- Odoo 16: Menu → Settings → Sales → Pricing에서 Pricelists 토글을 활성화합니다.
- Odoo 10: “Menu / Sales / Configuration / Settings”에서 가격 옵션을 확인합니다.
Bahmni 추가 기능을 사용하면 원가에 인상률을 적용해 판매 가격을 계산할 수 있습니다. 이 기능은 로트/일련번호 추적 제품에 적용됩니다. 입고 시 제품 원가에 정의된 인상률을 기준으로 판매 가격을 계산합니다. "Odoo Purchase Configuration"의 "Price Markup" 절을 참조하십시오. 이 구성을 활성화하고 견적/판매 주문에서 로트/일련번호를 선택하면 인상률 기반 판매 가격이 적용됩니다.
견적/판매 주문 품목의 'Unit price'는 구성과 설정에 따라 다음 순서로 결정됩니다.
- 기본 제품 단일 판매 가격
- 가격표 기반 판매 가격 - 견적에 가격표가 적용된 경우
- 원가 인상률 기반 판매 가격 - “Sale Price Markup Rule” 구성이 활성화된 경우
?? ?? ? ?? ??
기본적으로 "sale order"를 확정하면 Odoo가 처리할 “delivery orders”를 생성합니다. 소규모 병원의 약국처럼 조제와 청구가 같은 장소에서 이루어지며 단일 워크플로로 간소화하려는 경우 배송 주문 자동 검증을 활성화할 수 있습니다.
- Odoo 16: Menu → Settings → Bahmni → Sale Configurations에서 Enable auto delivery on sale order confirm action 토글을 활성화합니다.
- Odoo 10: “Menu / Sale / Configuration / Settings”에서 해당 구성을 활성화합니다.


“Validate delivery when order confirmed”가 비활성화되어 있으면 기본 “Delivery Order” 생성 절차를 따릅니다. “Menu / Inventory / Delivery Orders”에서 판매 배송 주문을 수동으로 검증해야 합니다.
?? ??
주문을 확정한 후 "Create Invoice" 버튼을 클릭하면 Odoo 기본 흐름에 여러 송장 발행 옵션이 표시됩니다.
- Invoiceable lines/Invoiceable lines (deduct down payments): 품목을 송장에 포함하고 받은 선급금도 차감합니다. 기본 옵션입니다. 선급금을 차감하지 않으면 송장 생성 시 해당 결제를 무시합니다.
- Down payment (percentage): 선급금 백분율을 입력합니다.
- Down payment (fixed amount): 선급금 고정 금액을 입력합니다.
송장 옵션을 선택한 후 송장을 확정하고 결제를 등록해야 합니다.
위와 같은 여러 송장 옵션을 사용하지 않는 환경이라면 송장 옵션 단계를 건너뛸 수 있습니다.
송장 자동 생성 및 전기를 활성화하려면 다음을 수행합니다.
- Menu → Settings → Bahmni → Sale Configurations에서 Enable auto invoice on sale order confirm action 토글을 활성화합니다.

판매 주문 확정 시 Payments 페이지로 자동 이동하도록 사용자 수준에서 구성할 수도 있습니다. 다음과 같이 활성화합니다.
- Developer Mode를 활성화합니다. URL 매개변수에 ?debug=1을 추가합니다. 예: http://localhost:8069/web?debug=1
- Menu → Settings → Users & Companies → Users로 이동합니다.
- 대상 사용자를 선택합니다.
- Technical 섹션에서 Redirect to Payments on Sale Order Confirmation 토글을 활성화합니다.

사용자가 판매를 확정하면 송장 옵션 선택, 생성 및 검증이 자동화되고 결제 등록 화면으로 바로 이동합니다.
- 사용자가 Sale Order를 확정합니다.
- 송장이 자동 생성되고 검증됩니다. 기본값은 “invoiceable lines” (deduct down payments)입니다.
- Register Payment 화면에서 금액을 입력합니다.
?? ?? ??
“sale order”에 지정된 위치의 재고가 부족하면 배송 주문이 자동 검증되지 않습니다. 음수 재고를 강제로 허용하려면 “Allow negative stock”을 활성화합니다. 로트/일련번호 추적 제품은 재고가 없으면 배송 주문이 'Done'으로 표시되지 않아 수동 개입이 필요합니다.
?? ?? ??
의료 제공자가 진료 중 직접 의약품을 조제하면서 재고와 결제도 자동화하려는 경우 유용합니다. 소규모 또는 1인 의사 진료소에서 판매, 배송, 주문, 결제 등을 자동화할 수 있습니다.
이 기능은 임상 앱의 Bahmni 주문 기능과 함께 작동하며 의약품과 소모품에 적용됩니다. 의료 제공자가 의약품을 조제 완료로 표시하면(예: Bahmni Clinical에서 주문 옆 D 버튼) 설정에 따라 다음 항목을 자동화할 수 있습니다.
- 조제한 약품/의약품의 판매 주문 확정
- 고객 배송 검증 및 조제 재고 위치의 재고 조정
- 조제한 약품/의약품의 송장 생성
- 생성된 송장의 결제 등록
“Menu / Sales / Configuration / Settings”에서 다음 구성을 활성화합니다.
“Allow to automatically convert quotation to sale order if drug is dispensed from local shop”: 위의 “판매 확정”과 “제품 배송 검증”(1 및 2)을 활성화합니다.

“Automatically register payment for dispensed order invoice”: 조제 제품의 송장을 자동 생성하고 송장 결제(현금)를 등록합니다.
참고: 의약품을 로트/일련번호로 추적하면 배송을 자동 검증하지 않습니다. 배송 주문은 "Partially Available" 또는 "Available" 상태가 되며 수동 조정이 필요합니다. 주문의 의약품 부분 조제 기능도 제공되지 않습니다.
Bahmni Wiki · CC BY-SA 4.0