ā§Ļā§Ž āĻ…āĻ•ā§āĻŸā§‹, ⧍ā§Ļ⧍ā§Ģ¡8 āĻŽāĻŋāύāĻŋāϟ āĻĒāĻĄāĻŧāϤ⧇

āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ-āύāĻŋāϰāĻžāĻĒāĻĻ āχāύāĻ­ā§Ÿā§‡āϏ āύāĻŽā§āĻŦāϰāĻŋāĻ‚ āϝāĻž āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āĻ“ āĻ—ā§āϝāĻžāĻĒ āĻāĻĄāĻŧāĻžāϝāĻŧ

āĻŦāĻšā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻāĻ•āχ āϏāĻžāĻĨ⧇ āχāύāĻ­ā§Ÿā§‡āϏ āĻŦāĻž āϟāĻŋāϕ⧇āϟ āϤ⧈āϰāĻŋ āĻ•āϰāϞ⧇ āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āĻ“ āĻ…āύāĻžāĻ•āĻžāĻ™ā§āĻ•ā§āώāĻŋāϤ āĻ—ā§āϝāĻžāĻĒ āĻāĻĄāĻŧāĻžāϤ⧇ āĻĒā§āĻ°ā§āϝāĻžāĻ•āϟāĻŋāĻ•ā§āϝāĻžāϞ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻļāĻŋāϖ⧁āύāĨ¤

āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ-āύāĻŋāϰāĻžāĻĒāĻĻ āχāύāĻ­ā§Ÿā§‡āϏ āύāĻŽā§āĻŦāϰāĻŋāĻ‚ āϝāĻž āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āĻ“ āĻ—ā§āϝāĻžāĻĒ āĻāĻĄāĻŧāĻžāϝāĻŧ

āϝāĻ–āύ āĻāĻ•āϏāĻžāĻĨ⧇ āĻĻ⧁āχāϜāύ āϰ⧇āĻ•āĻ°ā§āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϤāĻ–āύ āϕ⧀ āϘāĻŸā§‡

āϧāϰ⧁āύ āĻŦāĻŋāϕ⧇āϞ⧇ 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 āĻĻāĻŋāϝāĻŧ⧇ āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰ⧁āύ

āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āχāύāĻ­ā§Ÿā§‡āϏ āύāĻŽā§āĻŦāϰ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧁āύ
āĻŦāĻžāĻ¸ā§āϤāĻŦ āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ⧇ āϟāĻŋāϕ⧇ āĻĨāĻžāĻ•āĻžāϰ āĻŽāϤ⧋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ-āĻ¸ā§āϤāϰ⧇āϰ āύāĻŋ⧟āĻŽ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āχāύāĻ­ā§Ÿā§‡āϏ āĻ“ āϟāĻŋāϕ⧇āϟ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤
AppMaster āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰāĻžāχ āĻŽā§‚āϞ āϞāĻ•ā§āĻˇā§āϝ (āĻ—ā§āϝāĻžāĻĒ āύāĻž āĻĨāĻžāĻ•āĻž āύāϝāĻŧ), āϤāĻžāĻšāϞ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āĻ“ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻšāϞ⧋: āĻĄāĻžāϟāĻžāĻŦ⧇āϏ-āĻœā§‡āύāĻžāϰ⧇āĻŸā§‡āĻĄ āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ 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 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻĒā§‹āĻĨāĻŋāĻ• āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ:

  1. number_counters āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ, āϝ⧇āĻ–āĻžāύ⧇ āĻ•āϞāĻžāĻŽ āĻĨāĻžāĻ•āĻŦ⧇ company_id, year, series, last_number, āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ unique key (company_id, year, series)āĨ¤
  2. āĻāĻ•āϟāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŸā§āϰāĻžāύāĻœā§āϝāĻžāĻ•āĻļāύ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύāĨ¤
  3. āφāĻĒāύāĻžāϰ āĻ¸ā§āϕ⧋āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻ•āĻžāωāĻ¨ā§āϟāĻžāϰ āϏāĻžāϰāĻŋ āϞāĻ• āĻ•āϰ⧁āύ: SELECT last_number FROM number_counters WHERE ... FOR UPDATEāĨ¤
  4. next_number = last_number + 1 āĻ—āĻŖāύāĻž āĻ•āϰ⧁āύ, āĻ•āĻžāωāĻ¨ā§āϟāĻžāϰ āϏāĻžāϰāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇ last_number = next_number āϰāĻžāϖ⧁āύāĨ¤
  5. āϏ⧇āχ 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" āĻŦāĻŋāϜāύ⧇āϏ āĻĒā§āϰāϏ⧇āϏ āĻ¸ā§āĻŸā§‡āĻĒ⧇ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āĻ•āĻŽāĻŋāĻŸā§‡āϰ āϏāĻŽā§Ÿ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āύāĻŽā§āĻŦāϰ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧁āύāĨ¤

āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āĻŦāĻž āĻšāĻ āĻžā§Ž āĻ—ā§āϝāĻžāĻĒ āϘāϟāĻžāύ⧋āϰ āϏāĻžāϧāĻžāϰāĻŖ āϭ⧁āϞāϗ⧁āϞ⧋

āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϞ⧇ gapless āĻ•āϰ⧁āύ
āĻāĻ•āĻ• āĻŸā§āϰāĻžāύāĻœā§āϝāĻžāĻ•āĻļāύ⧇ āĻ•āĻžāωāĻ¨ā§āϟāĻžāϰ āϏāĻžāϰāĻŋ āĻ“ FOR UPDATE āϞāĻ• āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧇ gapless āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰ⧁āύāĨ¤
āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦ āύāĻŽā§āĻŦāϰāĻŋāĻ‚ āϏāĻŽāĻ¸ā§āϝāĻž āĻāĻ• āĻ­āĻžāĻŦāύāĻž āĻĨ⧇āϕ⧇āχ āφāϏ⧇: āύāĻŽā§āĻŦāϰāϕ⧇ āĻāĻ•āϟāĻŋ āĻĄāĻŋāϏāĻĒā§āϞ⧇ āĻ­ā§āϝāĻžāϞ⧁ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āĻŦāϰāĻ‚ āĻāĻ•āϟāĻŋ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āĻ¸ā§āĻŸā§‡āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻž āĻĻ⧇āĻ–āĻžāĨ¤ āϝāĻ–āύ āĻāĻ•āĻžāϧāĻŋāĻ• āĻŦā§āϝāĻ•ā§āϤāĻŋ āĻāĻ•āχ āϏāĻŽāϝāĻŧ⧇ āϏ⧇āĻ­ āĻ•āϰ⧇, āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĒāĻˇā§āϟ āϜāĻžāϝāĻŧāĻ—āĻž āϝ⧇āĻ–āĻžāύ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āύāĻŽā§āĻŦāϰ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻšāĻŦ⧇, āĻāĻŦāĻ‚ āĻŦā§āϝāĻ°ā§āĻĨāϤāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϕ⧀ āĻšāĻŦ⧇ āϤāĻžāϰ āĻ¸ā§āĻĒāĻˇā§āϟ āύāĻŋāϝāĻŧāĻŽāĨ¤

āĻ•ā§āϞāĻžāϏāĻŋāĻ• āϭ⧁āϞ āĻšāϞ 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-āĻĢā§āϞ⧋āϤ⧇āĨ¤

āϚāĻžāϞāĻžāύ⧋ āĻĨ⧇āϕ⧇ āφāϗ⧇ āĻĻā§āϰ⧁āϤ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ

āφāĻĒāύāĻžāϰ āύāĻŽā§āĻŦāϰāĻŋāĻ‚ āύ⧀āϤāĻŋāϰ āϏāĻžāĻĨ⧇ āĻŽā§‡āϞ⧇
Per-tenant, per-year āĻŦāĻž per-series āύāĻŽā§āĻŦāϰāĻŋāĻ‚ āύ⧀āϤāĻŋ āϏāϰāĻžāϏāϰāĻŋ āφāĻĒāύāĻžāϰ āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ⧇ āϏ⧇āϟ āĻ•āϰ⧁āύāĨ¤
āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āχāύāĻ­ā§Ÿā§‡āϏ āĻŦāĻž āϟāĻŋāϕ⧇āϟ āύāĻŽā§āĻŦāϰāĻŋāĻ‚ āϰ⧋āϞāφāωāϟ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻĻā§āϰ⧁āϤ āĻāĻ•āϟāĻŋ āĻĒāĻžāϏ āĻĻāĻŋāύ āϝ⧇āϗ⧁āϞ⧋ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āϞ⧋āĻĄā§‡ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧāĨ¤ āϞāĻ•ā§āĻˇā§āϝ āϏāĻšāϜ: āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻĒāĻžāϝāĻŧ āĻ āĻŋāĻ• āĻāĻ•āϟāĻž āĻŦāĻŋāϜāύ⧇āϏ āύāĻŽā§āĻŦāϰ, āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽāϗ⧁āϞ⧋ āϏāĻ āĻŋāĻ• āĻĨāĻžāϕ⧇ āϝāĻ–āύ 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 āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻŦāĻžāĻ°ā§āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāϞ⧇ āϞ⧋āĻĄ-āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧁āύ, āϝāĻžāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āφāϏāĻžāϰ āφāϗ⧇āχ āφāϚāϰāĻŖ āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧāĨ¤

āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϏāĻšāϜ
āĻ•āĻŋāϛ⧁ āφāĻļā§āϚāĻ°ā§āϝāϜāύāĻ•āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āϏāĻš āĻ…ā§āϝāĻžāĻĒāĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤
āφāĻĒāύāĻŋ āϝāĻ–āύ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻšāĻŦ⧇āύ āϤāĻ–āύ āφāĻĒāύāĻŋ āϏāĻ āĻŋāĻ• āϏāĻĻāĻ¸ā§āϝāϤāĻž āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

āĻāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•
āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ-āύāĻŋāϰāĻžāĻĒāĻĻ āχāύāĻ­ā§Ÿā§‡āϏ āύāĻŽā§āĻŦāϰāĻŋāĻ‚ āϝāĻž āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āĻ“ āĻ—ā§āϝāĻžāĻĒ āĻāĻĄāĻŧāĻžāϝāĻŧ | AppMaster