1 PACKAGE iby_creditcard_pkg AS
2 /*$Header: ibyccs.pls 120.14.12010000.7 2009/01/19 12:59:51 lmallick ship $*/
3
4 -- Constant for credit card types
5 C_INSTRTYPE_CCARD CONSTANT VARCHAR2(20) := 'CREDITCARD';
6
7 -- Constant for purchase card types
8 C_INSTRTYPE_PCARD CONSTANT VARCHAR2(20) := 'PURCHASECARD';
9
10 -- Number masking options
11 G_MASK_CHARACTER CONSTANT VARCHAR2(1) := 'X';
12 G_DEF_UNMASK_LENGTH CONSTANT NUMBER := 4;
13
14
15 G_LKUP_PCARD_TYPE CONSTANT VARCHAR2(30) := 'IBY_PURCHASECARD_SUBTYPE';
16
17 -- Card validation errors
18 G_RC_INVALID_CCNUMBER CONSTANT VARCHAR2(30) := 'INVALID_CARD_NUMBER';
19 G_RC_INVALID_CCEXPIRY CONSTANT VARCHAR2(30) := 'INVALID_CARD_EXPIRY';
20 G_RC_INVALID_INSTR_TYPE CONSTANT VARCHAR2(30) := 'INVALID_INSTRUMENT_TYPE';
21 G_RC_INVALID_PCARD_TYPE CONSTANT VARCHAR2(30) := 'INVALID_PCARD_TYPE';
22 G_RC_INVALID_CARD_ISSUER CONSTANT VARCHAR2(30) := 'INVALID_CARD_ISSUER';
23 G_RC_INVALID_CARD_ID CONSTANT VARCHAR2(30) := 'INVALID_INSTRUMENT';
24 G_RC_INVALID_PARTY CONSTANT VARCHAR2(30) := 'INVALID_PARTY';
25 G_RC_INVALID_ADDRESS CONSTANT VARCHAR2(30) := 'INVALID_ADDRESS';
26
27 G_LKUP_INSTR_TYPE_CC CONSTANT VARCHAR2(30) := 'CREDITCARD';
28 G_LKUP_INSTR_TYPE_DC CONSTANT VARCHAR2(30) := 'DEBITCARD';
29 G_LKUP_INSTR_TYPE_PC CONSTANT VARCHAR2(30) := 'PAYMENTCARD';
30
31 -- Pad character used when encrypting credit card numbers
32 G_CCNUM_PAD CONSTANT VARCHAR2(1) := ' ';
33
34 -- Credit card billing site usage
35 G_CC_BILLING_SITE_USE CONSTANT VARCHAR2(30) := 'CC_BILLING';
36
37 -- Address Type Flags
38 G_PARTY_SITE_ID CONSTANT VARCHAR2(1) := 'S';
39 G_PARTY_SITE_USE_ID CONSTANT VARCHAR2(1) := 'U';
40
41
42
43 --
44 -- USE
45 -- Gets credit card mask settings
46 --
47 PROCEDURE Get_Mask_Settings
48 (x_mask_setting OUT NOCOPY iby_sys_security_options.credit_card_mask_setting%TYPE,
49 x_unmask_len OUT NOCOPY iby_sys_security_options.credit_card_unmask_len%TYPE
50 );
51
52 --
53 -- USE
54 -- Generates a masked credit card number based upon system mask
55 -- settings
56 --
57 FUNCTION Mask_Card_Number(p_cc_number IN iby_creditcard.ccnumber%TYPE)
58 RETURN iby_creditcard.masked_cc_number%TYPE;
59
60 FUNCTION Mask_Card_Number
61 (p_cc_number IN iby_creditcard.ccnumber%TYPE,
62 p_mask_option IN iby_creditcard.card_mask_setting%TYPE,
63 p_unmask_len IN iby_creditcard.card_unmask_length%TYPE
64 )
65 RETURN iby_creditcard.masked_cc_number%TYPE;
66
67 --
68 -- USE: Gets the credit card encryption mode setting
69 --
70 FUNCTION Get_CC_Encrypt_Mode
71 RETURN iby_sys_security_options.cc_encryption_mode%TYPE;
72
73 --
74 -- USE: Returns Y or N if other credit card attributes
75 -- e.g., chname and expirydate, are encrypted.
76 --
77 FUNCTION Other_CC_Attribs_Encrypted
78 RETURN VARCHAR2;
79
80
81 PROCEDURE Create_Card
82 (p_commit IN VARCHAR2,
83 p_owner_id IN iby_creditcard.card_owner_id%TYPE,
84 p_holder_name IN iby_creditcard.chname%TYPE,
85 p_billing_address_id IN iby_creditcard.addressid%TYPE,
86 p_address_type IN VARCHAR2 := G_PARTY_SITE_ID,
87 p_billing_zip IN iby_creditcard.billing_addr_postal_code%TYPE,
88 p_billing_country IN iby_creditcard.bill_addr_territory_code%TYPE,
89 p_card_number IN iby_creditcard.ccnumber%TYPE,
90 p_expiry_date IN iby_creditcard.expirydate%TYPE,
91 p_instr_type IN iby_creditcard.instrument_type%TYPE,
92 p_pcard_flag IN iby_creditcard.purchasecard_flag%TYPE,
93 p_pcard_type IN iby_creditcard.purchasecard_subtype%TYPE,
94 p_issuer IN iby_creditcard.card_issuer_code%TYPE,
95 p_fi_name IN iby_creditcard.finame%TYPE,
96 p_single_use IN iby_creditcard.single_use_flag%TYPE,
97 p_info_only IN iby_creditcard.information_only_flag%TYPE,
98 p_purpose IN iby_creditcard.card_purpose%TYPE,
99 p_desc IN iby_creditcard.description%TYPE,
100 p_active_flag IN iby_creditcard.active_flag%TYPE,
101 p_inactive_date IN iby_creditcard.inactive_date%TYPE,
102 p_sys_sec_key IN iby_security_pkg.DES3_KEY_TYPE,
103 p_attribute_category IN iby_creditcard.attribute_category%TYPE,
104 p_attribute1 IN iby_creditcard.attribute1%TYPE,
105 p_attribute2 IN iby_creditcard.attribute2%TYPE,
106 p_attribute3 IN iby_creditcard.attribute3%TYPE,
107 p_attribute4 IN iby_creditcard.attribute4%TYPE,
108 p_attribute5 IN iby_creditcard.attribute5%TYPE,
109 p_attribute6 IN iby_creditcard.attribute6%TYPE,
110 p_attribute7 IN iby_creditcard.attribute7%TYPE,
111 p_attribute8 IN iby_creditcard.attribute8%TYPE,
112 p_attribute9 IN iby_creditcard.attribute9%TYPE,
113 p_attribute10 IN iby_creditcard.attribute10%TYPE,
114 p_attribute11 IN iby_creditcard.attribute11%TYPE,
115 p_attribute12 IN iby_creditcard.attribute12%TYPE,
116 p_attribute13 IN iby_creditcard.attribute13%TYPE,
117 p_attribute14 IN iby_creditcard.attribute14%TYPE,
118 p_attribute15 IN iby_creditcard.attribute15%TYPE,
119 p_attribute16 IN iby_creditcard.attribute16%TYPE,
120 p_attribute17 IN iby_creditcard.attribute17%TYPE,
121 p_attribute18 IN iby_creditcard.attribute18%TYPE,
122 p_attribute19 IN iby_creditcard.attribute19%TYPE,
123 p_attribute20 IN iby_creditcard.attribute20%TYPE,
124 p_attribute21 IN iby_creditcard.attribute21%TYPE,
125 p_attribute22 IN iby_creditcard.attribute22%TYPE,
126 p_attribute23 IN iby_creditcard.attribute23%TYPE,
127 p_attribute24 IN iby_creditcard.attribute24%TYPE,
128 p_attribute25 IN iby_creditcard.attribute25%TYPE,
129 p_attribute26 IN iby_creditcard.attribute26%TYPE,
130 p_attribute27 IN iby_creditcard.attribute27%TYPE,
131 p_attribute28 IN iby_creditcard.attribute28%TYPE,
132 p_attribute29 IN iby_creditcard.attribute29%TYPE,
133 p_attribute30 IN iby_creditcard.attribute30%TYPE,
134 x_result_code OUT NOCOPY VARCHAR2,
135 x_instr_id OUT NOCOPY iby_creditcard.instrid%TYPE
136 );
137
138 PROCEDURE Update_Card
139 (p_commit IN VARCHAR2,
140 p_instr_id IN iby_creditcard.instrid%TYPE,
141 p_owner_id IN iby_creditcard.card_owner_id%TYPE,
142 p_holder_name IN iby_creditcard.chname%TYPE,
143 p_billing_address_id IN iby_creditcard.addressid%TYPE,
144 p_address_type IN VARCHAR2 := G_PARTY_SITE_ID,
145 p_billing_zip IN iby_creditcard.billing_addr_postal_code%TYPE,
146 p_billing_country IN iby_creditcard.bill_addr_territory_code%TYPE,
147 p_expiry_date IN iby_creditcard.expirydate%TYPE,
148 p_instr_type IN iby_creditcard.instrument_type%TYPE,
149 p_pcard_flag IN iby_creditcard.purchasecard_flag%TYPE,
150 p_pcard_type IN iby_creditcard.purchasecard_subtype%TYPE,
151 p_fi_name IN iby_creditcard.finame%TYPE,
152 p_single_use IN iby_creditcard.single_use_flag%TYPE,
153 p_info_only IN iby_creditcard.information_only_flag%TYPE,
154 p_purpose IN iby_creditcard.card_purpose%TYPE,
155 p_desc IN iby_creditcard.description%TYPE,
156 p_active_flag IN iby_creditcard.active_flag%TYPE,
157 p_inactive_date IN iby_creditcard.inactive_date%TYPE,
158 p_attribute_category IN iby_creditcard.attribute_category%TYPE,
159 p_attribute1 IN iby_creditcard.attribute1%TYPE,
160 p_attribute2 IN iby_creditcard.attribute2%TYPE,
161 p_attribute3 IN iby_creditcard.attribute3%TYPE,
162 p_attribute4 IN iby_creditcard.attribute4%TYPE,
163 p_attribute5 IN iby_creditcard.attribute5%TYPE,
164 p_attribute6 IN iby_creditcard.attribute6%TYPE,
165 p_attribute7 IN iby_creditcard.attribute7%TYPE,
166 p_attribute8 IN iby_creditcard.attribute8%TYPE,
167 p_attribute9 IN iby_creditcard.attribute9%TYPE,
168 p_attribute10 IN iby_creditcard.attribute10%TYPE,
169 p_attribute11 IN iby_creditcard.attribute11%TYPE,
170 p_attribute12 IN iby_creditcard.attribute12%TYPE,
171 p_attribute13 IN iby_creditcard.attribute13%TYPE,
172 p_attribute14 IN iby_creditcard.attribute14%TYPE,
173 p_attribute15 IN iby_creditcard.attribute15%TYPE,
174 p_attribute16 IN iby_creditcard.attribute16%TYPE,
175 p_attribute17 IN iby_creditcard.attribute17%TYPE,
176 p_attribute18 IN iby_creditcard.attribute18%TYPE,
177 p_attribute19 IN iby_creditcard.attribute19%TYPE,
178 p_attribute20 IN iby_creditcard.attribute20%TYPE,
179 p_attribute21 IN iby_creditcard.attribute21%TYPE,
180 p_attribute22 IN iby_creditcard.attribute22%TYPE,
181 p_attribute23 IN iby_creditcard.attribute23%TYPE,
182 p_attribute24 IN iby_creditcard.attribute24%TYPE,
183 p_attribute25 IN iby_creditcard.attribute25%TYPE,
184 p_attribute26 IN iby_creditcard.attribute26%TYPE,
185 p_attribute27 IN iby_creditcard.attribute27%TYPE,
186 p_attribute28 IN iby_creditcard.attribute28%TYPE,
187 p_attribute29 IN iby_creditcard.attribute29%TYPE,
188 p_attribute30 IN iby_creditcard.attribute30%TYPE,
189 x_result_code OUT NOCOPY VARCHAR2
190 );
191
192
193 PROCEDURE Query_Card
194 (p_card_id IN iby_creditcard.instrid%TYPE,
195 p_sys_sec_key IN iby_security_pkg.DES3_KEY_TYPE,
196 x_owner_id OUT NOCOPY iby_creditcard.card_owner_id%TYPE,
197 x_holder_name OUT NOCOPY iby_creditcard.chname%TYPE,
198 x_billing_address_id OUT NOCOPY iby_creditcard.addressid%TYPE,
199 x_billing_address1 OUT NOCOPY hz_locations.address1%TYPE,
200 x_billing_address2 OUT NOCOPY hz_locations.address2%TYPE,
201 x_billing_address3 OUT NOCOPY hz_locations.address3%TYPE,
202 x_billing_city OUT NOCOPY hz_locations.city%TYPE,
203 x_billing_county OUT NOCOPY hz_locations.county%TYPE,
204 x_billing_state OUT NOCOPY hz_locations.state%TYPE,
205 x_billing_zip OUT NOCOPY hz_locations.postal_code%TYPE,
206 x_billing_country OUT NOCOPY hz_locations.country%TYPE,
207 x_card_number OUT NOCOPY iby_creditcard.ccnumber%TYPE,
208 x_expiry_date OUT NOCOPY iby_creditcard.expirydate%TYPE,
209 x_instr_type OUT NOCOPY iby_creditcard.instrument_type%TYPE,
210 x_pcard_flag OUT NOCOPY iby_creditcard.purchasecard_flag%TYPE,
211 x_pcard_type OUT NOCOPY iby_creditcard.purchasecard_subtype%TYPE,
212 x_issuer OUT NOCOPY iby_creditcard.card_issuer_code%TYPE,
213 x_fi_name OUT NOCOPY iby_creditcard.finame%TYPE,
214 x_single_use OUT NOCOPY iby_creditcard.single_use_flag%TYPE,
215 x_info_only OUT NOCOPY iby_creditcard.information_only_flag%TYPE,
216 x_purpose OUT NOCOPY iby_creditcard.card_purpose%TYPE,
217 x_desc OUT NOCOPY iby_creditcard.description%TYPE,
218 x_active_flag OUT NOCOPY iby_creditcard.active_flag%TYPE,
219 x_inactive_date OUT NOCOPY iby_creditcard.inactive_date%TYPE,
220 x_result_code OUT NOCOPY VARCHAR2
221 );
222
223 --
224 -- USE: Unciphers a the credit card number of a stored credit card
225 -- instrument
226 -- ARGS: i_instrid => the instrument id
227 -- i_sys_sec_key => the system security key
228 --
229 FUNCTION uncipher_ccnumber
230 (p_instrid IN iby_creditcard.instrid%TYPE,
231 p_sys_sec_key IN iby_security_pkg.DES3_KEY_TYPE
232 )
233 RETURN iby_creditcard.ccnumber%TYPE;
234
235 --
236 --
237 FUNCTION uncipher_ccnumber
238 (p_cc_number IN iby_creditcard.ccnumber%TYPE,
239 p_segment_cipher IN iby_security_segments.segment_cipher_text%TYPE,
240 p_encrypted IN iby_creditcard.encrypted%TYPE,
241 p_sys_key IN iby_security_pkg.DES3_KEY_TYPE,
242 p_subkey_cipher IN iby_sys_security_subkeys.subkey_cipher_text%TYPE,
243 p_card_len IN iby_cc_issuer_ranges.card_number_length%TYPE,
244 p_cc_prefix IN iby_cc_issuer_ranges.card_number_prefix%TYPE,
245 p_digit_check IN iby_creditcard_issuers_b.digit_check_flag%TYPE,
246 p_mask_setting IN iby_sys_security_options.credit_card_mask_setting%TYPE,
247 p_unmask_len IN iby_sys_security_options.credit_card_unmask_len%TYPE,
248 p_unmask_digits IN iby_creditcard.masked_cc_number%TYPE
249 )
250 RETURN iby_creditcard.ccnumber%TYPE;
251
252 --
253 -- USE: Wrapper of the above function for the UI.
254 -- In the UI the SQL is executed by the framework.
255 -- We can not catch the exception thrown from the function call.
256 -- It will cause unacceptable error in the UI.
257 -- In case of exceptions this wrapper function will
258 -- simply swallow it and return null.
259 -- The UI will display empty instrument number
260 -- for this case.
261 -- ARGS: i_instrid => the instrument id
262 -- i_sys_sec_key => the system security key
263 --
264 FUNCTION uncipher_ccnumber_ui_wrp
265 (i_instrid IN iby_creditcard.instrid%TYPE,
266 i_sys_sec_key IN iby_security_pkg.DES3_KEY_TYPE)
267 RETURN iby_creditcard.ccnumber%TYPE;
268
269 --
270 -- USE: Un-encrypts all registered credit card instruments, storing
271 -- data in obfuscated form
272 --
273 -- ARGS: p_commit => whether to commit the changes
274 -- p_sys_key => system security key; used to decrypt instruments
275 --
276 PROCEDURE Decrypt_Instruments
277 (p_commit IN VARCHAR2 := FND_API.G_TRUE,
278 p_sys_key IN iby_security_pkg.DES3_KEY_TYPE
279 );
280
281 --
282 -- USE: Encrypts all registered credit cards
283 --
284 -- ARGS: p_commit => whether to commit the changes
285 -- p_sys_key => system security key; used to encrypt instruments
286 --
287 PROCEDURE Encrypt_Instruments
288 (p_commit IN VARCHAR2 := FND_API.G_TRUE,
289 p_sys_key IN iby_security_pkg.DES3_KEY_TYPE
290 );
291
292 --
293 -- USE: Updates instrument masks according to new setting
294 --
295 -- ARGS: p_commit => whether to commit the changes
296 -- p_sys_key => system security key; used to encrypt instruments
297 --
298 PROCEDURE Remask_Instruments
299 (p_commit IN VARCHAR2 := FND_API.G_TRUE,
300 p_sys_key IN iby_security_pkg.DES3_KEY_TYPE
301 );
302
303 -- USE: Compresses a card number into the minimum clear text
304 -- representation
305 --
306 PROCEDURE Compress_CC_Number
307 (p_card_number IN iby_creditcard.ccnumber%TYPE,
308 p_prefix IN iby_cc_issuer_ranges.card_number_prefix%TYPE,
309 p_digit_check IN iby_creditcard_issuers_b.digit_check_flag%TYPE,
313 x_unmask_digits OUT NOCOPY iby_creditcard.masked_cc_number%TYPE
310 p_mask_setting IN iby_sys_security_options.credit_card_mask_setting%TYPE,
311 p_unmask_len IN iby_sys_security_options.credit_card_unmask_len%TYPE,
312 x_compress_num OUT NOCOPY iby_creditcard.ccnumber%TYPE,
314 );
315
316 -- USE: Uncompresses the credit card number based upon its known digits
317 -- (range prefix, check digits, unmasked digits) and the clear text
318 -- of its comprssed digits
319 -- ARGS: p_card_number => clear text of the compressed card digits
320 -- p_card_length => actual length of the credit card (uncompressed)
321 -- p_prefix => issuer range prefix
322 -- p_digit_check => 'Y' if the card has a check digit
323 -- p_mask_setting => masking option of the card number
324 -- p_unmask_len => number of digits exposed in the mask
325 -- p_unmask_digits => unmasked digits
326 --
327 FUNCTION Uncompress_CC_Number
328 (p_card_number IN iby_creditcard.ccnumber%TYPE,
329 p_card_length IN iby_creditcard.cc_number_length%TYPE,
330 p_prefix IN iby_cc_issuer_ranges.card_number_prefix%TYPE,
331 p_digit_check IN iby_creditcard_issuers_b.digit_check_flag%TYPE,
332 p_mask_setting IN iby_sys_security_options.credit_card_mask_setting%TYPE,
333 p_unmask_len IN iby_sys_security_options.credit_card_unmask_len%TYPE,
334 p_unmask_digits IN iby_creditcard.masked_cc_number%TYPE
335 )
336 RETURN iby_creditcard.ccnumber%TYPE;
337
338 --
339 -- USE: Gets the number of digits in a compressed credit card number
340 --
341 FUNCTION Get_Compressed_Len
342 (p_card_length IN iby_creditcard.cc_number_length%TYPE,
343 p_prefix IN iby_cc_issuer_ranges.card_number_prefix%TYPE,
344 p_digit_check IN iby_creditcard_issuers_b.digit_check_flag%TYPE,
345 p_mask_setting IN iby_sys_security_options.credit_card_mask_setting%TYPE,
346 p_unmask_len IN iby_sys_security_options.credit_card_unmask_len%TYPE
347 )
348 RETURN NUMBER;
349
350 --
351 -- USE: Encrypts the other sensitive card info and returns the
352 -- corresponding security segment_IDs
353 --
354 PROCEDURE Encrypt_Card_Info
355 (p_commit IN VARCHAR2 := FND_API.G_TRUE,
356 p_sys_security_key IN iby_security_pkg.DES3_KEY_TYPE,
357 p_expiry_date IN DATE,
358 p_chname IN VARCHAR2,
359 x_exp_segment_id OUT NOCOPY NUMBER,
360 x_chname_segment_id OUT NOCOPY NUMBER,
361 x_err_code OUT NOCOPY VARCHAR2
362 );
363
364 --
365 -- USE: Updates the EXPIRED_FLAG for all the active credit cards
366 --
367 --
368 PROCEDURE Mark_Expired_Cards
369 (p_commit IN VARCHAR2 := FND_API.G_TRUE,
370 p_sys_sec_key IN iby_security_pkg.DES3_KEY_TYPE
371 );
372
373 END iby_creditcard_pkg;