āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ-āύāĻŋāϰāĻžāĻĒāĻĻ āĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰāĻŋāĻ āϝāĻž āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻ āĻā§āϝāĻžāĻĒ āĻāĻĄāĻŧāĻžāϝāĻŧ
āĻŦāĻšā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻ āϏāĻžāĻĨā§ āĻāύāĻā§ā§āϏ āĻŦāĻž āĻāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰāϞ⧠āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻ āĻ āύāĻžāĻāĻžāĻā§āĻā§āώāĻŋāϤ āĻā§āϝāĻžāĻĒ āĻāĻĄāĻŧāĻžāϤ⧠āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāĻā§āϝāĻžāϞ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻļāĻŋāĻā§āύāĨ¤

āϝāĻāύ āĻāĻāϏāĻžāĻĨā§ āĻĻā§āĻāĻāύ āϰā§āĻāϰā§āĻĄ āϤā§āϰāĻŋ āĻāϰ⧠āϤāĻāύ āĻā§ āĻāĻā§
āϧāϰā§āύ āĻŦāĻŋāĻā§āϞ⧠4:55 āĻŽāĻŋāύāĻŋāĻ, āĻ āĻĢāĻŋāϏ⧠āĻāĻžāĻĒ āĻāĻā§āĨ¤ āĻĻā§āĻāĻāύāĻ āĻāύāĻā§ā§āϏ āĻļā§āώ āĻāϰāϞā§āύ āĻāĻŦāĻ āĻāĻ āϏā§āĻā§āύā§āĻĄā§āϰ āĻŽāϧā§āϝ⧠Save āĻāĻžāĻĒāϞā§āύāĨ¤ āĻĻā§āĻāĻāύā§āϰ āϏā§āĻā§āϰāĻŋāύā§āĻ āϏāĻžāĻŽā§āĻŋāĻāĻāĻžāĻŦā§ "Invoice #1042" āĻĻā§āĻāĻž āĻā§āϞāĨ¤ āĻāĻāĻāĻž āϰā§āĻāϰā§āĻĄ āĻāĻŋāϤ⧠āϝāĻžā§, āĻ āύā§āϝāĻāĻž āĻŦā§āϝāϰā§āĻĨ āĻšā§, āĻ āĻĨāĻŦāĻž āϏāĻŦāĻā§ā§ā§ āĻāĻžāϰāĻžāĻĒâāĻĻā§āĻā§āĻ āĻāĻāĻ āύāĻŽā§āĻŦāϰ āύāĻŋāϝāĻŧā§ āϏā§āĻ āĻšā§ā§ āϝāĻžā§āĨ¤ āĻŦāĻžāϏā§āϤāĻŦā§ āϏāĻŦāĻā§ā§ā§ āĻŦā§āĻļāĻŋ āĻĻā§āĻāĻž āϏāĻŽāϏā§āϝāĻž āĻšāϞā§: āϞā§āĻĄā§ āĻāĻŋā§ā§ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāĻā§āĻž āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āύāĻŽā§āĻŦāϰāĨ¤
āĻāĻŋāĻā§āĻāĻā§āϞāĻŋāĻ āĻāĻāĻāĻāĻžāĻŦā§ āĻāĻāϰāĻŖ āĻāϰā§āĨ¤ āĻĻā§āĻ āĻāĻā§āύā§āĻ āĻāĻāĻ āϏāĻŽāϝāĻŧā§ āĻāĻāĻ āĻā§āϰāĻžāĻšāĻā§āϰ āĻāύā§āϝ āύāϤā§āύ āĻāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰāϞā§, āĻāĻŦāĻ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻŋāϏā§āĻā§āĻŽ "āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻŽā§āĻŦāϰ āύāĻžāĻ" āĻĻā§āĻā§ āϏā§āĻāĻžāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āϤāĻžāĻšāϞ⧠āĻāĻāϝāĻŧ āĻ āύā§āϰā§āϧāĻ āĻāĻāĻ "āϏāϰā§āĻŦāĻļā§āώ" āĻŽāĻžāύ āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āĻāĻāĻ āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻŽā§āĻŦāϰ āĻŦā§āĻā§ āύāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϏāĻŽāϏā§āϝāĻž āĻāĻāĻā§ āϏā§āĻā§āώā§āĻŽ: āύāĻŽā§āĻŦāϰ āϏā§āĻāĻŋāĻĒ āĻšāĻāϝāĻŧāĻžāĨ¤ āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāϰā§āύ #1042, āϤāĻžāϰāĻĒāϰ #1044â#1043 āĻŽāĻŋāϏāĻŋāĻāĨ¤ āĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻā§āύ⧠āϤā§āϰā§āĻāĻŋ āĻŦāĻž āϰāĻŋāĻā§āϰāĻžāĻāϝāĻŧā§āϰ āĻĒāϰ⧠āĻšāϝāĻŧāĨ¤ āĻāĻāĻāĻŋ āĻ āύā§āϰā§āϧ āύāĻŽā§āĻŦāϰ āϰāĻŋāĻāĻžāϰā§āĻ āĻāϰā§, āϤāĻžāϰāĻĒāϰ āϏā§āĻ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧ āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ āϤā§āϰā§āĻāĻŋ, āĻāĻžāĻāĻŽāĻāĻāĻ, āĻŦāĻž āĻāĻāĻāĻžāϰ āĻā§āϝāĻžāĻŦ āĻŦāύā§āϧ āĻāϰāĻžāϰ āĻāĻžāϰāĻŖā§āĨ¤ āĻ āĻĨāĻŦāĻž āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻŦ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϏāĻŽāϏā§āϝāĻž āĻĨā§āĻā§ āϰāĻŋāĻāĻŋ āĻāϰāϤ⧠āĻāϏ⧠āύāϤā§āύ āύāĻŽā§āĻŦāϰ āύā§āϝāĻŧ, āĻ āĻĨāĻ āĻĒā§āϰāĻĨāĻŽ āĻĒā§āϰāĻā§āώā§āĻāĻž āĻāϤāĻŋāĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āύāĻŽā§āĻŦāϰ āĻāύāĻāĻŋāĻāĻŽ āĻāϰā§āĻā§āĨ¤
āĻāύāĻā§ā§āϏā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻāĻžāϰāĻŖ āύāĻŽā§āĻŦāϰāĻŋāĻ āĻāĻĒāύāĻžāϰ āĻ āĻĄāĻŋāĻ āĻā§āϰā§āĻāϞā§āϰ āĻ āĻāĻļāĨ¤ āĻāĻāĻžāĻāύā§āĻā§āϝāĻžāύā§āĻāϰāĻž āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž āĻāϰā§āύ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāύāĻā§ā§āϏ āĻ āύāύā§āϝāĻāĻžāĻŦā§ āĻļāύāĻžāĻā§āϤāϝā§āĻā§āϝ āĻšāĻŦā§, āĻāĻŦāĻ āĻā§āϰāĻžāĻšāĻāϰāĻž āĻĒā§āĻŽā§āύā§āĻ āĻŦāĻž āϏāĻžāĻĒā§āϰā§āĻ āĻāĻŽā§āϞ⧠āĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰ āϰā§āĻĢāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻŋāĻā§āĻā§āϰ āĻā§āώā§āϤā§āϰ⧠āύāĻŽā§āĻŦāϰāĻ āĻšāϞ⧠āĻāĻĨā§āĻĒāĻāĻĨāύ, āϰāĻŋāĻĒā§āϰā§āĻ, āĻāĻā§āϏāĻĒā§āϰā§āĻā§āϰ āĻšāĻžāϤāϞāĨ¤ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻāĻā§āϞ⧠āĻŦāĻŋāĻā§āϰāĻžāύā§āϤāĻŋ āϏā§āώā§āĻāĻŋ āĻāϰā§āĨ¤ āĻŽāĻŋāϏāĻŋāĻ āύāĻŽā§āĻŦāϰāĻā§āϞ⧠āϰāĻŋāĻāĻŋāĻāϤ⧠āĻĒā§āϰāĻļā§āύ āϤā§āϞāϤ⧠āĻĒāĻžāϰā§, āϝāĻĻāĻŋāĻ āĻāĻŋāĻā§ āĻ āϏ⧠āĻāĻāύāĻž āύāĻž āĻāĻāϞā§āĻāĨ¤
āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§ āĻāĻāĻāĻž āĻŽā§āϞ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāĻž āĻāϰā§āϰāĻŋ: āĻĒā§āϰāϤāĻŋāĻāĻŋ āύāĻŽā§āĻŦāϰ āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻāĻ āϏāĻā§āĻā§ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ-āύāĻŋāϰāĻžāĻĒāĻĻ āĻāĻŦāĻ gapless āĻšāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ-āύāĻŋāϰāĻžāĻĒāĻĻ āĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰāĻŋāĻ (āĻ āύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĨāĻžāĻāϞā§āĻ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āύāϝāĻŧ) āĻ āϰā§āĻāύāϝā§āĻā§āϝ āĻāĻŦāĻ āĻ āĻĒā§āϰāϤāĻŋāϰā§āϧā§āϝ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤāĨ¤ gapless āύāĻŽā§āĻŦāϰāĻŋāĻāĻ āϏāĻŽā§āĻāĻŦ, āĻāĻŋāύā§āϤ⧠āϤāĻž āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āύāĻŋāϝāĻŧāĻŽ āĻ āĻĒā§āϰāĻžāϝāĻŧāĻ āĻĄā§āϰāĻžāĻĢāĻ, āĻŦā§āϝāϰā§āĻĨāϤāĻž, āĻāĻŦāĻ āĻŦāĻžāϤāĻŋāϞāĻāϰāĻŖ āĻāĻŋāĻāĻžāĻŦā§ āĻšā§āϝāĻžāύā§āĻĄāϞ āĻāϰāĻŦā§āύ āϤāĻž āĻŦāĻĻāϞ⧠āĻĻā§ā§āĨ¤
āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āĻāĻžāϞā§āĻāĻžāĻŦā§ āĻŦā§āĻāϤ⧠āĻāĻāĻāĻŋ āĻāĻĒāĻžā§ āĻšāϞ⧠āĻĒā§āϰāĻļā§āύ āĻāϰāĻž: āĻāĻĒāύāĻžāϰ āύāĻŽā§āĻŦāϰāĻā§āϞ⧠āĻā§āύ āύāĻŋāĻļā§āĻāϝāĻŧāϤāĻž āĻĻā§āĻŦā§â
- āĻāĻāύā§āĻ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻšāĻŦā§ āύāĻž (āĻāĻŋāϰāϤāϰ⧠āĻāĻāύāĻŋāĻ)
- āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻā§āώā§āϤā§āϰ⧠āĻŦāĻžāĻĄāĻŧāϤ⧠āĻĨāĻžāĻāĻŦā§ (āĻāĻžāϞ⧠āϤā§)
- āĻāĻāύā§āĻ āϏā§āĻāĻŋāĻĒ āĻšāĻŦā§ āύāĻž (āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏā§āĻāĻžāϰ āĻāύā§āϝ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰā§āύ)
āĻāĻāĻŦāĻžāϰ āύāĻŋā§āĻŽ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰāϞā§, āĻā§āĻāύāĻŋāĻā§āϝāĻžāϞ āϏāϞāĻŋāĻāĻļāύ āĻŦā§āĻā§ āύā§ā§āĻž āϏāĻšāĻ āĻšā§āĨ¤
āĻā§āύ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻ āĻā§āϝāĻžāĻĒ āĻāĻā§
āĻ āϧāĻŋāĻāĻžāĻāĻļ āĻ ā§āϝāĻžāĻĒ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻ āύā§āϏāϰāĻŖ āĻāϰā§: āĻāĻāĻāĻžāϰ Save āĻā§āϞāĻŋāĻ āĻāϰā§, āĻ ā§āϝāĻžāĻĒ "āĻĒāϰāĻŦāϰā§āϤ⧠āĻāύāĻā§ā§āϏ/āĻāĻŋāĻā§āĻ āύāĻŽā§āĻŦāϰ" āĻā§āĻāĻā§, āϤāĻžāϰāĻĒāϰ āϏā§āĻ āύāĻŽā§āĻŦāϰ āϏāĻš āύāϤā§āύ āϰā§āĻāϰā§āĻĄ āĻāύāϏāĻžāϰā§āĻ āĻāϰā§āĨ¤ āĻāĻ āĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĨāĻžāĻāϤ⧠āĻāĻāĻž āύāĻŋāϰāĻžāĻĒāĻĻ āĻŽāύ⧠āĻšā§ āĻāĻžāϰāĻŖ āĻāĻāĻžāĻ āĻāϰāϞ⧠āĻ āĻŋāĻ āĻāĻžāĻ āĻāϰā§āĨ¤
āϏāĻŽāϏā§āϝāĻž āĻļā§āϰ⧠āĻšā§ āϝāĻāύ āĻĻā§āĻāĻāĻŋ āϏā§āĻ āĻĒā§āϰāĻžāϝāĻŧ āĻāĻāĻ āϏāĻŽāϝāĻŧā§ āĻāĻā§āĨ¤ āĻāĻāϝāĻŧ āĻ āύā§āϰā§āϧāĻ "āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻŽā§āĻŦāϰ āύāĻžāĻ" āϧāĻžāĻĒāĻāĻŋ āĻĒā§āĻāĻāĻžāϤ⧠āĻĒāĻžāϰ⧠āĻāĻā§ āĻā§āύā§āĻāĻŋ āĻāύāϏāĻžāϰā§āĻ āĻļā§āώ āĻāϰā§āĨ¤ āϝāĻĻāĻŋ āĻāĻāϝāĻŧ āĻĒāĻĄāĻŧā§ āĻāĻāĻ "āĻĒāϰāĻŦāϰā§āϤā§" āĻŽāĻžāύ āĻĻā§āĻā§āύ, āϤāĻžāϰāĻž āĻāĻāϝāĻŧā§āĻ āĻāĻāĻ āύāĻŽā§āĻŦāϰ āϞā§āĻāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŦā§āĨ¤ āĻāĻāĻžāĻ āϰā§āϏ āĻāύā§āĻĄāĻŋāĻļāύ: āĻĢāϞāĻžāĻĢāϞ āĻāĻžāĻāĻŽāĻŋāĻāϝāĻŧā§āϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰā§, āϞāĻāĻŋāĻā§āϰ āĻāĻĒāϰ āύāϝāĻŧāĨ¤
āϏāĻžāϧāĻžāϰāĻŖ āĻāĻžāĻāĻŽāϞāĻžāĻāύ āĻāĻŽāύ āĻšāϤ⧠āĻĒāĻžāϰā§:
- āĻ āύā§āϰā§āϧ A āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻŽā§āĻŦāϰ āĻĒāĻĄāĻŧā§: 1042
- āĻ āύā§āϰā§āϧ B āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻŽā§āĻŦāϰ āĻĒāĻĄāĻŧā§: 1042
- āĻ āύā§āϰā§āϧ A āĻāύāĻā§ā§āϏ 1042 āĻāύāϏāĻžāϰā§āĻ āĻāϰā§
- āĻ āύā§āϰā§āϧ B āĻāύāĻā§ā§āϏ 1042 āĻāύāϏāĻžāϰā§āĻ āĻāϰ⧠(āĻŦāĻž unique āύāĻŋā§āĻŽ āĻĨāĻžāĻāϞ⧠āĻŦā§āϝāϰā§āĻĨ āĻšā§)
āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āϤāĻāύāĻ āĻāĻā§ āϝāĻāύ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāĻŋāĻā§āĻ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻāύāϏāĻžāϰā§āĻāĻā§ āĻŦāĻžāϧāĻž āĻĻā§āϝāĻŧ āύāĻžāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻļā§āϧ⧠āĻ ā§āϝāĻžāĻĒ āĻā§āĻĄā§ "āĻāĻ āύāĻŽā§āĻŦāϰ āύā§āĻāϝāĻŧāĻž āĻāĻā§ āĻāĻŋāύāĻž" āĻā§āĻ āĻāϰā§āύ, āĻā§āĻ āĻ āĻāύāϏāĻžāϰā§āĻā§āϰ āĻŽāϧā§āϝ⧠āϰā§āϏ āĻšāĻžāϰāĻžāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻā§āϝāĻžāĻĒāĻā§āϞ⧠āĻāϞāĻžāĻĻāĻž āϏāĻŽāϏā§āϝāĻžāĨ¤ āϝāĻāύ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻāĻāĻŋ āύāĻŽā§āĻŦāϰ "āϰāĻŋāĻāĻžāϰā§āĻ" āĻāϰ⧠āĻāĻŋāύā§āϤ⧠āϰā§āĻāϰā§āĻĄ āĻāĻāύāĻ āĻŦāĻžāϏā§āϤāĻŦ, āĻāĻŽāĻŋāĻ āĻāϰāĻž āĻāύāĻā§ā§āϏ/āĻāĻŋāĻā§āĻ āĻšāϝāĻŧ āύāĻž, āϤāĻāύ āĻā§āϝāĻžāĻĒ āĻšā§āĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āĻāĻžāϰāĻŖ: āĻŦā§āϝāϰā§āĻĨ āĻĒā§āĻŽā§āύā§āĻ, āĻĒāϰ⧠āĻĒāĻžāĻāϝāĻŧāĻž āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ āϤā§āϰā§āĻāĻŋ, āĻāĻžāĻāĻŽāĻāĻāĻ, āĻŦāĻž āĻāĻāĻāĻžāϰ āĻā§āϝāĻžāĻŦ āĻŦāύā§āϧ āĻāϰ⧠āĻĢā§āϞāĻžāĨ¤ āĻāĻŽāύāĻāĻŋ āĻāύāϏāĻžāϰā§āĻ āĻŦā§āϝāϰā§āĻĨ āĻšāϞ⧠āĻ āĻāĻŋāĻā§ āϏā§āĻ āύāĻž āĻšāϞā§āĻ, āύāĻŽā§āĻŦāϰāĻāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝ⧠āĻāϰāĻ āĻšā§ā§ āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āϞā§āĻāĻžāύ⧠āĻāύāĻāϰā§āύā§āϏāĻŋ āĻāĻāĻžāĻā§ āĻāϰāĻ āĻāĻžāϰāĻžāĻĒ āĻāϰā§, āĻāĻžāϰāĻŖ āĻāĻāĻž āϰā§āĻāϰā§āĻāĻ āĻā§āĻŦāϞ "āĻĻā§āĻ āĻŽāĻžāύā§āώ āĻā§āϞāĻŋāĻ āĻāϰāĻž" āύāϝāĻŧâāĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§:
- API āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āϝāĻžāϰāĻž āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ⧠āϰā§āĻāϰā§āĻĄ āϤā§āϰāĻŋ āĻāϰā§
- āĻŦā§āϝāĻžāĻā§ āϰāĻžāύ āĻāϰāĻž āĻāĻŽāĻĒā§āϰā§āĻāϏ
- āϰāĻžāϤā§āϰ āĻŦā§āϞāĻžāϰ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻŦāĻā§āϞā§
- āĻĻā§āώā§āĻā§āĻŽāĻŋāĻĒā§āϰā§āĻŖ āĻāĻžāύā§āĻāĻļāύā§āϰ āĻāĻžāϰāĻŖā§ āĻŽā§āĻŦāĻžāĻāϞ āĻ ā§āϝāĻžāĻĒā§āϰ āϰāĻŋāĻā§āϰāĻžāĻ
āϏā§āϤāϰāĻžāĻ āĻŽā§āϞ āĻāĻžāϰāĻŖāĻā§āϞ⧠āĻšāϞā§: (1) āĻŦāĻšā§ āĻ āύā§āϰā§āϧ āϝāĻāύ āĻāĻāĻ āĻāĻžāĻāύā§āĻāĻžāϰ āĻā§āϝāĻžāϞ⧠āĻĒāĻĄāĻŧā§ āϤāĻāύ āĻāĻžāĻāĻŽāĻŋāĻ āϏāĻāĻāĻžāϤ, āĻāĻŦāĻ (2) āύāĻŽā§āĻŦāϰ āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰāĻž āĻšā§ āĻāĻā§ āĻāĻĒāύāĻŋ āύāĻŋāĻļā§āĻāĻŋāϤ āĻšāύ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āϏāĻĢāϞ āĻšāĻŦā§ āĻāĻŋāύāĻžāĨ¤ āϝ⧠āĻā§āύāĻ āĻĒā§āϞā§āϝāĻžāύ āĻŦāĻžāύāĻžāϤ⧠āĻšāĻŦā§ āĻāĻāĻž āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§: āĻā§āύ āĻĢāϞāĻžāĻĢāϞ āĻāĻĒāύāĻŋ āϏāĻšāύ āĻāϰāĻŦā§āύâāĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āύā§āĻ, āĻā§āϝāĻžāĻĒ āύā§āĻ, āĻŦāĻž āĻĻā§āĻā§āĻ, āĻāĻŦāĻ āĻā§āύ āĻāĻā§āύā§āĻā§ (āĻĄā§āϰāĻžāĻĢāĻ, āϰāĻŋāĻā§āϰāĻžāĻ, āĻā§āϝāĻžāύāϏā§āϞ) āĻāĻ āύāĻŋā§āĻŽ āĻĒā§āϰāϝā§āĻā§āϝ āĻšāĻŦā§āĨ¤
āĻāĻāĻāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻŦā§āĻā§ āύā§āĻāϝāĻŧāĻžāϰ āĻāĻā§ āĻāĻĒāύāĻžāϰ āύāĻŽā§āĻŦāϰāĻŋāĻ āύā§āϤāĻŋ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰā§āύ
āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ-āύāĻŋāϰāĻžāĻĒāĻĻ āĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰāĻŋāĻ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰāĻžāϰ āĻāĻā§ āϞāĻŋāĻā§ āϰāĻžāĻā§āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧā§ āĻā§ āĻŽāĻžāύ⧠āϰāĻžāĻā§āĨ¤ āϏāĻŦāĻā§āϝāĻŧā§ āϏāĻžāϧāĻžāϰāĻŖ āĻā§āϞ āĻšāϞ⧠āĻĒā§āϰāĻĨāĻŽā§ āĻā§āĻāύāĻŋāĻā§āϝāĻžāϞ āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§āĻā§ āύā§āĻāϝāĻŧāĻž, āĻĒāϰ⧠āĻŦā§āĻāĻž āϝ⧠āĻāĻāĻžāĻāύā§āĻāĻŋāĻ āĻŦāĻž āĻāĻāύāĻāϤ āύāĻŋā§āĻŽ āĻāĻŋāύā§āύ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž āĻāϰā§āĨ¤
āĻļā§āϰ⧠āĻāϰā§āύ āĻĻā§āĻāĻŋ āϞāĻā§āώā§āϝ āĻāϞāĻžāĻĻāĻž āĻāϰ⧠āĻĻā§āĻāĻžā§ āϝāĻž āĻŽāĻŋāĻļā§ āϝāĻžāϝāĻŧ:
- āĻāĻāύāĻŋāĻ: āĻĻā§āĻāĻāĻŋ āĻāύāĻā§ā§āϏ āĻŦāĻž āĻāĻŋāĻā§āĻ āĻāĻāύ⧠āĻāĻāĻ āύāĻŽā§āĻŦāϰ āĻāĻžāĻ āĻāϰ⧠āύāĻžāĨ¤
- Gapless: āύāĻŽā§āĻŦāϰ āĻāĻāύāĻŋāĻ āĻāĻŦāĻ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāύāϏā§āĻāĻŋāĻāĻāĻŋāĻ (āĻā§āύ⧠āĻŽāĻŋāϏāĻŋāĻ āύā§āĻ)āĨ¤
āĻ āύā§āĻ āĻŦāĻžāϏā§āϤāĻŦ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻļā§āϧ⧠āĻāĻāύāĻŋāĻ āϞāĻā§āώā§āϝ⧠āĻāĻā§āϤ⧠āĻāĻžāύ āĻāĻŦāĻ āĻā§āϝāĻžāĻĒ āĻŽā§āύ⧠āύā§āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āĻā§āϝāĻžāĻĒ āϏāĻžāϧāĻžāϰāĻŖāϤ āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ: āĻāĻāĻāĻŋ āĻāĻāĻāĻžāϰ āĻĄā§āϰāĻžāĻĢāĻ āĻā§āϞ⧠āϰā§āĻā§ āĻāϞ⧠āĻā§āϞā§, āĻĒā§āĻŽā§āύā§āĻ āĻŦā§āϝāϰā§āĻĨ āĻšāϞā§, āĻŦāĻž āϰā§āĻāϰā§āĻĄ āϤā§āϰāĻŋ āĻāϰ⧠āĻĒāϰ⧠void āĻāϰāϞā§āĨ¤ āĻšā§āϞā§āĻĒāĻĄā§āϏā§āĻ āĻāĻŋāĻā§āĻā§ āĻā§āϝāĻžāĻĒāĻā§āϞ⧠āĻĒā§āϰāĻžāϝāĻŧāĻ āϤā§āĻŽāύ āϏāĻŽāϏā§āϝāĻž āĻāϰ⧠āύāĻžāĨ¤ āĻāύāĻā§ā§āϏā§āϰ āĻā§āώā§āϤā§āϰā§āĻ āĻ āύā§āĻ āĻĻāϞ āĻā§āϝāĻžāĻĒ āĻā§āϰāĻšāĻŖ āĻāϰ⧠āϝāĻĻāĻŋ āϤāĻžāϰāĻž āĻ āĻĄāĻŋāĻ āĻā§āϰā§āĻāϞ⧠āĻŦā§āϝāĻžāĻā§āϝāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰ⧠(voided, canceled, test āĻāϤā§āϝāĻžāĻĻāĻŋ)āĨ¤ Gapless āύāĻŽā§āĻŦāϰāĻŋāĻ āϏāĻŽā§āĻāĻŦ, āϤāĻŦā§ āĻāĻāĻž āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āύāĻŋāϝāĻŧāĻŽ āĻāĻžāĻĒāĻžāϝāĻŧ āĻāĻŦāĻ āĻĒā§āϰāĻžāϝāĻŧāĻ āĻāĻžāĻā§ āϧā§āϰāĻāϤāĻŋ āĻāύā§āĨ¤
āĻĒāϰāĻŦāϰā§āϤ⧠āϧāĻžāĻĒā§, āĻāĻžāĻāύā§āĻāĻžāϰāĻāĻŋāϰ āϏā§āĻā§āĻĒ āĻ āĻŋāĻ āĻāϰā§āύāĨ¤ āĻā§āĻ āĻļāĻŦā§āĻĻāĻāϝāĻŧāύāĻ āĻĄāĻŋāĻāĻžāĻāύ āĻŦāĻĻāϞ⧠āĻĻā§āϝāĻŧ:
- āϏāĻŦāĻāĻŋāĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻž āĻā§āϞā§āĻŦāĻžāϞ āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ, āύāĻžāĻāĻŋ āĻāϞāĻžāĻĻāĻž āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ āĻĒā§āϰāϤāĻŋ āĻā§āĻŽā§āĻĒāĻžāύāĻŋ/āĻā§āύā§āϝāĻžāύā§āĻā§āϰ āĻāύā§āϝ?
- āĻĒā§āϰāϤāĻŋ āĻŦāĻāϰ āϰāĻŋāϏā§āĻ āĻšāĻŦā§ (2026-000123) āύāĻžāĻāĻŋ āĻāĻāύ⧠āϰāĻŋāϏā§āĻ āĻšāĻŦā§ āύāĻž?
- āĻāύāĻā§ā§āϏ āĻŦāύāĻžāĻŽ āĻā§āϰā§āĻĄāĻŋāĻ āύā§āĻ āĻŦāύāĻžāĻŽ āĻāĻŋāĻā§āĻâāĻļā§āϧ⧠āĻāϞāĻžāĻĻāĻž āϏāĻŋāϰāĻŋāĻ?
- āĻāĻĒāύāĻŋ āĻāĻŋ āĻšāĻŋāĻāĻŽā§āϝāĻžāύ-āĻĢā§āϰā§āύā§āĻĄāϞāĻŋ āĻĢāϰāĻŽā§āϝāĻžāĻ āĻāĻžāύ (āĻĒā§āϰāĻŋāĻĢāĻŋāĻā§āϏ, āϏā§āĻĒāĻžāϰā§āĻāϰ), āύāĻžāĻāĻŋ āĻļā§āϧ⧠āĻāĻŋāϤāϰā§āϰ āύāĻŽā§āĻŦāϰ?
āĻāύāĻā§āϰāĻŋāĻ āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋ SaaS āĻĒā§āϰā§āĻĄāĻžāĻā§āĻā§ āĻ āύā§āĻ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻā§āĻŽā§āĻĒāĻžāύāĻŋ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§; āϤāĻžāϰāĻž āĻāĻžāĻāϤ⧠āĻĒāĻžāϰ⧠āĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰ āĻā§āĻŽā§āĻĒāĻžāύāĻŋ-āϏā§āϤāϰ⧠āĻāĻāύāĻŋāĻ āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋ āĻā§āϝāĻžāϞā§āύā§āĻĄāĻžāϰ āĻŦāĻāϰ⧠āϰāĻŋāϏā§āĻ āĻšāϝāĻŧ, āĻāĻŋāύā§āϤ⧠āĻāĻŋāĻā§āĻāĻā§āϞ⧠āĻā§āϞā§āĻŦāĻžāϞāĻŋ āĻāĻāύāĻŋāĻ āĻāĻŦāĻ āĻāĻāύ⧠āϰāĻŋāϏā§āĻ āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāĻā§āϞ⧠āĻĻā§āĻāĻāĻŋ āĻāϞāĻžāĻĻāĻž āĻāĻžāĻāύā§āĻāĻžāϰ āϝāĻž āĻĄāĻŋāĻāĻžāĻāύāĻā§ āĻāϞāĻžāĻĻāĻž āĻāϰāĻŦā§, āϝāĻĻāĻŋāĻ UI āĻāĻāĻ āĻĻā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāϤā§āϝāĻŋāĻ gapless āĻĒā§āϰāϝāĻŧā§āĻāύ, āϏā§āĻĒāώā§āĻ āĻāϰ⧠āϞāĻŋāĻā§ āϰāĻžāĻā§āύ āύāĻŽā§āĻŦāϰ āĻŦāϰāĻžāĻĻā§āĻĻā§āϰ āĻĒāϰ⧠āĻā§ āĻāĻā§āύā§āĻāĻā§āϞ⧠āĻ āύā§āĻŽā§āĻĻāĻŋāϤāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋ āĻāύāĻā§ā§āϏ āĻāĻŋ āĻĄāĻŋāϞāĻŋāĻ āĻāϰāĻž āϝāĻžāĻŦā§, āύāĻžāĻāĻŋ āĻā§āĻŦāϞ āĻŦāĻžāϤāĻŋāϞ āĻāϰāĻž āϝāĻžāĻŦā§? āĻāĻāĻāĻžāϰāϰāĻž āĻāĻŋ āĻĄā§āϰāĻžāĻĢāĻ āϏā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻŽā§āĻŦāϰ āĻāĻžāĻĄāĻŧāĻž āĻāĻŦāĻ āĻļā§āϧ⧠āĻĢāĻžāĻāύāĻžāϞ āĻ āύā§āĻŽā§āĻĻāύā§āϰ āϏāĻŽā§ āύāĻŽā§āĻŦāϰ āĻĒāĻžāĻŦā§? āĻāĻ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤāĻā§āϞ⧠āĻĒā§āϰāĻžāϝāĻŧāĻ DB āĻā§āĻļāϞā§āϰ āĻāĻžāĻāϤ⧠āĻŦā§āĻļāĻŋ āĻĒā§āϰāĻāĻžāĻŦ āĻĢā§āϞā§āĨ¤
āϏāĻāĻā§āώā§āĻĒā§ āϞāĻŋāĻā§ āϰāĻžāĻā§āύ:
- āĻā§āύ āϰā§āĻāϰā§āĻĄ āĻāĻžāĻāĻĒ āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§?
- āĻāĻāύ āĻāĻāĻāĻŋ āύāĻŽā§āĻŦāϰāĻā§ âāĻŦā§āϝāĻŦāĻšā§āϤâ āϧāϰāĻž āĻšāĻŦā§ (āĻĄā§āϰāĻžāĻĢāĻ, āĻĒāĻžāĻ āĻžāύā§, āĻĒā§āĻāĻĄ)?
- āϏā§āĻā§āĻĒ āĻā§ (āĻā§āϞā§āĻŦāĻžāϞ, āĻĒā§āϰāϤāĻŋ āĻā§āĻŽā§āĻĒāĻžāύāĻŋ, āĻĒā§āϰāϤāĻŋ āĻŦāĻāϰ, āĻĒā§āϰāϤāĻŋ āϏāĻŋāϰāĻŋāĻ)?
- āĻāϝāĻŧā§āĻĄ āĻāĻŦāĻ āĻāϰā§āĻāĻļāĻžāύ āĻāĻŋāĻāĻžāĻŦā§ āĻšā§āϝāĻžāύā§āĻĄāϞ āĻāϰāĻŦā§āύ?
AppMaster-āĻ āĻāĻ āϧāϰāύā§āϰ āύā§āϤāĻŋ āĻāĻĒāύāĻžāϰ āĻĄā§āĻāĻž āĻŽāĻĄā§āϞ āĻ āĻŦāĻŋāĻāύā§āϏ āĻĒā§āϰāϏā§āϏ āĻĢā§āϞā§-āϰ āĻĒāĻžāĻļā§ āϰāĻžāĻāĻž āĻāĻžāϞā§, āϝāĻžāϤ⧠āĻāĻŋāĻŽ āĻāĻāĻ āĻāĻāϰāĻŖ API, āĻā§ā§āĻŦ UI āĻ āĻŽā§āĻŦāĻžāĻāϞ-āĻ āĻ āύā§āϏāϰāĻŖ āĻāϰ⧠āĻāĻŦāĻ āĻŦāĻŋāϏā§āĻŽā§ āύāĻž āĻāĻā§āĨ¤
āϏāĻžāϧāĻžāϰāĻŖ āĻĒāĻĻā§āϧāϤāĻŋ āĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĒāĻĻā§āϧāϤāĻŋ āĻā§ āύāĻŋāĻļā§āĻāϝāĻŧāϤāĻž āĻĻā§āϝāĻŧ
āϞā§āĻā§āϰāĻž āϝāĻāύ âāĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰāĻŋāĻâ āĻŦāϞā§, āϤāĻžāϰāĻž āĻĒā§āϰāĻžāϝāĻŧāĻ āĻĻā§āĻāĻŋ āĻāϞāĻžāĻĻāĻž āϞāĻā§āώā§āϝ āĻŽāĻŋāĻļāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧ: (1) āĻāĻāĻ āύāĻŽā§āĻŦāϰ āĻĻā§āĻŦāĻžāϰ āĻā§āύāĻžāϰā§āĻ āĻāϰāĻž āϝāĻžāĻŦā§ āύāĻž, āĻāĻŦāĻ (2) āĻā§āύ⧠āĻā§āϝāĻžāĻĒ āĻĨāĻžāĻāĻŦā§ āύāĻžāĨ¤ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻĒā§āϰāĻĨāĻŽāĻāĻž āϏāĻšāĻā§ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧāĻāĻž āĻ āύā§āĻ āĻāĻ āĻŋāύ, āĻāĻžāϰāĻŖ āĻā§āϝāĻžāĻĒ āϤāĻāύāĻ āĻĻā§āĻāĻž āϝāĻžāϝāĻŧ āϝāĻāύ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧ, āĻĄā§āϰāĻžāĻĢāĻ āĻĒāϰāĻŋāϤā§āϝāĻžāĻ āĻāϰāĻž āĻšāϝāĻŧ, āĻŦāĻž āϰā§āĻāϰā§āĻĄ void āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻĒāĻĻā§āϧāϤāĻŋ 1: āĻĄāĻžāĻāĻžāĻŦā§āϏ sequence (āĻĻā§āϰā§āϤ āĻāĻāύāĻŋāĻāύā§āϏ)
PostgreSQL sequence āĻšāϞ⧠āϏāĻŦāĻā§āϝāĻŧā§ āϏāĻšāĻ āĻāĻĒāĻžāϝāĻŧ āĻāĻāύāĻŋāĻ, āĻā§āϰāĻŽāĻŦāϰā§āϧāĻŽāĻžāύ āύāĻŽā§āĻŦāϰ āĻĒā§āϤā§āĨ¤ āĻāĻāĻŋ āĻāĻžāϞ⧠āϏā§āĻā§āϞ⧠āĻāĻžāĻ āĻāϰ⧠āĻāĻžāϰāĻŖ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĻā§āϰā§āϤ āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ āĻā§āϝāĻžāϞ⧠āĻšāϏā§āϤāĻžāύā§āϤāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻāĻŽāύāĻāĻŋ āĻ āύā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻ āϏāĻā§āĻā§ āĻĨāĻžāĻāϞā§āĻāĨ¤
āĻāĻĒāύāĻŋ āĻā§ āĻĒāĻžāĻŦā§āύ: āĻāĻāύāĻŋāĻāύā§āϏ āĻ āĻ āϰā§āĻĄāĻžāϰāĻŋāĻ (āĻĒā§āϰāĻžāϝāĻŧāĻļāĻ āĻŦāĻžāĻĄāĻŧā§)āĨ¤ āĻāĻĒāύāĻŋ āĻāĻŋ āĻĒāĻžāĻŦā§āύ āύāĻž: gapless āύāĻŽā§āĻŦāϰāĨ¤ āϝāĻĻāĻŋ āĻāύāϏāĻžāϰā§āĻ āĻŦā§āϝāϰā§āĻĨ āĻšā§ āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ āĻā§āϝāĻžāϞ⧠"āĻŦāϰā§āĻŖāĻŋāϤ" āĻšā§ā§ āϝāĻžāϝāĻŧ āĻāĻŦāĻ āĻāĻĒāύāĻŋ āĻā§āϝāĻžāĻĒ āĻĻā§āĻāĻŦā§āύāĨ¤
āĻĒāĻĻā§āϧāϤāĻŋ 2: āĻāĻāύāĻŋāĻ āĻāύāϏā§āĻā§āϰā§āĻāύā§āĻ + āϰāĻŋāĻā§āϰāĻžāĻ (āĻĄā§āĻāĻžāĻŦā§āϏāĻā§ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϤ⧠āĻĻāĻŋāύ)
āĻāĻāĻžāύ⧠āĻāĻĒāύāĻŋ āĻ ā§āϝāĻžāĻĒ āϞāĻāĻŋāĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻā§āϝāĻžāύā§āĻĄāĻŋāĻĄā§āĻ āύāĻŽā§āĻŦāϰ āĻā§āύāĻžāϰā§āĻ āĻāϰā§āύ, āϏā§āĻ āĻāϰā§āύ, āĻāĻŦāĻ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻšāϞ⧠UNIQUE āĻāύāϏā§āĻā§āϰā§āĻāύā§āĻ āϰāĻŋāĻĒā§āϰā§āĻā§āĻā§āĻ āĻāϰā§āĨ¤ āĻāύāĻĢā§āϞāĻŋāĻā§āĻ āĻšāϞ⧠āĻāĻĒāύāĻŋ āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰā§āύāĨ¤
āĻāĻāĻŋ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻāĻŋāύā§āϤ⧠āĻāĻā§āĻ āĻāύāĻāϰā§āύā§āϏāĻŋāϤ⧠āĻāĻāĻŋ āĻŦā§āĻļāĻŋ āϰāĻŋāĻā§āϰāĻžāĻ āĻ āĻŦā§āϝāϰā§āĻĨ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύā§āϰ āĻāĻžāϰāĻŖ āĻšā§ā§ āĻāĻ ā§ āĻāĻŦāĻ āĻĄāĻŋāĻŦāĻžāĻ āĻāϰāϤ⧠āĻāĻāĻŋāϞāϤāĻž āĻŦāĻžāĻĄāĻŧā§āĨ¤ āĻāĻāĻŋ gapless āύāĻŽā§āĻŦāϰ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āύāĻž, āϝāϤāĻā§āώāĻŖ āύāĻž āĻāĻĒāύāĻŋ āĻāĻĄāĻŧāĻž āϰāĻŋāĻāĻžāϰā§āĻā§āĻļāύ āύāĻŋāϝāĻŧāĻŽ āϝā§āĻ āĻāϰā§āύ, āϝāĻž āĻāĻāĻŋāϞāϤāĻž āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧāĨ¤
āĻĒāĻĻā§āϧāϤāĻŋ 3: āĻāĻžāĻāύā§āĻāĻžāϰ āϏāĻžāϰāĻŋ āϏāĻš āϞāĻāĻŋāĻ (gapless āϞāĻā§āώā§āϝ)
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāϤā§āϝāĻŋāĻ gapless āύāĻŽā§āĻŦāϰ āĻāĻžāύ, āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻšāϞ⧠āĻāĻāĻāĻŋ āĻĄā§āĻĄāĻŋāĻā§āĻā§āĻĄ āĻāĻžāĻāύā§āĻāĻžāϰ āĻā§āĻŦāĻŋāϞ (āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏā§āĻā§āĻĒā§āϰ āĻāύā§āϝ āĻāĻ āϏāĻžāϰāĻŋ, āϝā§āĻŽāύ āĻĒā§āϰāϤāĻŋ āĻŦāĻāϰ āĻŦāĻž āĻĒā§āϰāϤāĻŋ āĻā§āĻŽā§āĻĒāĻžāύāĻŋ)āĨ¤ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ⧠āĻāĻ āϏāĻžāϰāĻŋāĻāĻŋ āϞāĻ āĻāϰā§, āĻāĻāĻŋ āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ āĻāϰ⧠āĻāĻŦāĻ āύāϤā§āύ āĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻāĻāĻŋ gapless-āϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ, āĻāĻŋāύā§āϤ⧠āĻāϰāĻ āĻāĻā§: āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻšāĻ āϏā§āĻĒāĻ āϤā§āϰāĻŋ āĻāϰ⧠āϝā§āĻāĻžāύ⧠āϏāĻŦ āϰāĻžāĻāĻāĻžāϰāĻā§ āĻ āĻĒā§āĻā§āώāĻž āĻāϰāϤ⧠āĻšā§āĨ¤ āĻ āĻĒāĻžāϰā§āĻļāύāĻžāϞ āĻā§āϞ (āĻĻā§āϰā§āĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ, āĻāĻžāĻāĻŽāĻāĻāĻ, āĻĄā§āĻĄāϞāĻ) āĻāĻ āĻā§āώā§āϤā§āϰ⧠āĻā§āĻāĻāĻŋ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧāĨ¤
āĻĒāĻĻā§āϧāϤāĻŋ 4: āĻāϞāĻžāĻĻāĻž āϰāĻŋāĻāĻžāϰā§āĻā§āĻļāύ āϏāĻžāϰā§āĻāĻŋāϏ (āĻŦāĻŋāĻļā§āώ āĻā§āώā§āϤā§āϰā§āϰ āĻāύā§āϝ)
āĻāĻāĻāĻŋ āϏā§āĻŦāϤāύā§āϤā§āϰ "āύāĻžāĻŽā§āĻŦāĻžāϰāĻŋāĻ āϏāĻžāϰā§āĻāĻŋāϏ" āĻŦāĻšā§ āĻ ā§āϝāĻžāĻĒ āĻŦāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āĻĄāĻŧā§ āύāĻŋāϝāĻŧāĻŽ āĻā§āύā§āĻĻā§āϰā§ā§āĻāϰāĻŖ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻāĻŋ āϤāĻāύāĻ āĻŽā§āϞā§āϝāĻŦāĻžāύ āĻšāϝāĻŧ āϝāĻāύ āĻāϝāĻŧā§āĻāĻāĻŋ āϏāĻŋāϏā§āĻā§āĻŽ āύāĻŽā§āĻŦāϰ āĻāϏā§āϝ⧠āĻāϰ⧠āĻāĻŦāĻ āĻāĻĒāύāĻŋ āϞā§āĻāĻžāĻā§āϞ⧠āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻžāĨ¤
āĻā§āϰā§āĻĄāĻ āĻĢ āĻšāϞ⧠āĻ āĻĒāĻžāϰā§āĻļāύāĻžāϞ āĻā§āĻāĻāĻŋ: āĻāĻĒāύāĻŋ āĻāϰā§āĻāĻāĻŋ āϏāĻžāϰā§āĻāĻŋāϏ āϝā§āĻ āĻāϰā§āĻā§āύ āϝāĻž āϏāĻ āĻŋāĻ, āĻāĻā§āĻ-āĻāĻĒāϞāĻŦā§āϧ āĻāĻŦāĻ āĻāύāϏāĻŋāϏāĻā§āύā§āĻ āĻšāϤ⧠āĻšāĻŦā§āĨ¤
āϏāĻāĻā§āώāĻŋāĻĒā§āϤāĻāĻžāĻŦā§ āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋ āĻāĻžāĻŦāϞā§:
- Sequence: āĻāĻāύāĻŋāĻ, āĻĻā§āϰā§āϤ, āĻā§āϝāĻžāĻĒ āĻā§āϰāĻšāĻŖ āĻāϰā§
- Unique + retry: āĻāĻāύāĻŋāĻ, āĻāĻŽ āϞā§āĻĄā§ āϏāĻšāĻ, āĻāĻā§āĻ āϞā§āĻĄā§ āĻĨā§āϰāĻžāĻļ āĻāϰāϤ⧠āĻĒāĻžāϰā§
- Locked counter row: gapless āĻšāϤ⧠āĻĒāĻžāϰā§, āĻāĻā§āĻ āĻāύāĻāϰā§āύā§āϏāĻŋāϤ⧠āϧā§āϰ
- Separate service: āϏāĻŋāϏā§āĻā§āĻŽ āĻā§āĻĄāĻŧā§ āύāĻŽāύā§ā§, āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻāĻŋāϞ āĻ āĻā§āĻāĻāĻŋāĻĒā§āϰā§āĻŖ
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ AppMaster-āĻ āĻāĻāĻŋ āϤā§āϰāĻŋ āĻāϰā§āύ, āĻāĻāĻ āĻĒāĻāύā§āĻĻ āĻĒā§āϰāϝā§āĻā§āϝ: āĻĄāĻžāĻāĻžāĻŦā§āϏāĻ āϝā§āĻāĻžāύ⧠āĻā§āϰ āĻāύāϏāĻŋāϏā§āĻā§āύā§āϏāĻŋ āĻĨāĻžāĻāĻž āĻāĻāĻŋāϤāĨ¤ āĻ ā§āϝāĻžāĻĒ āϞāĻāĻŋāĻ āϰāĻŋāĻā§āϰāĻžāĻ āĻ āϏā§āĻĒāώā§āĻ āĻāϰāϰ āĻŽā§āϏā§āĻā§ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻāĻŋāύā§āϤ⧠āĻā§ā§āĻžāύā§āϤ āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋ constraint āĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύā§āϰ āĻāĻžāĻ āĻĨā§āĻā§ āĻāϏāĻž āĻāĻāĻŋāϤāĨ¤
āϧāĻžāĻĒā§ āϧāĻžāĻĒā§: sequence āĻ unique constraint āĻĻāĻŋāϝāĻŧā§ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻĒā§āϰāϤāĻŋāϰā§āϧ āĻāϰā§āύ
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻĒā§āϰāϤāĻŋāϰā§āϧ āĻāϰāĻžāĻ āĻŽā§āϞ āϞāĻā§āώā§āϝ (āĻā§āϝāĻžāĻĒ āύāĻž āĻĨāĻžāĻāĻž āύāϝāĻŧ), āϤāĻžāĻšāϞ⧠āϏāĻŦāĻā§āϝāĻŧā§ āϏāĻšāĻ āĻ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻšāϞā§: āĻĄāĻžāĻāĻžāĻŦā§āϏ-āĻā§āύāĻžāϰā§āĻā§āĻĄ āĻāύā§āĻāĻžāϰāύāĻžāϞ ID āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āĻāĻŦāĻ āĻĻā§āĻāĻžāύā§āϰ āĻāύā§āϝ āĻāϞāĻžāĻĻāĻž āĻĢāĻŋāϞā§āĻĄā§ āĻāĻāύāĻŋāĻāύā§āϏ āĻŦāĻāĻžāϝāĻŧ āϰāĻžāĻā§āύāĨ¤
āĻĒā§āϰāĻĨāĻŽā§āĻ āĻĻā§āĻāĻŋ āϧāĻžāϰāĻŖāĻž āĻāϞāĻžāĻĻāĻž āĻāϰā§āύāĨ¤ āĻāϝāĻŧā§āύ, āĻāĻĄāĻŋāĻ, āĻāĻā§āϏāĻĒā§āϰā§āĻā§āϰ āĻāύā§āϝ āĻĄāĻžāĻāĻžāĻŦā§āϏ-āĻā§āύāĻžāϰā§āĻā§āĻĄ āĻŽāĻžāύ (identity/sequence) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ invoice_no āĻŦāĻž ticket_no āĻāϞāĻžāĻĻāĻž āĻāϞāĻžāĻŽ āϰāĻžāĻā§āύ āϝāĻž āĻŽāĻžāύā§āώā§āϰ āϏāĻžāĻŽāύ⧠āĻĻā§āĻāĻžāύ⧠āĻšā§āĨ¤
PostgreSQL-āĻ āĻāĻāĻāĻŋ āĻŦāĻžāϏā§āϤāĻŦāĻžāύā§āĻ āϏā§āĻāĻāĻĒ
āύāĻŋāĻā§ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ PostgreSQL āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻā§ āϝāĻž āĻĄāĻŋāϏāĻĒā§āϞ⧠āύāĻŽā§āĻŦāϰ āĻā§āύāĻžāϰā§āĻļāύ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻāĻŋāϤāϰā§āĻ āϰāĻžāĻā§, āϝā§āĻāĻžāύ⧠āĻāύāĻāϰā§āύā§āϏāĻŋ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻšā§āϝāĻžāύā§āĻĄāϞ āĻšā§āĨ¤
-- Internal, never-shown primary key
create table invoices (
id bigint generated always as identity primary key,
invoice_no text not null,
created_at timestamptz not null default now()
);
-- Business-facing uniqueness guarantee
create unique index invoices_invoice_no_uniq on invoices (invoice_no);
-- Sequence for the visible number
create sequence invoice_no_seq;
āĻāĻāύ āĻāύāϏāĻžāϰā§āĻ āϏāĻŽāϝāĻŧ āĻĄāĻŋāϏāĻĒā§āϞ⧠āύāĻŽā§āĻŦāϰ āĻā§āύāĻžāϰā§āĻ āĻāϰā§āύ ("select max(invoice_no) + 1" āύāĻž āĻāϰā§)āĨ¤ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻšāϞ⧠INSERT-āĻāĻ sequence āĻā§āϝāĻžāϞ⧠āĻĢāϰāĻŽā§āϝāĻžāĻ āĻāϰāĻž:
insert into invoices (invoice_no)
values (
'INV-' || lpad(nextval('invoice_no_seq')::text, 8, '0')
)
returning id, invoice_no;
50 āĻāύ āĻāĻāĻāĻžāϰ āĻāĻāĻ āϏāĻŽā§ā§ "Create invoice" āĻāĻžāĻĒāϞā§āĻ, āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāύāϏāĻžāϰā§āĻ āĻāϞāĻžāĻĻāĻž sequence āĻā§āϝāĻžāϞ⧠āĻĒāĻžāĻŦā§ āĻāĻŦāĻ unique index āĻā§āύ⧠āĻĻā§āϰā§āĻāĻāύāĻžāĻāύāĻŋāϤ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻŦā§āϞāĻ āĻāϰāĻŦā§āĨ¤
āĻāϞā§āĻļāύ āĻšāϞ⧠āĻā§ āĻāϰāĻŦā§āύ
āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ sequence-āĻ āĻāϞā§āĻļāύ āĻŦāĻŋāϰāϞāĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻāĻŋ āϤāĻāύāĻ āĻāĻā§ āϝāĻāύ āĻāĻĒāύāĻŋ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āύāĻŋāϝāĻŧāĻŽ āϝā§āĻ āĻāϰā§āύ āϝā§āĻŽāύ "āĻĒā§āϰāϤāĻŋ āĻŦāĻāϰ āϰāĻŋāϏā§āĻ" āĻŦāĻž "āĻĒā§āϰāϤāĻŋ āĻā§āύā§āϝāĻžāύā§āĻ", āĻ āĻĨāĻŦāĻž āĻāĻāĻāĻžāϰ-āĻāĻĄāĻŋāĻā§āĻŦāϞ āύāĻŽā§āĻŦāϰāĨ¤ āϏā§āĻāύā§āϝ unique āĻāύāϏā§āĻā§āϰā§āĻāύā§āĻ āĻĨāĻžāĻāĻž āĻāϰā§āϰāĻŋāĨ¤
āĻ ā§āϝāĻžāĻĒ āϞā§āĻā§āϞ⧠unique-violation āĻāĻĄāĻŧāĻžāϤ⧠āĻā§āĻ āĻāĻāĻāĻŋ āϰāĻŋāĻā§āϰāĻžāĻ āϞā§āĻĒ āϰāĻžāĻā§āύ:
- āĻāύāϏāĻžāϰā§āĻ āĻā§āώā§āĻāĻž āĻāϰā§āύ
- āϝāĻĻāĻŋ invoice_no-āϤ⧠unique constraint error āĻĒāĻžāύ, āĻāĻŦāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύ
- āĻāϝāĻŧā§āĻāĻŦāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰ⧠āύāĻž āĻĒāĻžāϰāϞ⧠āĻĒāϰāĻŋāώā§āĻāĻžāϰ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāĻžāύ
āĻāĻāĻŋ āĻāĻžāϞ āĻāĻžāĻ āĻāϰ⧠āĻāĻžāϰāĻŖ āϰāĻŋāĻā§āϰāĻžāĻ āϤāĻāύāĻ āĻā§āϰāĻŋāĻāĻžāϰ āĻšā§ āϝāĻāύ āĻāĻŋāĻā§ āĻ āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻāĻā§âāϝā§āĻŽāύ āĻĻā§āĻ āĻāϞāĻžāĻĻāĻž āĻā§āĻĄ āĻĒāĻžāĻĨ āĻāĻāĻ āĻĢāϰāĻŽā§āϝāĻžāĻ āĻāϰāĻž āύāĻŽā§āĻŦāϰ āϤā§āϰāĻŋ āĻāϰā§āĨ¤
āϰā§āϏ āĻāĻāύā§āĻĄā§ āĻā§āĻ āϰāĻžāĻā§āύ
āύāĻžāĻŽā§āĻŦāĻžāϰ UI-āϤ⧠āĻāύāĻā§āϝāĻžāĻā§āĻ āĻāϰ⧠āĻāĻŖāύāĻž āĻāϰāĻŦā§āύ āύāĻž, āĻāĻŦāĻ "āϰāĻŋāĻāĻžāϰā§āĻ" āĻāϰāϤ⧠āĻāĻā§ āĻĒāĻĄāĻŧāĻŦā§āύ āύāĻžāĨ¤ āϏāĻāĻā§āϝāĻžāĻāĻŋ āϝāϤāĻāĻž āϏāĻŽā§āĻāĻŦ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϞā§āĻāĻžāϰ āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻā§āύāĻžāϰā§āĻ āĻāϰā§āύāĨ¤
AppMaster-āĻ PostgreSQL āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞā§, āĻāĻĒāύāĻŋ Data Designer-āĻ id āĻā§ identity primary key āĻšāĻŋāϏā§āĻŦā§ āĻŽāĻĄā§āϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, invoice_no-āϤ⧠unique constraint āϝā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻŦāĻ create āĻĢā§āϞā§āϤ⧠invoice_no āĻā§āύāĻžāϰā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝāĻžāϤ⧠āϏā§āĻāĻŋ āĻāύāϏāĻžāϰā§āĻā§āϰ āϏāĻžāĻĨā§ āĻāĻāϏāĻžāĻĨā§ āĻāĻā§āĨ¤ āĻāĻāĻāĻžāĻŦā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āϰā§āϏ āĻ āĻĢ āĻā§āϰā§āĻĨ āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāύāĻāϰā§āύā§āϏāĻŋ PostgreSQL-āĻ āĻāĻžāϞāĻāĻžāĻŦā§ āĻšā§āϝāĻžāύā§āĻĄāϞ āĻāϰā§āĨ¤
āϧāĻžāĻĒā§ āϧāĻžāĻĒā§: row locking āĻĻāĻŋā§ā§ gapless āĻāĻžāĻāύā§āĻāĻžāϰ āϤā§āϰāĻŋ āĻāϰā§āύ
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāϤā§āϝāĻŋāĻ gapless āύāĻŽā§āĻŦāϰ āĻāĻžāύ (āĻā§āύ⧠āĻŽāĻŋāϏāĻŋāĻ āύāĻŽā§āĻŦāϰ āύā§), āϤāĻžāĻšāϞ⧠āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύāĻžāϞ āĻāĻžāĻāύā§āĻāĻžāϰ āĻā§āĻŦāĻŋāϞ āĻ āϏāĻžāϰāĻŋ āϞāĻāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āϧāĻžāϰāĻŖāĻžāĻāĻž āϏāĻšāĻ: āĻāĻāĻ āϏāĻŽāϝāĻŧā§ āĻā§āĻŦāϞ āĻāĻāĻāĻŋ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏā§āĻā§āĻĒā§āϰ āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻŽā§āĻŦāϰ āύāĻŋāϤ⧠āĻĒāĻžāϰā§, āϤāĻžāĻ āύāĻŽā§āĻŦāϰ āĻ āϰā§āĻĄāĻžāϰ⧠āĻšāϏā§āϤāĻžāύā§āϤāϰāĻŋāϤ āĻšāϝāĻŧāĨ¤
āĻĒā§āϰāĻĨāĻŽā§ āϏā§āĻā§āĻĒ āĻ āĻŋāĻ āĻāϰā§āύāĨ¤ āĻ āύā§āĻ āĻāĻŋāĻŽ āĻāϞāĻžāĻĻāĻž āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ āĻāĻžāύ āĻĒā§āϰāϤāĻŋ āĻā§āĻŽā§āĻĒāĻžāύāĻŋ, āĻĒā§āϰāϤāĻŋ āĻŦāĻāϰ, āĻŦāĻž āĻĒā§āϰāϤāĻŋ āϏāĻŋāϰāĻŋāĻ āĻ āύā§āϝāĻžāϝāĻŧā§āĨ¤ āĻāĻžāĻāύā§āĻāĻžāϰ āĻā§āĻŦāĻŋāϞ āĻļā§āώ āĻŦā§āϝāĻŦāĻšā§āϤ āύāĻŽā§āĻŦāϰ āϏāĻā§āĻāϝāĻŧ āĻāϰ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏā§āĻā§āĻĒā§āϰ āĻāύā§āϝāĨ¤
PostgreSQL row locks āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦāĻžāϏā§āϤāĻŦāĻĒā§āĻĨāĻŋāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ:
number_countersāύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞ āϤā§āϰāĻŋ āĻāϰā§āύ, āϝā§āĻāĻžāύ⧠āĻāϞāĻžāĻŽ āĻĨāĻžāĻāĻŦā§company_id,year,series,last_number, āĻāĻŦāĻ āĻāĻāĻāĻŋ unique key(company_id, year, series)āĨ¤- āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻļā§āϰ⧠āĻāϰā§āύāĨ¤
- āĻāĻĒāύāĻžāϰ āϏā§āĻā§āĻĒā§āϰ āĻāύā§āϝ āĻāĻžāĻāύā§āĻāĻžāϰ āϏāĻžāϰāĻŋ āϞāĻ āĻāϰā§āύ:
SELECT last_number FROM number_counters WHERE ... FOR UPDATEāĨ¤ next_number = last_number + 1āĻāĻŖāύāĻž āĻāϰā§āύ, āĻāĻžāĻāύā§āĻāĻžāϰ āϏāĻžāϰāĻŋ āĻāĻĒāĻĄā§āĻ āĻāϰā§last_number = next_numberāϰāĻžāĻā§āύāĨ¤- āϏā§āĻ
next_numberāĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāύāĻā§ā§āϏ/āĻāĻŋāĻā§āĻ āĻāύāϏāĻžāϰā§āĻ āĻāϰā§āύ, āϤāĻžāϰāĻĒāϰ āĻāĻŽāĻŋāĻ āĻāϰā§āύāĨ¤
āĻŽā§āϞ āĻāĻĨāĻž āĻšāϞ⧠FOR UPDATEāĨ¤ āϞā§āĻĄā§, āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻĒāĻžāĻā§āĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤ āĻāĻĒāύāĻŋ "āĻĻā§āĻāĻŋ āĻāĻāĻāĻžāϰ āĻāĻāĻ āύāĻŽā§āĻŦāϰ āĻĒā§āϝāĻŧā§āĻāĻŋāϞ" āĻĨā§āĻā§ āĻā§āϝāĻžāĻĒāĻ āĻĒāĻžāĻŦā§āύ āύāĻž, āĻāĻžāϰāĻŖ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻĒā§āϰāĻĨāĻŽāĻāĻŋ āĻāĻŽāĻŋāĻ āĻŦāĻž āϰā§āϞāĻŦā§āϝāĻžāĻ āύāĻž āĻāϰāĻž āĻĒāϰā§āϝāύā§āϤ āĻāĻāĻ āĻāĻžāĻāύā§āĻāĻžāϰ āϏāĻžāϰāĻŋ āĻĒāĻĄāĻŧāϤ⧠āĻ āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤ āĻĒāϰāĻŋāĻŦāϰā§āϤā§, āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻ
āύā§āϰā§āϧ āϏāĻžāĻŽāϝāĻŧāĻŋāĻāĻāĻžāĻŦā§ āĻ
āĻĒā§āĻā§āώāĻž āĻāϰāĻŦā§āĨ¤ āĻ āĻ
āĻĒā§āĻā§āώāĻžāĻāĻžāĻ gapless āĻšāĻāϝāĻŧāĻžāϰ āĻŽā§āϞā§āϝāĨ¤
āύāϤā§āύ āϏā§āĻā§āĻĒ āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāϞāĻžāĻāĻ āĻāϰāĻž
āύāϤā§āύ āĻā§āĻŽā§āĻĒāĻžāύāĻŋ, āύāϤā§āύ āĻŦāĻāϰ āĻŦāĻž āύāϤā§āύ āϏāĻŋāϰāĻŋāĻ āĻāϏā§âāϤāĻžāϰ āĻāύā§āϝ āĻĒāϰāĻŋāĻāϞā§āĻĒāύāĻž āĻĻāϰāĻāĻžāϰ:
- āĻāĻāĻžāĻŽ āĻāĻžāĻāύā§āĻāĻžāϰ āϏāĻžāϰāĻŋ āĻĒā§āϰāĻŋ-āĻā§āϰāĻŋāϝāĻŧā§āĻ āĻāϰā§āύ (āĻāĻĻāĻžāĻšāϰāĻŖ: āĻĄāĻŋāϏā§āĻŽā§āĻŦāϰā§āĻ āĻĒāϰā§āϰ āĻŦāĻāϰā§āϰ āϏāĻžāϰāĻŋ āϤā§āϰāĻŋ āĻāϰā§āύ)āĨ¤
- āĻ
āύ-āĻĄāĻŋāĻŽāĻžāύā§āĻĄā§ āϏāĻžāϰāĻŋ āϤā§āϰāĻŋ āĻāϰā§āύ: āĻā§āώā§āĻāĻž āĻāϰ⧠insert āĻāϰā§āύ
last_number = 0āĻĻāĻŋāϝāĻŧā§, āϝāĻĻāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝ⧠āĻĨāĻžāĻā§ āϤāĻžāĻšāϞ⧠āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ lock-and-increment āĻĢā§āϞā§āϤ⧠āĻĢāĻŋāϰā§āύāĨ¤
AppMaster-āĻ āĻāĻāĻŋ āϤā§āϰāĻŋ āĻāϰāϞ⧠āĻĒā§āϰ⧠"āϞāĻ, āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ, āĻāύāϏāĻžāϰā§āĻ" āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ āĻāĻāĻāĻŋāĻā§āĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ⧠āϰāĻžāĻā§āύ, āϝāĻžāϤ⧠āϏāĻŦāĻāĻŋāĻā§ āĻŦāĻž āĻāĻŋāĻā§āĻ āύāĻž āĻāĻā§āĨ¤
āĻāĻ āĻā§āϏāϏāĻŽā§āĻš: āĻĄā§āϰāĻžāĻĢāĻ, āĻŦā§āϝāϰā§āĻĨ āϏā§āĻ, āĻŦāĻžāϤāĻŋāϞāĻāϰāĻŖ āĻ āĻāĻĄāĻŋāĻ
āĻ āϧāĻŋāĻāĻžāĻāĻļ āύāĻŽā§āĻŦāϰāĻŋāĻ āĻŦāĻžāĻ āĻāĻžāϰāĻŋāϤ āĻšā§ āĻ āĻŋāĻ āĻā§ messy āĻ āĻāĻļāĻā§āϞāĻŋāϤā§: āĻĄā§āϰāĻžāĻĢāĻ āϝāĻž āĻāĻāύāĻ āĻĒā§āϏā§āĻ āĻšā§ āύāĻž, āϏā§āĻ āϝāĻž āĻŦā§āϝāϰā§āĻĨ āĻšā§, āĻāύāĻā§ā§āϏ āĻŦāĻžāϤāĻŋāϞ āĻŦāĻž āϰā§āĻāϰā§āĻĄ āĻāĻĄāĻŋāĻ āϝāĻāύ āĻā§āĻ āύāĻŽā§āĻŦāϰ āĻāĻā§ āĻĻā§āĻā§ āĻĢā§āϞā§āĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ-āύāĻŋāϰāĻžāĻĒāĻĻ āĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰāĻŋāĻ āĻāĻžāύ, āϤāĻāύ āύāĻŽā§āĻŦāϰ āĻāĻāύ "āϰāĻŋāϝāĻŧā§āϞ" āĻšāĻŦā§ āϏ⧠āĻŦāĻŋāώāϝāĻŧā§ āϏā§āĻĒāώā§āĻ āύāĻŋāϝāĻŧāĻŽ āĻĨāĻžāĻāĻž āĻĻāϰāĻāĻžāϰāĨ¤
āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻĄāĻŧ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āĻšāϞ⧠āĻāĻžāĻāĻŽāĻŋāĻāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻā§āĻ "New invoice" āĻā§āϞāĻŋāĻ āĻāϰāϞā§āĻ āύāĻŽā§āĻŦāϰ āĻĻā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻŋ āĻĒāϰāĻŋāϤā§āϝāĻā§āϤ āĻĄā§āϰāĻžāĻĢāĻ āĻĨā§āĻā§ āĻā§āϝāĻžāĻĒ āĻĒāĻžāĻŦā§āύāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻā§āĻŦāϞāĻŽāĻžāϤā§āϰ āϝāĻāύ āĻāύāĻā§ā§āϏ āĻĢāĻžāĻāύāĻžāϞāĻžāĻāĻ āĻāϰāĻž āĻšā§ (posted, issued, sent āĻ āĻĨāĻŦāĻž āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāϏāĻžāϰ āĻŽāĻžāύ⧠āϝā§āĻāĻž) āϤāĻāύ āύāĻŽā§āĻŦāϰ āĻĻā§āύ, āϤāĻžāĻšāϞ⧠āύāĻŽā§āĻŦāϰāĻā§āϞ⧠āĻāĻžāĻāĻ āĻšāϝāĻŧā§ āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰāĻžāĻ āϏāĻšāĻāĨ¤
āĻŦā§āϝāϰā§āĻĨ āϏā§āĻ āĻ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻšāϞ āϝā§āĻāĻžāύ⧠āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž āĻĒā§āϰāĻžāϝāĻŧāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻāϰāĻŖā§āϰ āϏāĻžāĻĨā§ āϏāĻāĻāϰā§āώ āĻāϰā§āĨ¤ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ sequence-āĻ āĻāĻāĻŦāĻžāϰ āύāĻŽā§āĻŦāϰ āύā§āĻāϝāĻŧāĻž āĻšāϞ⧠āϏā§āĻāĻŋ āύā§āĻāϝāĻŧāĻž āĻŦāϞ⧠āϧāϰāĻž āĻšāϝāĻŧ, āĻāĻŽāύāĻāĻŋ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻĒāϰ⧠āĻŦā§āϝāϰā§āĻĨ āĻšāϞ⧠āĻāĨ¤ āĻāĻāĻž āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻ āύāĻŋāϰāĻžāĻĒāĻĻ, āĻāĻŋāύā§āϤ⧠āĻā§āϝāĻžāĻĒ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āύā§āϤāĻŋ gapless āĻāĻžāϝāĻŧ, āύāĻŽā§āĻŦāϰ āĻ āĻŦāĻļā§āϝāĻ āĻā§āĻŦāϞ āĻā§āĻĄāĻŧāĻžāύā§āϤ āϧāĻžāĻĒā§ āĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻāĻŽāĻŋāĻ āĻšāĻā§āĻžāϰ āϏāĻŽāϝāĻŧāĻ āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāϰ āĻŽāĻžāύ⧠āĻšāϞ⧠āĻāĻāĻāĻŋ āĻāĻāĻ āĻāĻžāĻāύā§āĻāĻžāϰ āϏāĻžāϰāĻŋ āϞāĻ āĻāϰ⧠āĻļā§āώ āύāĻŽā§āĻŦāϰ āϞā§āĻāĻž, āϤāĻžāϰāĻĒāϰ āĻāĻŽāĻŋāĻâāϝāĻĻāĻŋ āĻā§āύ⧠āϧāĻžāĻĒ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧ, āĻāĻŋāĻā§āĻ āĻŦāϰāĻžāĻĻā§āĻĻ āĻšāĻŦā§ āύāĻžāĨ¤
āĻā§āϝāĻžāύāϏā§āϞ āĻ āĻāϝāĻŧā§āĻĄ āĻāϰāĻž āϰā§āĻāϰā§āĻĄ āĻāĻāύā§āĻ āύāĻŽā§āĻŦāϰ āĻĒā§āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻāĻŋāϤ āύā§āĨ¤ āύāĻŽā§āĻŦāϰ āĻ āĻā§āώāϤ āϰāĻžāĻā§āύ āĻāĻŦāĻ āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύāĨ¤ āĻ āĻĄāĻŋāĻāϰ āĻ āĻā§āϰāĻžāĻšāĻāϰāĻž āĻāϤāĻŋāĻšāĻžāϏ āĻ āĻā§āώāϤ āϰāĻžāĻāĻžāϰ āĻāĻļāĻž āϰāĻžāĻā§, āĻāĻŽāύāĻāĻŋ āĻāϰā§āĻāĻļāĻžāύ āĻšāϞ⧠āĻāĨ¤
āĻāĻĄāĻŋāĻ āϏāĻšāĻ: āĻāĻāĻŦāĻžāϰ āύāĻŽā§āĻŦāϰ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻŦāĻžāĻāϰ⧠āĻāĻŋāĻāĻŋāĻŦāϞ āĻšāϞ⧠āĻāĻāĻŋāĻā§ āϏā§āĻĨāĻžāϝāĻŧā§ āϧāϰ⧠āύāĻŋāύāĨ¤ āĻāĻžāĻ āύāĻž āĻāϰ⧠āĻĒā§āύāĻāϏāĻāĻā§āϝāĻžāϝāĻŧāĻāϰāĻŖ āĻāϰāĻŦā§āύ āύāĻžāĨ¤ āϝāĻĻāĻŋ āĻāϰā§āĻāĻļāĻžāύ āĻĻāϰāĻāĻžāϰ āĻšā§, āύāϤā§āύ āĻĄāĻā§āĻŽā§āύā§āĻ āϤā§āϰāĻŋ āĻāϰ⧠āĻĒā§āϰāύā§āĻāĻŋ āϰā§āĻĢāĻžāϰ āĻāϰā§āύ (āϝā§āĻŽāύ āĻā§āϰā§āĻĄāĻŋāĻ āύā§āĻ āĻŦāĻž āϰāĻŋāĻĒā§āϞā§āϏāĻŽā§āύā§āĻ āĻāĻŋāĻā§āĻ), āĻāĻŋāύā§āϤ⧠āĻāϤāĻŋāĻšāĻžāϏ āĻŦāĻĻāϞāĻžāĻŦā§āύ āύāĻžāĨ¤
āĻāĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ āύāĻŋāϝāĻŧāĻŽ:
- āĻĄā§āϰāĻžāĻĢāĻā§ āĻā§āĻĄāĻŧāĻžāύā§āϤ āύāĻŽā§āĻŦāϰ āύā§āĻ (āĻāύā§āĻāĻžāϰāύāĻžāϞ ID āĻŦāĻž "DRAFT" āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ)āĨ¤
- āύāĻŽā§āĻŦāϰ āĻā§āĻŦāϞ "Post/Issue"-āĻ āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰā§āύ, āĻāĻāĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ⧠āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻā§āĻā§āĻā§āϰ āϏāĻžāĻĨā§āĨ¤
- āĻāϝāĻŧā§āĻĄ āĻ āĻā§āϝāĻžāύāϏā§āϞ āύāĻŽā§āĻŦāϰ āϰāĻžāĻā§, āĻāĻŋāύā§āϤ⧠āϏā§āĻĒāώā§āĻ āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻ āĻāĻžāϰāĻŖ āϝā§āĻ āĻāϰā§āύāĨ¤
- āĻĒā§āϰāĻŋāύā§āĻ/āĻāĻŽā§āĻāϞ āĻāϰāĻž āύāĻŽā§āĻŦāϰ āĻŦāĻĻāϞāĻžāĻŦā§āύ āύāĻžāĨ¤
- āĻāĻŽāĻĒā§āϰā§āĻāϏ āĻ āϰāĻŋāĻāĻŋāύāĻžāϞ āύāĻŽā§āĻŦāϰ āϰāĻžāĻā§ āĻāĻŦāĻ āĻāĻžāĻāύā§āĻāĻžāϰāĻā§ āϏāϰā§āĻŦā§āĻā§āĻ āĻāĻŽāĻĻāĻžāύāĻŋ āĻāϰāĻž āĻŽāĻžāύā§āϰ āĻĒāϰ⧠āϏā§āĻ āĻāϰā§āĨ¤
āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āĻ āĻāĻŽāĻĒā§āϰā§āĻ āĻŦāĻŋāĻļā§āώ āϝāϤā§āύ āĻĻāĻžāĻŦā§ āĻāϰā§āĨ¤ āĻ āύā§āϝ āϏāĻŋāϏā§āĻā§āĻŽ āĻĨā§āĻā§ āϏāϰāĻžāϞ⧠āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰāĻā§āϞ⧠āϝā§āĻŽāύ āĻāĻā§ āϤā§āĻŽāύāĻ āύāĻŋāϝāĻŧā§ āĻāϏā§āύ, āϤāĻžāϰāĻĒāϰ āĻāĻĒāύāĻžāϰ āĻāĻžāĻāύā§āĻāĻžāϰāĻā§ āϏāϰā§āĻŦā§āĻā§āĻ āĻāĻŽāĻĒā§āϰā§āĻāĻā§āϤ āĻŽāĻžāύā§āϰ āĻĒāϰ⧠āĻļā§āϰ⧠āĻāϰā§āύāĨ¤ āĻŦāĻŋāĻāĻŋāύā§āύ āĻĢāϰā§āĻŽā§āϝāĻžāĻ āĻāύāĻĢā§āϞāĻŋāĻā§āĻ (āĻŦāĻāϰā§āϰ āĻāĻŋāύā§āύ āĻĒā§āϰāĻŋāĻĢāĻŋāĻā§āϏ āĻāϤā§āϝāĻžāĻĻāĻŋ) āĻĨāĻžāĻāϞ⧠āĻĄāĻŋāϏāĻĒā§āϞ⧠āύāĻŽā§āĻŦāϰ āĻ āĻŋāĻ āĻāĻāĻāĻāĻžāĻŦā§ āϏā§āĻā§āϰ āĻāϰāĻž āĻāĻžāϞ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāϞāĻžāĻĻāĻž āĻāύā§āĻāĻžāϰāύāĻžāϞ āĻĒā§āϰāĻžāĻāĻŽāĻžāϰāĻŋ āĻā§ āϰāĻžāĻā§āύāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋ āĻšā§āϞā§āĻĒāĻĄā§āϏā§āĻ āĻĻā§āϰā§āϤ āĻāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻ āύā§āĻ āĻĄā§āϰāĻžāĻĢāĻ āĻĨāĻžāĻā§āĨ¤ āĻāĻŋāĻā§āĻ āύāĻŽā§āĻŦāϰ āĻā§āĻŦāϞ āϤāĻāύāĻ āĻĻāĻŋāύ āϝāĻāύ āĻāĻā§āύā§āĻ "Send to customer" āĻā§āϞāĻŋāĻ āĻāϰā§āĨ¤ āĻāϤ⧠āĻĒāϰāĻŋāϤā§āϝāĻā§āϤ āĻĄā§āϰāĻžāĻĢāĻā§ āύāĻŽā§āĻŦāϰ āύāώā§āĻ āĻšā§ āύāĻž āĻāĻŦāĻ āĻĻā§āĻļā§āϝāĻŽāĻžāύ āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ āϏāϤā§āϝāĻŋāĻāĻžāϰā§āϰ āĻāĻžāϏā§āĻāĻŽāĻžāϰ āĻāĻŽāĻŋāĻāύāĻŋāĻā§āĻļāύā§āϰ āϏāĻžāĻĨā§ āϏāĻžāϰāĻŋāĻŦāĻĻā§āϧ āĻĨāĻžāĻā§āĨ¤ AppMaster-āĻ āĻāĻāĻ āϧāĻžāϰāĻŖāĻž āĻĒā§āϰāϝā§āĻā§āϝ: āĻĄā§āϰāĻžāĻĢāĻāĻā§āϞ⧠āĻĒāĻžāĻŦāϞāĻŋāĻ āύāĻŽā§āĻŦāϰ āĻāĻžāĻĄāĻŧāĻž āĻĨāĻžāĻā§āĻ, āĻĒāϰ⧠"submit" āĻŦāĻŋāĻāύā§āϏ āĻĒā§āϰāϏā§āϏ āϏā§āĻā§āĻĒā§ āϏāĻĢāϞāĻāĻžāĻŦā§ āĻāĻŽāĻŋāĻā§āϰ āϏāĻŽā§ āĻā§āĻĄāĻŧāĻžāύā§āϤ āύāĻŽā§āĻŦāϰ āĻā§āύāĻžāϰā§āĻ āĻāϰā§āύāĨ¤
āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻŦāĻž āĻšāĻ āĻžā§ āĻā§āϝāĻžāĻĒ āĻāĻāĻžāύā§āϰ āϏāĻžāϧāĻžāϰāĻŖ āĻā§āϞāĻā§āϞā§
āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦ āύāĻŽā§āĻŦāϰāĻŋāĻ āϏāĻŽāϏā§āϝāĻž āĻāĻ āĻāĻžāĻŦāύāĻž āĻĨā§āĻā§āĻ āĻāϏā§: āύāĻŽā§āĻŦāϰāĻā§ āĻāĻāĻāĻŋ āĻĄāĻŋāϏāĻĒā§āϞ⧠āĻā§āϝāĻžāϞ⧠āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻŦāϰāĻ āĻāĻāĻāĻŋ āĻļā§āϝāĻŧāĻžāϰ āĻāϰāĻž āϏā§āĻā§āĻ āĻšāĻŋāϏā§āĻŦā§ āύāĻž āĻĻā§āĻāĻžāĨ¤ āϝāĻāύ āĻāĻāĻžāϧāĻŋāĻ āĻŦā§āϝāĻā§āϤāĻŋ āĻāĻāĻ āϏāĻŽāϝāĻŧā§ āϏā§āĻ āĻāϰā§, āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻāĻāĻāĻŋ āϏā§āĻĒāώā§āĻ āĻāĻžāϝāĻŧāĻāĻž āϝā§āĻāĻžāύ⧠āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻŽā§āĻŦāϰ āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ āĻšāĻŦā§, āĻāĻŦāĻ āĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āĻā§āώā§āϤā§āϰ⧠āĻā§ āĻšāĻŦā§ āϤāĻžāϰ āϏā§āĻĒāώā§āĻ āύāĻŋāϝāĻŧāĻŽāĨ¤
āĻā§āϞāĻžāϏāĻŋāĻ āĻā§āϞ āĻšāϞ SELECT MAX(number) + 1 āĻ
ā§āϝāĻžāĻĒ āĻā§āĻĄā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāĨ¤ āĻāĻāĻ-āĻāĻāĻāĻžāϰ āĻā§āϏā§āĻāĻŋāĻ-āĻ āĻāĻāĻž āĻ āĻŋāĻ āĻŽāύ⧠āĻšāϝāĻŧ, āĻāĻŋāύā§āϤ⧠āĻĻā§āĻāĻāĻŋ āĻ
āύā§āϰā§āϧ āĻāĻāĻ MAX āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰ⧠āĻāĻā§ āĻā§āύā§āĻāĻŋ āĻāĻŽāĻŋāĻ āĻāϰā§āĨ¤ āĻāĻāϝāĻŧāĻ āĻāĻāĻ āĻĒāϰāĻŦāϰā§āϤ⧠āĻŽāĻžāύ āϤā§āϰāĻŋ āĻāϰā§, āĻāĻĒāύāĻŋ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻĒāĻžāĻŦā§āύāĨ¤ āĻāĻŽāύāĻāĻŋ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ "āĻā§āĻ āĻāϰ⧠āĻĒāϰ⧠āϰāĻŋāĻā§āϰāĻžāĻ" āϝā§āĻ āĻāϰā§āύ, āĻĒāĻŋāĻ āĻāĻžāĻāĻŽā§ āĻāĻĒāύāĻŋ āĻŦā§āĻļāĻŋ āϞā§āĻĄ āĻ āĻ
āĻĻā§āĻā§āϤ āϏā§āĻĒāĻžāĻāĻ āĻĒāĻžāĻŦā§āύāĨ¤
āĻāϰā§āĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻā§āϏ āĻšāϞ⧠āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āϏāĻžāĻāĻĄā§ āύāĻŽā§āĻŦāϰ āĻā§āύāĻžāϰā§āĻ āĻāϰāĻž (āĻŦā§āϰāĻžāĻāĻāĻžāϰ āĻŦāĻž āĻŽā§āĻŦāĻžāĻāϞ) āĻĒāϰ⧠āϏā§āĻ āĻāϰāĻžāϰ āĻāĻā§āĨ¤ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻāĻžāύ⧠āύāĻž āĻ āύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āĻā§ āĻāϰāĻā§, āĻāĻŦāĻ āĻāĻāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻāĻāĻžāĻŦā§ āύāĻŽā§āĻŦāϰ āϰāĻŋāĻāĻžāϰā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻž āϝāĻĻāĻŋ āϏā§āĻ āĻŦā§āϝāϰā§āĻĨ āĻšā§āĨ¤ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ-āĻā§āύāĻžāϰā§āĻā§āĻĄ āύāĻŽā§āĻŦāϰ āϏāĻžāĻŽāϝāĻŧāĻŋāĻ āϞā§āĻŦā§āϞ āϝā§āĻŽāύ "Draft 12"-āĻāϰ āĻāύā§āϝ āĻ āĻŋāĻ āĻāĻā§, āĻāĻŋāύā§āϤ⧠āĻ āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻāύāĻā§ā§āϏ āĻŦāĻž āĻāĻŋāĻā§āĻ ID-āϰ āĻāύā§āϝ āύāϝāĻŧāĨ¤
āĻā§āϝāĻžāĻĒ āύāĻŋā§ā§ āĻšāϤāĻžāĻļāĻž āϏā§āĻ āĻāĻŋāĻŽāĻā§āϞā§āĻā§ āĻšāϝāĻŧ āϝāĻžāϰāĻž āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏāĻā§ gapless āĻāĻļāĻž āĻāϰā§āĨ¤ PostgreSQL-āĻ sequences āĻāĻāύāĻŋāĻāύā§āϰ āĻāύā§āϝ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰāĻžâāĻĒāĻžāϰāĻĢā§āĻā§āĻ āĻāύā§āĻāĻŋāύāĻŋāĻāĻāĻŋ āύā§āĨ¤ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāϞā§, āĻĒā§āϰāĻŋāĻĢā§āĻ āĻāĻāĻĄāĻŋ āĻāϰāϞā§, āĻŦāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āϰāĻŋāϏā§āĻāĻžāϰā§āĻ āĻāϰāϞ⧠āĻā§āϝāĻžāϞ⧠āϏā§āĻāĻŋāĻĒ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻž āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻāĻāϰāĻŖāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻŦāĻžāϏā§āϤāĻŦ āĻāĻžāĻšāĻŋāĻĻāĻž "āĻā§āύ⧠āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āύā§" āĻšāϝāĻŧ, sequence + unique constraint āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻ āĻŋāĻ āĻāϤā§āϤāϰāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĻāĻžāĻŦāĻŋ āϏāϤā§āϝāĻŋāĻ "gapless", āĻāϞāĻžāĻĻāĻž āĻĒā§āϝāĻžāĻāĻžāϰā§āύ (āϏāĻžāϧāĻžāϰāĻŖāϤ row locking) āĻĻāϰāĻāĻžāϰ āĻāĻŦāĻ āĻāĻĒāύāĻŋ āĻĨā§āϰā§āĻĒā§āĻā§ āĻāĻŋāĻā§ āĻā§āϰā§āĻĄāĻ āĻĢ āĻŽā§āύ⧠āύāĻŋāĻŦā§āύāĨ¤
āϞāĻāĻŋāĻāĻ āĻŦā§āϝ⤰āĨā¤Ĩ āĻšāϤ⧠āĻĒāĻžāϰ⧠āϝāĻāύ āĻā§āĻŦ āĻŦāĻŋāϏā§āϤā§āϤāĻāĻžāĻŦā§ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āϏāĻŦāĻāĻŋāĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻā§āϞā§āĻŦāĻžāϞ āϞāĻ āĻĻāĻŋāϞ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻā§āϰāĻŋāϝāĻŧā§āĻ āĻ ā§āϝāĻžāĻāĻļāύ āϞāĻžāĻāύ⧠āĻĒāĻĄāĻŧā§ āϝāĻžāĻŦā§, āĻāĻŽāύāĻāĻŋ āĻāĻĒāύāĻŋ āĻā§āĻŽā§āĻĒāĻžāύāĻŋ, āϞā§āĻā§āĻļāύ āĻŦāĻž āĻĄāĻā§āĻŽā§āύā§āĻ āĻāĻžāĻāĻĒ āĻāϞāĻžāĻĻāĻž āĻāϰ⧠āĻĒāĻžāϰā§āĻāĻŋāĻļāύ āĻāϰāϞ⧠āĻĻā§āϰā§āϤ āĻāϰāĻž āϝā§āϤāĨ¤ āĻāϤ⧠āĻĒā§āϰ⧠āϏāĻŋāϏā§āĻā§āĻŽ āϧā§āϰ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ āĻāĻŦāĻ āĻāĻāĻāĻžāϰāĻĻā§āϰ āĻŽāύ⧠āĻšāϤ⧠āĻĒāĻžāϰ⧠āϏā§āĻ "āĻāϞā§āĻŽā§āϞā§āĻāĻžāĻŦā§" āĻāĻāĻā§ āϝāĻžāĻā§āĻā§āĨ¤
āύāĻŋāĻā§ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻŽāϤ⧠āĻā§āϞāĻā§āϞā§:
MAX + 1(āĻŦāĻž "find last number") āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž ××× āĻĄāĻžāĻāĻžāĻŦā§āϏ-āϞā§āĻā§āϞ unique constraintāĨ¤- āĻā§āĻĄāĻŧāĻžāύā§āϤ āύāĻŽā§āĻŦāϰ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻā§ āĻā§āύāĻžāϰā§āĻ āĻāϰ⧠āĻĒāϰ⧠āĻāύāĻĢā§āϞāĻŋāĻā§āĻ "āĻĢāĻŋāĻā§āϏ" āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻžāĨ¤
- PostgreSQL sequences-āĻā§ gapless āĻŽāύ⧠āĻāϰāĻž, āĻĒāϰ⧠āĻā§āϝāĻžāĻĒāĻā§ āϤā§āϰā§āĻāĻŋ āĻŽāύ⧠āĻāϰāĻžāĨ¤
- āϏāĻŦāĻāĻŋāĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻļā§āϝāĻŧāĻžāϰā§āĻĄ āĻāĻžāĻāύā§āĻāĻžāϰ āϞāĻ āĻāϰāĻž, āĻĒāĻžāϰā§āĻāĻŋāĻļāύ āύāĻž āĻāϰāĻž āϝā§āĻāĻžāύ⧠āϤāĻž āĻ āϰā§āĻĨāĻŦāĻšāĨ¤
- āĻŽāĻžāϤā§āϰ āĻāĻ āĻāĻāĻāĻžāϰ āĻĻāĻŋāϝāĻŧā§ āĻā§āϏā§āĻ āĻāϰāĻž, āϝāĻžāϤ⧠āϰā§āϏ āĻāύā§āĻĄāĻŋāĻļāύ āϞāĻā§āĻ āĻĒāϰā§āϝāύā§āϤ āĻĻā§āĻāĻž āύāĻž āϝāĻžāϝāĻŧāĨ¤
āĻĒā§āϰāĻžā§ā§āĻāĻŋāĻ āĻā§āϏā§āĻ āĻāĻŋāĻĒ: 100 āĻĨā§āĻā§ 1,000 āϰā§āĻāϰā§āĻĄ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ⧠āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻŽāϤ⧠āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ āĻā§āϏā§āĻ āĻāĻžāϞāĻžāύ āĻāĻŦāĻ āĻĒāϰ⧠āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻ āĻ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤ āĻā§āϝāĻžāĻĒ āĻā§āĻ āĻāϰā§āύāĨ¤ AppMaster-āĻ āĻŦāĻžāύāĻžāϞ⧠āĻāĻāĻ āύāĻŋāϝāĻŧāĻŽ: āĻā§āĻĄāĻŧāĻžāύā§āϤ āύāĻŽā§āĻŦāϰ āϏāĻžāϰā§āĻāĻžāϰ-āϏāĻžāĻāĻĄ āĻāĻāĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ⧠āĻ ā§āϝāĻžāϏāĻžāĻāύ āĻāϰā§āύ, āύāĻž āϝ⧠UI-āĻĢā§āϞā§āϤā§āĨ¤
āĻāĻžāϞāĻžāύ⧠āĻĨā§āĻā§ āĻāĻā§ āĻĻā§āϰā§āϤ āĻā§āĻāϞāĻŋāϏā§āĻ
āĻāύāĻā§ā§āϏ āĻŦāĻž āĻāĻŋāĻā§āĻ āύāĻŽā§āĻŦāϰāĻŋāĻ āϰā§āϞāĻāĻāĻ āĻāϰāĻžāϰ āĻāĻā§ āĻĻā§āϰā§āϤ āĻāĻāĻāĻŋ āĻĒāĻžāϏ āĻĻāĻŋāύ āϝā§āĻā§āϞ⧠āĻŦāĻžāϏā§āϤāĻŦā§ āϞā§āĻĄā§ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧāĨ¤ āϞāĻā§āώā§āϝ āϏāĻšāĻ: āĻĒā§āϰāϤāĻŋāĻāĻŋ āϰā§āĻāϰā§āĻĄ āĻĒāĻžāϝāĻŧ āĻ āĻŋāĻ āĻāĻāĻāĻž āĻŦāĻŋāĻāύā§āϏ āύāĻŽā§āĻŦāϰ, āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽāĻā§āϞ⧠āϏāĻ āĻŋāĻ āĻĨāĻžāĻā§ āϝāĻāύ 50 āĻāύ āĻāĻāĻ āϏāĻā§āĻā§ "Create" āĻāĻžāĻĒāĻŦā§āĨ¤
āĻĒā§āϰā§-āĻļāĻŋāĻĒ āĻā§āĻāϞāĻŋāϏā§āĻ:
- āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āĻŦāĻŋāĻāύā§āϏ āύāĻŽā§āĻŦāϰ āĻĢāĻŋāϞā§āĻĄā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāĻāĻāĻŋ unique constraint āĻāĻā§ (āĻļā§āϧā§āĻŽāĻžāϤā§āϰ UI āĻā§āĻ āύāϝāĻŧ)āĨ¤ āĻāĻāĻŋ āĻšāϞ⧠āĻāĻĒāύāĻžāϰ āĻļā§āώ āϰāĻā§āώāĻž āϝāĻĻāĻŋ āĻĻā§āĻ āĻ āύā§āϰā§āϧ āϏāĻāĻāϰā§āώ āĻāϰā§āĨ¤
- āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āύāĻŽā§āĻŦāϰ āĻ ā§āϝāĻžāϏāĻžāĻāύ āĻāϰāĻž āĻšāĻā§āĻā§ āϏā§āĻ āĻāĻāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ⧠āϝāĻž āϰā§āĻāϰā§āĻĄ āϏā§āĻ āĻāϰā§āĨ¤ āϝāĻĻāĻŋ āύāĻŽā§āĻŦāϰ āĻ ā§āϝāĻžāϏāĻžāĻāύ āĻ āϏā§āĻ āĻāϞāĻžāĻĻāĻž āĻ āύā§āϰā§āϧ⧠āĻĨāĻžāĻāϞā§, āĻļā§āώāĻŽā§āĻļ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻĻā§āĻāĻž āϝāĻžāĻŦā§āĨ¤
- āϝāĻĻāĻŋ gapless āĻāĻžāĻāϤ⧠āĻšāϝāĻŧ, āύāĻŽā§āĻŦāϰ āĻā§āĻŦāϞ āĻĢāĻžāĻāύāĻžāϞāĻžāĻāĻ āĻāϰāĻžāϰ āϏāĻŽā§ āĻ āϰā§āĻĒāĻŖ āĻāϰā§āύ (āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāύāĻā§ā§āϏ āĻāϏā§āϝ⧠āĻāϰāĻž āĻšāϞā§, āύāĻž āϝ⧠āĻĄā§āϰāĻžāĻĢāĻ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āϏāĻŽā§)āĨ¤ āĻĄā§āϰāĻžāĻĢāĻ, āĻĒāϰāĻŋāϤā§āϝāĻā§āϤ āĻĢāϰā§āĻŽ, āĻŦā§āϝāϰā§āĻĨ āĻĒā§āĻŽā§āύā§āĻ āĻā§āϝāĻžāĻĒā§āϰ āϏāĻžāϧāĻžāϰāĻŖ āĻā§āϏāĨ¤
- āĻŦāĻŋāϰāϞ āĻāύāĻĢā§āϞāĻŋāĻā§āĻāĻā§āϞā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϰāĻŋāĻā§āϰāĻžāĻ āϏā§āĻā§āϰā§āϝāĻžāĻā§āĻāĻŋ āϝā§āĻ āĻāϰā§āύāĨ¤ row locking āĻŦāĻž sequence āĻĨāĻžāĻāϞā§āĻ āĻāĻāύ⧠āĻāĻāύ⧠serialization error, deadlock āĻŦāĻž unique violation āĻĻā§āĻāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻā§āĻ āĻŦā§āϝāĻžāĻāĻ āĻĢāϏāĻš āĻāĻāĻāĻŋ āϏāĻšāĻ āϰāĻŋāĻā§āϰāĻžāĻ āĻĒā§āϰāĻžāϝāĻŧāĻ āϝāĻĨā§āώā§āĻāĨ¤
- UI, public API āĻāĻŦāĻ bulk importsâāĻāϏāĻŦ āĻāύā§āĻā§āϰāĻŋ āĻĒāϝāĻŧā§āύā§āĻā§ 20 āĻĨā§āĻā§ 100 āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ āĻā§āϰāĻŋāϝāĻŧā§āĻ āϏā§āĻā§āϰā§āϏ āĻā§āϏā§āĻ āĻāϰā§āύāĨ¤ āĻŦāĻžāϏā§āϤāĻŦāϏāĻŽā§āĻŽāϤ āĻŽāĻŋāĻļā§āϰāĻŖ āϝā§āĻŽāύ āĻŦāĻžāϰā§āϏā§āĻ, āϧā§āϰ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ, āĻ āĻĄāĻžāĻŦāϞ āϏāĻžāĻŦāĻŽāĻŋāĻ āĻā§āϏā§āĻ āĻāϰā§āύāĨ¤
āĻāĻĒāύāĻžāϰ āϏā§āĻāĻāĻĒ āϝāĻžāĻāĻžāĻ āĻāϰāĻžāϰ āĻĻā§āϰā§āϤ āĻāĻĒāĻžāϝāĻŧ: āĻāĻāĻāĻŋ āĻŦā§āϝāϏā§āϤ āĻšā§āϞā§āĻĒāĻĄā§āϏā§āĻ āĻŽā§āĻšā§āϰā§āϤ āϏāĻŋāĻŽā§āϞā§āĻ āĻāϰā§āύâāĻĻā§āĻ āĻāĻā§āύā§āĻ "New ticket" āĻĢāϰā§āĻŽ āĻā§āϞā§āĻā§, āĻāĻāĻāύ āĻā§ā§āĻŦ āĻ ā§āϝāĻžāĻĒ āĻĨā§āĻā§ āϏāĻžāĻŦāĻŽāĻŋāĻ āĻāϰāĻā§, āĻāĻāĻ āϏāĻŽā§ā§ āĻāĻŽā§āĻāϞ āĻāύāĻŦāĻā§āϏ āĻĨā§āĻā§ āĻāĻŽāĻĒā§āϰā§āĻ āĻāĻŦ āĻāĻŋāĻā§āĻ āĻāύāϏāĻžāϰā§āĻ āĻāϰāĻā§āĨ¤ āϰāĻžāύ āĻļā§āώ⧠āĻā§āĻ āĻāϰā§āύ āϏāĻŦ āύāĻŽā§āĻŦāϰ āĻāĻāύāĻŋāĻ, āϏāĻ āĻŋāĻ āĻĢāϰā§āĻŽā§āϝāĻžāĻā§āϰ, āĻāĻŦāĻ āĻŦā§āϝāϰā§āĻĨāϤāĻž āĻ āϰā§āϧā§āĻ-āϏā§āĻāĻĄ āϰā§āĻāϰā§āĻĄ āĻā§āĻĄāĻŧā§ āϝāĻžāϝāĻŧāύāĻŋāĨ¤
AppMaster-āĻ āĻāĻžāĻ āĻāϰāϞ⧠āĻāĻāĻ āύā§āϤāĻŋ āĻĒā§āϰāϝā§āĻā§āϝ: āύāĻŽā§āĻŦāϰ āĻ ā§āϝāĻžāϏāĻžāĻāύāĻŽā§āύā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ⧠āϰāĻžāĻā§āύ, PostgreSQL āĻāύāϏā§āĻā§āϰā§āĻāύā§āĻā§āϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰā§āύ, āĻāĻŦāĻ UI āĻ API āĻāĻāϝāĻŧ āĻāύā§āĻā§āϰāĻŋ āĻĒāϝāĻŧā§āύā§āĻ āĻā§āϏā§āĻ āĻāϰā§āύāĨ¤ āĻ āύā§āĻ āĻĻāϞ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞ āĻā§āϏā§āĻā§ āϏā§āĻĢ āĻĢāĻŋāϞ āĻāϰ⧠āĻāĻŋāύā§āϤ⧠āĻĒā§āϰāĻĨāĻŽ āĻĻāĻŋāύāĻ āĻŦāĻžāϏā§āϤāĻŦ āĻāĻāĻāĻžāϰ āĻŦāĻžāĻĄāĻŧāϞ⧠āĻāĻŽāĻā§ āϝāĻžāϝāĻŧâāĻāĻāĻžāĻ āĻāĻĄāĻŧāĻžāϤ⧠āĻšāĻŦā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ: āĻŦā§āϝāϏā§āϤ āĻšā§āϞā§āĻĒāĻĄā§āϏā§āĻ āĻāĻŋāĻā§āĻ āĻ āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒāĻĻāĻā§āώā§āĻĒ
āĻāĻžāĻŦā§āύ āĻāĻāĻāĻŋ āϏāĻžāĻĒā§āϰā§āĻ āĻĄā§āϏā§āĻ āϝā§āĻāĻžāύ⧠āĻāĻā§āύā§āĻāϰāĻž āϏāĻžāϰāĻžāĻĻāĻŋāύ āĻāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰā§, āĻāϰ āĻāĻāĻāĻŋ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ āĻā§āϝāĻžāĻ āĻā§āϞ āĻ āĻāĻŽā§āĻāϞ āĻĨā§āĻā§āĻ āĻāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ āϏāĻŦāĻžāĻ āĻāĻŋāĻā§āĻ āύāĻŽā§āĻŦāϰ āĻāĻļāĻž āĻāϰ⧠T-2026-000123 āϧāĻžāĻāĻā§, āĻāĻŦāĻ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž āĻāϰ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āύāĻŽā§āĻŦāϰ āĻāĻāĻāĻŋāĻ āĻāĻŋāĻā§āĻ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰāĻŦā§āĨ¤
āύā§āϰāĻžāĻā§āϝ āĻĒāύā§āĻĨāĻž: "āĻļā§āώ āĻāĻŋāĻā§āĻ āύāĻŽā§āĻŦāϰ āĻĒāĻĄāĻŧā§", 1 āϝā§āĻ āĻāϰā§, āϤāĻžāϰāĻĒāϰ āϏā§āĻ āĻāϰā§āĨ¤ āϞā§āĻĄā§, āĻĻā§āĻā§ āĻ āύā§āϰā§āϧ āĻāĻāĻ "āĻļā§āώ āύāĻŽā§āĻŦāϰ" āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰ⧠āĻāĻā§ āĻā§āύā§āĻāĻŋ āϏā§āĻ āĻāϰā§âāĻāĻāϝāĻŧāĻ āĻāĻāĻ āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻŽā§āĻŦāϰ āĻāĻŖāύāĻž āĻāϰāĻŦā§ āĻāĻŦāĻ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻšāĻŦā§āĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻŦā§āϝāϰā§āĻĨ āĻšāϞ⧠āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰ⧠āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύ, āĻāĻĒāύāĻŋ āĻ āύāĻŋāĻā§āĻāĻžāϝāĻŧ āĻā§āϝāĻžāĻĒ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻĄāĻžāĻāĻžāĻŦā§āϏ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻā§āĻĄ āĻāĻžāĻāĻāĻāĻ, āϤāĻāύ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻŦāύā§āϧ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ ticket_number āĻāϞāĻžāĻŽā§ unique constraint āϝā§āĻ āĻāϰā§āύāĨ¤ āϤāĻžāϰāĻĒāϰ, āϝāĻāύ āĻĻā§āĻ āĻ āύā§āϰā§āϧ āĻāĻāĻ āύāĻŽā§āĻŦāϰ āĻā§āώā§āĻāĻž āĻāϰā§, āĻāĻāĻāĻŋ āĻāύāϏāĻžāϰā§āĻ āĻŦā§āϝāϰā§āĻĨ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻĒāύāĻŋ āĻĒāϰāĻŋāώā§āĻāĻžāϰāĻāĻžāĻŦā§ āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ āĻāĻāĻŋāĻ āĻāύāĻā§ā§āϏ āύāĻŽā§āĻŦāϰāĻŋāĻ-āĻāϰ āĻŽā§āϞ: āĻĄāĻžāĻāĻžāĻŦā§āϏāĻā§ āĻāĻāύāĻŋāĻāύā§āϏ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāϤ⧠āĻĻāĻŋāύ, UI-āĻā§ āύāϝāĻŧāĨ¤
Gapless āύāĻŽā§āĻŦāϰāĻŋāĻ workflow āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻā§āϝāĻžāĻĒ āĻāĻžāĻ āύāĻž, āĻāĻĒāύāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻšāĻāϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ (āĻĄā§āϰāĻžāĻĢāĻ) āĻā§āĻĄāĻŧāĻžāύā§āϤ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻžāĨ¤ āĻĒāϰāĻŋāĻŦāϰā§āϤā§, āĻāĻŋāĻā§āĻ āĻĄāĻŋāĻĢāϞā§āĻ āϏā§āĻā§āϝāĻžāĻāĻžāϏ Draft āύāĻŋāϝāĻŧā§ āϤā§āϰāĻŋ āĻāϰā§āύ āĻāĻŦāĻ ticket_number āĻāĻžāϞāĻŋ āϰāĻžāĻā§āύāĨ¤ āύāĻŽā§āĻŦāϰ āĻā§āĻŦāϞ āĻāĻŋāĻā§āĻ āĻĢāĻžāĻāύāĻžāϞāĻžāĻāĻ āĻāϰāĻžāϰ āϏāĻŽā§ āĻĻā§āĻā§āĻž āĻšāĻŦā§, āϝāĻžāϤ⧠āĻŦā§āϝāϰā§āĻĨ āϏā§āĻ āĻ āĻĒāϰāĻŋāϤā§āϝāĻā§āϤ āĻĄā§āϰāĻžāĻĢāĻ āύāĻŽā§āĻŦāϰ āύāώā§āĻ āύāĻž āĻāϰā§āĨ¤
āϏāϰāϞ āĻā§āĻŦāĻŋāϞ āĻĄāĻŋāĻāĻžāĻāύ:
- tickets: id, created_at, status (Draft, Open, Closed), ticket_number (nullable), finalized_at
- ticket_counters: key (āϝā§āĻŽāύ "tickets_2026"), next_number
AppMaster-āĻ āĻāĻĒāύāĻŋ āĻāĻāĻž Data Designer-āĻ āĻŽāĻĄā§āϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ Business Process Editor-āĻ āϞāĻāĻŋāĻ āĻŦāĻžāύāĻžāϤ⧠āĻĒāĻžāϰā§āύ:
- Create Ticket: status=Draft āĻĻāĻŋāϝāĻŧā§ ticket āĻāύāϏāĻžāϰā§āĻ āĻāϰā§āύ, ticket_number āύā§āĻ
- Finalize Ticket: āĻāĻāĻāĻŋ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻļā§āϰ⧠āĻāϰā§āύ, āĻāĻžāĻāύā§āĻāĻžāϰ āϏāĻžāϰāĻŋ āϞāĻ āĻāϰā§āύ, ticket_number āϏā§āĻ āĻāϰā§āύ, next_number āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ āĻāϰā§āύ, āĻāĻŽāĻŋāĻ āĻāϰā§āύ
- Test: āĻāĻāĻ āϏāĻŽā§ā§ āĻĻā§āĻāĻŋ "Finalize" āĻāĻžāϞāĻžāύ āĻāĻŦāĻ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āĻāĻĒāύāĻŋ āĻāĻāύ⧠āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻĒāĻžāĻā§āĻā§āύ āύāĻž
āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒāĻĻāĻā§āώā§āĻĒ: āĻāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰā§āύ (āĻļā§āϧ⧠āĻāĻāύāĻŋāĻ āĻŦāύāĻžāĻŽ āϏāϤā§āϝāĻŋāĻāĻžāϰā§āϰ gapless)āĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻā§āϝāĻžāĻĒ āĻŽā§āύ⧠āύāĻŋāϤ⧠āĻĒāĻžāϰā§āύ, āĻĄāĻžāĻāĻžāĻŦā§āϏ sequence + unique constraint āϏāĻžāϧāĻžāϰāĻŖāϤ āϝāĻĨā§āώā§āĻ āĻāĻŦāĻ āĻĢā§āϞ⧠āϏāĻšāĻ āϰāĻžāĻā§āĨ¤ āϝāĻĻāĻŋ gapless āĻŦāĻžāϧā§āϝāϤāĻžāĻŽā§āϞāĻ, āύāĻŽā§āĻŦāϰāĻŋāĻāĻā§ finalization āϏā§āĻā§āĻĒā§ āϏāϰāĻžāύ āĻāĻŦāĻ "draft"-āĻā§ āĻĢā§āϞ āϏā§āĻā§āĻ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āύāĨ¤ āĻāϰāĻĒāϰ āĻŽāĻžāϞā§āĻāĻŋāĻĒāϞ āĻāĻā§āύā§āĻ āĻāĻāϏāĻžāĻĨā§ āĻā§āϞāĻŋāĻ āĻāϰāϞ⧠āĻ API āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ āĻŦāĻžāϰā§āϏā§āĻ āĻĒāĻžāĻ āĻžāϞ⧠āϞā§āĻĄ-āĻā§āϏā§āĻ āĻāϰā§āύ, āϝāĻžāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āĻāϏāĻžāϰ āĻāĻā§āĻ āĻāĻāϰāĻŖ āĻĻā§āĻāĻž āϝāĻžāϝāĻŧāĨ¤


