2011-08-02 3 views
0

이 질문이있는 곳이 맞는지 잘 모르겠지만 일반적인 프로그래밍 질문이며 이전에 엔터프라이즈 애플리케이션을 개발 한 몇 안되는 사람들이 나타났습니다. 제가 일하는 회사는 현재 주문에 대한 세금 징수를위한 "표준"모델 인 도시/주/우편 번호 (카운티를 포함 할 수 있음)를 사용하고 있습니다.미국 세금 관련 특정 프로그래밍 질문 (예 : 우편 번호 + 4 또는 도시/주/기타)

여러 사이트를 살펴본 결과 몇 가지 다른 세금 패키지가 제공됩니다. 그러나 우리의 요구 사항에 맞는 것만이 Zip + 4입니다. 우리는 아마도이 b/c가 필요합니다. 텍사스의 일부 도시에는 6 개의 세금 "지구"가 있으며 일부는 중복됩니다. 따라서 Zip + 4는 이상적이지만 데이터를 살펴본 후에 텍사스 ​​만해도 300MB에 가깝습니다 (50을 곱하면 데이터베이스에서 끔찍한 쿼리가 발생합니다).

불행히도 우리는 단일 호출에 웹 서비스를 사용할 수 없으며 SQL 서버 (또는 기타) 데이터베이스를 설정할 수 없습니다. 우리의 한 시스템은 상대적으로 모호한 데이터베이스 + dev 환경입니다. 따라서 어떤 이유에서든 SQL Server 데이터베이스 또는 웹 서비스가 다운 된 경우 주문을 처리 할 수 ​​없습니다.

다른 사람이 이와 비슷한 것을 경험 한 적이 있습니까? 정당한 세금에 전념 한 방대한 데이터베이스는 어리석은 생각처럼 보이지만 불행히도 나는 웹 서비스를 사용할 수 없다.

누구에게 아이디어가 있습니까? 나는이 하나에 정말로 붙어있어 ...

미리 감사드립니다 !!!

+0

정확히 300MB 인 파일은 무엇입니까? 주문에 대한 간단한 판매 세를 계산하려고하거나 복잡한 규칙을 탐색하고 있습니까? –

+0

입력 한 주소에서 우편 번호 + 4를 확인하려고하십니까? – JustinKSU

답변

3

세금 계산은 여러 가지 이유로 드문 일입니다. 당신은 이미 세금 지구를 언급했습니다. 다른 이유는 다음과 같습니다.

  1. 제품 별 세금. 예를 들어 뉴저지는 의류에 세금을 부과하지 않았습니다.
  2. 세금 공휴일 주말. 학교 시작 바로 전에 매우 일반적입니다. 예를 들어
  3. 정책에 의해 경감됩니다. 고효율 기기의 공제와 비슷합니다.

따라서 패키지를 구입하여 통합하는 것이 좋습니다. 유지 보수 라이선스를 구입하면 매년 메타 데이터를 업데이트 할 수 있습니다.

프로그래밍 관점에서 세금 계산을 위해 나무와 같은 구조를 사용할 수 있습니다. 다음은 어떻게 설정하는지 알려주는 것입니다. 이 같은

첫째, 정의 일부 구조 :

public class AddedTaxes { 
    public void add(double amount, double description) { ... } 
} 

public interface TaxAdder extends Serializable { 
    void configure(Map<String, String> settings); 
    add(double preTax, AddedTaxes taxes, Object productDetails); 
} 

둘째, 가산기의 필요한 설정 구축 :

public class FixedRate implements TaxAdder { 
    private double _rate; 
    private String _description; 
    public void configure(Map<String, String> settings) { 
    _rate = Double.parseDouble(settings.get("rate%"))/100.0; 
    _description = settings.get("desc"); 
    } 
    public add(double preTax, AddedTaxes taxes, Object productDetails) { 
    taxes.add(preTax * _rate, _description); 
    } 
} 

public class FixedProductSpecific implements TaxAdder { 
    private double _amount; 
    private String _product; 
    private String _description; 
    public void configure(Map<String, String> settings) { 
    _amount = Double.parseDouble(settings.get("amount")); 
    _product = settings.get("product"); 
    _description = settings.get("desc"); 
    } 
    public add(double preTax, AddedTaxes taxes, Object productDetails) { 
    if (_product.equals(productDetails)) { 
     taxes.add(_amount, _description); 
    } 
    } 
} 

셋째, 내가 하나 개 이상의 인간의 소비에 세금 규칙을 캡처하는 것을 파일 :

// zip code range <tab> adderClassName <tab> parameters 
// general texas taxes 
75000.0000-79999.9999  FixedRate  rate%=8.25, desc=Sales tax 
78700.0000-78999.9999  FixedProductSpecific amount=2.00 product=LeadAcidBattery desc=Lead acid battery sales 
... 

이 데이터는 데이터에 대한 '컴파일'단계를 거칠 수 있습니다. 예를 들어 10 가지 길이의 나무를 만듭니다. 각 노드 (리프뿐만 아니라)에는 TaxAdders 목록이 있습니다. 이 경우, 7/8/7, 7/8/87/8/9 노드들만이 제 2 가산기를 가지며, 7/5, 7/6, '7/7', ...은 첫 번째 가산기를 가질 것이다.

일단 전체 구조가 조립되면 직렬화하십시오.이제 편집이 완료되었습니다. 런타임시 직렬화 된 계산 구조를로드하고 주어진 zip + 4에 대해 트리를 탐색하여 모든 (가능하면) 적용 가능한 계산기를 찾을 수 있습니다.

데이터를 유지 관리하지 않으려는 경우에도 내가 말하는 변환의 종류를 거치고 '컴파일 된'계산 구조를 만들 수 있습니다.

원하는 경우 세부 정보를 추가 할 수 있지만 관심있는 방향으로 진행될 때까지는 그 정보를 보류합니다.

+0

어떤 식 으로든이 질문에 어떻게 대답합니까? – JustinKSU

+0

@ Justin, 나는 이것을 전문적으로 다루는 제 3 자 제품을 사용해야하는 이유를 설명했다. 2. 문제를 데이터베이스의 거대한 하이퍼 큐브에서 콤팩트 한 컴파일 된 형식으로 변환하는 방법. 3. 그가 isn 그 자신의 과세 규칙 문서를 숙달하지 않으면 그는 편집을 허용하는 형식으로 번역을 할 수 있습니다. 내 글쓰기의 어느 부분이 명확하지 않은지 - 필자는 필요에 따라 명확히하고 싶습니다. –

관련 문제